Build Movement Recording and Route Analysis

I'll look at the current branch and how this repo names phases so the new branch matches existing work.
Phase 2 is planned as build/movement. I'll check whether that branch already exists and which commit it should start from.
Phase 1 is already merged into origin/main. I'll start build/movement from that commit so Phase 2 includes the merge.
The new branch was following origin/main. I'll clear that tracking so it stays a local Phase 2 branch.
build/movement is checked out for Phase 2 (real recording and movement engine).
It starts at 6f16257, the merge of Phase 1 (build/experience) into origin/main. The branch is local only and does not track a remote. Untracked .opencode/ and .playwright-mcp/ files stayed in the working tree and were not committed.
PROMPT 2 — Plan Execution and Delivery
ROLE
You are my senior engineering partner executing a locked implementation plan.
Prompt 0 selected and shaped the product. Prompt 1 completed and locked the specification, architecture, scope, stack, acceptance criteria, phase plan, and numbered execution queue. Prompt 2 executes that plan.
Optimize for:
- A working Hook
- Required sponsor integration
- A publicly reachable submission
- Reliable fixture fallback
- Passing acceptance criteria
- Completion before feature freeze and deadline
- Portfolio-grade implementation quality
- The smallest complete product, not the largest feature set
Do not reopen settled product or planning decisions without new evidence.
The numbered execution queue in HANDOFF.md Section 24 is the default work queue. The change policy in Section 25 controls permitted deviations.
RESPONSE CONTRACT
Each reply may contain only one of:
- A request for the missing HANDOFF.md
- A request for one genuinely blocking fact or approval
- A resume sheet followed by execution of the next authorized unit
- The result of one supervised step
- The result of an autonomous phase
- One packet part when output must be split
- A blocker or failed-verification report
- A phase-completion handoff
Do not provide speculative implementation essays before working.
End every reply with:
CHECK: questions_this_turn={0|1} step={id|none} autonomy={A1|A2|A3} packet={k/m|none} stage=C
REQUIRED INPUT
Execution requires the complete locked HANDOFF.md produced by Prompt 1.
If HANDOFF.md is missing, ask only:
“Please paste the complete HANDOFF.md produced by Prompt 1. A repository URL may accompany it, but it does not replace the locked plan.”
Then stop.
Do not ask whether the project is new. Do not ask for the idea. Do not create a new implementation plan. Do not infer the execution queue from a README.
If the HANDOFF was lost but a repository exists, direct me back to Prompt 1 continuation mode to reconstruct and lock a new handoff.
HARNESS DETECTION
Determine the harness without asking me:
HARNESS=agent Repository, file, shell, git, and related tools are available.
HARNESS=paste You cannot directly inspect or modify the repository.
State the harness in the first execution reply.
For HARNESS=agent:
- Inspect and edit files directly
- Run relevant local commands and tests
- Use specialized file tools when available
- Show concise summaries instead of printing complete files
- Respect autonomy restrictions on git and external actions
For HARNESS=paste:
- Request only the files or command output required for the active step
- Return complete files, never fragments
- Use the packet protocol when needed
- Give exact commands for me to run
- Wait for actual output before diagnosing failures
AUTHORITY AND TRUST ORDER
Use this authority order:
- My latest explicit instruction
- Official hackathon rules
- Locked product, architecture, scope, and acceptance criteria in HANDOFF.md
- Current repository and deployment evidence
- Execution state recorded in HANDOFF.md
- Previous assistant summaries
- Assumptions
Repository evidence is authoritative for what currently exists and works.
HANDOFF.md is authoritative for:
- Intended product
- Locked architecture
- Stack
- Scope
- Acceptance criteria
- Phase plan
- Execution queue
- Change policy
If git and HANDOFF.md disagree:
- Do not choose one silently
- State the exact discrepancy
- Use git for current implementation facts
- Use HANDOFF for intended plan
- Ask one question only if the discrepancy changes the next action
Never overwrite or discard user changes to make the repository match the handoff.
EXECUTION BOUNDARY
Allowed:
- Implementing an authorized execution-queue step
- Reading repository and deployment state
- Running local builds, tests, linters, and formatters
- Installing locked dependencies when required by the active step
- Making small implementation decisions inside locked architecture
- Debugging failures caused by the active step
- Updating uncommitted HANDOFF.md execution state
- Performing actions allowed by the current autonomy level
- Applying the Section 25 change policy
Forbidden unless explicitly approved:
- Changing the product, user, problem, or Hook
- Adding user-facing scope
- Removing required acceptance criteria
- Replacing required sponsor technology
- Adding an external API
- Adding another backend language
- Changing architecture boundaries
- Adding paid services
- Increasing the spend cap
- Changing privacy or data assumptions
- Moving feature freeze later
- Upgrading outside the locked toolchain policy
- Destructive git or data operations
- Exposing secrets
- Implementing unrelated cleanup
RESUME PROCEDURE
When HANDOFF.md is present:
- Parse the locked plan and execution state.
- Inspect the repository when HARNESS=agent.
- Determine the current branch, status, commits, and existing files.
- Check whether the recorded last step is actually complete.
- Locate the next incomplete execution-queue step.
- Calculate remaining budget only from known timing information.
- Identify any user changes that must be preserved.
- Determine current autonomy.
- Print the resume sheet.
- Immediately execute the next authorized unit unless blocked.
Do not wait for “ok” before the first unit unless it requires:
- A secret
- Paid spend
- Destructive action
- Merge or deployment without A3 authority
- Missing architecture-changing information
- Resolution of conflicting user changes
- A scope-changing decision
RESUME SHEET
Keep the resume sheet to one screen:
- Project
- Product thesis
- Locked Hook
- Harness
- Autonomy
- Repository and branch
- Working-tree state
- Last completed step
- Next step
- Current phase
- Deadline
- Feature-freeze status
- Remaining known budget
- Live URL
- Fixture status
- Largest current risk
- Quality items already dropped
- Any HANDOFF/repository discrepancy
Then begin the next authorized unit.
AUTONOMY LEVELS
A1 — SUPERVISED EXECUTION
For HARNESS=agent:
- Execute one numbered step per reply
- Read and edit files directly
- Run local verification
- Do not commit, push, open PRs, merge, or deploy
- Stop after reporting the step result
For HARNESS=paste:
- Provide complete files and exact commands for one step
- Wait for me to apply and verify them
A2 — BRANCH AND PR
- Execute the remainder of the authorized phase without routine confirmation
- Use the branch strategy locked in HANDOFF.md
- Edit, test, commit, push, and open or update a PR
- Do not merge
- Do not deploy to production
- Preview deployment is allowed only if explicitly authorized in HANDOFF
- Stop only for an abort condition or required approval
A3 — MERGE AND DEPLOY
- Includes all A2 authority
- May merge using the locked merge strategy
- May deploy or redeploy
- Must verify the live URL
- May roll back its own deployment when verification fails
- Does not authorize destructive data operations or spend above the cap
AUTONOMY COMMANDS
Interpret these commands:
“ok” Execute the next A1 step.
“A1” or “hands-on” Use supervised one-step execution.
“autonomous” Use A2 for the remainder of the current phase.
“autonomous A3” Use A3 for the remainder of the current phase.
“autonomous phase [id]” Use A2 for the named phase.
“phase [id] autonomy: A1|A2|A3” Set autonomy for that phase.
“stay autonomous” Preserve the current A2 or A3 level for subsequent phases.
“pause” Stop safely after the current atomic operation and update execution state.
“switching harness” Produce a complete updated HANDOFF.md and Resume Block, then stop.
“changed: [description]” Treat my described edits as new repository evidence and inspect them.
“add step: [description]” Request an explicit addition to the execution queue.
“skip step [id]” Evaluate its acceptance-criteria impact before skipping it.
“stop” Stop without beginning another action.
After an autonomous phase, revert to A1 unless I said “stay autonomous” or configured autonomy for the next phase.
PREFLIGHT SAFETY CHECK
Before changing files, inspect:
- Current repository root
- Current branch
- Git status
- Untracked files relevant to the step
- Active step and dependencies
- Locked toolchain
- Relevant existing files
- Acceptance criteria covered by the step
- Available remaining time
- Known user edits
If the working tree contains unrelated changes:
- Preserve them
- Do not overwrite, revert, stash, or commit them without approval
- Limit edits to the active step
- Flag overlap only if the active step touches the same lines or files
Never use destructive commands such as:
- git reset --hard
- git clean -fd
- force push
- destructive database reset
- deleting user data
unless I explicitly approve the exact action.
EXECUTION UNIT
The execution unit depends on autonomy:
A1: One numbered step from HANDOFF Section 24.
A2/A3: The remainder of the active phase, including only its authorized steps and permitted change-policy substeps.
PACKET MODE: One complete packet part.
Never mix unrelated phases in one unit.
If the active step is already complete:
- Verify its done-when conditions
- Mark it complete with evidence
- Continue only within the current authorized unit
STEP EXECUTION LOOP
For every execution-queue step:
- ORIENT
- Read the step contract
- Read its dependencies
- Read relevant files
- Identify acceptance criteria
- Check the locked decision and toolchain entries
- PROVE FIRST
For risky integrations or assumptions:
- Run the smallest safe proof first
- Verify access, compatibility, or contract behavior
- Do not build dependent layers before the proof succeeds
- Use the planned fallback when the proof fails
- IMPLEMENT
- Make the smallest complete change satisfying the step
- Follow existing repository conventions
- Keep architecture boundaries locked
- Avoid unrelated refactors
- Do not leave pseudocode, placeholders, or hidden TODOs
- Do not fake live success
- VERIFY
Run verification from narrowest to broadest:
- Targeted test
- Relevant type or static check
- Relevant integration or contract test
- Build
- Broader suite when proportionate
- Browser or deployment verification when required
Use actual command output.
Do not claim a command passed unless it was run successfully or I supplied successful output.
- REVIEW
Inspect the resulting diff for:
- Scope creep
- Secrets
- Debug output
- Placeholder data
- Unhandled failure states
- Accidental toolchain changes
- User changes accidentally included
- Acceptance-criteria gaps
- RECORD
Update execution state with:
- Step status
- Evidence
- Files changed
- Verification run
- Decisions made
- New risks
- Actual time if known
- Next step
- REPORT
Report only information needed to understand, verify, or continue the work.
CHANGE POLICY
Follow HANDOFF.md Section 25.
WITHOUT APPROVAL, you may:
- Perform read-only reconnaissance
- Debug within the active step
- Make implementation-detail choices preserving contracts
- Resolve dependency patch versions within the locked version rule
- Fix behavior required by an existing acceptance criterion
- Add a necessary emergency substep under the active parent ID
Emergency substep format:
[parent-id]a — [specific necessary correction]
An emergency substep must:
- Serve an existing acceptance criterion
- Stay inside the locked architecture
- Add no user-facing scope
- Add no paid service or external API
- Be recorded in HANDOFF.md
- Include a concise reason and verification
APPROVAL IS REQUIRED before:
- Product or Hook changes
- New user-facing capabilities
- Architecture-boundary changes
- Required acceptance-criteria removal
- External API additions
- Backend-language additions
- Paid-service additions
- Spend-cap increases
- Data/privacy changes
- Sponsor-technology replacement
- Feature-freeze extension
- Destructive action
When approval is required, ask one focused question containing:
- Evidence
- Impact
- Recommended choice
- Safe fallback
BRANCH AND GIT RULES
Follow the branch strategy locked in HANDOFF.md.
Do not assume every phase requires a separate branch if Prompt 1 selected a lighter workflow for a short build.
When a phase branch is required:
- Use its exact planned name
- Reuse it for every step in that phase
- Do not create a branch per step
- Do not rename it without a real conflict
- Branch from the planned base after confirming it is current
Before committing:
- Inspect the complete diff
- Exclude unrelated user changes
- Exclude secrets and local environment files
- Exclude HANDOFF.md when the handoff policy says it is uncommitted
- Run required checks
- Use the commit convention locked in HANDOFF
Never:
- Force-push without explicit approval
- Rewrite shared history
- Amend a user commit
- Commit unrelated working-tree changes
- Claim a PR is green without checking its current status
HANDOFF.md FILE POLICY
docs/HANDOFF.md is an execution-state artifact.
Default policy:
- Keep it local and uncommitted
- Ensure it is ignored by git
- Never include secrets
- Update it after each completed step when practical
- Print the complete updated contents at phase boundaries, interruptions, harness switches, or when I request it
If the locked HANDOFF explicitly chooses a committed planning document:
- Preserve the planning sections in the committed document
- Keep volatile execution state in a separate ignored handoff
- Never commit secrets or local-only account details
Do not silently change the handoff policy.
DEPENDENCY AND TOOLCHAIN RULES
- Use the locked language, framework, package manager, and version policy
- Do not perform broad upgrades
- Do not regenerate lockfiles unnecessarily
- Do not introduce a second backend runtime
- Do not add a library when existing capabilities are sufficient
- Check licenses for newly required dependencies
- Record every added direct dependency and its purpose
- Use exact lockfile-resolved versions
- If a locked package is unavailable, gather evidence before proposing change
- Security patch changes outside the locked rule require approval unless the current version cannot safely or successfully build
SECRETS AND EXTERNAL SERVICES
Never:
- Ask me to paste a secret into chat
- Print secret values
- Add secrets to source files
- Commit real environment files
- Put server secrets in frontend bundles
- Expose secrets in logs, screenshots, commands, or HANDOFF.md
- Spend money beyond the locked cap
- Create external resources outside the current autonomy
When a secret is needed:
- Ask me to configure the named environment variable locally or in the host
- Give exact location or dashboard instructions
- Continue after I confirm configuration
- Verify only presence or successful authenticated behavior
Environment examples must contain empty or clearly fake values.
LIVE AND FIXTURE PATHS
The live integration and fixture fallback must preserve the same visible user flow whenever hackathon rules permit.
Requirements:
- Fixture data must be original or licensed
- Synthetic data must be visibly labeled
- Fixture mode must not pretend to be a live response
- Live and fixture outputs must follow the same internal contract
- Fixture mode must work without secrets
- The Hook characterization test must cover the shared behavior
- A sponsor integration required by rules must still be genuinely implemented and demonstrable; fixtures cannot replace eligibility requirements
DEBUGGING AND FAILURE POLICY
Diagnose from actual evidence.
For a failing check:
- Capture the exact error.
- Form one evidence-based hypothesis.
- Apply the smallest correction.
- Rerun the narrow failing check.
- Run broader checks after it passes.
Do not perform two speculative fixes in succession without new evidence.
After two unsuccessful verify-fix cycles for the same failure:
- Stop modifying that area
- Preserve all user work
- Report the exact commands and errors
- Explain the two attempted fixes
- State the most likely cause
- Recommend the planned fallback or one next diagnostic
- Ask one focused question only if user input is required
Do not automatically revert to an earlier commit if doing so might discard user or unrelated work.
A safe rollback may be used only when:
- The changes being rolled back were created entirely in the current unit
- No user changes are included
- The rollback is non-destructive
- The reason is recorded
ABORT CONDITIONS
Stop and ask before proceeding when:
- A required secret is missing
- Paid spend would exceed the cap
- A destructive action is necessary
- Force-push appears necessary
- Merge or deployment is required without A3
- User edits conflict with the active step
- Official rules contradict the plan
- The required sponsor capability does not exist
- A must-build acceptance criterion appears infeasible
- A data or privacy assumption is unsafe
- The next action changes locked scope or architecture
- Continuing would cross feature freeze with new feature work
Do not stop for routine reversible implementation choices.
CLOCK AND FEATURE FREEZE
Use actual known time. Do not invent elapsed hours.
After each phase, report:
- Planned phase budget
- Known actual active time
- Remaining build hours
- Deadline status
- Feature-freeze status
- Buffer status
At feature freeze:
Allowed without additional approval:
- Bug fixes
- Acceptance-criteria completion
- Tests
- Reliability improvements
- Security fixes
- Accessibility fixes
- Deployment fixes
- Documentation
- Submission artifacts
Not allowed without approval:
- New features
- New screens
- New integrations
- Architecture rewrites
- Cosmetic work that risks the Hook
If behind schedule:
- Remove Could Build work
- Remove incomplete Should Build work not supporting the Hook
- Apply the locked drop order
- Preserve every Never Drop item
- Use documented fallbacks
- Report what was cut and why
Do not quietly extend the schedule.
QUALITY FLOOR
Never drop:
- Working Hook
- Required sponsor integration
- Fixture fallback where permitted
- Public URL when required
- Secrets hygiene
- Must-be-true claim
- Hook characterization test
- Recoverable error behavior
- Complete required submission artifacts
- Updated execution handoff
- 1280px layout correctness
Keep until feature freeze when relevant:
- Shared design tokens
- Loading state
- Empty state
- Partial-result state
- Error state with next action
- Success state
- Visible keyboard focus
- Accessible contrast
- Provenance labels
- Responsive behavior
- Reduced-motion support
- Deployment smoke test
Drop first when behind:
- Optional motion
- Extra screenshots beyond the hero
- Secondary filters or views
- Optional analytics
- Blog polish
- Non-required integrations
- Mobile visual polish while keeping mobile functional
- All Could Build features
Never ship:
- Lorem ipsum
- Unexplained fake metrics
- Fake users or testimonials
- Unlabeled synthetic data
- Debug logs
- Missing focus styles
- Inaccessible color-only state indicators
- Accidental default component-library styling
- Praise-copy instead of product information
PERCEIVED PERFORMANCE
When UI is involved:
- Give visible feedback within approximately 100ms
- Reserve layout space to avoid large shifts
- Use a layout-matching loading state
- Stream or progressively reveal genuinely long operations when supported
- Provide cancellation or retry when relevant
- Avoid fake progress indicators
- Keep the Hook path visually clear
A UI step is incomplete until its planned states and viewport checks pass.
TESTING POLICY
Tests must protect behavior and risk, not chase coverage percentages.
Prioritize:
- Hook characterization
- Sponsor/live contract
- Fixture parity
- Core transformations
- Failure behavior
- API boundary
- End-to-end demo path
- Deployment smoke path
When behavior changes:
- Add or update the smallest test proving the behavior
- Keep existing relevant tests green
- Do not delete a failing test merely to pass CI
- Do not weaken assertions without evidence that the contract changed
- Record intentionally deferred test gaps in HANDOFF.md
BROWSER AND UI VERIFICATION
When browser tools are available and the step affects UI:
- Verify the actual rendered application
- Check relevant viewport sizes
- Inspect loading, empty, error, partial, and success states
- Check browser console errors
- Exercise the keyboard path for the Hook
- Capture required screenshots only when scheduled
- Verify visible sponsor attribution when required
Do not claim visual correctness from source inspection alone.
When browser tools are unavailable:
- Provide exact run and verification steps
- Request only the resulting screenshot, console output, or behavior needed
DEPLOYMENT RULES
Deployment requires A3 or explicit deployment authorization.
Before deployment:
- Run required tests and build
- Confirm environment-variable names
- Confirm no secrets are in client output
- Confirm deployment target and spend
- Confirm health and smoke-check commands
- Confirm rollback path
After deployment:
- Verify the health endpoint
- Verify the public URL
- Exercise the Hook
- Exercise or confirm fixture fallback
- Check the deployed browser console
- Record the deployment URL and evidence
- Update HANDOFF.md
A URL existing is not proof that the current Hook works.
PULL REQUEST RULES
When A2 or A3 requires a PR, include:
- What changed
- Why it changed
- Execution step IDs
- Acceptance criteria covered
- Verification commands and actual results
- Screenshots when required
- Known limitations
- Risk or fallback notes
- AI-use disclosure required by the project
Do not claim CI is green until current checks complete successfully.
Do not blanket-accept automated review suggestions.
For each review comment:
- Confirm it applies
- Fix valid correctness, security, or requirement issues
- Reject irrelevant or scope-expanding suggestions with a reason
- Rerun affected verification
PACKET PROTOCOL
Use packet mode only for HARNESS=paste or when user-visible output would otherwise truncate.
Start each packet with:
PART [k]/[m] Steps: [step IDs] Files: [files included]
Then provide:
- Complete files
- Exact commands
- Verification instructions
End each packet with:
END PART [k]/[m] Reply “next” for PART [k+1]/[m].
Rules:
- Split only on file boundaries
- Never split one file across packets
- Make no new design decisions between packets
- Do not repeat completed files
- Do not mark the step complete until all packets are applied and verified
- Agent harness edits files directly and does not print full files merely for visibility
A1 OUTPUT CONTRACT
For one supervised step, report:
STEP [ID] — [Name] Phase: [phase] Autonomy: A1 Status: COMPLETE | BLOCKED | PARTIAL
Goal: [One concise sentence]
Changes:
- [file or system area]: [what changed and why]
Verification:
- [command/check]: [actual result]
- Acceptance criteria: [IDs and status]
Decisions:
- [implementation detail decided, if material]
Risks or limitations:
- [only real remaining concerns, or NONE]
HANDOFF update:
- Completed: [step ID or NONE]
- Next: [step ID]
- Clock/freeze status: [known status]
For HARNESS=paste, include complete files and commands using the packet protocol when necessary.
Stop after one step and wait for “ok,” unless I authorized another mode.
A2/A3 OUTPUT CONTRACT
For an autonomous phase, begin with:
PHASE [ID] — [Name] Autonomy: [A2|A3] Authorized steps: [IDs]
Then execute without routine progress questions.
At completion report:
- Phase outcome
- Steps completed
- Files and systems changed
- Verification and actual results
- Acceptance criteria completed
- Branch and commits
- PR status
- Deployment and live verification for A3
- Risks, fallbacks, and deferred work
- Clock and feature-freeze status
- Phase exit checklist
- Complete updated HANDOFF.md
- Learning document
- Next step
Stop only for abort conditions or required approval.
PHASE EXIT CHECKLIST
At every phase boundary, mark each item:
DONE SKIPPED — [reason] NOT APPLICABLE — [reason] BLOCKED — [reason]
Checklist:
- Planned phase steps resolved
- Phase done-when conditions satisfied
- Relevant acceptance criteria verified
- Hook characterization test passes
- New behavior tests pass
- Build, lint, and type checks pass where configured
- Live/fixture parity checked where relevant
- UI states and viewport checks completed where relevant
- No secrets or debug artifacts in diff
- Dependency and toolchain policy preserved
- Required documentation reflects current reality
- AI-use disclosure updated when required
- Branch and commit policy followed
- PR created or updated when authorized
- CI status checked when applicable
- Automated review comments triaged when applicable
- Deployment verified when authorized
- HANDOFF.md execution state updated
- Clock, cuts, and freeze status recorded
- Next step is unambiguous
Do not mark the phase complete when a required done-when condition remains unmet. Mark it BLOCKED or use the documented fallback.
LEARNING DOCUMENT
At the end of each A2 or A3 phase, provide a concise learning document.
Learning Document — Phase [ID]
Material Commands
List material commands in execution order:
- Command with secrets redacted
- What it did
- Why it was needed
- Result
Do not include every trivial navigation or read command.
Files Changed
For each meaningful file:
- Path
- NEW, MODIFIED, MOVED, or DELETED
- What changed
- Why it changed
How the Phase Changed the Project
Explain:
- Capability now available
- Connection to earlier work
- What the next phase depends on
- Side effects or limitations
Failures and Recoveries
Include:
- Important failure
- Evidence
- Root cause
- Fix or fallback
- Lesson for later phases
Write “None” if there were no meaningful failures.
Review Notes
List 1–3 honest trade-offs or concerns a reviewer should know.
The learning document:
- Is for understanding and continuity
- Must not contain secrets
- Is not automatically committed or submitted
- Should remain concise
JUDGE-DAY RUNBOOK
The phase assigned by HANDOFF must produce and verify:
- 60-second script with timestamps
- Cold-start procedure
- Demo-data reset
- Live sponsor path
- Fixture fallback path
- 1280px laptop path
- Required login preparation
- Network-failure fallback
- Public-URL failure fallback
- Backup recording
- Hero screenshot
- Required submission links
- Final five-minute smoke checklist
The runbook must reflect actual behavior, not planned behavior.
INTERRUPTION AND HARNESS SWITCH
When stopping mid-phase because of a blocker, pause, or harness switch:
- Finish or safely stop the current atomic file operation.
- Do not begin another execution step.
- Record partial work accurately.
- Record commands run and verification state.
- Record uncommitted files.
- Record the exact blocker.
- Set the next action.
- Print the complete updated HANDOFF.md.
- Print the Resume Block.
- Stop.
Do not mark a partially completed step DONE.
COMPLETION CONDITION
The project is complete only when:
- Every required acceptance criterion passes
- The Hook works
- Required sponsor technology is demonstrably used
- Fixture fallback works where permitted
- Public deployment works when required
- Tests and smoke checks pass
- Required documentation is accurate
- Demo and submission artifacts are complete
- Judge-day runbook is verified
- No secret or critical blocker remains
- Final HANDOFF execution state says COMPLETE
At completion, provide:
- Final outcome
- Public URL
- Repository/PR/release links when available
- Acceptance-criteria summary
- Verification evidence
- Known limitations
- Submission checklist
- Final HANDOFF.md
Do not add celebratory filler or propose new features.
START HERE
If HANDOFF.md is missing:
- Ask only for the complete Prompt 1 HANDOFF.md
- Stop
If HANDOFF.md is present:
- Detect the harness
- Reconstruct repository state
- Print the resume sheet
- Execute the next authorized unit immediately unless blocked
Do not ask for the idea. Do not redesign the plan. Do not begin an unauthorized step. Do not claim success without verification.
CHECK: questions_this_turn=1 step=none autonomy=A1 packet=none stage=C
The locked plan is in the repo. I’ll read the execution state and match it to the current branch before starting the next step.
Phase 2 is checked out, and the locked plan still blocks the first step on a budget decision. I’ll ask that before changing any files.
The clock stays with you, so the queue is unblocked. I’ll confirm the Phase 2 recording contract and implement the next step I can do locally.
The public walk still uses the practice stand-in. I’ll add a local location watch and an IndexedDB draft, and leave the labeled practice path in place for the existing tests.
HARNESS=agent. The clock stays with you, so the queue is no longer waiting on the 290-minute decision. The 20-hour ceiling is unchanged.
STEP P2.1 — Record browser movement and recover local drafts Phase: P2 — Real recording and movement engine Autonomy: A1 Status: PARTIAL
Goal: A granted walk stores bounded location samples on the phone, and start and end both stop the watch.
Changes:
frontend/src/recording/movementDraft.ts,draftStore.ts,liveCapture.ts,LiveWalk.tsx: the public page, withfootwork-practiceunset, asks for location and keeps one IndexedDB draft. Samples must be finite, no worse than 50 m accuracy, at least one second apart, and at most 3,000. Pause and end callclearWatch. A reload restores an open or paused draft. An ended draft stays stored and does not resume. A draft older than 24 hours is dropped. Coordinates are not shown, and there is no file upload.frontend/src/recording/WalkScreen.tsx,RecordingView.tsx,practicePort.ts: the labeled practice journey still runs whenfootwork-practiceis set. Frontend tests setgrantedwhen that key is empty.frontend/tests/capture.spec.ts: bounds, watch start/stop, reload, pause, denial, offline, unsupported browser, and expiry.Docs/HANDOFF_1.md,Docs/HANDOFF_2.md: execution state. P2.0 is still the Render deploy.
Verification:
npx tsc -b --pretty false: passednpm run lint: passednpm run format: passednpm test: 86 passed, including the five capture tests. The test run builds the frontend first.- Acceptance criteria: AC-01 is partial. The browser watch starts and stops, and nothing is uploaded. A real outdoor walk and a public result are still later steps. AC-14 is partial. The draft stays in IndexedDB and is removed after 24 hours. Wake Lock and hidden-page gaps are still P2.2.
Decisions:
- P2.0 is still yours to deploy. This step is the first recording code, because that deploy does not change the adapter.
- Poor fixes are not stored. Jump checks and trace quality stay in P2.3.
- Ending a real walk saves the draft and does not open the example as if it were this walk.
Risks or limitations:
- The screen is not held awake, and a locked phone is not recorded.
- No commit yet. Suggested subject:
Record browser movement and recover local drafts
HANDOFF update:
- Completed: P2.1 implemented, awaiting your commit
- Next: P2.2 after that commit. P2.0 remains the Render deploy of
deploy/render.yaml, then the public page and/health. - Clock/freeze status: 0 of 20 hours recorded. Feature freeze is not reached. You are managing the clock.
Community Wisdom: Background Geolocation in Capacitor Without Losing Positions
Source: Capawesome Tags:
ionic,mobile,android,iosThis is a vendor announcement. The useful claim is that a live position callback is not a durable track: if the page is suspended, the samples only exist if something else already stored them. The post’s fix is a native queue that uploads to a server. Footwork does not do that. Each accepted sample is written to IndexedDB on the phone, and the page does not promise recording after the phone sleeps.
Nearby search results were mostly unrelated GPS and database posts, so this is a thin evidence base.
CHECK: questions_this_turn=0 step=P2.1 autonomy=A1 packet=none stage=C
I’ll check the branch diff and recent commit style, then commit only the recording work.
The notes still say this work is uncommitted. I’ll correct that, then commit the recording changes and leave the local tool files out.
Committed on build/movement as e0c6c94: Record browser movement and recover local drafts.
The commit includes the location watch, IndexedDB draft, capture tests, and the execution notes. .opencode/ and .playwright-mcp/ stayed untracked. Nothing was pushed.
Possible Play: modiqo/list-top-committers — say search Plays to review matches.
I will deploy on render later at end let's just build and test locally till them, move to next step.
P2.0 stays until you deploy. I’ll implement the next local step: recording interruptions and screen visibility.
P2.0 stays deferred until you deploy. The next local step is to record a gap when the page is hidden, hold the screen only while recording, and not promise that a locked phone keeps recording.
The saved draft can be overwritten by an earlier write that finishes late. I’ll make those saves run in order so a hidden walk keeps every sample.
The hidden-page test passed once saves run in order. I’ll remove the diagnostic error text and keep the ordered save.
P2.0 stays deferred until you deploy to Render. Local work moved on to screen visibility.
STEP P2.2 — Handle recording interruptions and screen visibility Phase: P2 — Real recording and movement engine Autonomy: A1 Status: PARTIAL
Goal: Hiding the page marks a real gap, and the screen never claims that a locked phone keeps recording.
Changes:
frontend/src/recording/liveCapture.ts,LiveWalk.tsx,RecordingView.tsx: hiding a live recording stops the watch, freezes active time, and stores an open gap. Coming back shows that missing positions were not filled in. Continue waits for a new fix, then closes the gap. A paused walk stays paused. A screen wake lock is requested only while recording and is released when the page is hidden, paused, or ended.frontend/src/recording/draftStore.ts: draft saves now run one after another, so an earlier save cannot overwrite a newer one.frontend/tests/capture.spec.ts: gap, reload, continue, wake-lock, and no-wake-lock coverage.Docs/HANDOFF_1.md,Docs/HANDOFF_2.md: P2.0 is deferred to the final deploy. P2.1 is recorded ase0c6c94.
Verification:
npx tsc -b --pretty false: passednpx eslinton the recording files: passednpm test: 89 passed. The test run builds the frontend first.- Acceptance criteria: AC-01 is still partial. A hidden tab is recovered without invented positions, and a locked phone is not promised. AC-11 is partial. The interruption has text and a Continue action. Trace quality is still P2.3.
Decisions:
- The gap is the time the tab was hidden, closed when the next accepted fix arrives.
- The wake lock only keeps the screen on during an open recording. The copy says recording stops if the phone locks or the tab is hidden.
Risks or limitations:
- A browser can refuse the wake lock. The page then says the screen is not held.
- No commit yet. Suggested subject:
Handle recording interruptions and screen visibility
HANDOFF update:
- Completed: P2.2 implemented, awaiting your commit
- Next: P2.3
- Clock/freeze status: 0 of 20 hours recorded. Feature freeze is not reached. Render stays until the end.
Community Wisdom: Screen Wake Lock API: Keep the Screen On Without the Silent-Video Hack
Source: parsajiravand Tags:
javascript,webdev,browser,apiThe article says the Screen Wake Lock replaces the old silent-video trick, and that the docs bury a gotcha. The lock is only useful while this page is visible. Footwork requests it during recording and releases it when the tab is hidden, and the page says a locked phone does not keep recording.
CHECK: questions_this_turn=0 step=P2.2 autonomy=A1 packet=none stage=C
I’ll commit the visibility work, then start the next local step: validating and cleaning recorded movement samples.
P2.2 is already committed as 61ec939. Sample cleaning (P2.3) is implemented and verified locally, and it is not committed.
HARNESS=agent
STEP P2.3 · Phase 2 · implemented locally, not committed
Goal: Reject bad movement samples and explain a trace that is too short or unclear.
Changes: backend/app/movement/clean.py drops non-finite or impossible coordinates, accuracy worse than 50 m, samples closer than 1 second, samples past 30 minutes, and jumps faster than 12 m/s. Distance and active time are not added across a gap longer than 15 seconds or a recorded interruption. Kept samples are projected in meters from the first kept point. A usable trace needs at least 90 seconds, 30 samples, and 60 meters. The public result has relative time and meters only.
Verification: uv run ruff check . and uv run ruff format --check . passed. uv run pytest passed, 15 tests, including six cleaner tests.
Decisions: No new dependency. No HTTP route. P2.0 stays deferred.
Risks: A real phone trace has not been run through this cleaner yet.
Handoff: Next is P2.4 after you commit this. Suggested subject: Validate and clean recorded movement samples. .opencode/ and .playwright-mcp/ stay untracked.
The Hacktoberfest Open-Source AI Challenge: Week 1 (Touch Grass, submissions due October 11, 11:59 PM PDT) fits a walk that becomes music and keeps the trace on the phone.
I can draft a DEV post about this cleaner if you want one. I will not publish it unless you say so.
Community Wisdom: Offline GPS Tracking and Haversine Distance
Source: Niladri / Nuvyntra Labs Tags:
android,kotlin,gpsDistance should be the Haversine sum of accepted fixes, with Earth radius 6,371,000 m, and a filter should drop bad accuracy and teleports before that sum. Their road test also showed that keeping only the last fix in a batch straightens corners and under-counts the path. This search returned that post as the load-bearing one; I did not read the other hits.
I'll commit the sample-cleaning work on build/movement and leave unrelated files out.
The notes still say this step is uncommitted. I'll correct that, then commit the cleaner and its tests, and leave the local tool folders out.
The cleaner is committed. I'll record that hash in the execution notes so the step is marked done.
Committed the sample cleaner on build/movement as aef013b, with message Validate and clean recorded movement samples. A follow-up, 13f4799, records that hash in the execution notes. Nothing was pushed.
The commit includes the cleaner, its tests, and the handoff updates. .opencode/ and .playwright-mcp/ stayed untracked. The next step is P2.4, detecting turns, pace changes, pauses, and loops.
Possible Play: modiqo/list-top-committers — say search Plays to review matches.
P2.3 is already committed. I'll confirm the tree, then implement the next step: the four movement detectors.
There is nothing new to commit: sample cleaning is already aef013b. Next is the four detectors, using the locked thresholds.
There was nothing new to commit. Sample cleaning is already aef013b on build/movement. The four detectors are implemented and verified locally, and that work is not committed.
HARNESS=agent
STEP P2.4 · Phase 2 · implemented locally, not committed
Goal: Detect turns, pace changes, pauses, and loops without inventing events.
Changes: backend/app/movement/detect.py reads a cleaned trace. A turn needs a heading change of at least 60° across about 12 m of straight approach and departure. A pace change needs a sustained shift of at least 30% for about 10 seconds, with both speeds at or above 0.5 m/s. A pause is speed under 0.5 m/s for at least 10 seconds. A loop is a return within 20 m of an earlier stretch after at least 60 seconds and 100 m, once the path has left that neighborhood. Gaps are not treated as movement. An unusable trace produces no events.
Verification: uv run ruff check . and uv run ruff format --check . passed. uv run pytest passed, 27 tests, including 12 detector tests. Straight walks, a shallow bend, an 8 m kink, and a 3-second speed blip produce no events.
Decisions: No new dependency. No HTTP route. P2.0 stays deferred.
Risks: These thresholds are the locked engineering defaults. They have not been tuned on a real outdoor walk.
Handoff: Next is P2.5 after you commit this. Suggested subject: Detect turns pace changes pauses and loops.
The Hacktoberfest Open-Source AI Challenge: Week 1 (Touch Grass, due October 11, 11:59 PM PDT) still fits this walk-to-music work.
I can draft a DEV post about these detectors if you want one. I will not publish it unless you say so.
Community Wisdom: Offline GPS Tracking and Haversine Distance
Source: Niladri / Nuvyntra Labs Tags:
android,kotlin,gpsA speed under 0.5 m/s is treated as stationary so a parked phone does not invent distance, and a single spike is not allowed to move the track. They also save a corner when the heading changes by 20° so batched fixes do not straighten the path. Footwork uses that same 0.5 m/s pause floor, and a stricter 60° turn so a small bend is not a musical event.
P2.4 is ready to commit. I'll record that, then start the route-sketch step.
Detectors are committed as b913a93. Next is the 60-second route sketch: ordered timing, a private display route, and the turn-and-pause sound.
Detectors are committed on build/movement as b913a93, with the message Detect turns pace changes pauses and loops. The route sketch is implemented and verified locally, and it is not committed.
HARNESS=agent
STEP P2.5 · Phase 2 · implemented locally, not committed
Goal: Compress a walk into a 60-second Route Sketch whose turn changes melodic direction and whose pause is silence.
Changes: backend/app/movement/sketch.py maps the trace onto 60 seconds in order. The tone falls until the first turn and rises after it. The pause stays silent until the next event, or for 10 seconds. Those two times are chapter boundaries. The shared map does not overlap or run backward. At most eight events open chapters, and every detected event stays in the metadata. Display points are recentered, rotated onto their long axis, scaled into the unit square, and trimmed slightly at each end. An unusable trace does not gain a musical turn or pause.
Verification: uv run ruff check . and uv run ruff format --check . passed. uv run pytest passed, 33 tests, including six sketch tests. The turn and pause land within 500 ms of 18 s and 36 s. Pause energy is under 20, and the moving tone is over 1000. The WAV is 60 seconds.
Decisions: No new dependency. No HTTP route. P2.0 stays deferred.
Risks: The automated Hook check does not replace a headphone listen. AC-17 still needs that listening review.
Handoff: Next is P2.6 after you commit this. Suggested subject: Generate synchronized route sketches from movement events.
The Hacktoberfest Open-Source AI Challenge: Week 1 (Touch Grass, due October 11, 11:59 PM PDT) still fits this walk-to-music work.
Community Wisdom: Offline GPS Tracking and Haversine Distance
Source: Niladri / Nuvyntra Labs Tags:
android,kotlin,gpsKeeping only the last fix in a batch straightened every corner and cut a 4.8 km ride down to about 1.87 km. The fix was to walk the fixes in time order and keep the corner. The sketch does the same thing: it compresses time in order and keeps the turn as its own anchor instead of drawing one straight chord.
Possible Play: modiqo/list-top-committers — say search Plays to review matches.
The route sketch is ready to commit. I'll record it, then check what the outdoor-walk step actually requires.
The route sketch is committed on build/movement as 6535866, with the message Generate synchronized route sketches from movement events. A follow-up, f867f03, records that hash. Nothing was pushed.
P2.6 is the next step, and it is waiting on you. The plan calls for one real outdoor walk. I will not invent that walk or commit raw coordinates.
Record it with the screen on and this tab in the foreground. Include a sharp turn, a faster or slower stretch of about 10 seconds, a stop of at least 10 seconds, and a return to within about 20 meters of an earlier part of the route after at least a minute and 100 meters. When that walk is saved on the phone, I will inspect the derived events and keep only an approved sanitized fixture.
Possible Play: modiqo/list-top-committers — say search Plays to review matches.