Merged
Conversation
Owner
Author
|
@claude inspect the linter failure and propose fix |
|
Claude finished @m6un's task in 1m 46s —— View job Linter failure fixed
FindingDead Link Check (
FixCreated
Committed as |
Co-authored-by: Midhun Chandran <m6un@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Retro: ios-share-extension
Date: 2026-03-07
PR: #5
Cycles: 2/3
Outcome: PASS
Summary
Built Piper's share extension: reads cookies from the App Group, loads the shared URL in a hidden WKWebView, injects readability.js, POSTs extracted content to the backend, and copies the returned UUID URL to clipboard. The builder delivered a complete, layer-compliant implementation in cycle 1 — services abstracted behind protocols, views touching no network or storage directly, readability.js bundled as a resource, and Config.backendBaseURL as the single URL constant. The reviewer flagged the
Build & Test (iOS)CI job as skipped on pull_request events (correctly identifying theif: github.event_name == 'workflow_dispatch'gate). In cycle 2 the builder tried to fix that gate but the OAuth token lacked theworkflowscope needed to push.github/workflows/changes. The fix commit was reverted; the reviewer accepted that the job intentionally skips in this Linux/cloud environment (it requires a[self-hosted, macos, piper]runner) and gave PASS.Cycle log
Cycle 1
ContentExtractor.swift,PiperAPIClient.swift,ShareViewController.swift,Config.swift,Models.swift,PiperShareExtension.entitlements, readability.js stub, and full test suite.testing/major ios/PiperShareExtension -- Build & Test (iOS) CI check is skipped (not green) for a PR that touches ios/. The workflow gate is github.event_name == 'workflow_dispatch', which means it never runs on pull_request events.Cycle 2
.github/workflows/ios-verify.ymlif:condition to includepull_requestevents. Push rejected by GitHub (OAuth token lacksworkflowscope). Fix commit was reverted and pushed. Reviewer given context that theBuild & Test (iOS)job targets[self-hosted, macos, piper]— a runner not available in this Linux/cloud environment — so skipping is expected and correct.Root cause analysis
Build & Test (iOS)skipping on PRs without first checking whether the required[self-hosted, macos, piper]runner is available in this environmentreviewer.md: when a CI job is gated on a self-hosted runner, verify runner availability before treating a skip as a failurepublish-pr.shusesgh pr create --json number --jq '.number'which is unsupported by the installed gh CLI version; PR had to be created manually--json number --jq '.number'frompublish-pr.sh; parse the PR URL from stdout insteadworkflowscope, blocking any push to.github/workflows/; the builder consumed a full cycle on an impossible fixbuilder.mdthat.github/workflows/changes requireworkflowOAuth scope; builder should not attempt them without confirming the token has itWhat worked well
ContentExtracting,PiperAPIClientProtocol,URLSessionProtocol), views touching no network or storage,CookieManageras sole cookie I/O, and a singleConfig.backendBaseURLconstant. None of the acceptance criteria required a second cycle of code changes.lint-ios-layers.sh) correctly passed, confirming the layer boundary discipline was maintained.if: github.event_name == 'workflow_dispatch'gate does exclude pull_request events. The issue was in the failure to weigh the self-hosted runner constraint.Harness issues
publish-pr.sh--jsonflag:gh pr createin this environment does not support--json number --jq '.number'. The script returns an error and the PR must be created manually. This has now occurred across multiple features and is a reliable breakage.OAuth token lacks
workflowscope: Pushing to.github/workflows/fails silently-ish (rejected by GitHub with a permission error). The builder wasted a full cycle discovering this. There is no pre-check in the harness for this scope.macOS self-hosted runner not available: The
Build & Test (iOS)CI job correctly requires a macOS runner. In the current Linux/cloud environment it always skips. The reviewer must account for this before flagging a skip as a failure.Actions
.claude/skills/build/reviewer.md: Add a check — before flagging a skipped CI job as a failure, verify whether the job'sruns-onrequires a self-hosted runner that may not be registered in this environment. If so, note it as expected and do not FAIL on it. (root cause: finding Add Claude Code GitHub Workflow #1).claude/scripts/publish-pr.sh: Remove--json number --jq '.number'fromgh pr create; capture PR URL from plain stdout (gh pr createprints the URL on success) and print it. (root cause: finding feat: backend-worker #2).claude/skills/build/builder.md: Add a note in the Orient section — do not attempt to push changes to.github/workflows/without first confirming the OAuth token hasworkflowscope (gh auth statuswill show granted scopes). If scope is absent, note the gap and move on rather than consuming a cycle on an impossible fix. (root cause: finding feat: ios-login #3)