Skip to content

feat(rate): persist per-viewport camera preferences - #4349

Draft
d-sorgcodexagent[bot] wants to merge 24 commits into
feat/4144-workspace-variation-studyfrom
feat/4218-camera-preference-persistence
Draft

feat(rate): persist per-viewport camera preferences#4349
d-sorgcodexagent[bot] wants to merge 24 commits into
feat/4144-workspace-variation-studyfrom
feat/4218-camera-preference-persistence

Conversation

@d-sorgcodexagent

Copy link
Copy Markdown
Contributor

Summary

  • add strict cross-runtime camera-preferences/v1 state keyed by stable Impact, Swing, and Flight viewport IDs
  • persist preset, Face On side, bounded zoom, Track Clubhead, and Auto Fit through view-workspace v2, QSettings, localStorage, and File Save/Open
  • migrate view-workspace v1 deterministically to the exact moving/static defaults from fix(rate-ui): keep moving subjects framed by default #4303 and reject malformed or future documents before mutation
  • keep moving targets, manual yaw/pitch, manual-orbit suspension, and per-frame tracking updates transient
  • apply one app-owned preference authority across five PyQt6/React camera adapters with per-viewport isolation

Exact composition

No existing PR was retargeted, rebased, force-pushed, or rewritten.

Verification

  • focused Python contract/workspace/compositor suites: 40 passed in final review; 58 passed during implementation
  • focused React camera/workspace/File/stale-read suites: 48 passed in independent review; 44 passed during implementation
  • TypeScript, zero-warning ESLint, and 211-module production build
  • Ruff check/format and focused MyPy across six production modules
  • campaign manifest, manifest layout, docs governance, module-size, minimum-test, and diff gates
  • independent repaired-head verdict: PUBLISH

Scope and release boundary

This slice persists user camera preferences, not animation runtime state. It adds no new visible control or layout. Fresh rendered Playwright/native qualification, protected current-head CI, required review, dependency landing, immutable UpstreamDrift consumer parity, and final #4218/#4284 acceptance remain open. The draft does not close either issue.

Closes no issue.

dieterolson and others added 21 commits August 9, 2026 20:16
# Conflicts:
#	docs/development/RATE_OF_CLOSURE_CAMPAIGN_HANDOFF.md
# Conflicts:
#	docs/development/RATE_OF_CLOSURE_CAMPAIGN_HANDOFF.md
#	src/rate_of_closure/ui/pyqt6/simulation_view.py
# Conflicts:
#	AGENT_HANDOFF.md
#	SPEC.md
#	docs/development/RATE_OF_CLOSURE_CAMPAIGN_HANDOFF.md
#	src/rate_of_closure/AGENT_HANDOFF.md
# Conflicts:
#	AGENT_HANDOFF.md
#	SPEC.md
#	docs/development/RATE_OF_CLOSURE_CAMPAIGN_HANDOFF.md
#	docs/release/rate_of_closure_campaign.v1.json
#	docs/specs/active/CAMERA_VIEWPORT_CONTROLS.md
#	src/rate_of_closure/AGENT_HANDOFF.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant