You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Problem — Free-time in the stack has three formulations of the same physics with wildly different numerics: per-knot free Δt decision variables (the N-variable block — measured stalls, exploitation, det drift), the all-equal constraint (uniform mesh, free duration — correct semantics, but parameterized as N equality-chained variables), and pinned bounds. The measured evidence (Piccolo.jl#317): pinned-but-variable stalls at F=0.65 where a derived-timestep engine (Δt never a decision variable; duration as ONE coordinate on a fixed rational weight vector) solves the identical problem to 1e-12; the hub's bordered Jacobian adds a measured 1.05–1.9× wall (K-stable); a complete validated prototype exists (GriddedDiscretization, 451-test suite independently reproduced). Approach — Integrate time rescaling (TR) as a first-class time mode in three phases, ordered to be collision-free with the open-core split (slices 3b–3e own the Piccolo-template + Piccolissimo-integrator refactor queue; this track owns the NT data layer + DTO evaluator/integrator plumbing):
Phase 1a — NamedTrajectories: derived timestep rows. A trajectory may carry a monotone warp t = w(s) with a small parameter vector (v1: GlobalScale, w(s)=T·s on uniform rational weights). The timestep component stays present (get_times, plotting, rollouts keep working) but becomes DERIVED: excluded from the decision vector, recomputed on unpack (sync_timesteps!), never optimizer data. This is the prototype's §5.4 "derived pinned rows" pattern — it kills the N-variable block AND the error-tuning channel by construction, and makes the AL KKT-plateau stall on free-Δt structurally unreachable.
Phase 1b — DTO plumbing. Integrators read derived Δt; the defect Jacobian/Hessian gain the warp-parameter column (exact entries w_n·∂Φ/∂Δt_n — a dense border column, O(Nb) measured-cheap); regularizer weights use derived Δt with the single ∂J/∂T chain term (kills the explicit per-knot ∂J/∂Δt scatter); TimeConsistencyConstraint, TimeStepsAllEqualConstraint, and the auto-Δt≥0 bound become obsolete under derived mode; MinimumTimeObjective → D·T exactly.
Phase 2 — Piccolo template surface.timesteps_all_equal=true REMAPS to Phase-1 derived-TR: identical documented semantics (uniform mesh, free duration), better structure (one variable, no degenerate block). Fixed-T = derived with T as data. Bounded per-knot stays as the free-time default per #317. The three-mode statement (#317) becomes the kwarg surface.
Phase 3 — Altissimo. The warp column as a global reduction (supported pattern, KnotLayout halo unchanged for uniform mesh); matrix-free JVP/VJP/HVP gain the T-slot via the exact chain rule w_n·∂/∂Δt_n.
Amicode side (parallel, cheap): skills carry the three modes + TR terminology (landed: armonissima#75/#79); the produced template switches to pinned-or-TR (amicode#613); formulation vocabulary gains time_mode: rescaled.
Acceptance Criteria
Phase 1a: trajectory with a warp exposes derived Δt rows; vec(traj) excludes them; unpack! + sync_timesteps! restore consistency; all existing NT consumers (get_times, plotting, rollouts) unchanged on the derived rows
Phase 1b: a 1q unitary problem solves end-to-end through the DTO evaluator with the warp as the only free time quantity; JVP/VJP parity vs FD including the T-column; the drift-dominated benchmark converges free-T where per-knot free-Δt stalls (the 0.65-vs-1.0 evidence reproduced in-stack)
Phase 2: all-equal problems produce derived-TR construction (no Δt decision variables; one duration variable); bit-parity of objective/Jacobian values at equal T
F_pre convergence-suite parity maintained (fidelity_regression suite green)
DTO: integrator FD-parity incl. the T-column; #172-pending constraint suite untouched; fidelity_regression as the parity gate
Prototype as oracle: GriddedDiscretization.jl (branch dev/time-dependent) is the reference implementation — port semantics, not code, where licenses/structure demand
Key Decisions
Phase order 1a → 1b → 2 → 3 chosen because NT is outside the open-core split's refactor queue (collision-free), and each phase is independently mergeable behind defaults
GlobalScale only in v1; PiecewiseLinearWarp interface lands with it (prototype-tested) but is not wired into the NLP
The all-equal constraint is NOT deleted in Phase 2 — it remaps; its documented semantics (#317) are preserved
Piccolo.jl#317 (the three-mode semantics), DirectTrajOpt.jl#145 (default Δt window — pre-derived guard), #464 (the AL stall this cures structurally)
ADR-0001/0008/0009/0010/0011 (Piccolissimo-side conventions for Phase 3)
Source
Campaign: piccolissimo-matrixfree-autodev (session-20260827); user directive 2026-08-28: "figure out how best to integrate the new time rescaling and then do it"
Important
Problem — Free-time in the stack has three formulations of the same physics with wildly different numerics: per-knot free Δt decision variables (the N-variable block — measured stalls, exploitation, det drift), the all-equal constraint (uniform mesh, free duration — correct semantics, but parameterized as N equality-chained variables), and pinned bounds. The measured evidence (Piccolo.jl#317): pinned-but-variable stalls at F=0.65 where a derived-timestep engine (Δt never a decision variable; duration as ONE coordinate on a fixed rational weight vector) solves the identical problem to 1e-12; the hub's bordered Jacobian adds a measured 1.05–1.9× wall (K-stable); a complete validated prototype exists (GriddedDiscretization, 451-test suite independently reproduced).
Approach — Integrate time rescaling (TR) as a first-class time mode in three phases, ordered to be collision-free with the open-core split (slices 3b–3e own the Piccolo-template + Piccolissimo-integrator refactor queue; this track owns the NT data layer + DTO evaluator/integrator plumbing):
Phase 1a — NamedTrajectories: derived timestep rows. A trajectory may carry a monotone warp
t = w(s)with a small parameter vector (v1:GlobalScale, w(s)=T·s on uniform rational weights). The timestep component stays present (get_times, plotting, rollouts keep working) but becomes DERIVED: excluded from the decision vector, recomputed on unpack (sync_timesteps!), never optimizer data. This is the prototype's §5.4 "derived pinned rows" pattern — it kills the N-variable block AND the error-tuning channel by construction, and makes the AL KKT-plateau stall on free-Δt structurally unreachable.Phase 1b — DTO plumbing. Integrators read derived Δt; the defect Jacobian/Hessian gain the warp-parameter column (exact entries w_n·∂Φ/∂Δt_n — a dense border column, O(Nb) measured-cheap); regularizer weights use derived Δt with the single ∂J/∂T chain term (kills the explicit per-knot ∂J/∂Δt scatter);
TimeConsistencyConstraint,TimeStepsAllEqualConstraint, and the auto-Δt≥0 bound become obsolete under derived mode;MinimumTimeObjective→D·Texactly.Phase 2 — Piccolo template surface.
timesteps_all_equal=trueREMAPS to Phase-1 derived-TR: identical documented semantics (uniform mesh, free duration), better structure (one variable, no degenerate block). Fixed-T = derived with T as data. Bounded per-knot stays as the free-time default per #317. The three-mode statement (#317) becomes the kwarg surface.Phase 3 — Altissimo. The warp column as a global reduction (supported pattern, KnotLayout halo unchanged for uniform mesh); matrix-free JVP/VJP/HVP gain the T-slot via the exact chain rule w_n·∂/∂Δt_n.
Amicode side (parallel, cheap): skills carry the three modes + TR terminology (landed: armonissima#75/#79); the produced template switches to pinned-or-TR (amicode#613); formulation vocabulary gains
time_mode: rescaled.Acceptance Criteria
vec(traj)excludes them;unpack!+sync_timesteps!restore consistency; all existing NT consumers (get_times, plotting, rollouts) unchanged on the derived rowsTesting Decisions
Key Decisions
GlobalScaleonly in v1;PiecewiseLinearWarpinterface lands with it (prototype-tested) but is not wired into the NLPPrior Art
Source