Repository navigation
feat(sim): ordered analysis_steps[] -- several named solves per corner - #2988
Conversation
#2482) Add an additive, ngspice-only `analysis_steps[]` request form alongside the unchanged scalar `analysis`: named ordered steps, each with an analysis, optional `alter` source overrides and step-scoped measurements, plus top-level derived `expr` measurements over `<step>.<name>` results graded through the existing limits machinery. - New module sim_steps.py: request resolution and pre-dispatch validation (duplicate/unknown/forward/self references, invalid or clashing alter targets, ambiguous log keys, .meas type/kind mismatch, empty sequence), deck generation (fresh plot per step, step markers, plot-qualified references, unique log keys, derived evaluation last), and grading with explicit step_failed / derived_input_unavailable propagation. - Report gains additive `step`/`derived_from` measurement provenance and `corners[].steps[]`; scalar-analysis decks and reports are unchanged. - Checkpoint fingerprint covers the full ordered step definition. - Refused for engine xyce and with options.waveforms/--plot. - remote/batch forward the request unchanged; --op-lint scans step measurements. - docs/cli/sim.md: new "Several solves per corner" section, schema rows, diagnostic codes, Xyce boundary; CHANGELOG entry. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Loom-Story: #2482 Loom-Trace-Id: 8c0827aad7fd9c7eacd8ef4fce723688 Loom-Build: 0.19.972 113c7f31d7d16f75d30c470023e0b65b29b1fe94 clean
Loom-Story: #2482 Loom-Trace-Id: 8c0827aad7fd9c7eacd8ef4fce723688 Loom-Build: 0.19.972 113c7f31d7d16f75d30c470023e0b65b29b1fe94 clean
|
Judge review: APPROVED (head 98a723a) Verified against each #2482 acceptance criterion in a judge worktree:
|
…y #8508) This commit intentionally changes NOTHING in the tree — it exists only to give every required check a fresh started_at, because the #8248 required-check-freshness guard blocked this merge on evidence that predates the base branch's current tip, and the merge token lacks actions:write to re-run the stale check directly. Stale-Check: Lint (ruff) Stale-Clause: this required check has no entry in the input-scope table and no declaration in `.loom/stale-check-inputs.json`, so which files it reads is unknown Coupled-Base-Path: .loom/resync-ignore Coupled-PR-Path: none
|
Automated re-date of stale required checks (#8508), 1 of 3 The #8248 required-check-freshness guard blocked the merge of PR #2988: a required check's green result predates the current base-branch tip, and this repo's merge token has no This moves the head SHA, which invalidates the standing Judge approval (#5686). Expect this PR to cycle back through The #8248 guard itself is unchanged and still applies to the next merge attempt. This is re-date 1 of a budget of 3 for this chain of tree-identical heads (#9590); once the budget is spent, a further block escalates to |
|
Chain-head merge lock (#10167): this PR was just re-dated at |
Closes #2482
Adds an additive, ngspice-only
analysis_steps[]request field: ordered, named solves per corner with per-step source overrides, step-scoped measurements, and derived cross-step measurements graded through the existinglimitsmachinery. Scalaranalysisis unchanged. Validation (duplicate/unknown/forward refs, bad overrides, ambiguous names) happens before dispatch; a failed step marks dependent derived measurements unavailable; Xyce is refused clearly; steps are part of the checkpoint fingerprint; remote/batch work unchanged (deck generated worker-side).Files:
src/klayout_tools/sim_steps.py(new),sim.py,sim_remote.py,op_sanity.py,docs/cli/sim.md,CHANGELOG.md, tests (tests/test_sim_steps.py,test_sim.py,test_sim_batch.py,test_op_sanity.py).Tests:
tests/test_sim*.py tests/test_op_sanity.pyall pass.🤖 Generated with Claude Code