Skip to content
Draft
137 changes: 102 additions & 35 deletions AGENT_HANDOFF.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,39 @@
> **Update this file with every PR and every push to main.**
> Last updated: 2026-08-11

## 2026-08-11 PR #4281 wind adapter module-budget repair

- The 403-line `wind_strategy_plot_adapter.py` blocker is repaired by moving
request/analysis validation into the private
`_wind_strategy_plot_validation.py` collaborator. The public adapter is now
252 lines and the validator is 213 lines; both are below the mandatory
400-line ceiling.
- The scenario validator accepts the scenario plus one frozen, slotted
expectation object. No production function exceeds four parameters or 50
lines.
- `build_wind_strategy_plot_dataset`, `WIND_STRATEGY_*` exports, validation
messages, variable/stage/category/cohort order, row identity, scalar values,
availability, attributes, and the no-flight-rerun boundary are unchanged.
- This is a local candidate only. Independent review, fresh exact-head
protected CI, unresolved-thread checks, dependency order, and ordinary
publication remain required before merge or release.

## 2026-08-11 reviewed variation parent propagation into wind PR #4281

- Exact remote wind child `247046d55afcad3e6cd4f8029f854856c427f59c`
normally merges exact reviewed variation parent
`3337945699966b63cb5cd8e52d7c3b194315e911` in child-first order. PR base,
stack topology, and both histories remain intact; no rebase, reset, retarget,
force-push, or parent rewrite is used.
- Python/TypeScript scalar-ensemble and wind-strategy plot-adapter behavior is
unchanged while inheriting the parent's variation/export UI, kinetics split,
Ground/Tee parity, workspace/toolstrip, and Ruff-normalized repairs. The sole
feature-code conflict was obsolete monolithic kinetics and is resolved to the
validated parent `pendulum.sample(...)` facade.
- This reconciliation is local only. Independent review, fresh exact-head CI,
unresolved-thread checks, dependency order, and ordinary publication remain
required before merge or release.

## 2026-08-11 reviewed workspace parent propagation into variation PR #4280

- Exact remote variation child
Expand Down Expand Up @@ -156,6 +189,19 @@
history (it was introduced later on a divergent campaign branch), so this
bounded child records that limitation instead of reconstructing it.

## 2026-08-10 Second variation-parent propagation into PR #4281

- Draft PR `#4281` retains branch `feat/4199-wind-scalar-adapter` and base
`feat/4144-variation-export-continuation`. Exact repaired parent head
`b90e5021a59e2081415b51ef29fbed06377bc201` is incorporated through a
normal merge commit without rebase, retarget, force-push, or history rewrite.
- There is no scalar-adapter production/test conflict. Both append-only
handoff/SPEC histories are retained and the adapter contract is unchanged.
- Parent quality success is not child release evidence. Fresh exact-head CI,
review, and all earlier dependencies remain open.
- Reconciled-child evidence is 25 focused D-plane/impact tests plus docs
governance, changed-file size budget, and whitespace checks.

## 2026-08-10 Second workspace-parent propagation into PR #4280

- Draft PR `#4280` retains branch `feat/4144-variation-export-continuation`
Expand All @@ -169,41 +215,32 @@
- Reconciled-child evidence is 25 focused D-plane/impact tests plus docs
governance, changed-file size budget, and whitespace checks.

## 2026-08-10 Exact workspace-parent propagation into PR #4280

Draft PR `#4280` remains on `feat/4144-variation-export-continuation` with
base `feat/4218-toolstrip-workspace`. The normal merge starts from original
child head `f90836e342efc8be624739802375af2876d11e5f` and incorporates exact
published parent head `6717e9e09d507dbc24bedb36177f1cdf0b4fd90b` as
the second parent. No rebase, retarget, force-push, parent rewrite, or draft-
state change is permitted.

The source merge is conflict-free: the child's selected-scatter CSV export,
typed unavailable values, accessible raw tables, linked selection, and focused
PyQt/React visualization modules remain intact alongside the parent's complete
workspace/toolstrip, playback, plot, navigation, Python 3.10, and module-budget
repairs. SPEC 1.14.12 records this combined child release above the unique
parent 1.14.11 entry. Staged review found and the continuation corrected one
release-blocking rerun defect: replacing a study after selecting a later trial
now clears linked selection atomically. Every PyQt public setter validates
against the current trial count, while React clears on result identity change
and shares only bounded selections, so a smaller rerun cannot crash or leave
all new points dimmed.

