Skip to content

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

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

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
@dieterolson

Copy link
Copy Markdown
Collaborator

Superseded by #4466, which consolidates all 43 open src/rate_of_closure PRs into one
branch. Closing this one is measured, not assumed: verify_coverage.sh reports
safe=43 NOT-covered=0 against consolidated/rate-closure-remainder-2026-08-13, so this
PR's head is contained and nothing here is dropped.

Stacks were folded top-down (each child into its own parent, then the parent upward), so
non-tip work is included rather than skipped — including 8067ca79a (#4171, CAD export
artifact validation) and f9afa9d96 (#4309, strict ground result playback), each of which
lived in exactly one PR and is absent from its stack tip.

The consolidation also repairs defects the merge exposed, listed in #4466: two unguarded
datetime.UTC imports that break the Python 3.10 lane, a PyQt module registry that could no
longer construct the main window, the club-assembly binding and STL/sidecar controls that had
been dropped from the wired tree, and a filelock dependency that would have failed
tests (3.11) at collection.

Reopen this PR if you need its branch; the branch itself is untouched.

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