Pendulum: Add Drift-Transfer Diagnostics - #4411
Conversation
|
Superseded by #4450 (CONS-A4), which merges this PR together with #4080 into one merge boundary. Containment verified by ancestry, not by title: This PR's content is carried across byte-for-byte and required no changes. It merged into #4080 with zero conflicts, and all 10 of its files were taken from this branch's own head rather than from the merge result — this branch forked from current
Verified on the consolidated branch: lint clean and all 5 changed Auto-merge was disarmed here before #4450 was opened so this cannot merge itself and duplicate the content. |
Pull request was closed
…diagnostics (#4450) CONS-A4. Consolidates the last two remaining open Tools PRs into one squash commit. Supersedes and closes: * #4080 jules-12248824925126103807-8eacfe8f - completist data audit + report * #4411 research/shoulder-velocity-drift-transfer - pendulum drift-transfer Containment verified by ancestry before either was closed: verify_coverage.sh reported covered=2 NOT-covered=0 against consolidated/docs-pendulum-2026-08-13, so both head refs are true ancestors of this commit. Two unrelated subsystems kept in one PR because they provably do not interfere - #4411 merged into #4080 with zero conflicts and their final file sets are disjoint - and because every extra PR costs ~28 workflow runs and ~4 self-hosted fleet slots, which is the problem this consolidation drive exists to fix. From #4411 (closes #4406, supports D-sorganization/UpstreamDrift#8551): a model-neutral transfer-signal contract with exact drift/control grip-force closure checks, phase-window work/braking/impulse metrics, mixed-objective Pareto ranking, a qualified double-pendulum adapter, and a PyQt Drift Transfer tab that fails closed for unqualified model tiers. Carried across byte-for-byte from its own head, which forked from current main and so is free of the formatting churn #4080 swept through src/pendulum_simulator/. From #4080: regenerated completist scan data (5 .jules/completist_data/*.txt), Completist_Report_2026-08-02.md, 6 new Issue_0NN_*.md, 4 renames, the COMPLETIST_LATEST.md refresh, and - the most immediately valuable part - two fleet-load fixes hoisting cheap `if:` pre-filters onto the pick-runner jobs of Jules-Issue-Mention-Handler.yml and PR-Comment-Responder.yml, so a non-matching comment costs zero d-sorg-fleet capacity instead of occupying two runners to be skipped one job later. Reverted from #4080: * 90 deleted documentation files restored - 19 dated historical Completist_Report_*.md (2026-03-08..2026-07-23), 7 hand-written docs/assessments/issues/ISSUE_*.md, 57 generated Issue_NNNN_*.md, and docs/development/professional-scada-epic.md. An agent regression, not tool behaviour: the PR body describes no deletion, and scripts/analyze_completist_data.py has no unlink/rmtree/remove - it only globs ISSUES_DIR to deduplicate and count. The regenerated set also restarts numbering at Issue_005 instead of continuing from Issue_2027, so it is not a superset of what it removed. * A stale-base removal of the two Bolt learnings main gained from #4071/#4176. * ~290 files of pre-commit formatting churn (commits ba3730a, 35bec2d, c70755b). It was produced by a ruff build disagreeing with the CI-pinned 0.14.10 - 281 of 299 changed .py files failed ruff format --check under the pin - it displaced `# noqa` comments into uselessness (9 live F841 errors, a UP017 rewrite, 2 lost SLF001 suppressions), and it reformatted ruff-excluded trees. 280 of 295 were proven content-neutral by format-normalisation before reverting; the other 15 by provenance. * 6 committed .codex-worktrees/ gitlinks removed (unreachable on any remote). Net: 323 files -> 29; 299 changed .py files -> 5. Closes #4406 Verification: ruff check + ruff format --check clean under the CI-pinned 0.14.10; 0 files fall inside CI's gated set since the only changed .py are the 5 under the excluded src/pendulum_simulator/ tree, checked anyway and clean; double_pendulum_golf.transfer_strategy imports cleanly; no conflict markers; no bare `from datetime import UTC`; zero gitlinks. #4411's pytest run could not be completed locally - pytest-qt aborts with ImportError on QtCore, the known PyQt6 6.10 / Qt6Core.dll fault on that machine, not a defect.
Closes #4406
Supports D-sorganization/UpstreamDrift#8551.
Outcome
Verification