Verification is green: 37 focused variation GUI/export tests and the complete
Rate/shared-swing/golf-club matrix passes 1,528 tests with two explicit
optional build123d skips; all
546 React tests pass across 90 files, as do TypeScript, ESLint, and the Vite
production build. Exact-parent Ruff, Ruff-format, Black, pinned MyPy 1.13 for
all four changed Python production modules, Bandit, the four-file 500-line gate,
docs, minimum-test, changed-test assertions, detect-secrets fingerprints, and
diff checks pass. CPython 3.10.20 compiles all changed Python files, and 30
compatibility/date-boundary regressions pass. There is no Rust delta from the
exact parent, whose 12-test `swing-core` evidence remains applicable.
Independent staged re-review found no actionable findings after verifying the
atomic result-identity boundary and validated-value widget updates. Protected
exact-head CI and required repository review remain release gates after
guarded publication.
## 2026-08-10 Exact variation-parent propagation into PR #4281

Draft PR `#4281` remains on `feat/4199-wind-scalar-adapter` with base
`feat/4144-variation-export-continuation`. The normal merge starts from
original child `cf52529b1e68479321bb93b1be3d59c77f782008` and incorporates exact
published parent `8bcc49fc4e16e5e43be0b7f0f03c3017d5b79d0c` as its second parent. Do
not rebase, retarget, force-push, rewrite either parent, or change draft state.

The child's matching Python/TypeScript `scalar-ensemble/v1` contract and wind
strategy plot adapter remain additive with the parent's selected-scatter
exports, accessible raw tables, result-local linked selection, complete
workspace/toolstrip, playback, navigation, compatibility, and module-budget
repairs. Both adapters now enforce the same deterministic wind-scenario
boundary: exact per-trial provenance, zero shear and turbulence, seed zero, and
no gusts. SPEC 1.14.13 is the unique combined child entry above parent 1.14.12.

Verification is green across 27 focused Python contract/adapter/selection
tests, the complete Rate/shared-swing/golf-club matrix (`1,549 passed`, two
explicit optional build123d skips), and all 556 React tests across 92 files.
TypeScript, zero-warning ESLint, Vite production build, Ruff, Ruff-format,
pinned MyPy 1.13, Bandit, the exact-parent two-file 500-line budget, docs,
minimum-test, assertions, detect-secrets, diff, and CPython 3.10 compilation
pass. Independent re-review found no actionable findings after checking the
exact provenance derivation and all five deterministic-scenario regressions;
protected current-head CI, unresolved threads, and required repository review
remain release gates.

## 2026-08-10 PR #4280 workspace timestamp propagation

Expand Down Expand Up @@ -289,6 +326,36 @@ that intentionally minimal runtime. Ruff, formatting, pinned mypy 1.13,
documentation governance, and the 400-line budget pass. Exact remote-head
identity and normal publication/descendant propagation remain release gates.

## 2026-08-09 PR #4281 scalar-ensemble parent propagation

Draft PR #4281 remains on `feat/4199-wind-scalar-adapter` with unchanged base
`feat/4144-variation-export-continuation`. Exact corrected #4280 parent
`38ed58cab96842a3007e76a855db83ee2452b8fd` is incorporated by the normal
merge containing this handoff; no branch was rebased, retargeted, force-pushed,
or published by this continuation. The result preserves the complete parent
workspace, Python 3.10 compatibility, and variation-export history together
with #4281's independently owned scalar-ensemble and wind-strategy adapters.

The child supplies matching UI-neutral Python/TypeScript
`scalar-ensemble/v1` contracts with stable RFC3986 composite row identity,
immutable nullable rows, and overall/per-cohort availability. Its wind adapter
retains every actual and perfect-information status and exposes true/estimated
wind, launch/aim, target, landing, miss, cost, and information delta. Impact
variables remain explicitly unavailable because the analysis starts at
prescribed launch. SPEC 1.14.12 records this child source delta separately
from parent versions 1.14.11 and earlier.

Current focused evidence is `49 passed` on Python 3.11 and `49 passed` on real
CPython 3.10.20 with PyQt6/scientific dependencies present. React passes `2
files / 10 tests`, TypeScript, and focused zero-warning ESLint. Ruff
check/format passes the four child Python files; pinned mypy 1.13 passes both
production modules and the corrected wind-adapter test. Documentation
governance, ancestry/SPEC assertions, and final diff checks are required in
this same local merge. Protected CI, review, publication, and descendant
propagation remain separate release gates. The background runner, progress and
cancellation, PyQt6/React strategy/scatter workflow, persistence, and export
wiring remain incomplete and must not be represented as delivered.

