Repository navigation
PR Monitor 1.0: accurate status, Liquid Glass UI, notarized releases - #8
Conversation
Regenerate the Xcode project with file-system synchronized groups so new files are picked up automatically, add a unit-test target and shared scheme, and enable strict concurrency. Add a CI workflow that runs the tests and builds the app.
Derive agent and pull request status from check runs, commit statuses, review threads, review requests and review commit SHAs. Plan notifications by diffing snapshots per head commit, with a silent first-poll baseline. Covered by 39 Swift Testing tests.
Batch repositories into one aliased list query and fetch details only for pull requests that changed, keeping each poll near one point per repository. Map partial errors to their repository, handle primary and secondary rate limits, and add device flow, GitHub CLI and token sign-in.
Replace the popover with a MenuBarExtra panel: light two-line rows, palette status glyphs, skeleton loading and a filter menu. Move Settings to a sidebar, run the polling loop on structured concurrency, and add a layered Icon Composer app icon. Debug builds gain diagnose, snapshot and showcase tools for verification and screenshots.
Rewrite the README with a light/dark hero, download button and FAQ, add Liquid Glass screenshots of fictional data, and document the architecture, the audit behind the rewrite, and the release process.
scripts/release.sh archives, signs with Developer ID, notarizes and staples the app and a disk image. The release workflow runs it on v* tags and publishes to GitHub Releases. Include a Homebrew cask template.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c355f7d0ce
ℹ️ 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".
| DEVELOPMENT_TEAM = ""; | ||
| ENABLE_HARDENED_RUNTIME = YES; | ||
| GENERATE_INFOPLIST_FILE = NO; | ||
| GITHUB_OAUTH_CLIENT_ID = ""; |
There was a problem hiding this comment.
Supply the OAuth client ID to release builds
The Release configuration hard-codes GITHUB_OAUTH_CLIENT_ID to an empty string, and neither release.yml nor scripts/release.sh overrides it. Consequently, every published DMG has an empty GitHubOAuthClientID; AppSettings.oauthClientID remains empty and the advertised “Sign in with GitHub” button is disabled, forcing downloaded-release users to install gh, paste a token, or create and enter their own OAuth app ID.
Useful? React with 👍 / 👎.
| let seeded: Set<String> = ["vercel", "cursor", "devin"] | ||
| let legacyAgents = legacy.agents ?? [] | ||
| let isUntouched = Set(legacyAgents.map { $0.checkNamePattern.lowercased() }) == seeded && legacyAgents.count == seeded.count | ||
| if legacyAgents.isEmpty || isUntouched { |
There was a problem hiding this comment.
Preserve legacy agents customized without renaming patterns
Determine whether the legacy list is untouched from all seeded fields, not only checkNamePattern. In 0.x users could edit displayName and commentAuthor; if they changed either while retaining the three default patterns, this comparison still sets isUntouched, switches them to automatic mode, and silently discards their custom names and reviewer mappings during the upgrade.
Useful? React with 👍 / 👎.
| statusCheckRollup { | ||
| state | ||
| contexts(first: 100) { |
There was a problem hiding this comment.
Account for failures beyond the first check-context page
Paginate this connection or otherwise preserve a truncated failing roll-up. For a commit with more than 100 contexts, a failed context can fall outside this first page while all decoded contexts pass; although the DTO retains rollupState == "FAILURE", StatusEngine only synthesizes an agent for PENDING/EXPECTED, so the PR is incorrectly reported as ready despite GitHub's aggregate failure.
Useful? React with 👍 / 👎.
Summary
A ground-up rewrite of PR Monitor for 1.0: accurate status, far lighter use of GitHub's API, a native Liquid Glass UI, real tests, and a signed and notarized release pipeline.
docs/AUDIT.mdlists the problems in 0.x that motivated it, anddocs/ARCHITECTURE.mdexplains the design.Accuracy
Architecture
Corelayer (StatusEngine,NotificationPlanner,PollingPolicy) with 39 Swift Testing tests.UI
MenuBarExtrapanel with two-line rows, palette status glyphs, skeleton loading states and a filter menu.+actions in section headers and an iOS-style checkmark list for the agent mode.Distribution
scripts/release.shbuilds a Developer ID–signed, notarized and stapledPRMonitor.dmgand ZIP. It has been run locally: both notarizations were Accepted, and Gatekeeper reports "Notarized Developer ID".release.ymlworkflow runs the same script onv*tags (the secrets it needs are listed indocs/RELEASING.md), plus a Homebrew cask template.Test plan
swift test: 39/39 passingxcodebuild testand a Release build with no warningsPRMonitor --diagnoseagainst live repositories: correct statuses, partial failures isolatedspctlandstapler validate