Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions designs/WF-DESIGN-0020-mobile-chat-shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,11 @@ The detail presentation owns destination, execution boundary, routing tier,
score, reason codes, fallback truth, and bounded error recovery. The transcript
never reserves a permanent dashboard for those fields.

The current shell slice uses deterministic route previews only. It must say
that no provider was contacted and must not render a fabricated assistant
answer.
The initial shell slice used deterministic route previews only. The final
Phase 2 slice replaces the fabricated-response prohibition with a visibly
bounded deterministic provider: it may exercise ordered streaming,
cancellation, failure, interruption, and retry, but its copy and receipt must
state that no network request or live provider was used.

## Composer

Expand All @@ -85,9 +87,9 @@ The composer contains:
3. an on-demand privacy-posture menu;
4. an enabled send control only when the trimmed draft is non-empty.

The send action is currently labelled `Preview route` for accessibility because
provider execution is outside this slice. That label changes to `Send message`
when real execution lands.
The send action is labelled `Send message`. While a deterministic or live
provider is active, that control becomes `Stop response`, and the composer
cannot submit a second concurrent request.

The composer uses system materials and semantic colours. A strong permanent
green outline is prohibited; the accent belongs on active actions and routing
Expand All @@ -105,9 +107,10 @@ identity.
- Starting a new chat clears only transient conversation state and returns to
Chat.

## Out of scope
## Out of scope for the shell design

- provider execution or streaming;
- live provider execution;
- credentials and provider authentication;
- durable thread storage;
- account or credential setup;
- Apple Foundation Models execution;
Expand All @@ -123,7 +126,8 @@ This shell is accepted when:
2. the drawer reaches every existing section and dismisses by selection or
scrim;
3. iPad exposes the same hierarchy through a native split view;
4. composer, suggestions, new chat, privacy selection, route preview, and
4. composer, suggestions, new chat, privacy selection, deterministic
execution, and
receipt detail are functional;
5. preview copy never implies a provider responded;
5. deterministic-provider copy never implies a live provider responded;
6. source compiles for iOS and remote simulator checks pass.
12 changes: 7 additions & 5 deletions ios/WayfinderIOS/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ This target is the standalone native mobile shell governed by
`WF-ROADMAP-0016`. It embeds the authoritative Rust routing core through
`WayfinderRoutingBridge`; it does not require a Mac or localhost gateway.

The current shell previews deterministic route decisions without executing a
provider. Threads, drafts, terminal message states, and compact route receipts
persist locally through the `ConversationStore` boundary and a versioned
SwiftData implementation. Credentials, live providers, Apple Foundation
Models, and optional Mac pairing land in later review boundaries.
The current shell routes through the embedded core, then exercises the full
Chat lifecycle through a deterministic network-free provider. Ordered deltas,
stop, interruption recovery, failure, retry, threads, drafts, terminal message
states, and compact route receipts persist locally through the
`ConversationStore` boundary and a versioned SwiftData implementation.
Credentials, live providers, Apple Foundation Models, and optional Mac pairing
land in later review boundaries.

## Build

Expand Down
4 changes: 4 additions & 0 deletions ios/WayfinderIOS/WayfinderIOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
165C905840F4DCF56C27BF8F /* ConversationStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D89C6EA7388FA2CCF9F5865E /* ConversationStore.swift */; };
17923336D4226B2F812CF7CA /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE0BB131143C117BDF129E06 /* SettingsView.swift */; };
2663961FFDA2EEAEF58529A8 /* ConversationStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8A79F801F4849CBD50C8A61 /* ConversationStoreTests.swift */; };
2FDE760EEAA633A74BF8B379 /* ChatExecution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E92E195F328A16C8A4C9159 /* ChatExecution.swift */; };
383CBBDE76DCB1296EE2B2FF /* ChatTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25109E76A4BFCC3FD9297E97 /* ChatTabView.swift */; };
5289F042BE903630416D2DC7 /* ThreadsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA6AA772008E2B7C904EA80 /* ThreadsView.swift */; };
A7AFF77BAFD88E83930B3DC6 /* AppModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D3D621AD229ED0AF9703D04 /* AppModel.swift */; };
Expand Down Expand Up @@ -41,6 +42,7 @@
5F6D147CFBC7918BCCD92B9E /* WayfinderIOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = WayfinderIOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
910171253EA965875F0C979A /* WayfinderIOSTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = WayfinderIOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
9B27149D56F517F17D1F971B /* WayfinderTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WayfinderTheme.swift; sourceTree = "<group>"; };
9E92E195F328A16C8A4C9159 /* ChatExecution.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatExecution.swift; sourceTree = "<group>"; };
A28A0256D98D907F1BAF7A34 /* RootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootView.swift; sourceTree = "<group>"; };
BE0BB131143C117BDF129E06 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
C17D8ECF221517590115EA9F /* AppModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppModelTests.swift; sourceTree = "<group>"; };
Expand All @@ -64,6 +66,7 @@
isa = PBXGroup;
children = (
0D3D621AD229ED0AF9703D04 /* AppModel.swift */,
9E92E195F328A16C8A4C9159 /* ChatExecution.swift */,
25109E76A4BFCC3FD9297E97 /* ChatTabView.swift */,
D89C6EA7388FA2CCF9F5865E /* ConversationStore.swift */,
375A787B3245E247D326C13E /* DestinationsView.swift */,
Expand Down Expand Up @@ -204,6 +207,7 @@
buildActionMask = 2147483647;
files = (
A7AFF77BAFD88E83930B3DC6 /* AppModel.swift in Sources */,
2FDE760EEAA633A74BF8B379 /* ChatExecution.swift in Sources */,
383CBBDE76DCB1296EE2B2FF /* ChatTabView.swift in Sources */,
165C905840F4DCF56C27BF8F /* ConversationStore.swift in Sources */,
C04837E936D39B59FC3DAEDE /* DestinationsView.swift in Sources */,
Expand Down
Loading
Loading