## 2026-08-09 PR #4280 parent propagation and SPEC restoration

Draft PR #4280 remains on `feat/4144-variation-export-continuation` with base
Expand Down
21 changes: 19 additions & 2 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,27 @@
| **Owner** | D-sorganization |
| **Primary Language(s)** | Python 3.11+, Rust, JavaScript, TypeScript |
| **License** | MIT |
| **Current Version** | 1.14.17 |
| **Spec Version** | 1.14.17 |
| **Current Version** | 1.14.20 |
| **Spec Version** | 1.14.20 |
| **Last Spec Update** | 2026-08-11 |

## 2. Purpose & Mission

Comprehensive monorepo housing 45+ utility tools for data processing, scientific computing, process engineering, and automation. This is the central tooling hub for the D-sorganization fleet, providing modular engineering calculation tools with PyQt6 GUIs, FastAPI web services, Rust numerical kernels, and a unified launcher with plugin architecture for extensibility.

### 2026-08-11 Wind strategy plot-adapter module-budget repair

- `rate_of_closure.variation.wind_strategy_plot_adapter` remains the public
plot-data facade. Its request/analysis validation is delegated to the private
`_wind_strategy_plot_validation` collaborator so both production modules are
below the mandatory 400-line ceiling.
- The public API, `scalar-ensemble/v1` wire shape and ordering, row identity,
values, typed availability, attributes, validation messages, and contract
prohibiting a flight-physics rerun are unchanged.
- Private wind-scenario validation receives a scenario and one frozen, slotted
expectation object, keeping every production function at or below four
parameters and 50 lines without weakening any precondition.

### 2026-08-11 Kinetics module-budget repair

- The established `rate_of_closure.simulation.kinetics` module remains the
Expand Down Expand Up @@ -2914,13 +2927,17 @@ Active development with stable core, continuous tool expansion, and web API in p

