Commit Graph
100 Commits
Author SHA1 Message Date
abkslmandClaude Opus 4.8 34aa01a724 iPad: adaptive sidebar+detail shell and Mac-style diff (remote Phases 1-2)
Grow the universal NucleicRemote app into a width-adaptive shell so a
regular-width iPad renders the macOS sidebar+detail IA while the iPhone
keeps its TabView -- both over the same RemoteStore projection (one host
authority, N renderers).

Phase 1 (adaptive shell):
- AdaptiveRootView branches on horizontalSizeClass: CompactRootView (the
  existing iPhone TabView, moved verbatim) vs SplitRootView
  (NavigationSplitView) on regular width.
- SplitSidebar: Home/Projects/To-dos/Settings destinations + sessions
  grouped under their projects (attention-sorted), connection chip footer.
- SplitDetail selects a destination or a session; a selected session reuses
  SessionDetailView keyed .id(sessionID) so switching drives open/close.
- RemoteStore.closeOpen(_:) is now id-guarded so a split-view A->B switch
  (onAppear(B) before onDisappear(A)) can't tear down B's fresh subscription.
- IdentityStore.deviceID idiom-tags the prefix (ipad-/iphone-) for new
  installs so the host lists a paired iPad correctly.

Phase 2 (width tuning + diff):
- readableColumn() caps+centers Home and the transcript on wide layouts;
  a no-op at phone/portrait width.
