Skip to content

feat(rate-of-closure): add application toolstrip and independent plot workspaces - #4279

Closed
d-sorgcodexagent[bot] wants to merge 18 commits into
feat/4181-launch-monitor-registryfrom
feat/4218-toolstrip-workspace
Closed

feat(rate-of-closure): add application toolstrip and independent plot workspaces#4279
d-sorgcodexagent[bot] wants to merge 18 commits into
feat/4181-launch-monitor-registryfrom
feat/4218-toolstrip-workspace

Conversation

@d-sorgcodexagent

Copy link
Copy Markdown
Contributor

Summary

  • add a UI-neutral 17-command File/View/Tools registry, strict versioned workspace documents, schema migration, and atomic filesystem persistence
  • add matched PyQt6 and React toolstrips with persistent module visibility/order, theme and shortcut surfaces, and direct Impact/Swing/Flight navigation
  • give every PyQt6 and React managed plot its own canvas, zoom/autofit state, wheel zoom, and independently movable or hideable legend
  • make narrow PyQt plot workspaces reflow to one column and wrap engineering plot titles
  • make swing replay deterministic with Restart, replay-from-end, loop, granular 0.05x-4.00x speed, and an opt-in trail that no longer obscures the animation
  • refactor oversized application/view modules to the repository's 400-line file and 50-line function limits
  • update the Rate-of-Closure campaign handoff with current validation and the new ground/parity audit epics

Why

The prior workbench reused a single selected plot, left zoom/autoscale and legend control ambiguous, and drew the entire swing path during playback. The application shell also lacked one discoverable, cross-client command surface and a strict persistence boundary. These defects made comparison workflows hard to inspect and allowed client behavior to drift.

User impact

Users can now keep multiple plots visible, tune each plot independently, restore fitted axes, move or hide legends, and replay swing animations reliably without a permanent path dominating the frame. PyQt6 and React expose the same application-level command IDs and module-management concepts. Incomplete File adapters remain visibly disabled with reasons instead of pretending to save partial state.

Validation

  • Python/PyQt/shared swing suite: 890 passed, 1 expected skip (optional swing_core wheel), 15 existing warnings
  • React Vitest: 89 files / 545 tests passed
  • ESLint: zero warnings
  • TypeScript: passed
  • Vite production build: passed, 166 modules transformed
  • Ruff, Black, targeted mypy, and git diff --check: passed
  • changed production Python: every file <=400 lines and every function <=50 lines
  • desktop inspection: independent vertically stacked canvases, wrapped titles, first-pane zoom at 125% while second remains 100%, working Auto Fit, and independent legend controls

Tracking

Implements the current toolstrip/plot/playback slice of #4218, #4224, and #4225.

The read-only ground and cross-client audits are tracked separately in #4267 and #4260. This PR does not claim to implement the qualified bounce/roll solver or close those epics.

Stack

This draft targets feat/4181-launch-monitor-registry / PR #4203. It must not be merged ahead of its parent, and protected checks/reviews remain authoritative.

@d-sorgcodexagent

Copy link
Copy Markdown
Contributor Author

CI follow-up: the initial quality-gate failure was isolated to Ruff formatting one renderer return statement; lint and behavior were already green. Commit 3f587cc applies the formatter-only change. Focused simulation/screw tests pass 52/52, and Ruff lint/format, Black, mypy, and diff integrity pass locally. New protected checks are now authoritative.

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

⚠️ SPEC.md Update Required

Source files were modified in this PR but SPEC.md was not updated.

Per the Specification-Driven Development Policy:

  • Any PR that adds, removes, or changes functionality must update SPEC.md
  • Update the relevant sections (features, architecture, tests, dependencies, etc.)
  • Bump the Spec Version if making substantive changes

To resolve:

  1. Update SPEC.md to reflect your changes, OR
  2. Add the spec-exempt label if this PR genuinely doesn't affect the spec (e.g., pure refactor with no behavior change)

This check is enforced by the spec-check CI workflow.

@d-sorgcodexagent

Copy link
Copy Markdown
Contributor Author

2026-08-10 repaired launch-registry parent propagated normally

Exact repaired #4203 head 12dd76a8dbcc106c4683f2f2e53076f8dc6f1b76 is now carried into this unchanged-base draft through merge commit 61b7f48b5aeb7d57246b4963da3df086e79cbe15 (parents: prior child 6717e9e09d507dbc24bedb36177f1cdf0b4fd90b, then repaired parent). No rebase, retarget, force-push, or history rewrite occurred.

The merge tree had no feature-code conflict; only the four append-only handoff/SPEC surfaces required semantic reconciliation. Evidence after reconciliation: 25 focused D-plane, impact-contract, impact-kinematics, and impact-scene tests passed; docs governance, changed-file-size, and whitespace gates passed. Exact parent #4203 quality gate was green before this propagation.

This PR remains draft. Fresh current-head protected CI, review, and dependency-order gates are required before any merge. Downstream children must receive this head only by later normal parent-first propagation.

@d-sorgcodexagent
d-sorgcodexagent Bot marked this pull request as ready for review August 11, 2026 18:59
…8-toolstrip-workspace

# Conflicts:
#	AGENT_HANDOFF.md
#	src/rate_of_closure/AGENT_HANDOFF.md
@dieterolson

Copy link
Copy Markdown
Collaborator

Consolidated into #4410. Closing to eliminate CI runner load.

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