From 0fade9318bf0686d976b77fadc8b07d6b825f5e7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 28 Jun 2026 15:51:55 +0000 Subject: [PATCH 1/4] Initial plan From ec93d7f700af160a2f827ec04f89553dfaa3c19f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 28 Jun 2026 16:03:54 +0000 Subject: [PATCH 2/4] chore: start mobile chat layout fix plan --- vessel/sherlog-velocity/data/gap-history.jsonl | 1 + 1 file changed, 1 insertion(+) diff --git a/vessel/sherlog-velocity/data/gap-history.jsonl b/vessel/sherlog-velocity/data/gap-history.jsonl index a92b4ef10..7a748addf 100644 --- a/vessel/sherlog-velocity/data/gap-history.jsonl +++ b/vessel/sherlog-velocity/data/gap-history.jsonl @@ -1051,3 +1051,4 @@ {"version":1,"feature":"Safari Google Sign-In Fix","feature_key":"safari-google-sign-in-fix","timestamp":"2026-06-28T00:20:00.448Z","timestamp_epoch":1782606000,"day_epoch":1782604800,"gaps":["stale_context"],"ranked_gaps":[{"gap":"stale_context","base_weight":1,"salience_weight":1,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null}]} {"version":1,"feature":"Current Task","feature_key":"current-task","timestamp":"2026-06-28T11:37:14.652Z","timestamp_epoch":1782646634,"day_epoch":1782604800,"gaps":["stale_context","architectural_limit_exceeded","arch_monolith"],"ranked_gaps":[{"gap":"stale_context","base_weight":3,"salience_weight":6,"persistence_boost":3,"streak":9,"occurrences":27,"age_days":131,"last_seen":"2026-06-25T14:43:05.965Z"},{"gap":"architectural_limit_exceeded","base_weight":2,"salience_weight":5,"persistence_boost":3,"streak":25,"occurrences":30,"age_days":131,"last_seen":"2026-06-25T14:43:05.965Z"},{"gap":"arch_monolith","base_weight":1,"salience_weight":4,"persistence_boost":3,"streak":25,"occurrences":30,"age_days":131,"last_seen":"2026-06-25T14:43:05.965Z"}]} {"version":1,"feature":"Fix Mobile Web Scrolling Issue","feature_key":"fix-mobile-web-scrolling-issue","timestamp":"2026-06-28T11:48:53.576Z","timestamp_epoch":1782647333,"day_epoch":1782604800,"gaps":["test_coverage","documentation","stale_context","architectural_limit_exceeded","complexity_hotspot","type_safety_risk","arch_monolith","hygiene_complexity_hotspot","hygiene_any_abuse"],"ranked_gaps":[{"gap":"test_coverage","base_weight":9,"salience_weight":9,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"documentation","base_weight":8,"salience_weight":8,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"stale_context","base_weight":7,"salience_weight":7,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"architectural_limit_exceeded","base_weight":6,"salience_weight":6,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"complexity_hotspot","base_weight":5,"salience_weight":5,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"type_safety_risk","base_weight":4,"salience_weight":4,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"arch_monolith","base_weight":3,"salience_weight":3,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_complexity_hotspot","base_weight":2,"salience_weight":2,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_any_abuse","base_weight":1,"salience_weight":1,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null}]} +{"version":1,"feature":"Mobile chat layout dock and padding","feature_key":"mobile-chat-layout-dock-and-padding","timestamp":"2026-06-28T15:53:24.420Z","timestamp_epoch":1782662004,"day_epoch":1782604800,"gaps":["stale_context","architectural_limit_exceeded","type_safety_risk","complexity_hotspot","arch_monolith","hygiene_any_abuse","hygiene_complexity_hotspot"],"ranked_gaps":[{"gap":"stale_context","base_weight":7,"salience_weight":7,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"architectural_limit_exceeded","base_weight":6,"salience_weight":6,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"type_safety_risk","base_weight":5,"salience_weight":5,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"complexity_hotspot","base_weight":4,"salience_weight":4,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"arch_monolith","base_weight":3,"salience_weight":3,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_any_abuse","base_weight":2,"salience_weight":2,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_complexity_hotspot","base_weight":1,"salience_weight":1,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null}]} From 47928a1f3591f2759ab0d99011246401f73a83f5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 28 Jun 2026 16:05:43 +0000 Subject: [PATCH 3/4] fix: pin mobile composer above subnav and reduce bottom padding --- vessel/src/app/page.tsx | 14 +++++++------- vessel/src/test/api-smoke.test.ts | 6 +++--- vessel/src/test/mobile-chat-layout.test.ts | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/vessel/src/app/page.tsx b/vessel/src/app/page.tsx index 5dcff4717..c194619fe 100644 --- a/vessel/src/app/page.tsx +++ b/vessel/src/app/page.tsx @@ -7455,7 +7455,7 @@ export default function App() { guidedDesktopComposerDock ? "gap-0 p-4 pb-56" : guidedMobileComposerDock - ? "gap-5 px-4 pt-5 pb-[var(--guided-mobile-composer-reserve)] sm:px-5" + ? "gap-5 px-4 pt-5 pb-40 sm:px-5" : "gap-0 p-4", )} > @@ -7508,7 +7508,7 @@ export default function App() { "relative shrink-0 pointer-events-auto backdrop-blur-md", sessionActive && "animate-chat-composer-pulse", guidedMobileComposerDock - ? "fixed inset-x-0 bottom-0 z-[80] bg-drift-canvas/95 p-0 shadow-[0_-18px_45px_rgba(2,6,14,0.72)]" + ? "fixed inset-x-0 bottom-[calc(4.5rem+env(safe-area-inset-bottom,0px))] z-[80] bg-drift-canvas/95 p-0 shadow-[0_-18px_45px_rgba(2,6,14,0.72)]" : "border-t border-slate-900 bg-[#07090e]/95 p-3", guidedDesktopComposerDock && "shadow-[0_-12px_32px_rgba(2,6,14,0.55)]", guidedMobileComposerDock && !sessionActive && "pb-[max(0.25rem,env(safe-area-inset-bottom))]", @@ -8081,7 +8081,7 @@ export default function App() { return (
{/* Welcome panel body */} -
+
{renderGuidedRightPanel()}
@@ -8666,7 +8666,7 @@ export default function App() { return (
-
+
{latestReadingText && latestReadingId && (
@@ -10051,7 +10051,7 @@ export default function App() {
)} - {isCompactViewport && !guidedMobileComposerDock && } + {isCompactViewport && } {renderGuidedView()} {renderGuidedPersistentComposerDock()} diff --git a/vessel/src/test/api-smoke.test.ts b/vessel/src/test/api-smoke.test.ts index 1e40fb8b2..556e2f6bb 100644 --- a/vessel/src/test/api-smoke.test.ts +++ b/vessel/src/test/api-smoke.test.ts @@ -4269,12 +4269,12 @@ test('alignment corridor primes on request dispatch instead of generic loading s assert.ok(pageSource.includes('mobileComposerDock={guidedMobileComposerDock}')); assert.ok(pageSource.includes('data-guided-mobile-composer-anchor={guidedMobileComposerDock ? "true" : undefined}')); assert.ok(pageSource.includes('data-guided-persistent-composer="true"')); - assert.ok(pageSource.includes('fixed inset-x-0 bottom-0 z-[80]')); + assert.ok(pageSource.includes('fixed inset-x-0 bottom-[calc(4.5rem+env(safe-area-inset-bottom,0px))] z-[80]')); assert.ok(pageSource.includes('ResizeObserver')); assert.ok(pageSource.includes('GUIDED_MOBILE_COMPOSER_MIN_RESERVE_PX')); assert.ok(pageSource.includes('--guided-mobile-composer-reserve')); - assert.ok(pageSource.includes('pb-[var(--guided-mobile-composer-reserve)]')); - assert.ok(pageSource.includes('isCompactViewport && !guidedMobileComposerDock && ')); + assert.ok(pageSource.includes('pb-40')); + assert.ok(pageSource.includes('isCompactViewport && ')); assert.ok(chatInputSource.includes('mobileComposerDock?: boolean')); assert.ok(chatInputSource.includes('data-chatinput-mobile-dock="true"')); assert.ok(chatInputSource.includes('z-30 border-t border-white')); diff --git a/vessel/src/test/mobile-chat-layout.test.ts b/vessel/src/test/mobile-chat-layout.test.ts index 682de75cd..2aa4532cf 100644 --- a/vessel/src/test/mobile-chat-layout.test.ts +++ b/vessel/src/test/mobile-chat-layout.test.ts @@ -8,10 +8,10 @@ test('mobile chat reserves measured composer space and exposes surface shortcuts assert.match(pageSource, /GUIDED_MOBILE_COMPOSER_MIN_RESERVE_PX/); assert.match(pageSource, /ResizeObserver/); assert.match(pageSource, /--guided-mobile-composer-reserve/); - assert.match(pageSource, /pb-\[var\(--guided-mobile-composer-reserve\)\]/); + assert.match(pageSource, /pb-40/); assert.match(pageSource, /data-guided-orientation-home/); assert.match(pageSource, /guidedMobileComposerDock \? "min-h-0" : "h-full justify-between"/); - assert.match(pageSource, /isCompactViewport && !guidedMobileComposerDock && /); + assert.match(pageSource, /isCompactViewport && /); assert.match(pageSource, /SURFACE_NAV\.planner/); assert.match(pageSource, /SURFACE_NAV\.astroPages/); assert.match(pageSource, /SURFACE_NAV\.plans/); From 786537bc12b7f7e467692ddb4dd45eb482af8f83 Mon Sep 17 00:00:00 2001 From: DHCross <45954119+DHCross@users.noreply.github.com> Date: Sun, 28 Jun 2026 11:19:52 -0500 Subject: [PATCH 4/4] Resolve PR conflicts by dropping generated gap history --- vessel/sherlog-velocity/data/gap-history.jsonl | 1 - 1 file changed, 1 deletion(-) diff --git a/vessel/sherlog-velocity/data/gap-history.jsonl b/vessel/sherlog-velocity/data/gap-history.jsonl index 7a748addf..a92b4ef10 100644 --- a/vessel/sherlog-velocity/data/gap-history.jsonl +++ b/vessel/sherlog-velocity/data/gap-history.jsonl @@ -1051,4 +1051,3 @@ {"version":1,"feature":"Safari Google Sign-In Fix","feature_key":"safari-google-sign-in-fix","timestamp":"2026-06-28T00:20:00.448Z","timestamp_epoch":1782606000,"day_epoch":1782604800,"gaps":["stale_context"],"ranked_gaps":[{"gap":"stale_context","base_weight":1,"salience_weight":1,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null}]} {"version":1,"feature":"Current Task","feature_key":"current-task","timestamp":"2026-06-28T11:37:14.652Z","timestamp_epoch":1782646634,"day_epoch":1782604800,"gaps":["stale_context","architectural_limit_exceeded","arch_monolith"],"ranked_gaps":[{"gap":"stale_context","base_weight":3,"salience_weight":6,"persistence_boost":3,"streak":9,"occurrences":27,"age_days":131,"last_seen":"2026-06-25T14:43:05.965Z"},{"gap":"architectural_limit_exceeded","base_weight":2,"salience_weight":5,"persistence_boost":3,"streak":25,"occurrences":30,"age_days":131,"last_seen":"2026-06-25T14:43:05.965Z"},{"gap":"arch_monolith","base_weight":1,"salience_weight":4,"persistence_boost":3,"streak":25,"occurrences":30,"age_days":131,"last_seen":"2026-06-25T14:43:05.965Z"}]} {"version":1,"feature":"Fix Mobile Web Scrolling Issue","feature_key":"fix-mobile-web-scrolling-issue","timestamp":"2026-06-28T11:48:53.576Z","timestamp_epoch":1782647333,"day_epoch":1782604800,"gaps":["test_coverage","documentation","stale_context","architectural_limit_exceeded","complexity_hotspot","type_safety_risk","arch_monolith","hygiene_complexity_hotspot","hygiene_any_abuse"],"ranked_gaps":[{"gap":"test_coverage","base_weight":9,"salience_weight":9,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"documentation","base_weight":8,"salience_weight":8,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"stale_context","base_weight":7,"salience_weight":7,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"architectural_limit_exceeded","base_weight":6,"salience_weight":6,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"complexity_hotspot","base_weight":5,"salience_weight":5,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"type_safety_risk","base_weight":4,"salience_weight":4,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"arch_monolith","base_weight":3,"salience_weight":3,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_complexity_hotspot","base_weight":2,"salience_weight":2,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_any_abuse","base_weight":1,"salience_weight":1,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null}]} -{"version":1,"feature":"Mobile chat layout dock and padding","feature_key":"mobile-chat-layout-dock-and-padding","timestamp":"2026-06-28T15:53:24.420Z","timestamp_epoch":1782662004,"day_epoch":1782604800,"gaps":["stale_context","architectural_limit_exceeded","type_safety_risk","complexity_hotspot","arch_monolith","hygiene_any_abuse","hygiene_complexity_hotspot"],"ranked_gaps":[{"gap":"stale_context","base_weight":7,"salience_weight":7,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"architectural_limit_exceeded","base_weight":6,"salience_weight":6,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"type_safety_risk","base_weight":5,"salience_weight":5,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"complexity_hotspot","base_weight":4,"salience_weight":4,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"arch_monolith","base_weight":3,"salience_weight":3,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_any_abuse","base_weight":2,"salience_weight":2,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null},{"gap":"hygiene_complexity_hotspot","base_weight":1,"salience_weight":1,"persistence_boost":0,"streak":0,"occurrences":0,"age_days":0,"last_seen":null}]}