feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(swift-ios): default new tasks to recent project - #5802

Merged
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default
Aug 15, 2026
Merged

feat(swift-ios): default new tasks to recent project#5802
t3dotgg merged 5 commits into
pingdotgg:t3code/rebuild-mobile-app-swiftfrom
saphid:saphid/swiftui-recent-project-default

Conversation

@saphid

@saphidsaphid commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What changed

Default the native SwiftUI New Task flow to the available project from the most recently active thread.

Selection order stays narrow:

  1. A valid explicit project selection.
  2. The project from the newest lastActivityAt thread, falling back to updatedAt.
  3. The first alphabetically grouped available project.

Missing or unavailable projects are skipped; equal timestamps use thread ID as a stable tie-break.

This is SwiftUI-only under apps/swift-ios. It does not implement the React Native apps/mobile portion named in #5785, add a recents section, reorder project lists, or persist another preference.

Base: pingdotgg/t3code:t3code/rebuild-mobile-app-swift at f98cab553546558e28d6e22f3dbe9807ecc3325f.
Current head: b6444b8ad3a2c9d1520c482c8b9171b970f57994.

The current-head repair only updates native Swift Contract test fixtures from the legacy flat providers catalog to production's environment-scoped providersByEnvironment; product behavior is unchanged.

Why

The previous alphabetical default could open a phone task in an unrelated project.

UI evidence

Current head — New Task defaults to the retained Simulator's most recently used available project, Thread Menu Proof:

PR #5802 current-head New Task default

Playable current-head Simulator flow (MP4 wrapper)

The child picker state remains isolated in #6131; this PR does not add the separate recents-section UI.

Verification

  • Current head b6444b8: HomeThreadMetadataTests + DailyUXNewTaskTests — 29 passed, 0 failed.
  • Exact-current-head apps/swift-ios/Scripts/ci-test.sh: exit 0; 234 tests in 29 suites.
  • Integrated iOS Simulator: exact-current-head app built and launched successfully; the New Task deep link selected Thread Menu Proof without another tap. Runtime accessibility also reported Choose project | Thread Menu Proof.
  • Current-head image and video were visually inspected; durable assets return HTTP 200 with image/png / video/mp4.
  • git diff --check: passed.
  • Direct independent review: Claude Opus 5 high, exit 0; no actionable findings on the fixture-only repair or product selection behavior.
  • Current-head GitHub Contract fixtures and native tests, Test, Check, mobile static analysis, and release smoke all passed. Macroscope correctness skipped the fixture-only refresh; approvability completed neutral because human review is required. A manual refresh request was denied for contributor permissions. The exact product head retains the later t3-code approval, and both superseded threads are resolved. The Vercel authorization failure is unrelated to this SwiftUI-only change.

Checklist

  • Small and focused
  • Explained the SwiftUI-only scope
  • Current-head screenshot and playable video
  • Focused, full native, and integrated exact-head verification
  • Fresh independent cross-provider review
  • Current-head GitHub native/test jobs complete
  • Maintainer scope alignment / human review

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
Changes default project selection for new tasks, which can send work to the wrong project if ranking or auto-adoption misfires. Explicit selection and draft safeguards reduce that risk.

Overview
Defaults New Task to the most recently used project instead of the first alphabetical group.

Selection priority is now: explicit/requested project → project from newest thread activity (lastActivityAt, then updatedAt) → alphabetical fallback. Ranking deduplicates by project group, skips unavailable/disabled projects, and keeps the exact worktree that was used.

NewThreadView can later adopt a recent project once activity arrives, but only while awaiting recents and only if the user has not explicitly chosen project/model/workspace, has no draft content, and draft restore has finished. Opening New Task from the workspace also passes the currently selected project as the requested ID.

Reviewed by Cursor Bugbot for commit b6444b8. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Default new task project selection to the most recently used project

  • When opening the new task sheet, the project now defaults to the currently selected project (if any), then the most recently used project by activity timestamp, then the first project alphabetically.
  • Adds DailyUXCreationContext.recentProjects to rank projects by last activity, deduplicated by logical group, and initialProject to resolve the correct physical worktree representative.
  • The new task screen can automatically switch from a fallback project to the first recent project once activity data arrives, but stops if the user makes an explicit selection or has draft content.
  • Behavioral Change: WorkspaceView.openNewTaskOrProjectCreation now passes the current selectedProjectID instead of nil, so the sheet no longer opens with an unset project when a project is already selected.

Macroscope summarized b6444b8.

Delivery: direct
Validated against Theo commit: f98cab5
Depends on: none
Merge order: this PR only
Validation status: Current head b6444b8 is locally and CI proven, approved, thread-clean, and mergeable. Macroscope approvability remains neutral pending human review; the unrelated Vercel authorization failure is a maintainer-side gate.

