Repository navigation
CST_AI V2.0 — Release Notes
version = 2.0.0
release_status = USABLE
acceptance_source= V1.18
acceptance_A = PASSED
acceptance_B = PASSED
acceptance_C = PASSED
This is a release freeze, not a feature round. No product logic changed:
cst_ai_plugin/ is byte-identical to the tree that V1.18 accepted (frozen-set
aggregate hash and per-file hashes in reports/v2.0_release_freeze.json).
This round performed 0 CST contacts and 0 real solves; every number
below is carried over from a previously verified round.
1. What V2.0 is
CST_AI is a plugin that drives CST Studio Suite from an agent-facing tool surface
and returns structured, provenance-carrying results. The stable public layer is
five actions:
plan · run · status · inspect · resume
and the stable API version string inside the code is
PUBLIC_API_VERSION = 1.16.0, PUBLIC_API_REVISION = 1.17.0
(TOOL_SURFACE_VERSION = 1.17.0). V2.0 is the release label for this frozen,
user-accepted behaviour; the in-tree module version string
MODULE_VERSIONS["cst_ai_plugin"] = "1.15.0" was deliberately not edited,
because item 9 of the freeze round forbids touching the product implementation.
2. Capabilities in this release
| # | Capability | What it gives the user |
|---|---|---|
| 1 | Public DSH tool surface | Five actions reachable through one launcher (cst_ai_tool_bridge.ps1), each returning a single JSON envelope; the acceptance runs drove 159 tool calls through it and 0 calls into anything else. |
| 2 | plan / run / status / inspect / resume | plan is documented and verified as zero side effect (no CST connection, no build, no solve, no project write). run executes a TaskSpec. status and inspect are offline reads of the durable store. resume continues an interrupted run. |
| 3 | Durable run store | Every run writes <store_root>/<run_id>/state.json + events.jsonl atomically (temp + fsync + os.replace), with a monotonically non-decreasing checkpoint_version. State survives tool-server and process restarts: V1.18 read status/inspect for all three acceptance runs from an independent process. |
| 4 | Solve-budget enforcement | A TaskSpec declares solve_policy (FORBID / ALLOW_ONE / ALLOW_UP_TO_N / REUSE_ONLY) and max_solves. The plan states PLANNED_SOLVE_COUNT and MAX_AUTHORIZED_SOLVES before anything runs; the platform refuses FORBID_WITH_SOLVE_STAGE. Refusals and budgets are recorded per run. |
| 5 | Build / solve / result pipeline | One TaskSpec drives CONNECT → BUILD → VERIFY → SOLVE → EXTRACT → ANALYZE → REPORT, with the stage list checked against the task kind (BUILD_ONLY, BUILD_AND_SOLVE, LOAD_EXISTING_RESULT, PARAMETER_SWEEP, COMPARE_ONLY). |
| 6 | S-parameters / Floquet / RTA | Reads the 1D S-Parameters tree, parses SZmin(i),Zmin(1) / SZmax(i),Zmin(1) channel identities into face/mode structure, and reports R_total, T_total and the residual balance A = 1 - R - T per frequency point. |
| 7 | Resonance f0 / FWHM / Q | A validated extractor: in-band minimum, baseline, half level, parabolic INTERPOLATED_F0, half-level crossings for FWHM, Q_linewidth = f0 / FWHM, with explicit validity codes. When a crossing is outside the band it reports null plus the reason instead of inventing a number. |
| 8 | Convergence observability | mesh_timeline (adaptation results, pass count, final mesh cells) and frequency_sweep_state (calculation count, final interpolation error) are read back from the solved project and reported with the rest of the observables. |
| 9 | Farfield / directivity / gain / realized gain / HPBW | Activates a stored farfield monitor with the source-locked SelectTreeItem + evaluation-list chain (it changes GUI/session state, never the model history), then reads the complex field on a theta/phi grid and reports peak directivity, gain, realized gain, beam direction and a self-computed HPBW. |
| 10 | Parameter sweep | spec.points drives one isolated project per point under one budget (ALLOW_UP_TO_N), with per-point artifacts and a unified table. Reuse is signature-checked: a mismatched signature denies reuse instead of silently reusing. Points that were already solved are never solved again. |
| 11 | Comparator capability | A semantic comparator (scalar / curve / complex / resonance / sweep comparison, overlap and semantic gate) is registered as an optional application capability. It is not reachable through the five public actions (see the capability matrix). |
| 12 | Structured ResultBundle | Every run writes result_bundle.json + result_bundle.md next to plugin_observables.json, each carrying execution_status, numerical_status, scientific_status, provenance_status, solve usage, artifacts, observables, warnings, unresolved items and errors. Large arrays are referenced by artifact path + hash, never inlined into a tool response. |
| 13 | Structured errors | Refusals and failures come back as {ok: false, error_type, stage, message, detail} with no raw traceback in the message; the four documented zero-solve error cases (unknown run_id, malformed TaskSpec, FORBID + solve stage, malformed observable identity) were verified end-to-end. |
Full per-capability detail — verification stage, real-solve evidence, public-tool
availability and limitations — is in CAPABILITY_MATRIX_V2.0.md.
3. Acceptance summary (source: V1.18)
| Acceptance | User task | Real solves | Outcome |
|---|---|---|---|
| A | "read this already solved CST project and tell me the main S-parameters, the resonance frequency, the FWHM and Q; do not recompute anything" | 0 | PASSED. 16 S-parameter channels × 1001 points read from the frozen V1.15 golden project; INTERPOLATED_F0 = 20.24145661869825 GHz, FWHM = 4.10544936261045 GHz, Q = 4.930387597285506, T_min = 5.033102112150721e-06; FIXTURE_RESONANCE_VALID = true. |
| B | "build a simple TEST dipole, compute the pattern near 20 GHz, and report directivity, gain, realized gain, main radiation direction and HPBW" | 1 | PASSED. Fresh TEST project; farfield monitor activated and 2664-point grid read; directivity peak 2.591272561435593 dB (1.8160477196689644), gain 2.591882899824891 dB, realized gain 2.208232664222606 dB; beam direction θ=90°, φ=55° (NEAR_DEGENERATE_AZIMUTH_RING, 35 equivalent peaks); HPBW 77.37080653476266°; sanity SANITY_CONSISTENT. |
| C | cross-FSS fixture family at cross_span_mm = 6.5 / 7.0 / 7.5 under ALLOW_UP_TO_N |
2 new + 1 reused | PASSED. One point reused the verified golden artifact (full signature + artifact-hash validation, 0 solves), two points were solved as new isolated projects; the run was genuinely interrupted (process tree terminated, CST solver untouched) and resumed from durable state without re-solving any solved point. |
Acceptance solve accounting:
A = 0
B = 1
C = 2
TOTAL = 3
duplicate_solves = 0
The interruption was real, not simulated: the child runner's process tree was
terminated (taskkill /F /T, kill_returncode 0) while the solver was not
in that tree, so cst_solver_killed = false. Resume then started from the
durable points_completed on disk and reported fresh_solve_count = 1 for the
remaining point.
Final clean validation (§23 of the acceptance round) re-ran A from the public
entry point and re-validated B and C with no new solve: status + inspect +
no-op resume + artifact re-hashing for both.
4. Historical real-solve evidence (do not misstate this)
Each earlier round reports its own REAL_SOLVE_COUNT, and several of those are
0. A per-round zero is not a statement about the project's history. Real CST
solves have happened since V1.9 and they are recorded in hash-chained ledgers:
| Ledger | Record type | Real solve runs |
|---|---|---|
ledger/cst_experiment_ledger.jsonl |
solve_attempt |
4 |
ledger/v19a_control_ledger.jsonl |
solver_control_run |
1 |
ledger/v19b_floquet_ledger.jsonl |
floquet_solve_run |
1 |
ledger/v110b_convergence_ledger.jsonl |
convergence_variant_solve_run |
1 |
ledger/v110c_resonant_ledger.jsonl |
resonant_fixture_solve_run |
1 |
ledger/v110d_frequency_ledger.jsonl |
frequency_sweep_variant_solve_run |
1 |
ledger/v111_farfield_ledger.jsonl |
farfield_solve_run |
1 |
ledger/v112_sweep_ledger.jsonl |
sweep_point_solve |
2 |
ledger/v115_plugin_run_ledger.jsonl |
plugin_run, solve_usage.performed == 1 |
1 |
| Historical subtotal (V1.9–V1.15) | 13 | |
| V1.18 acceptance | plugin_run (B = 1, C = 2) |
3 |
| Total recorded real solves to date | 16 |
The V1.9 solves are real measurements, not simulations of one: they carry
valid_for_science: true and a full 4001-point S11 trace (e.g.
minimum_s11_db = -15.481928689032177, sampled_resonance_ghz = 0.949999988079071,
bandwidth_mhz = 98.19813508073005). The V1.11 farfield solve is real too
(ledger/v111_farfield_ledger.jsonl), which is why the angular data that V1.11A
read back was read from a really solved project — V1.11A itself added 0 solves
because it only re-activated and read back an existing result.
The detailed per-round accounting, including the V1.11A/V1.12/V1.15 corrections,
is in reports/v117_closure_addendum.md.
5. Known issues
Three open, non-blocking issues are recorded in KNOWN_ISSUES_V2.0.md:
KNOWN_ISSUE_V2_0_001— aCST_PROJECTartifact can be hashed before the
final save/close, so the stored project-file hash can be stale. Historical
artifacts are not changed; this is a future artifact-finalization
improvement.KNOWN_ISSUE_V2_0_002—inspecton an unknownrun_idreturns
TOOL_ADAPTER_EXCEPTIONand attaches a traceback artifact instead of the
structuredRUN_NOT_FOUNDthatstatus/resumereturn.KNOWN_ISSUE_V2_0_003— one observed case (V1.15) where a resume over-claimed
completion. The resume path was changed in V1.18 and resume was re-verified on
RUNNING/BLOCKED and COMPLETED runs, but resume of a FAILED run was not
re-exercised, so that exact symptom is unverified, not confirmed fixed.
6. Not implemented, and not blocking V2.0
These are explicitly out of scope for this release and are not part of the
USABLE verdict:
- natural-language planner
- optimizer
- job queue
- multi-CST concurrency
- GUI
- schema migration engine
- native CST HPBW getter (
GetAngularWidthXdBis documented for
.Plottype "Polar"only, so it raises on the farfield results this plugin
reads; HPBW is self-computed from the read grid instead) - source-faithful Paper A / Paper B reproduction
7. Freeze and hash verification
reports/v2.0_release_freeze.json— frozen-set snapshot before and after the
four QUICKSTART tool calls, with the comparison proving
ALL_FROZEN_GROUPS_UNCHANGED = true,real_solve_count = 0,
cst_contact_count = 0. Groups covered:cst_ai_plugin/, the tool surface
(cst_ai_tool.py,cst_ai_tool_bridge.ps1), the frozen CST projects, all
ledger/*.jsonl, all existingreports/*, the durable run stores
(runs/**andv118_acceptance_*/run_store/**) andcst_ai_config.json.reports/v2.0_release_verification.json— re-verification against the
recorded path list after the release documents were written: no recorded
frozen file changed, only new V2.0 release files were added.- The golden reuse anchor is unchanged:
v115_golden_disposable/v115_golden_cross_fss_7p0mm.cst
sha256:5903db1f2fa81c805125c8d0b7b79f14e8d92dc6c22dd8b7622508f2f478c6b3.
Round-level rule that was respected throughout: CST was never started, stopped,
killed or restarted; no second CST instance or project was opened; every CST
contact (this round: none) leaves the frozen project hashes unchanged.
8. Files added by this release
VERSION
RELEASE_V2.0.json
RELEASE_NOTES_V2.0.md
CAPABILITY_MATRIX_V2.0.md
QUICKSTART_V2.0.md
KNOWN_ISSUES_V2.0.md
reports/v2.0_release_freeze.json (frozen-set snapshot + the four QUICKSTART tool calls)
reports/v2.0_release_verification.json (re-verification after the documents were written)
reports/v2.0_error_ux_probe.json (six zero-solve error-UX cases, incl. KNOWN_ISSUE_002)
v2_release_freeze.py (the freeze-evidence harness that produced the three JSON files)
Nothing else was written. No product file, frozen project, old ledger or old
report was modified.