Skip to content

v3.11 — Goal Flow & App Polish Batch

Seven independent feature PRs (#1077–#1083) reviewed, merged, and shipped as a coordinated batch: Coach-drafted goal creation, app-wide haptics, goal roadmap polish, Pipes board upgrades, and a marketing hero refresh.

Summary

This batch was not a formal GSD milestone — no ROADMAP or REQUIREMENTS file governs it. The seven PRs were developed independently and merged sequentially (reviewed by Roy, shipped by Vicki) on a single merge train coordinated through OBJ-903. The batch tag v3.11.12 covers the full set; v3.11.10 and v3.11.11 were cut mid-train for two PRs before the batch-release plan was confirmed.

The flagship delivery is Coach-drafted goal creation (PR #1082): a cross-stack feature that added the generateGoalDraft GraphQL mutation on Rails and a useGoalDraft composable on the frontend, letting Coach draft a full goal plan — name, description, category, milestones, and target date — from a freeform idea sentence. This is the most substantive new surface for Coach in the app since v1.14.

The rest of the batch rounds out the goal-flow experience (inline roadmap creation on goal detail, Log Progress form polish matching the design prototype), sharpens two daily touchpoints (Pipes board, Critical Path tile), and adds an app-wide haptics layer that users can toggle in Settings.

Scope — What Shipped

  • generateGoalDraft GraphQL mutationMutations::Ai::GenerateGoalDraft on Rails; GoalDraftType for the response shape; useGoalDraft.ts composable on the frontend
  • New Goal hero card — frontend entry point for Coach-drafted goals: describe an idea, Coach returns a prefilled GoalForm
  • Desktop route animation fixApp.vue: routeAnimated = !(isPlatform('desktop') || isPlatform('electron')) on ion-router-outlet to stop full-page crossfade overlap affecting all desktop route transitions
  • schema.graphql + Rubocop regen — regenerated after the new mutation was added (confirmed clean by CI Schema Drift + RSpec gates)
  • Inline Coach + Stones roadmap creation — goal detail view: roadmap creation stays in-page; no modal hop (PR #1081, frontend-only)
  • Log Progress form polish — form layout, spacing, and interactions matched to the design prototype (PR #1083, frontend-only)
  • App-wide haptic feedbackuseHaptics.ts composable (@capacitor/haptics); wired into badge unlocks, level-ups, milestone advances, Pipes solves, and check-ins; hapticsEnabled preference persisted in localStorage; Settings toggle (PR #1079)
  • Critical Path tile auto-dismissCriticalPathTile now v-if="!isPlayed"; UTC-dated localStorage key removes the tile after solve; reappears at UTC midnight (PR #1078)
  • Pipes board visual polish — Aqueduct glass panels, flowing network animation, gold solve state (PR #1077)
  • Marketing hero refresh — removed chip overlays, updated screenshots, dropped "Our Story" section (PR #1080)
  • Docs updateddocs/features/ai-coach.md updated for GenerateGoalDraft mutation, CoachService#generate_goal_draft method, and useGoalDraft composable (in PR #1082; Last updated: 2026-06-04)

Phases

#PRTitleStatusHighlights
1#1077Pipes board polishShippedAqueduct glass, flowing network, gold solve effect
2#1078Critical Path tile dismissShippedTile self-removes after solve; reappears UTC midnight
3#1079App-wide haptics + Settings gateShippeduseHaptics.ts; badge, check-in, milestone, Pipes trigger points
4#1080Marketing hero refreshShippedRemoved overlays, updated screenshots, dropped Our Story
5#1081Inline Coach + Stones roadmapShippedRoadmap creation stays in-page on goal detail
6#1083Log Progress form polishShippedForm matches design prototype
7#1082Coach-drafted goal creationShippedNew generateGoalDraft mutation + useGoalDraft composable; desktop animation fix

Merge train order: 1077 → 1078 → 1080 → 1079 → 1081 → 1083 → 1082 (LAST — widest blast radius: new mutation, schema regen, app-wide desktop animation change).

Key Decisions

  • Batch release with a single prod tagproduction.yml uses concurrency: group=production-deploy, cancel-in-progress: false, which silently drops tag pushes 3..N when several land close together. A single batch tag was agreed after v3.11.10 was already cut per-PR for #1079; v3.11.11 covered the next group (#1083, #1080, #1078) and v3.11.12 was the final batch tag for #1082. Future batches should plan this from the start.
  • #1082 merged last — cross-stack PR with the broadest blast radius (new GraphQL mutation, schema regen, app-wide desktop animation change) was held until all others were on master, so it was the obvious suspect if anything regressed.
  • Desktop route animation disabled on isPlatform('desktop') || isPlatform('electron') — app-wide, not scoped to New Goal flow. Fixes a full-page crossfade overlap that appeared on desktop when navigating to the new goal form. This is a global behavioral change for all desktop route transitions.
  • Haptics opt-out, not opt-inhapticsEnabled defaults true; only the literal string 'false' in localStorage disables haptics. User can toggle off in Settings.

Requirements Coverage

This was a batch of seven independent PRs, not a milestone with a formal REQUIREMENTS.md. All seven PRs passed CI (Schema Drift, RSpec, Vitest, Playwright smoke) and received Roy's code review approval before merge.

PRRoy verdictCI at merge
#1077APPROVE WITH NITSCLEAN
#1078APPROVE WITH NITSCLEAN
#1079APPROVE WITH NITSCLEAN
#1080APPROVE WITH NITSCLEAN
#1081APPROVE WITH NITSCLEAN
#1083APPROVE WITH NITSCLEAN (was UNSTABLE pre-merge; cleared before merge)
#1082APPROVE WITH NITSCLEAN (was UNSTABLE pre-merge; cleared before merge)

Outcomes

  • Users can ask Coach to draft a full goal (name, category, milestones, target date) from a sentence describing what they want to achieve.
  • Haptic feedback is now woven through the app's key celebration and action moments; users on devices that support haptics get a physical layer of feedback alongside the visual one.
  • The Pipes board has a polished look consistent with the rest of the game suite.
  • The Critical Path tile clears itself after the daily puzzle is done, reducing dashboard noise.
  • Goal roadmaps can be created inline on the goal detail page without a modal.
  • The Log Progress form matches the design prototype fidelity.

Tech Debt

  • (v3.11 batch) is_played_today constant guarantee formalized in docs (docs/development/) — see commit dde04e9a4.
  • (v3.11 batch) Marketing "Our Story" page removed; our-story-public route refs cleared from docs in commits 037ce565b / 6de15c8c9.
  • (v3.11 batch) The desktop route animation change (:animated="routeAnimated") is app-wide. If any future feature needs per-route animation control on desktop, this will need to be made more granular.
  • 246123af9 — feat(haptics): app-wide haptic feedback + Settings gate (#1079)
  • 4323c7bb8 — feat(checkin): polish the Log Progress form to the prototype (#1083)
  • 7b6c63a1a — feat(marketing): refresh landing hero (#1080)
  • 412c22330 — feat(dashboard): dismiss Critical Path tile once today's puzzle is done (#1078)
  • 011fab1cb — feat(goals): Coach-drafted goal creation (New Goal hero) (#1082)
  • ac1565dc6 — chore(release): update CHANGELOG for v3.11.12 (batch tag)

Last updated: 2026-06-05

Loading…