Define the mise release stages and signing handoff #32
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#32
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: Establish mise-driven local prerelease mechanics, Choose the prerelease identity and download coordinates, Agree the manual and Homebrew lifecycle handoff
Question
What is the concrete, reproducible local mise task interface and stage ordering for producing, qualifying, signing/notarizing/stapling, freezing and publishing the first prerelease and its matching cask, and which human-owned signing/publication inputs does it require?
Use the established mechanics and selected identity/lifecycle contract. Decide task names, dependencies and explicit side-effect entry points; the pinned stable toolchain/build prerequisites; nonsecret credential references and operator handoff; durable output/manifest boundaries; safe resumption after failures; and the separation of final DMG publication from tap publication. Compute the cask digest only from the final frozen bytes. Missing credentials must block signing/publication clearly while allowing earlier image-based and build work to proceed.
The user's choice is manually initiated local automation through mise, not automated CI publishing. A concrete task contract/runbook is the decision artifact; do not implement mise tasks/scripts, access signing secrets, enroll services, sign or publish anything. Resolve the remaining operational choices through live discussion with phg.
Interview checkpoint — explicit entrypoints and durable workspace selected
phg answered the first interview round for Define the mise release stages and signing handoff, agreeing to both recommendations:
iodd-tool-releases/<version>/<candidate-id>/for artifacts, manifest, stage receipts and qualification evidence. Keep the task/runbook in Git and source/tool/artifact identities in the candidate workspace. Credentials remain in private credential stores.The mechanics and source evidence remain owned by Establish mise-driven local prerelease mechanics. A read-only fact-finding delegate (
/root/release_contract_facts) checked its retained report at commitf83201112cf0f5625ebd12654a3c1ac0a558efbcand current mainb8334e758a8fb11d61b7af8d3ed6f0f632a4216b. In particular, mise confirmation runs after dependencies and can be bypassed; the explicit entrypoint contract cannot rely on confirmation alone. Those observations do not select a release candidate or prove qualification.The signing/publication reference handoff, supported stable tool pins, concrete task ordering, receipt and retry contract remain for the next interview rounds. Agree the manual and Homebrew lifecycle handoff remains open and continues to block complete resolution. No Homebrew compatibility requirement or release gate is waived. Detailed freeze and evidence-invalidation decisions remain with Set the qualification freeze and evidence handoff.
This is a partial human-selection record, not a resolution. The issue stays open and assigned to phg; the map's Decisions so far is unchanged. Only tracker records were updated; no implementation, credential provisioning, signing, tests or publication occurred.
Interview checkpoint — credential references, exact tools and verified resumption selected
phg agreed to Q3–Q5 in the live discussion for Define the mise release stages and signing handoff. These add to the earlier accepted four explicit entrypoints and external candidate workspace:
notarytoolKeychain profile, and separate existing Forgejo/tap Git authentication. The runbook records nonsecret references only. Missing credentials stop the relevant signing/publication stage clearly; preparation remains available. Provisioning is a later human task, outside this planning effort. No actual credential reference values, readiness or access authority were verified.2026.10.11, fj0.6.0, and Xcode27.0 / 27A266a, selected through process-localDEVELOPER_DIRwith its bundled Swift/SDK. Reject mismatches and record exact compiler/SDK identities. The installed mise observation (2026.10.9) is not the selected pin and requires correction before later release execution. No tool was installed or changed, and no source candidate or runtime evidence was selected.Supporting toolchain fact check
The read-only delegate
/root/release_contract_factsverified primary sources on 16 October 2026: Apple's Xcode 27 release record names build27A266a, dated 14 September 2026. The current Apple requirements table and release notes cover Swift 6.4, macOS 27 SDK, Apple Silicon/macOS 26.6+ hosts and deployment including macOS 15. The official mise release is stable, published 15 October 2026; its signed tag peels to the mechanics report baselinea24763b05e203e4d8e72702d7bc68214b99fbd06. Downloaded tool binaries were not verified by this discussion.Observed compiler/SDK suffixes remain observations rather than independent web-source guarantees: Swift
swiftlang-6.4.0.34.1, clang2100.3.34.1, driver1.168.6; SDK27.0 / 26A425. The eventual selected Xcode installation must be checked and its identities bound to the manifest. The original mechanics report and its retained artifact/commit pointers stay owned by Establish mise-driven local prerelease mechanics.Concrete task names, internal ordering and the publication/qualification visibility boundary remain to be discussed. Agree the manual and Homebrew lifecycle handoff remains unresolved and blocks full resolution. The detailed evidence/freeze contract still belongs to Set the qualification freeze and evidence handoff. No gate is waived and the map's Decisions so far is unchanged.
Only this partial tracker record was added; no source changes, tests, credential provisioning/access, signing, notarization or release/tap publication occurred.
Agreed mise task contract — Homebrew integration pending
phg agreed to Q6 and Q7, completing the independent workflow choices in this discussion. This consolidates the accepted Q1–Q7 answers for Define the mise release stages and signing handoff. Earlier interview checkpoints remain history. This is an agreed conditional task contract, not resolution of the complete handoff: the standard-cask integration prerequisite remains unresolved.
Operator entrypoints
The implementation will provide four manually initiated local mise entrypoints:
Every entrypoint requires an explicit candidate. Preparation additionally requires the source commit; both publication commands require the expected final DMG SHA-256 and must compare it with the frozen manifest and actual artifact. An optional
--workspace <root>selects the release workspace; its default is the checkout's siblingiodd-tool-releases/<version>/<candidate-id>/candidate location. This release-output option is not an installation-destination or lifecycle-lease override.The default task displays status/help. Signing/notarization, DMG publication and tap publication each require a separate explicit invocation. Later entrypoints validate prerequisite receipts; they never silently rebuild, re-sign, start an earlier side-effect stage or publish another distribution path. Required stage ordering is serial where bytes or receipts depend on earlier outputs. Mise confirmation, freshness, cached logs or task exit alone do not establish permission or qualification; stage guards must still refuse missing, failed, pending or mismatched prerequisites.
Durable candidate boundary
Keep artifacts, the manifest, stage receipts and qualification evidence outside the checkout, under the candidate workspace. The later implementation keeps its mise tasks and operator runbook in Git. Credentials remain in private stores.
The records must distinguish:
The detailed minimal release manifest/checklist, evidence owners, exact runtime builds and evidence-invalidation rules remain with Set the qualification freeze and evidence handoff. This contract establishes the storage and stage boundaries, not a claim that those evidence requirements have been met.
Preparation and tool prerequisites
release:preparechecks the explicit source and tool identities, builds the complete intended bundle and records the credential-free qualification it actually performs. Missing signing credentials do not block image-based/build work. Signed-artifact, final-download and distribution-path evidence cannot be inferred from these earlier results.Pin mise
2026.10.11, fj0.6.0, and Xcode27.0 / 27A266a. Use process-localDEVELOPER_DIRwith that Xcode's bundled Swift/SDK; reject mismatches and record exact compiler/SDK identities. Installation of the selected tools is an execution prerequisite, not an automatic upgrade during a frozen candidate. The observed local mise2026.10.9is not the agreed release pin.The later integrated source must include the complete app, ordinary worker and signed lifecycle helper, correct bundle packaging, arm64/macOS 15 minimum and the accepted release identities. Use Choose the prerelease identity and download coordinates for
0.1.0-beta.1, build 2, trust identifiers, tag/asset/tap coordinates and its prior-distribution build-number check. No inspected historical main or development artifact becomes the candidate implicitly.Private signing and publication inputs
The operator supplies these nonsecret references through the later private handoff:
notarytoolKeychain profile.The operator handles credential provisioning and any required private credential-store interaction. Record reference names and public identity metadata, not private keys, passwords or token values. Missing/unusable credentials stop the relevant signing/publication stage clearly while preparation remains available. Tracker access is not proof of release-upload or tap-write authority. This discussion establishes no actual credential values or readiness.
Signing and final byte freeze
release:signvalidates its preparation receipt and runs these byte transformations in order:The ZIP is intermediate; one final DMG is distributed. The app and DMG carry their supported tickets; standalone worker/helper executables are not stapling targets. Do not mutate the embedded app after sealing the final image or re-sign a frozen artifact in place. The cask digest comes only from the frozen DMG. A frozen artifact is not yet a qualified or successfully published release.
Qualification and DMG publication
Both publication entrypoints remain blocked until Agree the manual and Homebrew lifecycle handoff supplies a compatible accepted contract and all applicable prepublication gates are satisfied. Preserve every accepted software/oracle/fault/recovery, whole-branch review, app smoke/accessibility, baseline/current-stable runtime and lifecycle requirement. Detailed qualification receipts belong to Set the qualification freeze and evidence handoff; the existing acceptance/implementation owners remain Set validation gates and the implementation handoff and Qualify and package the native app. Do not add a second mutation matrix or waive a gate for the beta.
release:publish-dmgchecks the candidate and expected digest, reconciles any existing remote state, verifies the exact tag-to-source binding, prepares/uploads the draft and verifies the downloaded draft bytes. Versioned tag/release creation or upload effects belong to this explicit publication checkpoint, not preparation/signing. An existing conflicting tag or asset stops progression rather than being silently repaired or replaced.After the applicable prior gates pass, publish the evaluation prerelease at the exact accepted coordinates. Independently verify the anonymous final download's size/SHA-256 and required clean-user, Gatekeeper/install results on the supported environments. The checkpoint remains incomplete while public verification is pending or failed. Draft verification does not substitute for the final public user path. Tap publication waits for successful final-download verification.
Separate tap publication
release:publish-tapvalidates the reviewed cask against the final public DMG and frozen digest, then publishes the exact reviewed tap commit as its own mutation. Verify the public tap, anonymous Git access, matching cask version/URL/SHA-256 and remaining fully qualified distribution-path/lifecycle results before marking this checkpoint complete. Local recipe checks do not by themselves establish public tap acceptance.The recipe remains subject to the unresolved standard-cask lifecycle contract. No current hook, staging, purge, helper-selection or registration-reconciliation approach is approved by this task contract. Manual-path selections do not establish Homebrew compatibility.
Failure, resumption and withdrawal
Resume only when the recorded source/tools/input hashes still match and preserved output integrity is verified. Changed bound inputs require a new candidate. Preserve failed outputs and stage receipts; do not replace evidence with a replayed success log.
Resume an existing notary submission by UUID rather than treating a timeout as cancellation. A lost submission response requires reconciliation; an ambiguous match stops automatic resubmission. Likewise, read back release/asset/tap state and verify asset contents before retrying an external mutation. Names/sizes or a lost response alone do not establish either success or failure. Never automatically overwrite a conflicting published asset.
Each publication checkpoint stays incomplete until its public checks pass. On failure, stop progression and record actual remote state. Withdrawal is an explicit operator action: re-draft the release or publish a reviewed tap revert. Do not move the release tag, replace the distributed DMG bytes or rewrite tap history. Any changed distributed DMG requires a new prerelease version and coordinates. A failed tap step does not undo a successful DMG publication; report each path truthfully and independently.
Remaining dependency and status
Agree the manual and Homebrew lifecycle handoff still owns the unresolved preservation/bookkeeping/purge/phase-gap and helper/registration integration contract. Its unchanged preservation guarantees and the qualified standard-cask release path remain required. That existing blocker prevents completing this dependent handoff; no duplicate child, contract reopening or gate waiver follows from these seven accepted answers.
This issue stays open and assigned to phg. Do not index it as a completed decision on Plan the signed IODD Tool prerelease. Once the lifecycle prerequisite is resolved, integrate its concrete route and check whether it changes this accepted workflow before recording the full resolution. The qualification/freeze question remains in its existing child.
This session updated tracker records only. No mise tasks/scripts, source or test code, credentials, builds, signing/notarization, lifecycle operations, release assets or tap commits were created or changed.