2026-07-31from Nate's 2026-07-31 device walk (the DEF-624 disposition
the defect needs a design answer, so it gets a live home here rather than sitting only in the register) — Keep the water identifiable on the Day screen when off the Summary facet. Swiping day-to-day on any facet other than Summary (Conditions, Lessons, Techniques, Questions, Field Guide), there is nothing on screen na…
2026-07-25from S-D-172 reconcile (DEF-050)
**Make the record-cycle position indicator a tappable record picker (jump, not just step). S-D-172 shipped vertical record cycling on the water/day journals with a · N/M indicator in the masthead, display-only. The natural follow-on Nate may ask for once he lives with it: tap the indicator to open a picker and jump to…
2026-07-25from S-D-172 reconcile (DEF-050)
S-D-172's mechanism is the native over-scroll of each facet's ScrollView (onScrollEndDrag + alwaysBounceVertical), which is an iOS rubber-band behaviour. Android has no bounce by default (overScrollMode shows a glow and content offsets clamp at the boundary), so on Android the pure decision function simply returns 'no…
2026-07-25from S-D-169 reconcile (DEF-050)
S-D-169 added per-field provenance tracking for flow/water_temp_f/water_clarity, but the legacy session/[id].tsx screen (still live, reachable from recorded-sessions.tsx in the Journal tab) edits these same three columns through the older, un-stamped updateDayFields — a real, structural gap: any edit made from that sc…
2026-07-24from S-D-158 reconcile (DEF-050)
Anchored-regex date extraction for feed-less shops whose report page carries a stably-placed prose date but no machine-readable one — House of Fly (ordinal date) and Confluence Outfitters (yearless positional dates among ~400 archive links). Fast-follow to S-D-158's publisher-declared-date tier. Confluence's CA waters…
2026-07-24from S-D-158 reconcile (DEF-050)
A headless/rendering fetcher for report pages that 403 or JS-render — Troutwater (Square Online JS shell) and Avid Angler (Cloudflare 403). A separate paid-dependency decision (P-49 registry row if a paid rendering service is adopted). Status: Unscoped — awaits Nate's shaping + gate.
2026-07-24from S-D-158 reconcile (DEF-050)
S-D-158's worker exposes GET /shop-reports/health listing structurally-rotted parser shops (P-47), but nothing renders it where Nate would look; wire a small card into the CRM / pipeline-health dashboard that reads it. Small UI story. Status: Unscoped — awaits Nate's shaping + gate.
2026-07-24from S-D-160 reconcile (DEF-050)
~~The 2026-07-24 wind-unit design handoff (PR #967) specified a plain-language day narrative and a tappable 7-day forecast strip inside the Weather card, driving temp/wind/pressure/arc/glyph together. S-D-160 deliberately did NOT build this half — the handoff's own forecast values are placeholders with no real feed ("…
2026-07-23from S-D-157 reconcile (DEF-050)
S-D-157 adopted a complete OpenMapTiles style reskinned to Paper/Slate with our branded water overlay pushed prominent. Two deferred, render-dependent calls Nate makes once he sees it on device: (1) always-on vs. a "water detail" toggle in the layer picker — should the refined water emphasis always be on, or a flip th…
2026-07-23from S-D-152 reconcile (DEF-050)
(1) fished provenance — the time-of-day tag is derived from started_at's local hour; an angler-editable override (in case a trip's actual fished window differs from the recording's start time) is a candidate future story, not committed. (2) Extend the "name never wraps/truncates" hard constraint to the Waters-card (fi…
2026-07-23from S-D-124 reconcile
S-D-124 added an independent src/lib/gauge-coords.ts (USGS OGC monitoring-locations read) because no exported function returned a gauge's own lat/lng and the only impl was private in the S-D-150-owned usgs-streamflow.ts. Once S-D-150 has merged, consolidate to one shared coordinate reader (export the existing helper o…
2026-07-23from S-D-124 reconcile
S-D-124 shipped the gauge detail sheet with a fixed 7-day hydrograph and no reach-description line (kicker + station name only). The design canon (river-gauge-pin-detail.html) shows a 24h/7d/Season window toggle and an authored reach description ("the reach it measures"); the toggle was deferred ("only if cheap") and…
2026-07-21Nate capture
When the user taps to start a recording and either permission is denied/not-determined, the app should show a full-screen blocking state that explains why the permission is needed and gives a direct path to Settings — not fail silently or show a toast. Nate attached a screenshot from Fi (a dog-collar tracker app) as a…
2026-07-20Map Pins design-handoff intake / PR #808 follow-on
Two accepted-not-solved render-time engineering calls flagged by the 2026-07-20 "Map Pins (uniform, no aggregation)" handoff: (a) the run-pin grouping radius is a fixed ~50m (RUN_GROUPING_RADIUS_M), tuned for wading — boats travelling fast over-split into several run pins; consider mode-aware or per-water. (b) The zoo…
2026-07-20Map Pins design-handoff intake / PR #808 follow-on
The handoff flags Project Documentation/Design/foundation/pin-glyphs/ (catch.svg / encounter.svg etc.) as unreferenced by any shipped screen now that all Map Pins glyphs are inline SVG recreated in the native layer. Decision needed: retire / update to the new inline values / leave. Hygiene, not a defect. (SOR never de…
2026-07-20S-D-133 reconcile capture (DEF-050)
S-D-133/DEF-418 ships a 3-attempt retry against the public overpass-api.de endpoint plus honest error-surfacing (a Retry affordance rather than a silent unbound pin) as its reliability answer; DEF-418's own investigation hit sustained rate-limiting and a hard HTTP 406 from a handful of hand-run queries on one IP, and…
2026-07-20S-D-148 (reserved)
Nate (2026-07-20, verbatim): "I need to be able to delete days that don't have anything associated with it… I have a blank untitled day in the app that I can't do anything with." A day with zero recordings AND zero non-discarded observations is currently undeletable from every surface — verified this session: day soft…
2026-07-19S-D-147 reconcile capture (DEF-050)
S-D-147 introduced a second water mark — the generic ripple — for the map pin and the Waters nav tab only, at sizes where a per-water outline can't read. The pre-existing water identity mark is the water's own map-feature outline (lake polygon / river reach — the "Water Glyph (paper)" canon promoted 2026-07-01), which…
2026-07-19S-D-143 scoping (Nate's ruling)
A persisted catalog of USGS/BOR gauge sites (id, name, coordinates, source), populated and refreshed by some mechanism TBD, sized so it can back a map-viewport query. It is the resolved answer to "what is the corpus of all water gauges in our data" and the blocking prereq for S-D-143 (the Basemap/Layers overlay system…
2026-07-19River Flow Gauge Glyph intake (Design Intake)
screens/landmark-glyphs.html states a landmark shows at every zoom and never aggregates. screens/map-pins.html tier 0 (zoomed-out region) states every pin collapses to a bare presence dot with no glyph — and in fact draws no landmark at all. The contradiction spans all five landmark kinds (access, camp, prospect, name…
2026-07-20S-D-137 reconcile capture (DEF-050)
Named in S-D-137's "Out of scope" section: fly_pattern, air_temp_f, weight_lb, access_kind, rig and similar are all nullable on one wide row, only ever populated for a subset of observation types — a different axis of tech debt from the day/water resolution cluster S-D-137 fixed (per-type sub-tables, or a narrower cor…
2026-07-16S-D-116 review capture
src/app/water/[id].tsx's masthead subtitle reads the new fisheries.region column — nullable, no authoring flow ships in S-D-116, so it reads empty for every water indefinitely. The sibling Waters-tab list (fisheries.tsx) already computes a real region for the identical display purpose via src/lib/water-region.ts's get…
2026-07-16S-D-115 reconcile capture (DEF-050)
The pilot shipped the day-CONDITIONS-card live gauge read (S-D-115, USGS-only, river fisheries, client-side, in-module cache). Deferred, each its own future decision: (1) fishery-sheet placement — the same live read on fishery-sheet.tsx's detail face (deferred partly because in-flight S-D-92 owned that file surface at…
2026-07-16S-D-115 review capture (L2)
src/lib/usgs-streamflow.ts (haversineKm), src/lib/reconcile.ts:118 (haversineMeters, exported), and src/lib/overpass-client.ts:82 (private copy) now carry three implementations of the same great-circle distance. Mechanical consolidation story: one shared home, three call sites re-pointed, unit parity pinned. Status: U…
2026-07-12Observation taxonomy
Nate (2026-07-12): technique "is kind of a mess right now and several things are conflated." Concrete threads to resolve when it's shaped: (1) the picker description is "Gear or method in use this session" — it mixes gear vs method; (2) it's coded Water-only despite the "this session" wording (isDayMember in src/lib/o…
2026-07-12Map pins / recovery
Deleting a manual map pin is irreversible from the UI today — no undo, no recently-deleted list — so an accidental delete has no in-app recovery; add an undo affordance and/or a "Recently Deleted" recovery surface for pins. Cheap because the persistence already exists (pointers for whoever scopes it): manual pin delet…
2026-07-11S-D-102 review follow-on (L2)
getRecordingsForVisibleDays (S-D-102) runs a correlated COUNT(*) FROM observations WHERE recording_id = r.id AND user_id = ? per recording, once per Sessions-screen load and every 2.5s while a recording is processing. observations is indexed on user_id but not recording_id, so the subquery is O(recordings × user-obser…
2026-07-11S-D-100 follow-on
S-D-100 swapped the fishery map off <ObsPin variant="fishery">-per-observation onto the neutral run pins — but FisheryPin is NOT yet dead: the Session-Log map (session/[id].tsx:922) still renders variant="fishery" per-observation, and obs-pin.test.tsx still tests it (a code-review catch — the initial S-D-100 note wron…
2026-07-11S-D-99 follow-on
S-D-99 made provisional observation + fishery pins render identically to confirmed ones on the map (verification is no longer a pin-appearance channel), but the visual SOR still documents the old pending treatment — Design/screens/fishery.html .fp-house.pending (dashed pend-bg housing) and the map-pins canon's provisi…
2026-07-11S-D-99 follow-on
Per Nate (2026-07-11), the longer-term direction beyond S-D-99: the review workflow "likely goes away entirely" eventually, and confirm/delete just happens on any pin at the user's discretion rather than provisional captures routing through a review queue. S-D-99 removed only the pin's pending look; the session-log "N…
2026-07-11S-D-98 follow-on
The adopted "Recordings per Day" design cleared the day row to date + water + yield + a rail, which removed two deliberate prior features from the Sessions face: the S-B-45 export-audio hatch (hand the user their durable audio for a stuck/failed recording — the "never lose your audio" affordance made actionable) and t…
2026-07-11S-D-95 follow-on
S-D-95 built run-pin aggregation (src/lib/run-pin-aggregation.ts + the RunPin/RunPinCard render) on the Map tab (screen 03) only. The Water/Fishery map (src/app/fishery/[id].tsx), the Session Log map (screen 08), and the Day map each have their own pin-render loop and still draw one pin per observation. The aggregator…
2026-07-11S-D-91 follow-on
S-D-91 gave every migrated screen a real error value from the shared hook, but only the "explicit" screens (day/fishery/entry) render it; the screens that historically swallowed errors (journal/axis, journal/skills, the bare null-sentinel screens) now have error available but still render nothing on a failed load (a s…
2026-07-11Principal-Engineer audit (UI layer)
(runtime-gated, not build-stripped). Candidate for a build-time strip. Status: Unscoped.
2026-07-11Principal-Engineer audit (UI layer)
Split opportunistically when stories touch them, extracting pure geometry/state helpers first — advisory, NOT a standalone story. Status: Unscoped — advisory.
2026-07-09Motion tokens / Reanimated
Left inline during S-D-87 (the motion-token extraction) because they sit inside a Reanimated gesture worklet — dragging a module constant into a worklet is a DEF-180-class capture concern that S-D-87 deliberately excluded (same reason session/[id].tsx:267's worklet 220 was left). Small tech-debt: a future Reanimated-m…
2026-07-07Map / overlays
A map overlay showing where dispersed camping is legally allowed on public land (BLM/USFS), for the existing MapLibre-based map's Streets/Satellite/Hybrid/Topo toggle set (SPEC.md's Map architecture row, ~line 227) — useful for anglers planning multi-day trips near water. Conceptually similar to onX Offroad's disperse…
2026-06-11Day detail / conditions card
(Recovered 2026-07-06 from an orphaned unmerged branch (claude/lake-flow-logic-backlog-deow64) during an Ops cleanup sweep; confirmed still unbuilt — src/app/day/[id].tsx's FLOW rendering is unchanged.) From Nate, on the Day detail page for a lake (Beaver Lake): the CONDITIONS card shows three fixed columns — WATER /…
2026-06-11Day detail / recap completeness
(Recovered 2026-07-06 from an orphaned unmerged branch (claude/lake-flow-logic-backlog-deow64) during an Ops cleanup sweep; confirmed still unbuilt — getSessionScopeObservationsForDay still exists but is still uncalled from src/app/day/[id].tsx.) From Nate, same Day detail page: it footers "FROM 8 RECORDINGS" but surf…
2026-06-11Education / content mode
(Recovered 2026-07-06 from an orphaned unmerged branch (claude/university-mode-guide-e46o96) during an Ops cleanup sweep; confirmed not already captured under any existing entry.) A learning/educational surface in the app — Nate's framing names three (possibly overlapping) modes: a "university mode," a "guide mode," a…
2026-07-02Design/canon
Canon puts a radial-gradient dot grain on every screen; the app has no paper-grain overlay anywhere (AUDIT.md FIDELITY-2026-07-02). A cross-screen call Nate held out of S-D-71; the dark-mode grain-flip rule is already specced (rgba(255,255,255,.04), rides S-D-70) but is N/A until grain exists.
2026-07-01Pin clustering / aggregation
When multiple feature observations fall within a small radius (Nate's example: 5 features in a ~100ft radius), aggregate them into a single map pin whose description carries everything known about that stretch of water — so the map stays legible at low zoom and one pin answers "what do I know about this run?"
2026-06-30Day notes editing
S-D-61 adopted the simpler "A Day" Day-detail design (per Nate's direction), which removed the inline Field Notes editor — the manual days.notes editor — so manual note editing now has no home on the Day detail (src/app/day/[id].tsx). Decide whether note-editing needs a new home (e.g. inside the /writeup/[id] screen,…
2026-06-29Capture health
(deferred-from S-D-55). The S-D-55 capture-issue marker reads a LOCAL-ONLY capture_summary column; syncing was deferred (delete-before-optimize — no server-side consumer reads a capture summary yet; operator back-office C is deferred). When a consumer exists (operator dashboard / multi-device), add capture_summary to…
2026-06-29Capture health
(deferred-from S-D-55). The marker is covered at the component tier; an end-to-end Maestro assertion needs the e2e seed (scripts/seed-test-db.mjs / reset) to support seeding a recording with a capture_summary, then a recorded-sessions.yaml step asserting the marker on that row. Status: Unscoped.
2026-06-28Capture diagnostics
(deferred-from S-D-54 code review #2, LOW). trimCaptureLog keeps every transition + every stalled watchdog tick (so the anomaly itself is captured) + a 1/min healthy heartbeat — but not the last N healthy ticks immediately preceding an anomaly. Adding a small look-back buffer in the trim loop would give the lead-up co…
2026-06-19Knowledge display
**Make a learning's technique scope visible so applicability: universal doesn't read as "applies to all fishing." From Nate's Cle Elum review drain (surfaced during S-E-37): Nate thumbed-down Euro-nymphing tips tagged applicability: universal, reading "universal" as "true for every kind of fishing." The extraction is…
2026-06-20Processing UI
From S-D-46: Nate chose the compact Log-card treatment for pipeline-stage progress + timing; a full-screen processing view (a richer live walk of the stages with timings, for a recording in flight) is a possible later D surface, explicitly out of scope at S-D-46. Status: Unscoped — shape if the Log-card line proves to…
2026-06-18AI day-summary follow-up
S-D-44 generates the Day-summary recap narrative lazily on first view and caches it on days.summary; it is not regenerated when the day's data later changes (a catch added, conditions/field-notes edited) — the cached recap can go stale. Out of scope at S-D-44 per the story. When promoted: decide the refresh trigger (a…
2026-06-18AI day-summary follow-up
The S-D-44 recap is built from catches / observations / conditions / field-notes only; the richer technique-spot + location-scope signals S-E-14 adds are not fed to the narrative. Gated on S-E-14 landing. When promoted: extend DaySummaryInput + buildDaySummaryFacts in src/lib/day-summary-generate.ts with the new signa…
2026-06-16Observability
Wire
2026-06-17Fishery
From in-app bug report 63ab9794 (captured 2026-06-17). A fishery that has no sessions and no logs still persists with no way to remove it; Nate wants to delete it directly from the fisheries list or the fishery screen. Feature request, not a defect — no defined prior behavior was violated; there is simply no delete af…
2026-06-07Fishery
S-19 shipped delete-a-fishery via long-press in the session-edit fishery picker; S-A-32 retired that modal and S-D-12 (session-fishery assign) rehosted create / pick / assign but not entity deletion. The deleteFishery / countSessionsWithFishery / reassignFishery DAL (src/db/fisheries.ts) is intact but uncalled, so a f…
2026-06-15Fishery / Manage Fisheries surface
From the 2026-W25 WBR Product lens. Fishery-entity deletion/reassign lost its UI host when the session-edit modal was retired (S-A-32) — the deleteFishery / reassignFishery DAL (src/db/fisheries.ts) is intact but uncalled (tracked as GAPS.md G-10). A dedicated Manage Fisheries surface would re-home deletion and host t…
2026-06-15Map / observation–learning-item union
From the 2026-W25 WBR Product lens. The SPEC §6.1 Map observation/learning-item union is unbuilt (GAPS.md G-09): the Map (src/app/(tabs)/index.tsx) renders only observations, so fishery & technique learning-item pins never appear, and §6.9 durable-place pin routing (entry point (c)) has nothing to bind to. Worth scopi…
2026-06-07Map
The ability to filter which pins are shown on the map view. Open for scoping: what attribute(s) pins filter by — date / time, observation type, species, fishery, tag, or some combination — and the filter UI affordance. Relates to SPEC.md §6.1 (filter set) and the [E] "Encounters as a UX-wide lens" idea.
2026-06-10App-entry / landing UX
From the build-2 device walk (Nate): "'Proceed to journal' is the wrong UX — need a story to fix it. Need to update the design on entering the app. Can't land on journal." Problem: on entering the app you land on the Record launch face, and the only path into the journal is the "Proceed to Journal →" link — the user c…
2026-06-11Fishery / water-shape rendering
From Nate: the "water picture" shown next to a fishery — the visual that conveys whether it's a lake or a river — isn't coming out right; the shapes look wrong. Wants a better design for it. Where this lives in code (pointers for the future scoping session — confirm which surface Nate means): (1) the water-type glyph/…
2026-06-11Journal / Fishery
Likely V3 (post-MVB). When a user adds a fishery manually because they want to fish it later, pull in AI-curated information about that river/lake — making the fishery entry a research tool to prepare for a fishing trip. The same idea applies to seeding an empty/sparse Journal. All AI-generated content must be clearly…
2026-06-14Navigation / detail screens
From the S-A-70 bug-report intake (DEF-057, now closed→here): Nate expects the bottom nav bar on the Day and Fishery detail screens; today it's absent because those screens were deliberately built as full-bleed full-screen pushes outside the tab navigator (for the map-hero look — src/app/_layout.tsx root Stack routes,…
2026-06-14Session / review interaction
From the S-A-70 bug-report intake (DEF-058, now closed→here): Nate reports tapping "Review" on a session does nothing / no review screen opens. Today (story S-D-30) Review deliberately scrolls in-place to the first provisional observation (scrollToFirstProvisional in src/app/session/[id].tsx) instead of opening a moda…
2026-06-11Knowledge surfaces / presentation
Lead with discoveries, collapse fundamentals into a "basics covered" section. Rank/demote, never hard-hide (reversible — the rank/fold-never-system-hide posture). Consumes the leveling score from the [E] Knowledge leveling / salience layer above. Gated on the E leveling spike landing. Layer 3 (Presentation) of the thr…
2026-06-11Journal
The Journal Day-summary recap (screen 10·b, day/[id]) assumes one water per day; a day spent on multiple waters is unmodeled, so the recap would mis-represent such a day. Deferred per Nate (Q-JD1 disposition, 2026-06-11): "design when it appears in real data." Low priority. Track the assumption as a known one, not a s…
2026-06-04Placement
offsetSecondsForEvidence (S-A-38) does a whitespace-normalized, case-sensitive substring match against the transcript; model-cleaned quotes (dropped fillers, collapsed repeats per EXTRACTION.md P-EX3) that no longer substring-match fall to unplaced (correct-but-lossy). Add a normalized/fuzzy fallback (filler/punctuati…
2026-06-04Consumer
Needs a one-sentence definition before scoping: free-text user notes per observation, or a Claude narrative note per observation? Different builds. Open decision in V2_STRATEGY.md.
2026-06-04Consumer
Refine how pins render and adjust. Partly covered by the existing drag-to-place item + the P-10 precision channel; this captures any further treatment Nate wants.
2026-06-06Auth UI
S-B-07 built the sign-in / sign-up screen (src/components/auth-screen.tsx) to the Paper/Slate tokens because no canonical design existed in Design/. Produce a canonical auth-screen design (sign-in + sign-up states, error treatment, and the "Continue with…" social-button slots if social auth ever lands) and reconcile t…
2026-05-29Map
Catch-spot pin aggregation. When many catches accumulate at one good spot, the map ends up with dozens of overlapping pins. Collapse them into a single aggregate pin that, when tapped, shows the number of fish and the associated sessions; an exploded view of all individual fish/observation pins is available on demand…
2026-06-02Insights / Fishery
Captured from Nate's product intuition: as observations accumulate at a fishery across trips, the map gets crowded with discrete pins; he wants them to "collapse into the fishery summary" so the next visit starts from understanding rather than a pin field. Layer correction (the important part — do NOT route this to th…
2026-06-08Recording UI
When a capture/recording session is active and the user navigates away from the recording screen, the rest of the app must surface an unmistakable, persistent affordance that a recording is still in progress (ideally a tap-target back to the recording screen). Today, navigating away leaves no global signal that record…
2026-06-08SPEC hygiene follow-up (residual from S-D-16)
S-D-16 left, by deliberate scope decision: (a) ~11 behavioral references to sessions/gps_recordings in §5/§6 prose, retained as conceptual entity names mapped by the §3.4/§4.1 rename notes — a full literal-token sweep to days/recording_gps_sessions is low-value and readability-negative on its own; (b) two entangled ou…
2026-06-05Cleanup
F-27/F-47/F-48 ✓ Done by S-D-15 (2026-06-08) — see Completed_Stories.md (~~F-27: Expo starter scaffold still ships navigable (explore tab, web tab-bar, animated-icon, hint-row, web-badge, collapsible) — extends the existing 2026-05-22 [D] Cleanup entry. F-47: LocationAnchor type declared twice (location-anchor.ts + no…
2026-05-22Cleanup
Dead code & asset sweep. Delete confirmed dead scaffold and orphan assets: src/app/explore.tsx (S-06 reconcile); src/components/app-tabs.web.tsx and src/components/animated-icon.web.tsx (web variants on an iOS-only project); Project Documentation/Design/foundation/icon-splash/talewater-splash-options.html (superseded…
2026-05-23Components
Build a small OverlayText component that always uses explicit colors (default color: '#0d1612' on a light overlay surface). Map-overlay UI (pin labels, callouts, controls) needs explicit text colors per D-23; a reusable wrapper avoids re-implementing the explicit-color escape on every future overlay. Drop-in replaceme…
2026-05-23Onboarding
First-run onboarding (explain + populate). Two facets of one problem: (a) an explanatory layer up front — what TaleWater does, how Plaud capture feeds into the app, what the review/log/map loop looks like (carousel, short video, or coachmarks on the live empty UI); (b) sample-session preload so a new user sees the map…
2026-05-23Sessions
Default session naming from date + location instead of the Plaud transcript filename. §4.3 keeps title user-editable; this changes the default the user is editing from. Likely depends on having a location for the session (GPS-derived or trip-pin) at the moment the title is generated.
2026-05-23Sessions
A session-edit surface. §4.3 calls title (and implicitly water temp / clarity / flow) editable, but no §6 feature or §7 screen sites the edit affordance. Screen 11 (session picker) and screen 07 (observation detail's "session conditions" block) are the candidate entry points.
2026-05-23Splash
Splash → fish morph animation. Replace the static splash with the morph treatment prototyped in talewater-wave-morph.html and outlined in Design/foundation/icon-splash/README.md's "Morph" section: trigger on splash completion (~3s in), hold the fish shape for 1s, then transition to home. Requires moving off expo-splas…
2026-05-23Review
Better visual treatment for the §6.3 "Review N observations" entry point. The S-11 implementation is a static banner under the Log session header (per Active_Story §E) — it gets lost visually once the user scrolls into the list, and there's no way to dismiss-and-defer or surface from elsewhere. Candidates to design: f…
2026-05-23Review
Per-field "worth a look" policy + copy. §5.1 says a field is pending when "Claude expected a value and missed it," but there's no field-by-field policy specifying which observation columns are eligible for the flag and under what extraction conditions — today the flag is whatever the extraction client decides to write…
2026-05-23Review
Map-tab review entry point (prototype line 503). Cross-session "all unreviewed" surface for entering review from the Map tab, not just from inside a Log session. Deliberately deferred until Log-tab CTA proves out on device (D-42). Needs a sequencing decision: oldest-first, most-recent-first, or grouped by session.
2026-05-23Review
Map-top split layout on the review surface (§7.1 row 05). The spec calls for "Map top, card bottom" on the review screen; S-11 ships card-only. Polish story once the core verification loop proves out on real device against real sessions. Will need a map snapshot or live map showing the current observation's pin.
2026-05-24Onboarding
First-launch tour that explains what TaleWater does before the user reaches screen 01's empty state — what it captures, how Plaud feeds in, what the review/log/map loop looks like. Distinct from the existing 2026-05-23 "first-run welcome / get-started demo" entry, which is about populating the app with sample data; th…
2026-05-25Fishery
Define fishery as a first-class entity, and design the "fishery block" UI surface that displays fishery-scope observations (e.g., "this river fishes well in fall"). Surfaced during the §6.6 trip-pin retirement requirements discussion: extraction will tag every observation with scope: point | session | fishery, and fis…
2026-05-25Cleanup
~~Sweep live D-XX references across the project docs to point at Decisions_Archive.md instead of the now-deleted DECISIONS.md. Known live references at minimum: QUESTIONS.md (Q-A2 → D-16, Q-D1 → D-35, Q-SE1 → D-30, Q-PF1 → D-57/58/59/60). Same pattern likely lives in SPEC.md and Completed_Stories.md — verify and sweep…
2026-05-26Weather
Tiered weather endpoint upgrade (low priority). Switch weather-client.ts to a two-tier strategy: observations ≤5 days old use the current forecast endpoint (api.open-meteo.com/v1/forecast, near-zero lag); observations >5 days old use the Open-Meteo Archive endpoint (archive-api.open-meteo.com/v1/archive, ERA5 reanalys…
2026-05-26Weather
Manual "retry weather" affordance on the observation detail screen. A button (or pull-to-refresh gesture) that re-triggers backfillWeatherForObservations for the current observation from the detail screen. Covers two cases: (a) original backfill failed due to outage (fields are blank); (b) user wants to re-fetch after…
2026-05-25Placement
Drag-to-place on the S-15 placement modal map. Today (src/components/place-on-map-modal.tsx) the placement primitive is tap-on-map: each tap drops a candidate pin at the tapped lngLat; a different tap moves it. Surfaced as confusing during S-15 acceptance — the user's natural expectation is to drag the pin, not tap-an…
2026-05-26Design
Per-screen design coverage gap. Design/ ships visual SOR for screens 03 (Map), 05 (Review), 07 (Observation detail), 12+13 (Diary), and the launch splash. Screens 01 (first run), 02 (Log), 04 (Add a session), 08 (GPS recording), 09 (GPS permission), 10 (Filters), 11 (Session picker) have no current design SOR. Address…
2026-05-27Diary
Functional search on the Diary landing. S-17 ships the search row visually (src/app/(tabs)/diary.tsx) but it is inert per story scope — tapping it does nothing. Promote when there are enough entries that scanning the axis list becomes work. Open shape questions: (a) does search filter the current axis list (reduce the…
2026-05-27Diary
Toggle state persistence on the Diary landing. S-17's axis state lives in component-local useState so the toggle resets to Fisheries on every tab switch (the useFocusEffect reloader doesn't preserve the user's last choice). For someone who lives on Techniques day-to-day, this is a small recurring friction. Lift state…
2026-05-27Diary
Per-axis row icons on the Diary landing. S-17 ships a uniform colored placeholder square (styles.rowIcon in src/app/(tabs)/diary.tsx). The design (Design/screens/diary.html) has distinct glyphs per axis — a curved fish-water wave for fisheries, a peak/mountain for techniques, presumably a fish silhouette for species.…
2026-05-27Fishery
Fishery detail screen with Q3 (aggregations) + Q4 (composition) proposals carried forward from the 2026-05-25 Fishery entry. Once S-19 ships the fishery entity (typed flat body — river/lake/salt — with name + optional coords) and the fishery-naming story ships waterway autocomplete, the user has fisheries in their DB…
2026-05-28Fishery
~~Fishery naming, standardization, and waterway name autocomplete.~~ Partially shipped S-22 (2026-05-29). Waterway autocomplete via OSM Nominatim and V1 naming normalization (trim + smart title-case) landed in src/lib/nominatim-client.ts + src/lib/fishery-naming.ts + the session-edit CreateFisheryModal. What remains f…
2026-05-27Fishery
Fishery parent-child hierarchy. V1 (S-19) ships flat typed fisheries with no parent relationships. Hierarchy emerges as a natural product need once a user has fished multiple named sections of the same body of water — e.g., "Upper Sacramento River" + "Lower Sacramento River" would benefit from a parent "Sacramento Riv…
2026-05-29Fishery
"Get directions to fishery" affordance on the fishery detail screen (and possibly the session-edit modal). Tap → opens the fishery's coordinates in the device's default maps app (Apple Maps via maps:// URL scheme, or Google Maps via comgooglemaps:// if installed, with a chooser if both). Requires the fishery to have c…
2026-05-29Accessibility
ABSORBED into S-D-174 (2026-07-26) — the app-wide 10px type-floor rebase covers this entry's remaining work, and its 10px ladder supersedes the "body ≥13 / secondary ≥11 / labels ≥9" phrasing below. Not open; retained for history. Original text: At the iOS smallest text size, TaleWater text reads significantly smaller…
2026-05-29Accessibility
Paper-canonical screens pin text to design-specified sizes via allowFontScaling={false} (S-25 decision). This is intentional and defensible — pixel-locked designs are the norm — but it means users who rely on larger system font sizes get no benefit on those screens. A proper Dynamic Type workstream requires: (a) desig…
2026-05-29Log
The S-26 Log session-selector card at the top reads as a "drill into this session" affordance but actually opens a session picker sheet — two interaction models in tension. Nate's call (during S-26 device walk): redesign the Log as a multi-step screen mirroring the Journal hierarchy. Proposed shape: top level = a list…
2026-05-29UX convention
Across the app, intermediate-level screens currently render as pull-up cards (modal sheets) where they should instead be styled like their parent — full-screen paper canvas, push navigation. The pull-up card pattern should be reserved for the LOWEST level in the stack: the detail card. Corollary: pickers (type picker,…
2026-05-29Map cartography
S-A-28 widened river casings (fixed) and tuned zoom-level thresholds, but place-city-town and place-region still show no text on device. Likely cause: 'Noto Sans Bold' is not the exact glyph name Stadia hosts — MapLibre silently drops text when a font name doesn't resolve. S-A-28 added 'Noto Sans Regular' as fallback…
2026-05-30Splash polish
The paper launch splash (src/components/launch-splash.tsx) ships with the reflection mark flex-centered + translateY(-40) ("Nate's height lock"), but on device the mark's height is still not where Nate wants it. Root cause is P-21: the position was tuned against browser/HTML mockups of the canonical, which confirm con…
2026-05-30Map
Handoff 2026-05-30 makes the rust live-location puck (paper-2 puck + rust core dot + faint rgba(196,84,30,.13) halo) always on, even when not recording. Today the puck is bound to the active GPS recording lifecycle in src/lib/location-recorder.ts; the change lifts puck position to an ambient subscription that runs whe…
2026-05-30Design
Handoff 2026-05-30 ships canonical pin-glyph SVGs at Design/_inbox/TaleWater Handoff 2026-05-30/assets/pin-glyphs/{catch,encounter,feature}.svg. Compare against the current scripts/build-pin-glyphs.mjs source SVGs (assets/images/pin-glyphs/); promote handoff SVGs as canonical if they differ visually. Note: no techniqu…
2026-05-30Capture
Per Nate's 2026-05-30 call: the current Plaud + file-picker is being demoted to a dev-only control as part of the Session Log redesign. Email ingestion (B-line 47, 2026-05-26) is the planned user-facing replacement once the backend pipeline exists. A productized manual upload affordance is likely required later — for…
2026-05-30Sessions
~~Session details view / edit (Nate-directed).~~ SHIPPED as S-A-32 (2026-05-30) — the v2 design's collapsible session-detail card on Level 2 (Date / Air / Water / Flies / Notes, per-row inline edit) + inline back-card name rename; session weather added (migration v10); session-edit modal retired. _Original entry:_ S-A…
2026-05-30Cleanup
Retiring src/app/session-edit/[id].tsx (S-A-32) removed the only UI that created/assigned fisheries. The fishery entity is intact per Nate ("fishery is the name; leave the entity"), but its write DAL is now unreachable from any screen: createFishery, assignFisheryToSession, reassignFishery, deleteFishery, countSession…
2026-05-30Design
The 2026-05-30 v2 Log (paper).html Level-2 chip row reads "All / Catches / Encounters / Conditions" — "Conditions" is not an observation type (it's a session attribute per the S-25 taxonomy: catch / encounter / technique / feature). S-A-32 kept the real taxonomy chips (All / Catch / Encounter / Feature / Technique) ra…
2026-05-31Brand
The 2026-05-30 handoff specifies the iOS app icon (cream ground, ink bars, lake reflection; squircle applied at runtime by iOS). S-A-33 swapped the iOS assets/images/icon.png (re-rendered via existing npm run build:icon from the paper-theme assets/icon-src/app-icon.svg). Android adaptive icon — assets/images/android-i…
2026-05-31Log
Surfaced during S-A-33 device walk. Today the only way to confirm or discard a provisional observation is to enter the Review sweeper (or, post-S-A-33, open the Observation Detail screen directly). On the Level 2 opened-session observation list, the user can't act on rows in-place. Proposed: wrap <ObsRow> (src/compone…
2026-07-06Recovered branch / dev-tools
(Surfaced during the 2026-07-06 Ops/PM branch-hygiene sweep — real, finished, never-shipped work.) The underlying bug is still live on main today: a synced account's DB wipe gets silently undone by the next sync pull. Whoever picks this up decides: cherry-pick the branch's actual diff, or re-do the work fresh (branch…
2026-07-06Recovered branches / brand
(Surfaced during the 2026-07-06 Ops/PM branch-hygiene sweep — real, finished, never-shipped work.) Place-on-map modal skin + map-layer thumbnail images; main's modal is still unbranded, thumbnails still missing. Whoever picks this up decides: cherry-pick either branch's actual diff, or re-do the work fresh (branches m…
2026-07-16Journal / Knowledge codex
Surfaced via a real, good example: a Cedar River learning card appeared in the Knowledge tab distilled from a spoken tangent about the Cedar River during a 2026-06-02 session logged at a different water (Frenchman Cut). Nate was glad this worked — extraction correctly captured knowledge from conversation regardless of…
2026-07-23from S-D-155 reconcile (DEF-050)
S-D-155's Day-screen Flow card shows the reading time as the ALREADY-RESOLVED live gauge read's own observedAt (unchanged S-D-115/118 behavior) rather than a new query for the gauge reading nearest the day's actual session midpoint — a Day viewed well after the fact currently shows the reading time from whenever the s…