Skip to content
Merged
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
2 changes: 1 addition & 1 deletion docs/MAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Rules live in `.claude/rules/`; depth docs are read-on-demand (`youcoded/docs/`,
| Subsystem | Entry points | Rule | Depth doc | Guard tests |
|---|---|---|---|---|
| Model switcher recommendations (desktop + Android shared renderer) | `youcoded/desktop/src/renderer/components/model/ModelPicker.tsx` (favorite-first bands, per-family replacement, search)<br>`youcoded/desktop/src/shared/recommended-models.ts` (curated OpenRouter IDs and version-independent ChatGPT families)<br>`youcoded/desktop/src/renderer/components/assistant-settings/pages.tsx` (show/hide toggle)<br>`youcoded/desktop/src/main/providers/chatgpt-auth.ts` (hourly manifest refresh) | react-renderer Β· native-runtime | `youcoded/docs/native-runtime.md` β†’ providers; future weekly endpoint check: `docs/roadmap/dev-workspace.md` β†’ release | `youcoded/desktop/tests/ModelPicker.test.tsx` (ordering, GPT generation and fallback, mounted-toggle refresh) |
| Chat & transcript | `youcoded/desktop/src/renderer/state/chat-reducer.ts`<br>`youcoded/desktop/src/renderer/state/cc-background.ts` (Claude Code background helpers/commands: launch receipt β†’ task-notification end)<br>`youcoded/desktop/src/main/transcript-watcher.ts` (the live tail)<br>`youcoded/desktop/src/main/transcript-page.ts` (scroll-back: one page of history)<br>`youcoded/desktop/src/main/transcript-page-source.ts` (WHICH file a page is read from)<br>`youcoded/desktop/src/renderer/state/attention-classifier.ts` | chat-reducer | `youcoded/docs/chat-reducer.md` | `youcoded/desktop/tests/chat-reducer.test.ts`<br>`youcoded/desktop/tests/attention-reducer.test.ts`<br>`youcoded/desktop/tests/transcript-watcher.test.ts`<br>`youcoded/desktop/tests/transcript-page-locator.test.ts` |
| Chat & transcript | `youcoded/desktop/src/renderer/state/chat-reducer.ts`<br>`youcoded/desktop/src/renderer/state/cc-background.ts` (Claude Code background helpers/commands: launch receipt β†’ task-notification end)<br>`youcoded/desktop/src/main/transcript-watcher.ts` (the live tail)<br>`youcoded/desktop/src/main/transcript-page.ts` (scroll-back: one page of history)<br>`youcoded/desktop/src/main/transcript-page-source.ts` (WHICH file a page is read from)<br>`youcoded/desktop/src/renderer/state/first-page-loader.ts` (each session's FIRST page: retries, re-ask on live activity, `toEnd` for a rebuilt chat β€” why a chat comes up blank)<br>`youcoded/desktop/src/renderer/state/attention-classifier.ts` | chat-reducer | `youcoded/docs/chat-reducer.md` | `youcoded/desktop/tests/chat-reducer.test.ts`<br>`youcoded/desktop/tests/attention-reducer.test.ts`<br>`youcoded/desktop/tests/transcript-watcher.test.ts`<br>`youcoded/desktop/tests/transcript-page-locator.test.ts`<br>`youcoded/desktop/tests/first-page-loader.test.ts` |
| IPC bridge (parity) | `youcoded/desktop/src/main/preload.ts`<br>`youcoded/desktop/src/renderer/remote-shim.ts`<br>`youcoded/app/src/main/kotlin/com/youcoded/app/runtime/SessionService.kt` | ipc-bridge | `youcoded/docs/shared-ui-architecture.md` | `youcoded/desktop/tests/ipc-channels.test.ts` |
| Remote access (reaching this computer from another device) | `youcoded/desktop/src/main/remote-server.ts` (the WS host a phone talks to β€” auth, the channel dispatch, the tailnet-only bind)<br>`youcoded/desktop/src/main/remote-devices.ts` (**paired devices are RECORDS, not opaque tokens β€” unpair actually revokes, and survives a restart**)<br>`youcoded/desktop/src/main/remote-paths.ts` (both stores, scoped per profile so a dev instance cannot touch the real one)<br>`youcoded/desktop/src/main/remote-config.ts` (port, password hash, `detectTailscale` β€” which of the prerequisites is missing)<br>`youcoded/desktop/src/renderer/remote-shim.ts` (the browser's `window.claude`; `isRemoteMode()` is declared here on auth, NOT only on the Android pairing path)<br>`youcoded/desktop/src/main/prefs-service.ts` (**session defaults, favorites, incognito β€” ONE read/write for desktop IPC AND the remote host**; a setting saved from a phone reaches the permission-override cache main enforces)<br>`youcoded/desktop/src/renderer/android-local-bridge.ts` (a paired Android app's short second connection to its OWN runtime β€” its saved computers live there, not on the computer)<br>`youcoded/desktop/src/renderer/components/SettingsPanel.tsx` β†’ `RemoteButton` (setup, devices, the end-of-setup check) | ipc-bridge, react-renderer | `docs/archive/specs/2026-09-09-remote-access-batch1-technical-design.md` | `youcoded/desktop/tests/remote-channel-parity.test.ts` (**every channel the shim invokes has a case in the host β€” the guard that was missing when a phone opened a blank panel**)<br>`youcoded/desktop/tests/remote-server.test.ts`<br>`youcoded/desktop/tests/remote-devices.test.ts`<br>`youcoded/desktop/tests/remote-shim.test.ts` + ast-grep `remote-admin-case-refuses` / `unpair-button-disabled-on-remote` (admin channels refused on the socket; the Unpair button disabled on a phone)<br>`youcoded/desktop/tests/remote-server-bind.test.ts`<br>`youcoded/desktop/tests/remote-phone-findings.test.ts`<br>`youcoded/desktop/tests/prefs-service.test.ts` (desktop and remote read and write the same way)<br>`youcoded/desktop/tests/terminal-touch-bottom-chrome.test.ts` + `terminal-touch-enter-disconnected.test.tsx` (terminal view on a touch screen) |
| React renderer / chrome | `youcoded/desktop/src/renderer/App.tsx`<br>`youcoded/desktop/src/renderer/components/HeaderBar.tsx`<br>`youcoded/desktop/src/renderer/components/SessionStrip.tsx` (the session switcher: press, drag, drop)<br>`youcoded/desktop/src/renderer/components/header/drag-order.ts` (where a dragged pill lands)<br>`youcoded/desktop/src/renderer/components/header/pack-sessions.ts` (which pills fit)<br>`youcoded/desktop/src/renderer/styles/globals.css`<br>`youcoded/desktop/src/renderer/styles/motion.css` (**hover / press ladder, the state layer, glass-safe session-switch arrival** β€” imported by globals.css)<br>`youcoded/desktop/src/renderer/styles/float-chrome.css` (the `chrome-style: 'float'` look β€” every control floats on its own; its frost is `FLOAT_CHROME_GLASS` in `youcoded/desktop/src/renderer/themes/theme-engine.ts`)<br>`youcoded/desktop/src/renderer/hooks/use-wallpaper-header-ink.ts` + `youcoded/desktop/src/renderer/themes/wallpaper-header-ink.ts` (float only: readable icon/text colours sampled from the wallpaper)<br>`youcoded/desktop/src/renderer/components/ChatEdgeFade.tsx` (float only: messages fade under the controls)<br>`youcoded/desktop/src/renderer/components/header/control-states.ts` (the ONE definition of header hover/press/focus and the session pill's surface)<br>`youcoded/desktop/src/renderer/hooks/use-switch-first-frame.ts` (a tab switch shows its messages on the first frame)<br>`youcoded/desktop/src/renderer/hooks/use-chatview-handlers.ts` (ChatView's callbacks, stable β€” an inline arrow there re-renders every open tab)<br>`youcoded/desktop/src/renderer/hooks/use-chunked-reveal.ts` (long lists draw 50 at a time)<br>`youcoded/desktop/src/renderer/hooks/use-entry-folding.ts` (timelines fold what is far off screen) | react-renderer, renderer-lists, performance, session-strip-motion | `youcoded/docs/renderer-chrome.md` (β†’ "Lists and render cost") | `scripts/ui-review/dom-size-sweep.mjs` (every screen from the shoot list, opened by name under `stress`, under 8,000 elements; builds and serves its own copy; run on request β€” needs a browser, not in `verify.sh`)<br>`scripts/ast-grep/rules/no-hardcoded-z-index-or-scrim.yml` (+6 sibling rules with the same prefix; retired tests/overlay-layer-authority.test.ts, Plan B 2026-09-16)<br>`scripts/ast-grep/rules/no-arbitrary-text-size.yml` (+ `-ts` twin + `type-scale-named-tokens-declared`; retired tests/type-scale-authority.test.ts, Plan B t5c 2026-09-16)<br>`youcoded/desktop/tests/animation-frame-budget.test.ts` + `animation-css-budget.test.ts` (stylesheet frame-budget and motion-token pins)<br>`youcoded/desktop/tests/hover-press-ladder.test.ts` + `switch-arrival-glass.test.tsx` + `chatview-skips-uninvolved-sessions.test.tsx`; ast-grep `app-chatview-props-are-stable`, `chrome-control-no-glyph-nudge-hover`<br>`scripts/ast-grep/rules/session-strip-drag-visuals-are-state.yml` + the other session-strip-… rules (the switcher's drag/hover/label pins, retired from animation-frame-budget.test.ts 2026-09-16)<br>`scripts/ast-grep/rules/no-unstepped-infinite-animation.yml`<br>`youcoded/desktop/tests/drag-order.test.ts`<br>`youcoded/desktop/tests/pack-sessions.test.ts`<br>`youcoded/desktop/tests/SessionStrip.test.tsx` (the All Sessions menu reorders on its own drag; renaming from the list)<br>`youcoded/desktop/tests/float-chrome-pops.test.ts` (every float rule is gated on float; frost obeys Reduced effects) + `wallpaper-header-ink.test.ts` + `wallpaper-header-runtime.test.tsx` |
Expand Down
Loading