| Date | Version | Changes |
| ---- | ------- | ------- |
| 2026-08-11 | 1.14.20 | refactor(rate-of-closure, #4281): replace the private wind-scenario validator's five loose parameters with a scenario and one frozen, slotted expectation object; preserve validation order, messages, behavior, public API, and wire output while satisfying the four-parameter and 50-line production-function contracts. |
| 2026-08-11 | 1.14.19 | refactor(rate-of-closure, #4281): split request/analysis validation from the 403-line wind-strategy plot adapter into a private collaborator, leaving 252-line and 186-line production modules below the mandatory 400-line ceiling while preserving the public API, scalar-ensemble wire order, row identity and values, availability, attributes, validation messages, and no-flight-rerun boundary. |
| 2026-08-11 | 1.14.18 | merge(rate-of-closure, #4280 #4281): normally merge exact reviewed variation-export parent `3337945699966b63cb5cd8e52d7c3b194315e911` into exact remote wind scalar-adapter child `247046d55afcad3e6cd4f8029f854856c427f59c` with child-first parent order and no history rewrite; preserve matching Python/TypeScript `scalar-ensemble/v1` provenance, availability, deterministic-scenario, and wind-strategy plot-adapter behavior while inheriting the parent variation/export UI, kinetics split, Ground/Tee parity contracts, workspace/toolstrip repairs, and protected Ruff normalization; resolve the obsolete monolithic kinetics overlap to the validated parent `pendulum.sample(...)` facade, retain both append-only documentation histories, and require independent review plus fresh exact-head protected CI before publication. |
| 2026-08-11 | 1.14.17 | merge(rate-of-closure, #4279 #4280): normally merge exact reviewed workspace/toolstrip parent `ccd0e026c580c93038fdf5c59d5d452a85ba27a0` into exact remote variation-export child `668ba96746f79f7a12e8092161bd610054197f58` with child-first parent order and no history rewrite; preserve selected-scatter CSV parity, typed unavailable outcomes, bounded accessible tables, linked selection, and all-trial arc analysis while inheriting the parent kinetics split, Ground/Tee parity contracts, and complete workspace/toolstrip behavior; resolve the obsolete monolithic kinetics overlap to the validated parent façade and normalize seven duplicate automation edits to exact protected Ruff 0.14.10 parent blobs while keeping their commit reachable; require independent review and fresh exact-head protected CI before publication. |
| 2026-08-11 | 1.14.16 | merge(rate-of-closure, #4279): ordinarily reconcile exact local workspace/toolstrip head `0b22c401a26c31441a599d8d9b39de123706e7ea` with divergent remote automation head `61fe2d556a5413e525d958612ccfd57e65b8d5a2`, preserving every commit and the existing stack topology; recognize 15 already-identical parent paths, normalize seven incompatible formatting edits back to protected Ruff 0.14.10 output, and resolve the sole obsolete pre-split kinetics conflict in favor of the current `pendulum.sample(...)` façade implementation; preserve workspace, toolstrip, visibility, navigation, playback, independent plots, physics, frames, units, schemas, and public contracts; require independent review and fresh exact-head protected CI before publication. |
| 2026-08-11 | 1.14.15 | merge(rate-of-closure, #4203 #4279): normally propagate exact published launch-registry parent `3796b49e40b677fbac4e05739f8be49f905df2cb` into exact workspace/toolstrip child `7806a16f58e1c6999d32f0127a187fbb21f839a1` without rewriting stack topology; inherit only four static NumPy-array casts while preserving runtime arrays, physics, frames, units, public contracts, workspace behavior, and UI behavior; require fresh current-head protected CI and review. |
| 2026-08-11 | 1.14.14 | merge(rate-of-closure, #4203 #4279): normally propagate exact launch-registry parent `0216a547aa79727091a2939b96e779e8ddbd7304` into the workspace/toolstrip child without rewriting stack topology; preserve the child's workspace, toolstrip, module-visibility, navigation, playback, and independent-plot behavior while inheriting the parent's identity-preserving kinetics split and pinned formatting repair; require fresh current-head protected CI and review. |
| 2026-08-11 | 1.14.14 | fix(rate-of-closure, #4203): close four hosted MyPy `no-any-return` findings from the kinetics size split with explicit NumPy-array return narrowing at force-norm, RK4 concatenation, and app-frame projection boundaries; preserve exact runtime arrays, physics, frames, units, public contracts, and stack order. |
| 2026-08-11 | 1.14.13 | refactor(rate-of-closure, #4203): split the 646-LOC swing-kinetics monolith into an identity-preserving 222-LOC public façade, 205-LOC pure-dynamics module, and 131-LOC immutable-series contract; preserve physics, frames, fixtures, UI behavior, and established imports while satisfying the changed-file 500-LOC gate. |
| 2026-08-11 | 1.14.12 | style(rate-of-closure, #4203): apply repository-pinned Ruff 0.14.10 formatting to the eight files reported by current-head CI without changing physics, behavior, public contracts, schemas, UI layout, or stack order. |
| 2026-08-10 | 1.14.14 | feat/fix(wind variation, #4144 #4199 #4280 #4281): normally propagate repaired variation parent `b90e5021a59e2081415b51ef29fbed06377bc201` into the wind scalar-adapter child without production/test conflict or history rewrite; preserve matching Python/TypeScript `scalar-ensemble/v1` provenance, availability, deterministic-scenario, and wind-strategy plot-adapter contracts; verify the reconciliation with 25 focused D-plane/impact tests and governance, size, and whitespace gates. |
| 2026-08-10 | 1.14.13 | feat/fix(variation, #4144 #4218 #4279 #4280): normally propagate repaired workspace parent `61b7f48b5aeb7d57246b4963da3df086e79cbe15` into the variation-export child without feature-code conflict or history rewrite; preserve selected-scatter CSV parity, typed unavailable outcomes, bounded accessible tables, linked selection, all-trial arc analysis, and the complete workspace/toolstrip behavior; verify the reconciliation with 25 focused D-plane/impact tests and governance, size, and whitespace gates. |
| 2026-08-10 | 1.14.12 | fix(rate-of-closure, d-plane, #4202 #4203 #4279): normally propagate exact repaired launch-registry parent `12dd76a8dbcc106c4683f2f2e53076f8dc6f1b76` into the workspace/toolstrip child without rewriting the stack; inherit explicit ndarray result boundaries while preserving numerical semantics, frames, schemas, and UI behavior; verify the reconciled tree with 25 focused D-plane/impact tests and governance, size, and whitespace gates. |
| 2026-08-10 | 1.14.11 | feat/fix(rate-of-closure, #4203 #4218 #4279): normally propagate exact launch-registry parent `31cbc007d4c85b5479b7cd0fb0969124eab2af67` into the workspace/toolstrip child while preserving granular playback, path trails, module visibility, and independent plot controls; reuse the parent's single persisted impact-layer mapping and canonical navigation constants without duplicating state; and retain its focused triple-pendulum, plotting-catalog, and primary-navigation repairs. |
Expand Down
Loading
Loading