- SessionDiffView switches on available width (GeometryReader): a Mac-style
  two-pane diff (file list + selected file's patch) on wide/landscape, the
  phone stack otherwise. UnifiedPatch splits the combined patch per file.
  Read-only, same wire, no protocol change.
- Demo diff fixture now carries both files' patches.

iPhone layout and behavior unchanged. Builds clean; verified in the iPad
simulator (demo mode).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-03 23:59:29 -07:00
abkslmandNucleic 6a268abbb9 nvrsion: Add re-sync from dev for VERSION and adjust Appcast releases; fix permission flow by removing the “allow always” button from approval views and docs; fix build script error by removing obsolete sh dependency from Makefile.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-03 18:57:19 -07:00
abkslmandNucleic b0284f1da1 nvrsion: Add: Adjust side padding on “Update available” card in sidebar to match session entries’ padding, fix internal tester invitation workflow for rapid Canary channel releases, and create a “trusted tester” system requiring approval to join internal testing groups.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-03 17:40:28 -07:00
abkslmandClaude Fable 5 57d0ccc5f6 ios: surface the browser-login step on the pairing intro screen
A first tailnet pairing with no auth key detours through a Tailscale browser
login that can take minutes. The intro screen — the only UI an unpaired phone
has — showed just "Connecting to your Mac…" for that whole window, and if
the user closed Safari there was no way back to the login page (the Settings
tab with the login link only exists once paired). The intro's pairing status
now explains the approval step and links to the login page whenever the
embedded node is waiting on one.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 16:25:27 -07:00
abkslmandClaude Fable 5 e623247117 Merge branch 'claude/vigorous-nash-457773' into dev
Tailscale (Tailnet) sync transport: transport picker in Settings ▸ Remote,
interactive browser login, and LAN↔tailnet fallback.

Semantic merge fixes (both sides compiled alone but not together):
- handleTransportFailure (dev's friendly transport errors) now checks
  connectivity.isLive — .connected gained a transport payload on the branch —
  and stays silent while the branch's connect chain still has candidates to
  try, so a LAN probe failing over to the tailnet doesn't flash a red error.
- Chain-exhaustion paths keep a friendlier transport-level failure message
  when onFailed already surfaced one instead of clobbering it with the
  generic handshake error.

Verified on the merge: swift build + 37 sync/transport/store tests green
(incl. dev's FilePairedDeviceStore + the now-fixed contract tests), iOS
simulator build green.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 16:22:13 -07:00
abkslmandClaude Fable 5 272039cca5 Tailnet: interactive browser login + LAN↔tailnet fallback
Browser login — the auth key is now optional on both platforms. When the
embedded node starts with no key, TailnetNode asks the backend (LocalAPI
backendStatus — IPN state, deliberately not filesystem heuristics: tsnet
writes logs and a machine key on every start, registered or not) whether a
login is needed, triggers login-interactive, surfaces the auth URL through a
new statusStream()/.needsLogin, and waits for Running (4-minute deadline,
generation-fenced against stop/restart). The Mac auto-opens the login page
from Settings ▸ Remote and shows a re-open button; the iPhone auto-opens only
during user-initiated pairing (a background reconnect that suddenly needs a
login must not eject the user to Safari — Settings ▸ Tailscale carries the
link). The remote-access toggle now reflects the in-flight start instead of
snapping off for the whole login window, and toggling off mid-start is
honored at both commit points (before and after host.start).

LAN↔tailnet fallback — picking Tailnet now keeps LAN on too: the host runs
both listeners under a new CompositeSyncListener (merged accept stream; one
child ending doesn't end the rest) and the pairing QR carries both hints.
The phone builds an ordered candidate chain — LAN first (QR hint or Bonjour),
tailnet second — and walks it on pair and reconnect, so a phone that leaves
the Mac's Wi‑Fi rolls over to the tailnet and rolls back when it returns.
A per-channel 4s connect guard (readiness-checking, bound to exactly its
channel) keeps a stale LAN hint from hanging the chain; a stale-client guard
in consume() keeps a replaced client's tail events from advancing it; chain
exhaustion during pairing lands in a terminal failure instead of spinning on
"Connecting…"; routine pre-fallback handshake errors no longer flash the red
error bubble. "Connected · LAN / Tailnet" shows whichever transport won.

Multi-agent review: 11 confirmed findings (incl. the login gate being dead
code via tsnet's eager state-dir writes, and two connect-timeout races), all
fixed and re-verified. Suite green (24 sync-related tests incl. 3 new
CompositeSyncListener tests); macOS + iOS builds clean.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 16:14:45 -07:00
abkslmandClaude Fable 5 94a962bd20 Add Tailscale (Tailnet) as a sync transport between Mac and iPhone
Settings ▸ Remote gains a "Connect via" picker — LAN (default), Tailscale
(tailnet), or Relay (disabled, coming soon). On Tailnet, both devices run an
embedded tsnet node via TailscaleKit (tailscale/libtailscale) and sync frames
flow over the user's tailnet, so the phone can connect from anywhere the
tailnet reaches; Noise E2EE runs above the transport unchanged.

- NucleicTailnet (new target, macOS + iOS): TailnetNode wraps TailscaleKit's
  node lifecycle (auth-key login, generation-fenced start/stop since up() is
  un-cancellable) and drops to the framework's public C API for the data path
  — tailscale_dial/listen/accept hand back full-duplex socketpair fds, wrapped
  by FDFrameChannel (DispatchIO) into the shared FrameChannel seam. The Swift
  wrapper's one-way connection actors can't carry a bidirectional stream.
- Host: TailnetListener adopts SyncListener; startSyncServer is single-flight
  and honors toggle-off/picker changes at the commit point; pairing QRs carry
  transport + tailnet IP/port hints (PairingPayload additive optional fields,
  forward/backward compatible over CBOR).
- iPhone: pair/reconnect dial over whichever transport the pairing recorded;
  Settings gains a Tailscale auth-key field (Keychain, committed on editing
  end); connectivity chip shows "Connected · Tailnet".
- TailscaleKit has no SwiftPM distribution: scripts/build-tailscalekit.sh
  builds a pinned libtailscale commit into an untracked local xcframework;
  Package.swift links it only when present (everything builds without it, the
  picker then reports Tailscale support as not built in), and the script
  clears SwiftPM's content-keyed manifest cache so the toggle is picked up.
- iOS floor 17.0 → 18.1 (TailscaleKit requires the iOS 18 Swift runtime);
  package-app.sh embeds the framework in the .app like Sparkle.

703-test suite: no new failures (the 7 fake-claude/fake-grok staging issues
reproduce identically on an untouched checkout — pre-existing, tracked
separately). New coverage: FDFrameChannel over socketpairs, pairing-payload
version-skew both directions, transport-setting resolution.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 03:50:45 -07:00
abkslmandNucleic 22d0752329 nvrsion: Add fix for QR Code Scan Failure in AppStore, Sync, and Tests; explore connection failures over local network; update Info.plist, Models, and SettingsView.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-03 01:42:40 -07:00
abkslm cb6976baa4 release(ios/beta): v0.2.0 (build 4) 2026-07-02 22:32:37 -07:00
abkslm 48732940d3 Merge branch 'canary' into staging 2026-07-02 22:23:13 -07:00
abkslm 572262c224 Merge branch 'dev' into canary 2026-07-02 22:23:03 -07:00
abkslm bc006e4e40 Merge branch 'canary' into staging 2026-07-02 22:15:20 -07:00
abkslm 1a9eff585e Merge branch 'dev' into canary 2026-07-02 22:13:52 -07:00
abkslm cce6a0c4d9 Merge branch 'dev' into nucleic/trunk 2026-07-02 22:12:16 -07:00
abkslmandNucleic f668a204ab nvrsion: Add: Adjust iOS beta channel release targets to “Nucleic Remote (Beta)” in BUILD.md, Makefile, app-logo-beta.icon/icon.json, ios/NucleicRemote/NucleicRemote.xcodeproj/project.pbxproj, scripts/ios-release.sh, signing/README.md.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 22:12:15 -07:00
abkslmandNucleic 65a7897233 iOS Beta Target Adjustment
Nucleic-Session: B5F39681-AF29-4F9A-8666-16E1FD5009A3
Co-authored-by: Nucleic <[email protected]>
2026-07-02 22:04:54 -07:00
abkslmandNucleic 528f1b08db iOS Beta Target Adjustment
Nucleic-Session: B5F39681-AF29-4F9A-8666-16E1FD5009A3
Co-authored-by: Nucleic <[email protected]>
2026-07-02 22:04:47 -07:00
abkslmandNucleic 137ca12a4d iOS Beta Target Adjustment
Nucleic-Session: B5F39681-AF29-4F9A-8666-16E1FD5009A3
Co-authored-by: Nucleic <[email protected]>
2026-07-02 22:04:40 -07:00
abkslmandNucleic 962a6014d8 iOS Beta Target Adjustment
Nucleic-Session: B5F39681-AF29-4F9A-8666-16E1FD5009A3
Co-authored-by: Nucleic <[email protected]>
2026-07-02 22:04:34 -07:00
abkslmandNucleic b10b26ba37 nvrsion: Add: Align iOS remote banner cases (beta, canary, etc) to desktop version to fix divergence in build number hash.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:58:03 -07:00
abkslm 423a356fe2 Merge branch 'dev' into nucleic/trunk 2026-07-02 21:58:03 -07:00
abkslmandNucleic e960e6e4d5 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:57:48 -07:00
abkslmandNucleic 7b5bdc9d0b nvrsion: Add: Adjust Canary Build Auto-Update to run every hour, fix Keychain permission audit by updating files: ControlAuth.swift, GitHubCredentials.swift, HeartbeatReporter.swift, KeychainOwnedAccess.swift, HostIdentityStore.swift, PushRelayClient.swift, refactor Remote Build Icon to use “bell.and.waves.left.and.right.fill” in ios/NucleicRemote/NucleicRemote/Views/BuildBanner.swift, add a Remote Release Channel Check in AppStore.swift, Sync/ConnectionHandler.swift, Sync/SyncHostBridge.swift, Sync/ReleaseChannel.swift, Sync/SyncClient.swift, Sync/WireMessages.swift, tests/SyncHostTests.swift, tests/SyncTestSupport.swift, and align build number hash in ios/NucleicRemote/NucleicRemote.xcodeproj/project.pbxproj, ios/NucleicRemote/NucleicRemote/Info.plist, ios/NucleicRemote/NucleicRemote/Views/BuildBanner.swift.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:54:40 -07:00
abkslm 1f11f6f330 Merge branch 'dev' into nucleic/trunk 2026-07-02 21:54:40 -07:00
abkslmandNucleic 36083dc4e3 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:53:46 -07:00
abkslmandNucleic 7379bfba49 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:53:23 -07:00
abkslmandNucleic aa38f931e1 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:52:27 -07:00
abkslmandNucleic 41ee43aa75 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:52:14 -07:00
abkslmandNucleic 9bc685aa3f Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:52:07 -07:00
abkslmandNucleic 159d7636a2 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:52:00 -07:00
abkslmandNucleic 1ec8871536 Build Number Hash Alignment
Nucleic-Session: F8E9CC32-59CC-4022-B42C-0B0694C57F42
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:51:55 -07:00
abkslm 33e0459451 release(ios/beta): v0.1.0 (build 3) 2026-07-02 21:45:51 -07:00
abkslmandNucleic c6175b7185 Add Remote Release Channel Check
Nucleic-Session: 7D1A5F60-CF2F-44E6-B060-51C4C2EA79D1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:42:08 -07:00
abkslmandNucleic d3cc7796dd Add Remote Release Channel Check
Nucleic-Session: 7D1A5F60-CF2F-44E6-B060-51C4C2EA79D1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:41:33 -07:00
abkslmandNucleic a06c2c58ad Add Remote Release Channel Check
Nucleic-Session: 7D1A5F60-CF2F-44E6-B060-51C4C2EA79D1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:41:06 -07:00
abkslmandNucleic 51b5820a81 Add Remote Release Channel Check
Nucleic-Session: 7D1A5F60-CF2F-44E6-B060-51C4C2EA79D1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:40:59 -07:00
abkslmandNucleic d3515605f7 Add Remote Release Channel Check
Nucleic-Session: 7D1A5F60-CF2F-44E6-B060-51C4C2EA79D1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:40:54 -07:00
abkslmandNucleic 566135ae89 Add Remote Release Channel Check
Nucleic-Session: 7D1A5F60-CF2F-44E6-B060-51C4C2EA79D1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:40:49 -07:00
abkslmandNucleic f7db53d5e9 Update Remote Build Icon
Nucleic-Session: E79EC03D-CA77-4899-9DCC-85A053633105
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:37:42 -07:00
abkslm 63b754b2dd release(ios/canary): v0.1.0 (build 2) 2026-07-02 21:21:47 -07:00
abkslm 7e75880eb5 Merge branch 'dev' into canary 2026-07-02 21:09:54 -07:00
abkslmandNucleic 535c092fcc nvrsion: Add: Update Info.plist to reflect no encryption requirement for TestFlight versions.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:09:09 -07:00
abkslm 91b059a2bd Merge branch 'dev' into nucleic/trunk 2026-07-02 21:09:09 -07:00
abkslmandNucleic 2b97633b99 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 21:08:54 -07:00
abkslm 36e2d4ff04 Merge branch 'dev' into canary 2026-07-02 20:10:30 -07:00
abkslmandNucleic 1bf1f4e658 nvrsion: Add “To-do” count stat card to iOS app.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:37:45 -07:00
abkslm f1c1452a24 Merge branch 'dev' into nucleic/trunk 2026-07-02 19:37:45 -07:00
abkslmandNucleic 62b242da5f Adjust Stat Card Layout
Nucleic-Session: 0112C718-2A09-4547-9C71-C6C8A08BA385
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:37:34 -07:00
abkslmandNucleic b53864f5d0 Adjust Stat Card Layout
Nucleic-Session: 0112C718-2A09-4547-9C71-C6C8A08BA385
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:37:27 -07:00
abkslmandNucleic 04c9d08f58 Adjust Stat Card Layout
Nucleic-Session: 0112C718-2A09-4547-9C71-C6C8A08BA385
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:37:20 -07:00
abkslmandNucleic 4493c03de0 nvrsion: Add horizontal layout adjustment to Stat Cards on HomeView for better visibility, fix iOS pair screen banner position on the pair screen, and adjust Login Button Icon placement.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:34:09 -07:00
abkslm d493464b88 Merge branch 'dev' into nucleic/trunk 2026-07-02 19:34:09 -07:00
abkslmandNucleic 397f153b57 Login Button Icon Adjustment
Nucleic-Session: AAAE9114-6E8D-4DFF-A876-CA91340A686E
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:33:56 -07:00
abkslmandNucleic 6353da5dc8 Adjust Stat Card Layout
Nucleic-Session: 0112C718-2A09-4547-9C71-C6C8A08BA385
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:33:50 -07:00
abkslmandNucleic 07cf01b4e6 nvrsion: Add review feature access for iOS remote: Enable reviewers to test all features in App Store (or TestFlight) reviews by updating BUILD.md, docs/APP_REVIEW_NOTES.md, RemoteStore.swift, RemoteApp.swift, BuildBanner.swift, and SettingsView.swift.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:26:43 -07:00
abkslm f6b12e92a0 Merge branch 'dev' into nucleic/trunk 2026-07-02 19:26:43 -07:00
abkslmandNucleic 828be033d7 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:25:40 -07:00
abkslmandNucleic 7353b8dc68 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:25:08 -07:00
abkslmandNucleic a5a89d1aa0 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:21:15 -07:00
abkslmandNucleic bc96b9c056 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:21:11 -07:00
abkslmandNucleic eb6875a662 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:20:54 -07:00
abkslmandNucleic 62d9b3e768 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:20:49 -07:00
abkslmandNucleic f1f455b2f2 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:20:34 -07:00
abkslmandNucleic 4e1f0ec9da Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:20:11 -07:00
abkslmandNucleic 3c2774d140 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:19:40 -07:00
abkslmandNucleic 49ad2ed25f Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:19:28 -07:00
abkslmandNucleic 360e359613 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:19:09 -07:00
abkslmandNucleic 0a551a37eb Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:18:24 -07:00
abkslmandNucleic d6633f6b7f Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:18:13 -07:00
abkslmandNucleic 976bb0e066 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:18:09 -07:00
abkslmandNucleic 2d74ed1d78 Review Feature Access
Nucleic-Session: 85A6233A-F3F6-44B2-AD0B-261D49EE9C35
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:18:00 -07:00
abkslmandNucleic 936329e1a4 nvrsion: Add Chat: Create TestFlight Versions to Info.plist.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:09:08 -07:00
abkslm d047d52ea0 Merge branch 'dev' into nucleic/trunk 2026-07-02 19:09:08 -07:00
abkslmandNucleic 2671e9a1c7 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 19:08:51 -07:00
abkslm e24e6e7952 release(ios/canary): v0.1.0 (build 1) 2026-07-02 18:53:22 -07:00
abkslm 14cf2964e6 resolve trunk promotion conflict 2026-07-02 18:39:41 -07:00
abkslmandNucleic 7e2c32d702 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 18:24:17 -07:00
abkslm 459d8d7bcd modified xcodeproj for iOS 2026-07-02 17:38:25 -07:00
abkslm c495c29650 Merge branch 'dev' into nucleic/trunk 2026-07-02 16:48:51 -07:00
abkslmandNucleic 36b2ca27d5 nvrsion: Add iOS version bump logic with two TestFlight versions (normal public beta and canary) to align with desktop releases, starting with “0.1.0” via Makefile, VERSION file, and scripts.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:48:51 -07:00
abkslmandNucleic bc585d6b0f Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:46:53 -07:00
abkslmandNucleic 9fd6cba6ab Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:34 -07:00
abkslmandNucleic 57d9d79720 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:31 -07:00
abkslmandNucleic d52e0d1404 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:29 -07:00
abkslmandNucleic 2d85bc185c Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:25 -07:00
abkslmandNucleic 65416449e5 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:20 -07:00
abkslmandNucleic 7e29b18a2e Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:18 -07:00
abkslmandNucleic d890029e28 Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:15 -07:00
abkslmandNucleic 1908bbcf1c Create TestFlight Versions
Nucleic-Session: 1E7DF522-F57E-4717-8A39-4AA9781F3DBB
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:45:08 -07:00
abkslmandNucleic 42397d0de8 Makefile Entry Creation
Nucleic-Session: 68BC2F7D-7E9C-45FD-BA8B-CAD374976C8F
Co-authored-by: Nucleic <[email protected]>
2026-07-02 16:32:17 -07:00
abkslm 38e58964ea Merge branch 'claude/competent-pasteur-a5bb90' into HEAD 2026-07-02 16:07:16 -07:00
abkslmandClaude Fable 5 256418c028 docs: PUSH_SETUP runbook; wire aps-environment entitlements into the build
docs/PUSH_SETUP.md lists the manual steps left to light up push /
Live Activities end-to-end: APNS key, the one-click Xcode Push
capability, Cloudflare provisioning + secrets (with the bundle-id
topic gotcha: xyz.blakeslee.nucleic-remote, not .remote), host relay
config, and the on-device verification checklist. Also adds
CODE_SIGN_ENTITLEMENTS so the existing entitlements file actually
signs into the app.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-02 16:06:33 -07:00
abkslmandClaude Fable 5 761dca5f1d ios: notifications, actionable approvals, Live Activity, and the relay push path
Brings the phone's ambient surfaces (UX_IOS §5/§8) to maturity:

- Notification pipeline (NotificationRouter): local notifications for
  approvals and needs-input transitions while backgrounded; low-risk
  approvals are actionable from the banner (Allow requires device
  auth, high-risk must open the app's Face ID gate); taps deep-link
  to the session; app-icon badge = NEEDS YOU count; resolutions
  withdraw the notification (first-responder-wins). The relay's
  content-free approval.pending tickle localizes via
  Localizable.strings.
- Live Activity: new NucleicRemoteWidgets extension target (lock
  screen + Dynamic Island) rendering one aggregate Activity —
  N running / M waiting + the most urgent session — started/updated/
  ended by LiveActivityManager as session state changes.
- Out-of-band push path: nucleic-edge gains POST /v1/push/register
  (admin) so the host can upload tokens for LAN-only pairings; the
  host's new PushRelayClient (config-gated on NUCLEIC_RELAY_URL +
  NUCLEIC_RELAY_ADMIN_SECRET) mirrors Hello.pushToken to the relay
  and wakes non-connected phones when an approval arrives, throttled
  per device. Everything stays off until the relay is provisioned.

Worker tests (23) and Swift suites pass apart from the pre-existing
fixture gaps and nvrsion flake. Simulated APNs delivery is blocked in
this environment (notification auth can't be granted headlessly).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-02 16:06:33 -07:00
abkslmandClaude Fable 5 480b29207f sync: project quota, provider status, todo triage, and full diffs to the phone
Four Mac surfaces the iOS remote couldn't render now ride the wire,
forward-compatibly (decodeIfPresent defaults; unknown HostMsg tags
already decode to .unknown):

- DashboardSnapshot gains `usage` (WireSubscriptionUsage — the Mac's
  5-hour/weekly quota gauges) and `statusFeeds` (WireStatusFeed —
  active provider incidents); the host re-pushes the dashboard when a
  poll changes either.
- WireTodo gains `triage` (raw TriageLevel name); the phone renders
  the Mac's TriageBadge honoring the encouraging/classic label
  setting.
- ClientMsg.fetchDiff / HostMsg.sessionDiff deliver the full worktree
  patch on demand (capped at 512 KB with a truncated flag), gated on
  the new WireCapabilities.canFetchDiff so a new phone never sends it
  to an old host. iOS renders a file list + colored unified patch,
  falling back to the diffstat summary against older hosts.

Round-trip and legacy-decode tests cover the new fields; the full
suite passes apart from the pre-existing fake-backend fixture gaps
and the flaky nvrsion lock-domain test (same failure rate on the
base commit).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-02 16:06:32 -07:00
abkslmandClaude Fable 5 a33ab80313 ios: full feature/appearance parity with the macOS app (client-side)
Port the Mac's MarkdownText renderer, AppPalette (color-vision modes +
night-softening), appearance settings (theme/text size/color vision),
and BuildBanner channel strip to the iPhone remote. Add session-row
attention/unseen-completion washes and marker icons, Discard action,
branch/worktree options in the new-chat composer, and a transient
error bubble for host wire errors. Stamp the build channel via
NucleicChannel in Info.plist (ios-release.sh passes NUCLEIC_CHANNEL,
default beta). Demo mode gains NUCLEIC_DEMO_SESSION and skips the
notifications prompt so UI previews are scriptable.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-02 16:06:32 -07:00
abkslm 26884365b1 Merge branch 'dev' into nucleic/trunk 2026-07-01 19:01:20 -07:00
abkslmandNucleic 79a28605b3 nvrsion: Add: Fix truncation of “Run now” button text in New idea composer, add model selector support for Claude Fable 5, refactor Project Workflow Enhancement, add Wait Button Logic, update iOS remote to match Chat Message Queue Display, block sandboxed/controlled agents from running git commands via mcp__nucleic__host_exec using container-level shims, add chat icon animation to bounce when chat is blocked for >60 seconds, add “Cmd+Shift+N” shortcut to open a floating chat composer over the window, remove “Run now” button from “New idea” composer, and shield Git command execution by scanning inside ‘-c’ strings.
Nucleic-Promote: 1
Co-authored-by: Nucleic <[email protected]>
2026-07-01 19:01:20 -07:00
abkslmandNucleic 63054a4629 Message Queue Display
Nucleic-Session: 4714846A-A598-4711-AA38-640B40927DF4
Co-authored-by: Nucleic <[email protected]>
2026-07-01 18:34:18 -07:00
abkslmandNucleic 687a024373 Message Queue Display
Nucleic-Session: 4714846A-A598-4711-AA38-640B40927DF4
Co-authored-by: Nucleic <[email protected]>
2026-07-01 18:34:06 -07:00
abkslmandNucleic 49e30c0d68 Message Queue Display
Nucleic-Session: 4714846A-A598-4711-AA38-640B40927DF4
Co-authored-by: Nucleic <[email protected]>
2026-07-01 18:33:17 -07:00