Skip to content

feat(rate-of-closure): matched PyQt6/React capability optimization workspaces - #4294

Merged
dieterolson merged 9 commits into
feat/4197-capability-flight-evaluatorfrom
feat/4197-capability-optimization-ui
Aug 9, 2026
Merged

feat(rate-of-closure): matched PyQt6/React capability optimization workspaces#4294
dieterolson merged 9 commits into
feat/4197-capability-flight-evaluatorfrom
feat/4197-capability-optimization-ui

Conversation

@d-sorgcodexagent

@d-sorgcodexagent d-sorgcodexagent Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Third and final implementation slice of the epic #4197 capability stack: the end-user Shot Optimizer workspaces in PyQt6 and React, stacked on the flight evaluator (#4289), which is stacked on the observation/cancellation contract (#4283).

  • Strict cross-runtime capability-optimization-workflow/v1 authoring, save/load, and validation (single club, three launch parameters, sourced fixed spin, target, objective, budgets, deterministic seed).
  • Off-UI-thread execution in both clients (QThread / module Worker) with truthful attempted-evaluation progress, cooperative cancellation that never publishes partial results, and input-change invalidation.
  • Every attempted sample retained in scalar-ensemble/v1 with complete/no-impact/failed cohorts; ranked alternatives; stage-qualified selectable scatter axes; paired-finite/unavailable accounting; bounded 25-row raw paging; spreadsheet-safe lossless CSV and stable JSON export.
  • Saved v1 workspace layouts now reveal newly registered modules without undoing prior hide/show choices.
  • UI copy states the v1 boundary truthfully: still-air carry to first ground crossing; no wind, bounce, roll, or total distance.

Recovery history

This slice was left uncommitted by an interrupted session whose handoff claimed green gates. Those claims were re-verified and did not hold; the following were repaired before and after publication:

Fix Commit
Ruff formatting + import-sort failures in 3 files ab650a346
mypy call-arg: positional-after-star bounds unpacking → typed spec factories ab650a346
TypeScript: untyped vi.fn mock → vi.fn<CapabilityRunner> 396cfa4c0
Eager panel import pushed main Vite chunk to 511 kB → lazy-loaded behind Suspense ab650a346
Hosted delta-mypy rejected **dict[str, float] splat into integer fields → explicit typed kwargs 101020b5b

Verified gates (local, head dfdf31546)

  • Python: 1423 passed, 0 skipped (808 tests/rate_of_closure + 615 src/shared/python/swing_sim), re-run after the final source change.
  • React: 102 files / 619 tests passed; tsc --noEmit clean; zero-warning ESLint; 187-module Vite build, main chunk 474.32 kB with no size warning.
  • Ruff check + ruff format --check: clean on all changed Python files.
  • CI-equivalent mypy 1.13 (--ignore-missing-imports --follow-imports=skip): clean on all 10 changed src files.
  • Changed-only 500-LOC budget vs parent c280407d4: 0 violations; git diff --check clean.
  • Hosted quality-gate: pass on this head.

Stack

feat/4199-wind-workflow → observer #4283 → evaluator #4289this PR. Do not retarget, rebase, or merge ahead of parents. Epic #4197 remains open for protected CI, ordered review/merge, and downstream parity.

Note on the non-required tests (3.10) lane: requires-python is >=3.11, and branch protection requires only quality-gate and tests (3.11). A StrEnum ImportError in the 3.10 lane is a stale-matrix artifact, not a defect in this diff — see the correction on #4280.

🤖 Generated with Claude Code

dieterolson and others added 3 commits August 8, 2026 10:20
…n workspaces

Expose the qualified Waterloo/Penner capability optimizer as a primary
Shot Optimizer module in both clients: strict cross-runtime
capability-optimization-workflow/v1 authoring and persistence,
off-UI-thread execution with truthful progress and cooperative
cancellation, complete scalar-ensemble/v1 cohort retention, ranked
alternatives, stage-qualified scatter axes, bounded raw-row paging,
spreadsheet-safe CSV, and stable JSON. The React panel is lazy-loaded
so the main Vite chunk stays under the 500 kB warning threshold, and
saved v1 layouts reveal newly registered modules. Handoff documents are
updated in this implementation commit per fleet policy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t reveal

Add PyQt workflow/worker/GUI suites and React workflow, worker-client,
run, panel, and results tests for the Shot Optimizer slice; extend
primary-navigation coverage so saved layouts reveal newly registered
modules and the new tab registers exactly once in both clients.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… gates

Add the SPEC 1.14.6 change-log row, document the end-user workflow in
the capability optimization spec, and update the campaign handoff with
the recovered slice and its verified gate evidence.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@d-sorgcodexagent
d-sorgcodexagent Bot requested a review from dieterolson as a code owner August 8, 2026 17:22
No material source change; handoff pointer update only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
dieterolson and others added 4 commits August 8, 2026 10:30
…cess

The dict-splat construction of CapabilityWorkflowInputs failed the
hosted delta-mypy gate because **dict[str, float] cannot be proven
against the integer fields. Build the snapshot with explicit typed
keyword arguments instead; behavior is unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Handoff update for implementation commit 101020b per fleet policy;
no source change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The prior note wrongly framed the 3.10 StrEnum ImportError as a
stack-wide defect to fix in source. requires-python is >=3.11 and only
quality-gate and tests (3.11) are required checks, so the 3.10 lane is
a stale-matrix artifact. No source change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The observation contract has only complete/no_impact/failed members, so a
horizon nonconvergence is normalized into failed. Reporting a bare
"failed N" reads as numerical breakage when the retained reason says the
flight simply did not reach the ground inside the configured horizon.
Both clients now append the retained reason codes with counts, which is
data the adapter already carries per row.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brings in the evaluator branch descending-launch and delta-mypy repairs.
Resolves the two documentation conflicts by keeping both slices: SPEC.md
retains the 1.14.6 workspace row above the amended 1.14.5 evaluator row
at header version 1.14.6, and the tool handoff keeps the workspace
completion record ahead of the evaluator repair entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dieterolson
dieterolson merged commit 43e13bb into feat/4197-capability-flight-evaluator Aug 9, 2026
12 checks passed
d-sorgcodexagent Bot pushed a commit that referenced this pull request Aug 9, 2026
The per-slice stacked-branch cautions described the stack while it was
open and now read as active constraints, so state plainly that #4283,
#4289, and #4294 are merged onto this branch, how they were folded, what
was verified here (1426 Python, 624 React), and that the incomplete CI
matrix reflects 25 of 28 org runners being offline rather than failures.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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