@coderabbitai

coderabbitaiBot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3e4956d0-cf57-492c-afef-302499f29480

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from ddb12b4 to e1add9fCompareAugust 9, 2026 11:54
@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 9, 2026
@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch 2 times, most recently from 2134377 to 7f25c12CompareAugust 10, 2026 01:26
@saphid
saphid marked this pull request as ready for review August 10, 2026 01:30
@macroscopeapp

macroscopeappBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature for automatically defaulting new tasks to recently used projects, changing user-facing behavior. Unresolved review comments identify a logic bug where failed explicit project requests prevent proper fallback to recent projects.

You can customize Macroscope's approvability policy. Learn more.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@t3dotgg Ready for your review against the current SwiftUI branch. Final head 7f25c1293; focused/full native and integrated evidence are in the PR body, current-head CI is green, and all review threads are resolved. MacroScope correctness is clean and approvability defers this user-facing change to human review.

@t3dotgg
t3dotggforce-pushed the t3code/rebuild-mobile-app-swift branch from 4cb3307 to 497f54fCompareAugust 10, 2026 03:58
@saphid

Copy link
Copy Markdown
ContributorAuthor

Rebuilt as one focused commit on exact current Theo 5b7ee58f6, replacing both the stale branch topology and the conflicting recency models.

Final contract: project groups are ranked by their newest thread activity (lastActivityAt ?? updatedAt) with deterministic tie-breaking; missing/unavailable groups are ignored; settled/archived threads still count as historical use. New Task honors an explicit available project, otherwise uses that ranking, then a stable alphabetical fallback. The approved picker's separate UserDefaults click-recency clock is intentionally not imported. A later Recent Projects picker PR must consume this same ranking.

Verification:

Conflict classification: stale branch history plus a real semantic conflict between thread activity and UserDefaults click recency; resolved in favor of one thread-activity source of truth. Direct Opus review was unavailable due confirmed HTTP 429 before inference; no independent verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 7f25c12 to 3102224CompareAugust 10, 2026 13:04
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Aug 10, 2026
@saphid

Copy link
Copy Markdown
ContributorAuthor

The dependent picker presentation is now preserved separately at saphid/swiftui-recent-projects-picker (53445705c), one commit on this PR head. It consumes recentProjects(in:) directly—no UserDefaults recency store. After #5802 lands, it can be rebased into its own focused PR.

Behavior: up to three canonical Recent groups, alphabetic deduplicated remainder, name/path search, explicit empty/no-match states. Verification: focused 22/22; full native 332 pass / one expected skip; integrated New Task default → Recent/Other → search Alpha → select Alpha; git diff --check clean. Tailnet-only proof: https://alexs-macbook-pro-1.tail4e5636.ts.net:10013/recent-project-picker-final-53445705c.mp4

Independent Opus review remains unavailable at the confirmed 429 quota boundary; no verdict is claimed.

@saphid
saphidforce-pushed the saphid/swiftui-recent-project-default branch from 3102224 to 2c1466fCompareAugust 11, 2026 10:26
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 11, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c1466f. Configure here.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
@saphid

saphid commented Aug 11, 2026

Copy link
Copy Markdown
ContributorAuthor

Exact final-head simulator proof (2c1466f): New Task defaults to the recent pingdotgg/t3code project and keeps the exact Simulator Showcase checkout context.

Exact recent-project default

The final DailyUXNewTaskTests suite passed after the review fixes. The current native-CI red is the base-branch provider-catalog fixture failure fixed separately in #6130.

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

one blocking state-selection edge case remains.

Comment threadapps/swift-ios/Features/Workspace/NewThreadView.swift
t3-code[bot]
t3-codeBot approved these changes Aug 12, 2026

@t3-codet3-codeBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

correction after independent review: the earlier requested-project concern is not blocking. initialProject falls through to the recent project or first available project when an explicit request is unavailable, so the composer does not remain empty. reviewed the exact-base selection and late-adoption paths; approved.

@saphid

Copy link
Copy Markdown
ContributorAuthor

@macroscope review

Please refresh correctness and approvability against current head b6444b8. The two earlier review threads were superseded by the later corrected approval and are now resolved; current-head native and general CI pass.

@macroscopeapp

Copy link
Copy Markdown
Contributor

Sorry, I'm unable to act on this request because you do not have permissions within this repository.

@t3dotgg
t3dotgg merged commit 69542f3 into pingdotgg:t3code/rebuild-mobile-app-swiftAug 15, 2026
17 of 18 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@saphid@t3dotgg