Skip to content

feat(extension): the vetted templates ride the MadNLP-default solve surface (#1676) - #1702

Merged
aarontrowbridge merged 3 commits into
mainfrom
opencode/issue-1676-solve-surface
Oct 4, 2026
Merged

aarontrowbridge merged 3 commits into
mainfrom
opencode/issue-1676-solve-surface

Conversation

@aarontrowbridge

Copy link
Copy Markdown
Member

Closes #1676.

The solve surface rides MadNLP — verified end-to-end through the gate

Mirror-env gate smoke (registry Piccolo 2.2.0 + DTO 0.11.0, the live env untouched): amico run tier=vetted PASSED including the import scan admitting import MadNLP — run r20261003-103343Z-81d3: F = 0.9987, 61 AMICODE_ITER + 61 AMICODE_PULSE emits (monotone counters — the mode filter proven), atomic result.toml, 11 iteration frames, FINISHED clean. Bonus live legs: cooperative STOP under MadNLP verified; RelaxBound proven load-bearing — MadNLP's default MakeParameter prunes fixed vars from the solver vector, so the raw user callback must self-manage RelaxBound or the live plot emits zero pulses; the template now does.

What landed

  • Both vetted templates ride SOLVER = :default (MadNLP via the DTO default, no options struct; print_level = 0 for the reversed log scale); the :ipopt arm kept verbatim; :altissimo untouched; the pasqal-mis template's dead pre-0.10 re-home (Piccolo.Callbacks) fixed in passing. The 60-iter budget stays (audit-safe; head-to-head MadNLP median 0.99958 vs Ipopt 0.99882 on the class).
  • The vendored problemspec schemas gain the madnlp backend enum (byte-verbatim from Piccolo 2.2.0's reflection); the TS hashing/exec defaults for OMITTED backends align ipopt→madnlp (restores cross-language hash identity with Piccolo's parse.jl).
  • The import-scan support set carries MadNLP (registry + authoring defaults — session prep refreshes automatically).
  • Q74 amended everywhere it appears: the Inspector was never ipopt-only — its telemetry channel was; the contract docs state the raw-callback architecture for both backends, the regular-mode filter note, and the RelaxBound requirement.

Suites

extension 3709 tests green (incl. 9 new pins); schema 301 green; amico-run 2107 green on the touched surfaces (the flaky upgrade-* timing tests fail identically on the pristine base — verified by stash).

Director follow-ups (from the return)

The LIVE shipped-env bump recipe is proven in the mirror (Project.toml edits + instantiate; the explicit MadNLP [deps] entry is REQUIRED — transitives don't satisfy import under --project) — director-timed against Aaron's live solves. Two pre-existing-broken tier-1 registry templates (Piccolo.Callbacks re-home) noted for a separate release-train slice.

…urface (#1676)

DirectTrajOpt 0.11 flipped the no-kwarg solve! default to MadNLP
(QualityFunctionUpdate barrier; the #155 restoration audit — 0.99999996
@ 60 iters on the previously-failing seed class), Piccolo 2.2 inherits
it. The solve surface follows:

- pulse-designer solve.jl: SOLVER = :default (MadNLP) first — solver-
  agnostic construction, no options struct; the 60-iter budget stays
  (audit-safe); AMICODE_ITER rides a raw MadNLP.AbstractUserCallback via
  intermediate_callback, UserCallbackRegular-filtered (restore/robust
  fire without advancing the counter); explicit RelaxBound (a raw user
  callback manages its own fixed-variable treatment); :ipopt arm kept
  verbatim (IpoptOptions + the raw callback channel — Ipopt-only kwarg);
  version probe bumped to Piccolo 2.2 / DTO 0.11 (the MadNLP default).
- pasqal-mis solve.jl: same dual-channel MadNLP construction + the
  DirectTrajOpt.Callbacks fix (Piccolo.Callbacks was the pre-0.10 re-
  home — dead since 2.1) + the version probe.
- Q74 amended in the contract docs: the AMICODE_ITER channel is
  backend-native (MadNLP raw user callback / Ipopt raw callback), the
  Inspector is solver-agnostic; mode-filter note everywhere the ipopt-
  only fact lived (hub-AGENTS.md, ledger-bridge, solve_template*.jl).
- gate solver expectations: backend enum += madnlp (both vendored
  problemspec schemas, matching the Piccolo 2.2 reflection); omitted-
  backend hashing + ledger defaults flip ipopt→madnlp (parse.jl parity —
  the cross-language problem_hash diverged on exactly those specs);
  MadNLP joins the import-scan support set (authoring DEFAULT_SUPPORT +
  registry.toml) + the pack corrector integrity refresh.
@coderabbitai

coderabbitai Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3384088e-e35e-4124-854c-50869c7cf8ce
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…8f209a (v2.2.0) — the byte-verbatim source supersedes the hand-set enum; sidecar pinned to the v2.2.0 commit
…istry-418 @1c6514a (the 2.2.0 emission) + update the oss-variant guard to the 2.2.0 public-kind contract — the demotion made the native integrator tier public (Piccolo's drift.jl in lockstep), PRIVATE_ONLY gains adjoint_robustness, the offered-kind equality assertions replace the dead private-integrator-kinds concept
@aarontrowbridge
aarontrowbridge merged commit 2e5ad75 into main Oct 4, 2026
11 of 12 checks passed
@aarontrowbridge
aarontrowbridge deleted the opencode/issue-1676-solve-surface branch October 4, 2026 22:39
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.

MadNLP through the solve surface: vetted template + amico-run gate + Inspector contract (Q74 amended)

1 participant