15 KiB
15 KiB
Mobile Progress
Last updated: 2026-05-04
This file is the resumable working log for Tolaria mobile. The strategy and roadmap live in MOBILE_STRATEGY.md; this file records the current execution state.
Current State
- Branch:
codex/mobile - Active phase: Phase 2 - Mobile Shell
- Active slice: Spike TenTap behind
MobileEditorAdapter - Push policy: commit locally; do not push unless explicitly requested
- Validation target: iPad/iOS simulator first
Completed
- Created high-fidelity iPhone mobile mockups in
design/mobile-mockups/. - Documented the production mobile strategy in
docs/MOBILE_STRATEGY.md. - Installed and authenticated Codacy MCP for this Codex environment.
- Confirmed Codacy MCP can access
refactoringhq/tolaria. - Recorded GitHub OAuth App as the first mobile GitHub auth path.
- Created ADR-0109 for Expo React Native production mobile.
- Superseded ADR-0005, the earlier Tauri iOS prototype ADR.
- Created
@tolaria/markdownas the first shared workspace package. - Moved
compactMarkdownintopackages/markdownand kept the existing desktop import path as a compatibility export. - Added package-local Vitest and TypeScript scripts for the shared Markdown package.
- Added
scripts/run-tests.mjssopnpm testruns desktop and shared-package tests, while targeted test arguments remain targeted. - Updated the pre-commit branch guard to allow local commits on
codex/mobilefor this isolated mobile worktree. - Split
src/utils/wikilinks.tsinto shared@tolaria/markdownmodules for frontmatter, wikilink block transforms, outgoing links, backlink context, snippets, and word counts. - Moved note-title derivation helpers into
@tolaria/markdown, leaving the existing desktop import path as a compatibility export. - Added
apps/mobileas an Expo React Native workspace package. - Added root mobile scripts:
mobile:start,mobile:ios,mobile:test, andmobile:typecheck. - Configured Expo for a universal light-mode app with a development bundle identifier (
com.tolaria.mobile.dev) and iPad support enabled. - Added the first iPad-first/phone-ready shell using fixture notes, shared Markdown title/snippet helpers, Phosphor React Native icons, and responsive panels for sidebar, note list, editor, and properties.
- Split mobile styles into small panel-specific StyleSheet modules so new mobile code starts at CodeScene
10.0. - Pinned Expo runtime dependencies to the versions expected by Expo 55 after the initial generated versions failed iOS bundle export (
react-native@0.83.6,react@19.2.0, matching safe-area/svg versions). - Extracted compact phone navigation into a pure tested state machine so future swipe gestures can dispatch explicit events instead of mutating panels ad hoc.
- Extracted mobile note projection into a pure module that turns raw vault-like note records into the list/editor shape used by the mobile shell.
- Added a minimal mobile vault repository contract plus fixture implementation so app-local vault storage and git sync can plug in behind
listNotes/readNotelater. - Updated
scripts/run-tests.mjsso fullpnpm testruns desktop, mobile, and shared package tests, while targetedapps/mobile/...andpackages/markdown/...paths route to the correct workspace Vitest config. - Updated
.husky/pre-committo usepnpm test -- --silentso local commits include the new mobile test suite. - Added
react-native-gesture-handlerat Expo's SDK-compatible version. - Wrapped the mobile root in
GestureHandlerRootView. - Added a tested compact gesture mapper and
SwipeSurfacewrapper so phone panels can transition through swipe gestures while keeping panel behavior in the reducer. - Re-tested the iPad simulator path; the app now launches in Expo Go on
iPad Pro 13-inch (M4). - Added a pure mobile Git remote parser that codifies the auth choice: GitHub remotes use the GitHub OAuth App path, arbitrary Git remotes use the SSH-key path.
- Added a pure mobile vault configuration model that keeps vault storage app-local, distinguishes local-only vs remote-backed sync, and derives the required Git auth path from the parsed remote.
- Extracted the mobile editor surface behind
MobileEditorAdapterwith a tested document projection so TenTap can replace the placeholder surface without changing shell navigation. - Installed TenTap and Expo-compatible
react-native-webview, then wired TenTap intoMobileEditorAdapterwith tested HTML generation from the mobile editor document projection. - Created ADR-0110 for the TenTap mobile editor spike and its acceptance gates.
Next Action
Continue Phase 2 with the next mobile shell slice:
- Dismiss or suppress Expo Go's first-run tools modal during simulator QA so screenshots capture the app without the overlay.
- Add markdown round-trip/save boundaries for the TenTap editor path while preserving Markdown as canonical storage.
- Add the first native storage adapter around the vault config/repository contracts after the editor spike confirms the app shape.
Verification Log
tool_searchexposed Codacy MCP tools after Codex restart.codacy_get_repository_with_analysissucceeded forrefactoringhq/tolaria.- Current branch verified as
codex/mobile. - CodeScene before extraction:
src/utils/compact-markdown.tsscored10. - CodeScene after extraction:
packages/markdown/src/compactMarkdown.tsscored10;packages/markdown/src/compactMarkdown.test.tsscored10; tiny export/config files returned no scorable code and no findings. pnpm --filter @tolaria/markdown testpassed: 29 tests.pnpm --filter @tolaria/markdown typecheckpassed.pnpm test -- src/utils/compact-markdown.test.tspassed and ran only that desktop test file: 29 tests.pnpm testpassed and ran the full desktop suite plus package tests: 309 desktop test files / 3639 desktop tests, then 29 package tests.pnpm lintpassed with one pre-existing warning insrc/components/tolariaBlockNoteSideMenu.tsx.npx tsc --noEmitpassed.pnpm buildpassed.- CodeScene before wikilink extraction:
src/utils/wikilinks.tsscored9.09. - CodeScene after wikilink extraction: new shared wikilink/frontmatter/content files scored
10; small export surfaces returned no scorable code and no findings. pnpm --filter @tolaria/markdown testpassed after wikilink extraction: 40 tests.pnpm test -- src/utils/wikilinks.test.ts src/utils/noteTitle.test.tspassed: 91 desktop tests.pnpm --filter @tolaria/markdown typecheckpassed after wikilink extraction.pnpm lint,npx tsc --noEmit, andpnpm buildpassed after wikilink extraction.- CodeScene before note-title extraction:
src/utils/noteTitle.tsscored9.68. - CodeScene after note-title extraction:
packages/markdown/src/noteTitle.tsandpackages/markdown/src/noteTitle.test.tsscored10; the desktop compatibility export returned no scorable code and no findings. pnpm --filter @tolaria/markdown testpassed after note-title extraction: 56 tests.pnpm test -- src/utils/noteTitle.test.tspassed: 14 desktop tests.pnpm --filter @tolaria/markdown typecheckpassed after note-title extraction.pnpm --filter @tolaria/mobile typecheckpassed.pnpm --filter @tolaria/mobile testpassed: 1 file / 2 tests.pnpm --filter @tolaria/mobile exec expo install --checkpassed after pinning Expo-compatible dependency versions.pnpm --filter @tolaria/mobile exec expo config --type publicpassed and shows iOS bundle identifiercom.tolaria.mobile.dev, Android packagecom.tolaria.mobile.dev, andsupportsTablet: true.pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed and produced the iOS bundle.pnpm lintpassed with one pre-existing warning insrc/components/tolariaBlockNoteSideMenu.tsx.npx tsc --noEmitpassed.pnpm testpassed after the mobile scaffold: 309 desktop test files / 3639 desktop tests plus 56 shared package tests.- CodeScene mobile shell scores:
apps/mobile/App.tsx,apps/mobile/src/MobileApp.tsx,apps/mobile/src/NamedIcon.tsx,apps/mobile/src/demoData.ts,apps/mobile/src/demoData.test.ts, and all scorable style modules scored10; tiny config/export/theme files returned no scorable code. - CodeScene pre-commit safeguard passed for the current change set.
- Codacy MCP can read repository analysis and security items for
refactoringhq/tolaria; local Codacy CLI analysis is currently blocked because the Codacy CLI binary is not installed in this environment. - iOS simulator validation was initially blocked locally: Xcode is installed (
Xcode 26.3), butxcrun simctl list ...hung indefinitely even after opening/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app. pnpm --filter @tolaria/mobile testpassed after compact navigation extraction: 2 files / 6 tests.pnpm --filter @tolaria/mobile typecheckpassed after compact navigation extraction.- CodeScene after compact navigation extraction:
apps/mobile/src/compactNavigation.ts,apps/mobile/src/compactNavigation.test.ts, and the touchedapps/mobile/src/MobileApp.tsxscored10. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after compact navigation extraction.pnpm --filter @tolaria/mobile testpassed after note projection extraction: 3 files / 8 tests.pnpm --filter @tolaria/mobile typecheckpassed after note projection extraction.- CodeScene after note projection extraction:
apps/mobile/src/mobileNoteProjection.tsandapps/mobile/src/mobileNoteProjection.test.tsscored10;apps/mobile/src/demoData.tsreturned no scorable code and no findings. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after note projection extraction.pnpm --filter @tolaria/mobile testpassed after mobile vault repository extraction: 4 files / 11 tests.pnpm --filter @tolaria/mobile typecheckpassed after mobile vault repository extraction.- CodeScene after mobile vault repository extraction:
apps/mobile/src/mobileVaultRepository.tsandapps/mobile/src/mobileVaultRepository.test.tsscored10;apps/mobile/src/demoData.tsstill returned no scorable code and no findings. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after mobile vault repository extraction.pnpm test -- apps/mobile/src/mobileVaultRepository.test.tspassed and ran only the mobile repository test file.pnpm test -- packages/markdown/src/noteTitle.test.tspassed and ran only the shared Markdown note-title test file.pnpm test -- --silentpassed after runner/hook updates: 309 desktop files / 3639 desktop tests, 4 mobile files / 11 mobile tests, 3 shared Markdown files / 56 shared tests.- CodeScene after test-runner update:
scripts/run-tests.mjsscored10;.husky/pre-commitis unsupported by CodeScene file analysis because it has no supported extension. xcrun simctl list devices availablenow responds with available iPhone/iPad devices.xcrun simctl boot 40724AA3-A793-41D8-9C66-79745DA28DE4bootediPad Pro 13-inch (M4).pnpm --filter @tolaria/mobile exec expo start --iosinstalled/opened Expo Go and launched Tolaria on the booted iPad simulator.- Simulator screenshot captured at
/tmp/tolaria-mobile-ipad.png; the Tolaria shell renders behind Expo Go's first-run tools modal. pnpm --filter @tolaria/mobile testpassed after adding gesture support: 5 files / 15 tests.pnpm --filter @tolaria/mobile typecheckpassed after adding gesture support.- CodeScene after gesture support:
apps/mobile/src/compactGestures.ts,apps/mobile/src/compactGestures.test.ts,apps/mobile/src/SwipeSurface.tsx, touched app/root files, and touched style module scored10;apps/mobile/index.tsreturned no scorable code. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after adding gesture support.- Simulator screenshot after gesture support captured at
/tmp/tolaria-mobile-gestures-ipad.png; no red runtime error overlay appeared. pnpm --filter @tolaria/mobile testpassed after Git remote auth parsing: 6 files / 20 tests.pnpm --filter @tolaria/mobile typecheckpassed after Git remote auth parsing.- CodeScene after Git remote auth parsing:
apps/mobile/src/mobileGitRemote.tsandapps/mobile/src/mobileGitRemote.test.tsscored10. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after Git remote auth parsing.pnpm --filter @tolaria/mobile test -- src/mobileVaultConfig.test.tspassed after vault config extraction: 7 files / 24 tests.pnpm --filter @tolaria/mobile typecheckpassed after vault config extraction.- CodeScene after vault config extraction:
apps/mobile/src/mobileVaultConfig.tsandapps/mobile/src/mobileVaultConfig.test.tsscored10. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after vault config extraction.pnpm --filter @tolaria/mobile test -- src/mobileEditorDocument.test.tspassed after editor adapter extraction: 8 files / 27 tests.pnpm --filter @tolaria/mobile typecheckpassed after editor adapter extraction.- CodeScene after editor adapter extraction:
apps/mobile/src/MobileApp.tsx,apps/mobile/src/MobileEditorAdapter.tsx,apps/mobile/src/mobileEditorDocument.ts, andapps/mobile/src/mobileEditorDocument.test.tsscored10. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after editor adapter extraction.- TenTap package check:
@10play/tentap-editor@1.0.1requiresreact,react-native, andreact-native-webview; Expo installedreact-native-webview@13.16.0. pnpm --filter @tolaria/mobile test -- src/mobileEditorDocument.test.tspassed after TenTap wiring: 8 files / 28 tests.pnpm --filter @tolaria/mobile typecheckpassed after TenTap wiring.- CodeScene after TenTap wiring:
apps/mobile/src/MobileEditorAdapter.tsx,apps/mobile/src/mobileEditorDocument.ts,apps/mobile/src/mobileEditorDocument.test.ts, andapps/mobile/src/styles/editorStyles.tsscored10. pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-exportpassed after TenTap wiring; iOS bundle size is now about 11 MB and includes TenTap toolbar assets.pnpm --filter @tolaria/mobile exec expo start --ios --clearlaunched oniPad Pro 13-inch (M4); screenshot captured at/tmp/tolaria-mobile-tentap-ipad.png. The app rendered with the TenTap-backed editor behind Expo Go's first-run Tools modal and no red runtime error overlay appeared.
Risks / Watch Items
- Editor quality remains the largest mobile risk; TenTap must pass the quality gates before becoming accepted.
- Shared package extraction must not destabilize active desktop work.
- Desktop alpha release currently triggers on every push to
main; this branch is safe, but release path filters should be added before mobile work merges tomain. - Codacy analyzes committed/pushed repository state; local edits still need local lint/test/CodeScene discipline before remote checks exist.
- TenTap's package graph currently reports a
react-dompeer warning because its bundled web editor path depends on React DOM 18 while the native app uses React 19; simulator launch and iOS export pass, but this should be tracked during the editor spike.