plan 0002: sprint mode (autocross) concept + numbered docs/plans structure - #115
Merged
Merged
Conversation
Concept/research doc for a new point-to-point 'sprint' race mode (separate start and finish lines, runs instead of laps) alongside the existing circuit behavior: race_mode device setting, /TRACKS/SPRINT folder, SprintTimer in DovesLapTimer BETA, firmware session-lifecycle changes, DataViewer work last. No code changes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
User report: heats of ~4 runs with 30-45 s queue stops, long break between heats, X4 left recording per heat (~20 min videos). Pins the session model to session = heat, matching the existing camera 30 s engine-off auto-stop; run boundaries never touch the camera or end the session. Auto-idle change downgraded to a safety margin. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
…per-session Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
… trailing column) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
Move firmware-ota-phase0 -> plans/0000, insta360-ble-current- implementation -> plans/0001, sprint-mode-concept -> plans/0002 (chronological by original commit date), add the plans README, and fix the doc-path references in CLAUDE.md and CHANGELOG.md. Plan numbers now act as lightweight ticket numbers, cited from commit messages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
Coverage — host-testable units📂 Overall coverage
📄 File coverage
|
…or; plan 0003: RPM spark/cylinder settings Fold in the latest user decisions: no race_mode device setting (mode follows the detected track's folder), sprint courses selected by newest date_created (same venue, new course every event), start+finish + up to 2 optional splits (single split legal), and the full on-device course-creator UI spec (no text entry; auto-named NEWTRACK/NEWCOURSE files). Adds design notes: ISO timestamp for date_created, point-capture averaging, first track-JSON writer, 4KB-buffer pruning question, both-kinds-in-range tiebreak. New plan 0003 splits out the spark_mode + cylinder_count settings for true-RPM display/logging. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
…ync-prune, single-source RPM - date_created: ISO timestamp decided (same stamp in generated names) - point capture: 3 s hold, ~75 fixes averaged, h_acc gating - pruning: webapp sync keeps last single day of courses on device (sync -> delete -> push new file); v1 may ship first with disclaimer - race_mode setting returns as the both-kinds-in-range tiebreak only: circuit default yields to a sprint course created today; sprint always prefers the newest sprint course (fixed rally layouts) - plan 0003: true RPM computed once before the Kalman (tuning stays in true-RPM units), tachLastReported is the single source of truth Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
… restarts, DNF is normal op Session arming unchanged (RPM ~1 s brings systems up). Runs are purely line-driven: start crossing begins a run and cancels/restarts any run in progress (botched-course re-launch); finish completes; finish ignored while no run active. DNF records nothing special. Notes the direction-agnostic backward-crossing nuance and the self-healing property of the restart rule. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
…ing* on lap/pace pages), keep 'laps' verbiage Design complete: all open questions resolved. Between runs the device remains in normal race mode with every page live; Current Lap and Pace show *waiting* while no run is active. Lap wording kept everywhere (AX drivers call them laps) - no relabeling, no page-constant churn, DOVEX laps_ms line unchanged; the race_mode header column alone informs the webapp. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Docs-only. Two related pieces:
Plan 0002 — Sprint mode concept (
docs/plans/0002-sprint-mode.md): the researched concept + cross-repo roadmap for a new point-to-point "sprint" race mode (autocross / hillclimb / stage-style events) alongside the existing circuit behavior. Sprint mode is the primary focus of the next beta version. Decisions already locked in the doc:race_modedevice setting (circuitdefault /sprint), toggled via webappSSET, applied on reboot; sprint tracks in a new/TRACKS/SPRINT/folder (circuit tracks untouched — fully backwards compatible).BETAfirst (SprintTimer+CourseManager::selectCourse()): the crossing math (_detectLineCrossing()) is already line-agnostic; what's missing is structural (finish-line field, run-based accounting, course selection without the lap-shapedCourseDetector).race_modeheader column, valuesCIRCUIT/SPRINT(empty/absent =CIRCUIT), purely a webapp loading helper — same back-compat mechanism asdevice_name.Numbered
docs/plans/structure, adopting DovesDataViewer's convention so plan numbers act as lightweight ticket numbers: existing docs moved toplans/0000-firmware-ota-phase0.mdandplans/0001-insta360-ble-current-implementation.md(chronological by original commit date), plans README added, path references inCLAUDE.md/CHANGELOG.mdfixed, and adocs/plans/row added toCLAUDE.md's File Map.Type of change
How it was verified
ctest --test-dir tests/build)clang-tidycleanDocs-only change — no source touched, so the firmware checks don't apply. Verified all repo references to the moved docs were updated (
CLAUDE.md:685,CHANGELOG.md, File Map) and that file/line anchors cited in plan 0002 were spot-checked against the actual sources in all three repos during research.Checklist
CHANGELOG.mdupdated under[Unreleased](if user-visible) — N/A, no user-visible firmware changeARCHITECTURE.md/CLAUDE.mdupdated (if a module or interface changed) — File Map row fordocs/plans/tests/— N/A, no logicRelated issues
Related library groundwork: TheAngryRaven/DovesLapTimer#32 (crossing-event callback), #30, #34, #35.
🤖 Generated with Claude Code
https://claude.ai/code/session_01HnTP6BdA9xjLR5hSWE9frb
Generated by Claude Code