Skip to content

ci: adopt shared Swift CLI release workflow - #103

Merged
steipete merged 1 commit into
mainfrom
s17-swift-archetype
Oct 17, 2026
Merged

steipete merged 1 commit into
mainfrom
s17-swift-archetype

Conversation

@steipete

Copy link
Copy Markdown
Collaborator

Replace the self-contained Swift release workflow with the shared Swift CLI archetype at @v1 (1.11.6). Disable the helper dylib, Linux archive, and resource-bundle requirement; retain the universal macOS ZIP, checksums.txt, OpenClaw signing identity, stable binary identifier, signed-tag release gate, and default no-publish dispatch. Keep the existing Homebrew tap and explicit token mapping.

Add a small OUTPUT_DIR adapter around the existing universal builder and a cross-platform validator for version.env, package.json, generated Swift metadata, and the embedded plist. Remove the duplicated source-resolution, CI-verification, keychain, and workflow-architecture code/tests now owned by the archetype. Document the shared inventory and checksum assets and preserve local historical-release readers.

Focused validation covers caller policy, correct and incorrect versions, and the builder adapter with paths containing spaces. The repository's macOS PR CI remains the full gate. After merge and green push CI, dispatch the current version with dry_run=true to prove signing/notarization and both native verifier jobs on merged main. No remindctl version bump, tag, release, or tap update is included.

@clawsweeper

clawsweeper Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. P2 Normal priority bug or improvement with limited blast radius. merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 17, 2026
@clawsweeper

clawsweeper Bot commented Oct 17, 2026

Copy link
Copy Markdown

Codex review: needs real behavior proof before merge.

What this changes

This PR replaces the local release pipeline with the shared Swift CLI workflow and adds metadata and universal-build adapters.

Example: Rehearse remindctl 0.3.8 with dry_run=true.

  • Before: The repository’s own jobs build, sign, notarize, and verify the macOS ZIP without publishing.
  • After: The shared workflow owns those stages, but the current @v1 interface rejects the newly supplied inputs.

Review scores

Measure Result What it means
Overall readiness 🧂 unranked krab (1/6) The consolidation is worthwhile, but its current dependency interface prevents execution and the required authority evidence is absent.
Proof confidence 🧂 unranked krab (1/6) Real behavior proof is necessary before merge. See Before merge.
Patch quality 🦪 silver shellfish (2/6) Security review found an item that needs attention.

Product

Kind: Refactor · Worth it: Yes · Fix scope: Complete
User problem: Release safeguards are duplicated locally because the previously published shared Swift workflow could not support remindctl’s macOS-only rehearsal and publication contract.
Reason: The collaborator-authored direction removes substantial duplicated ownership while retaining the existing builder, binary identity, archive name, and tap.

Merge readiness

⛔ Blocked before merge - 4 items remain

Keep open: this maintainer-authored consolidation is useful, but the referenced shared workflow does not yet support the caller’s inputs, so landing it now would break release runs.

Priority: P2
Reviewed head: 0905dbe130bd48f49a980590b223df2bc9e58816

Before merge

  • Add real behavior proof - Authority-chain proof required: The shared owner receives signing credentials, release-write authority, and the tap token; supplied validation does not demonstrate an authorized signed-tag path or rejection of an unauthorized signer before final effects, nor rejection after the validated tag is removed or replaced. Provide production-path logs or an authorized harness observing publication and tap effects, with credentials and non-public endpoints redacted; ordinary contributor proof is otherwise waived for this collaborator-authored PR. After adding proof, update the PR body, then request a new review with @clawsweeper re-review. The PR author or someone with repository write access can request it.
  • Wait for the compatible shared workflow to reach @v1 (P1) - Both a version-tag push and the documented dry-run dispatch call @v1, which currently resolves to 880cd20bbe220094e22ee63e8b41e5dbb758e54c (1.11.5). That workflow declares none of dry_run, require-signed-tag, include-helper, include-linux, require-resource-bundles, the runner controls, or metadata-check-script. GitHub therefore rejects the reusable-workflow call before its jobs run. The supporting change is merged in feat: rehearse macOS-only Swift CLI releases release-workflows#81, but v1.11.6 is absent and that PR explicitly requires publication and the signed v1 update before consumer migrations. Keep the local pipeline until that dependency release is available, then verify the resolved interface before landing.
  • Resolve security review attention item - No concrete authorization bypass was established, but the transfer of signing and publication authority requires final-effect evidence.
  • Resolve merge risk - Before merging, establish that the shared authorization chain rejects an unauthorized tag signer and invalidates a replaced or removed tag before publication or Homebrew dispatch.

Findings

  • [P1] Wait for the compatible shared workflow to reach @v1 — .github/workflows/release.yml:42-47

Tests

  • Low-value test scripts/test-release-caller.py: Remove test_shared_boundary’s literal configuration and deleted-file assertions; they mirror the patch and pass despite the incompatible remote interface.
  • Missing end-to-end proof: No supplied run exercises this caller through the shared authorization and publication boundary, and no base-fail/head-pass result is shown for the added tests.
Agent review details

How this fits together

GitHub tag pushes and manual dispatches enter the release caller, which passes source metadata, build adapters, and credentials to jobs producing signed archives, GitHub Releases, and Homebrew updates.

