Remove Private Walk Export and Clear Drafts

Work in /home/kernel-kain/Documents/Github/footwork on the existing branch final-product-polish. Read Docs/PHASE_5_FINAL_POLISH_PLAN.md, Docs/HANDOFF_1.md, Docs/HANDOFF_2.md, and Docs/FRONTEND_EXPERIENCE.md before editing.
Implement only the sensitive-walk-export removal and local-draft cleanup work. Do not begin recording guidance, quota, theme, landing visual, result redesign, or animation work.
Required changes:
- Remove “Download the walk stored on this phone” and its location-file warning from the landing page.
- Remove the footer sentence “Footwork practice. A real walk is not saved on this page.”
- Delete frontend/src/recording/privateWalkFile.ts and the obsolete private-walk download test.
- Remove the obsolete LandingView prop, LiveWalk import, ended-walk download state, and download callback while preserving in-progress and paused draft recovery.
- After the server accepts a finished walk, clear the ended raw-coordinate draft from IndexedDB.
- If submission fails before acceptance, preserve only the bounded recovery behavior specified by the plan and expose a clear Delete saved walk action where appropriate.
- Add focused tests proving there is no coordinate-export control and that an accepted job clears the ended raw draft.
- Update only the relevant implementation notes.
Use apply_patch for edits and deletions. Run the relevant frontend typecheck, lint, formatting check, and focused Playwright tests. Do not commit.
Suggested commit subject: Remove the private walk export and clear accepted drafts
The layout already keeps one clock, and the walker only steps while audio plays and the page is visible. I’ll add the remaining playback-tied motion so reduced motion still shows the finished route, marker, and text.
The motion checks passed. The text assertions matched both the journey line and the mini player, so I’ll point them at the journey line only.
The Soundprint redesign is still complete and uncommitted. Playback motion now follows the same audio clock, and reduced motion keeps the finished route, marker, progress, and text in place.
When a result appears, the hero route draws once and the page settles with a short fade. The journey route is already the finished stroke. The walker steps only while that audio is playing, the route is on screen, and the page is visible. Only the marker at the current time pulses, and it pulses once. While audio plays, the hero cover holds a steady glow and the active moment’s waveform grows. Chapter and current-moment text cross-fades when the line changes. Hiding the page pauses that work. There is no scrolling effect, parallax, flashing loop, WebGL, Lottie, or new animation dependency.
Against the redesign build, CSS went from 21.24 kB (gzip 4.81 kB) to 22.39 kB (gzip 5.02 kB), and JavaScript went from 327.07 kB (gzip 98.96 kB) to 327.16 kB (gzip 98.99 kB). HTML stayed 1.60 kB (gzip 0.74 kB). One warm throttled sample, at 1.6 Mbps down, 750 kbps up, 150 ms latency, and 4× CPU, reached the landing in 1477 ms and the studio in 4084 ms. Encoded resource bytes were 0 because the preview assets were already cached. That is one observation, not a Lighthouse score.
Typecheck, lint, formatting on the edited files, and the production build passed. Playwright passed the motion, playback, marker, recap, studio, release-accessibility, and phase-1 suites. In the browser, Play started the single audio element, the cover glow appeared, seeking to the turn showed “Now playing Corner. Turn. Melody changed direction.” at 0:18, and Pause left the walker still with the glow gone.
Notes for this slice are in Docs/HANDOFF_2.md. Nothing was committed. Suggested subject: Polish Soundprint motion around the shared audio clock.
Community Wisdom: Every animation in our app is declared paused, and one CSS selector is the play button
Source: daniel_pertu Tags:
css,react,animation,webdevThe published summary describes keyframes with no animation library, a figure that moves only while it is visible,
pathLengthas the draw unit, and a chart that is already on screen and therefore should not animate. That matches keeping the journey route drawn and letting the walker run only during visible playback. Respect reduced motion (Web HIG tip #9) makes the paired point that a slide that feels smooth can be harmful for someone with a vestibular disorder, which is why the reduced-motion result is the finished state.
I can draft a DEV post about tying result motion to one audio clock, and I will not publish it unless you ask.
Work in /home/kernel-kain/Documents/Github/footwork on the existing branch final-product-polish. Do not add product features. Read the release gates and test matrix in Docs/PHASE_5_FINAL_POLISH_PLAN.md, then audit all completed final-polish changes.
Perform only verification, required defect fixes within the approved behavior, and documentation alignment.
Required work:
- Run the complete backend test suite and formatting and lint checks.
- Run frontend typecheck, lint, formatting checks, production build, and the complete Playwright suite.
- Verify privacy: no route export, no raw installation token in ledgers or logs, no coordinates in result or share URLs, and no ended raw draft after accepted submission.
- Verify accessibility: axe serious and critical findings, keyboard-only flow, 200% zoom, icon names, status announcements, focus, contrast, and reduced motion.
- Verify responsive behavior at 360, 390, 430, 768, and 1280 pixels with no horizontal overflow.
- Verify audio synchronization within 500 milliseconds and the use of one audio element and shared clock.
- Record production bundle and performance changes.
- Update README, product concept, frontend experience, handoffs, environment and deployment notes, and the final release checklist so they describe verified behavior rather than plans.
- Do not deploy or alter production settings.
- Prepare the smoke checklist and clearly identify provider-budget confirmation, real-phone review, and deployment as user-controlled gates.
- Restore the feature freeze in documentation only after every automated gate passes and all remaining human gates are explicitly recorded.
Do not commit. Report every command and result, changed file, unresolved limitation, and user-only action.
Suggested commit subject: Verify and document the final product experience
The final-polish work stays on final-product-polish. I’ll read the release gates and test matrix first, then run the full checks before changing any documentation.
Studio content overflows at 200% zoom. I’ll find the element that extends past the viewport and fix only that layout.
Automated checks passed. Two hundred percent text fits at the target widths, so I’m aligning the docs with that verified behavior and leaving deployment, the provider budget, and a real-phone review as open user gates.
Automated verification passed on final-product-polish. Feature freeze is restored for further product changes. The work is not committed, not deployed, and three release gates remain with you.
The only code change was formatting. frontend/tests/fixtures/route-sketch-result.json was one long line from commit 0f44b87. Prettier rewrote its whitespace, and the parsed result is unchanged. No product behavior was added. deploy/render.yaml was not edited.
Commands and results
| Command | Result |
|---|---|
uv run pytest -q in backend/ | 91 passed in 52.71s |
uv run ruff check . in backend/ | All checks passed |
uv run ruff format --check . in backend/ | 29 files already formatted |
npm run typecheck in frontend/ | Passed |
npm run lint in frontend/ | Passed |
npm run format in frontend/ | Failed on the fixture above, then passed after formatting |
npx playwright test in frontend/ | 133 passed in 45.4s |
npm run build in frontend/ | Passed |
Privacy checks inside those suites passed. The landing has no download control, and privateWalkFile is gone. An accepted submission clears the ended raw draft; a refusal keeps it. The ledger and job log keep an install digest, not the raw install token, and they omit coordinates and capabilities. Share URLs are /w# plus a token and do not carry a latitude.
Accessibility checks in the same Playwright run passed: axe serious and critical findings, keyboard paths, Light theme and Dark theme names, saving and generation status text, focus outlines, Daylight and Nocturne Pulse contrast at 390 and 1280 px, and reduced motion. Root text at 32 px, which is 200 percent of 16 px, fit / and /studio at 360, 390, 430, 768, and 1280 px with no horizontal overflow. The suite already checks those five widths at the normal size.
Playback, marker, recap, and motion tests keep the route, ribbon, story, and audio within 500 ms. The result uses one audio element, and the mini player uses that same element.
Production build, unchanged from the motion-polish build: HTML 1.60 kB (gzip 0.74 kB), CSS 22.39 kB (gzip 5.02 kB), JavaScript 327.16 kB (gzip 98.99 kB). Against the older Step 5 baseline in Docs/HANDOFF_2.md (CSS 11.53 kB gzip 3.12, JavaScript 268.74 kB gzip 82.09), CSS is 10.86 kB larger raw and 1.90 kB larger gzip, and JavaScript is 58.42 kB larger raw and 16.90 kB larger gzip. One warm throttled sample in the full suite, at 1.6 Mbps down, 750 kbps up, 150 ms latency, and 4× CPU, reached the landing in 1376 ms and the studio in 4393 ms. Encoded resource bytes were 0 because the preview assets were cached. That is one observation, not a Lighthouse score. Runtime dependencies remain React and React DOM.
Files changed
frontend/tests/fixtures/route-sketch-result.jsonREADME.mdDocs/PRODUCT_CONCEPT.mdDocs/FRONTEND_EXPERIENCE.mdDocs/HANDOFF_1.mdDocs/HANDOFF_2.mdDocs/PHASE_5_FINAL_POLISH_PLAN.mdbackend/.env.example
Unresolved limitations
- Nothing is committed, so P5.1 through P5.8 stay Partial.
- https://footwork-m6g0.onrender.com/ was not smoked and does not include this working tree.
- The blueprint still lists
GENERATION_ENABLEDasfalseand caps of 4 Gemma attempts, 240 GPU seconds, and 6 music attempts. The live dashboard is separate and was not inspected. Docs/evidence/seed-walk-review.mdstill tells a reviewer that the public landing offers a coordinate download. That sheet was left as the historical review record.
User-only actions
- Confirm the provider budget before changing any deployed cap. The code default for one installation is 8 jobs. Global defaults stay 4, 240, and 6 unless the environment raises them, up to 8, 480, and 8.
- Review a real phone: the 1:30 line, the saving transition, touch targets, the sticky player, and the animation.
- Deploy this tree, then run the smoke checklist now in
Docs/HANDOFF_2.mdandDocs/PHASE_5_FINAL_POLISH_PLAN.md:/health, landing with no coordinate download, live recording, generation without a percent, one-clock playback, the theme icon, and a share link with no location.
Suggested commit subject: Verify and document the final product experience
Community Wisdom: Hand off the feature-flag implementation without handing off the release decision
Source: hiroshi_takamura_c851fe71 Tags:
management,product,softwaredevelopment,softwareengineeringThe published summary separates an implementation record from a production release decision, and it labels its own rollout numbers as illustrative. That matches leaving provider-budget confirmation, the phone review, and deployment as your gates after the automated checks. Three documentation checks before opening a pull request makes the related point that docs are part of the change, which is why the README, experience contract, and handoffs now describe this working tree.
I can draft a DEV post about this verification and the gates that stayed with you. I will not publish it unless you ask.
I’ll check the branch, the docs, and the full diff so the commit and pull request match the verified work.
The polish is committed, pushed, and open as https://github.com/kernelKain/footwork/pull/12.
Docs now describe the verified branch instead of an uncommitted plan. Docs/HANDOFF_2.md marks the product slices done at be8e2e1 and leaves the smoke checklist, provider-budget confirmation, and real-phone review as your gates. deploy/render.yaml was not changed.
Two commits are on final-product-polish:
be8e2e1— Polish the Soundprint and remove the private walk download.95eff50— Record the final polish commit in the execution notes.
The pull request targets main. Automated checks already passed: 91 backend tests, Ruff, frontend typecheck, lint, formatting, the production build, and 133 Playwright tests. Deployment is still yours.