flowchart TD
  A[Tag push or dispatch] --> B[Caller policy]
  B --> C[Shared source validation]
  C --> D[Universal build adapter]
  D --> E[Signing and notarization]
  E --> F[Independent verifiers]
  F --> G[Release and Homebrew publication]
Loading

Technical review

Best possible solution:

Retain the thin caller after the compatible shared workflow is published and its authorization boundary is proven.

Do we have a high-confidence way to reproduce the issue?

The caller and the resolved @v1 workflow interface establish the unsupported-input failure directly; no workflow dispatch was performed.

Is this the best way to solve the issue?

Consolidation addresses the documented reason for local duplication once the supporting shared release reaches @v1.

Full review comments:

  • [P1] Wait for the compatible shared workflow to reach @v1 — .github/workflows/release.yml:42-47
    Both a version-tag push and the documented dry-run dispatch call @v1, which currently resolves to 880cd20bbe220094e22ee63e8b41e5dbb758e54c (1.11.5). That workflow declares none of dry_run, require-signed-tag, include-helper, include-linux, require-resource-bundles, the runner controls, or metadata-check-script. GitHub therefore rejects the reusable-workflow call before its jobs run. The supporting change is merged in feat: rehearse macOS-only Swift CLI releases release-workflows#81, but v1.11.6 is absent and that PR explicitly requires publication and the signed v1 update before consumer migrations. Keep the local pipeline until that dependency release is available, then verify the resolved interface before landing.
    Confidence: 0.99

Overall correctness: patch is incorrect
Overall confidence: 0.97

AGENTS.md: not found in the target repository.

Codex review notes: model internal, reasoning medium; reviewed against 453d181d10ed.

Merge-risk options

Maintainer options:

  1. Prove the shared authorization boundary (recommended)
    Provide production-path evidence for an allowed signer, an unauthorized signer, and tag replacement after validation, observing whether publication and tap effects occur.
  2. Retain the local pipeline temporarily
    Pause this migration while the shared release and authorization evidence are completed.

Provenance checked

  • Source validation, signing, architecture gates, and their local tests changes intended behavior with a stated reason (ci: publish signed macOS releases from Actions #100: The shared archetype required unwanted payloads and had no dry-run mode; subsequent architecture and keychain repairs preserved the local release boundary.)
  • Release inventory and verification documentation changes intended behavior with a stated reason (ca35c84: The local pipeline published a schema-2 inventory and enforced its own verifier contract; this PR explicitly adopts shared assets and preserves historical readers.)
  • Universal macOS builder keeps the original intent (Build universal macOS release artifact #58: Produce one Homebrew-consumed executable containing both arm64 and x86_64 slices; the new adapter retains that builder.)

Testing

Proof path: unit tests only.

Security

Needs attention: No concrete authorization bypass was established, but the transfer of signing and publication authority requires final-effect evidence.

Evidence

What I checked:

Likely related people:

  • Andy Ye: Raw commit e5b5f75 adds scripts/build-macos-universal.sh:28 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: e5b5f7524875; files: scripts/build-macos-universal.sh)

Labels

Label changes:

  • add P2: This is a release infrastructure improvement with a concrete landing blocker, without evidence of a currently broken installed CLI.
  • add merge-risk: 🚨 security-boundary: Signing credentials and publication capabilities move to a shared owner whose allowed and forbidden final-effect paths need proof.
  • add merge-risk: 🚨 automation: The replacement release caller passes inputs absent from the currently referenced reusable workflow, preventing release runs from starting.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦪 silver shellfish.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Label justifications:

  • P2: This is a release infrastructure improvement with a concrete landing blocker, without evidence of a currently broken installed CLI.
  • merge-risk: 🚨 automation: The replacement release caller passes inputs absent from the currently referenced reusable workflow, preventing release runs from starting.
  • merge-risk: 🚨 security-boundary: Signing credentials and publication capabilities move to a shared owner whose allowed and forbidden final-effect paths need proof.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦪 silver shellfish.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 17, 2026, 2:28 AM ET / 06:28 UTC.

@steipete
steipete marked this pull request as ready for review October 17, 2026 06:39
@steipete
steipete merged commit 61fb13e into main Oct 17, 2026
13 checks passed
@steipete
steipete deleted the s17-swift-archetype branch October 17, 2026 06:39
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-17T06:42:10.979781Z 0905dbe Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0905dbe130

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/build-release.sh
[[ -n "$candidate" ]] || { echo 'Xcode 26 is required' >&2; exit 1; }
export DEVELOPER_DIR="$candidate/Contents/Developer"
mkdir -p "$OUTPUT_DIR"
"$ROOT/scripts/build-macos-universal.sh" "$OUTPUT_DIR/remindctl"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fail when Package.resolved is stale

When Package.swift and Package.resolved drift, this adapter invokes build-macos-universal.sh, whose swift build automatically resolves dependencies and may rewrite the lockfile, allowing a release to compile a dependency revision not recorded in the frozen commit. The removed workflow explicitly ran swift package resolve followed by git diff --exit-code -- Package.resolved; swift build --help likewise documents --force-resolved-versions as making the build “fail resolution if it is out-of-date.” Restore the resolve/diff check or use that fail-closed option before producing the artifact.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant