Finalize v5.14.1 and audit VSIM test surface#6
Open
LMSM3 wants to merge 50 commits into
Open
Conversation
…try, provenance demo, shell visualization
…Tier 1 Identity: formula, atom count, composition, canonical ordering Tier 2 Topology: Morgan+FNV-1a graph hash, bond signature, coordination Tier 3 Geometry: pairwise distance hash, geometry/symmetry class, pose-normalized Tests: topo invariance under perturbation, geom invariance under rigid transforms (translate/rotate/reflect), atom-order permutation invariance, near-degenerate sensitivity, 500-molecule scale collision detection, full provenance record audit
…clear domain added to Scale 1->2 (Atomistic->CG) transition so displacement energy and Frenkel pair targets propagate from atomistic through grain. NuclearCore registry: Pu-239 active (Ed=35 eV, fissility=37.03, monoclinic-alpha), U-238 and Th-232 as inactive fertile species. Version lineage updated: 4.0-LB now records Z=94 core active.
…xcel XML Time-limited runner (--minutes 10-20) with Pu-239/UO2/Zircaloy-4 nuclear fuel injection (~20% of cases). Output: master_report.tex (compilable LaTeX with booktabs/siunitx/longtable), data.xml (SpreadsheetML with nuclear row highlighting), summary.csv, and individual .md reports. Tested: 59658 reports in 1 min at 994 reports/sec.
…cture (129/129 tests pass) - particle_id.hpp: ParticleID enum (-1..-18) with 7 constexpr predicates (is_reserved, is_decay_particle, is_transportable, is_bookkeeping_only, is_energy_carrier, is_defect_or_virtual, is_ghost) + to_string + helpers - decay_event.hpp: DecayEvent record (parent/daughter IDs, emitted array[8], energy fractions, damage score, overflow-guarded add_emitted) - decay_event_builder.hpp: make_alpha_decay, make_beta_minus_decay, make_gamma_decay with physics-correct default fractions - kinetic_event_kind.hpp: coarse EventKind enum (11 kinds) - kinetic_event_record.hpp: KineticEventRecord with std::variant payload (DecayEvent | GenericTransportEvent) - legacy/c_api: C99 particle_ids.h/c + decay_event.h/c (portable C API) Fix: malformed block comment in particle_ids.h (-9..-14 range was swallowed) - gas2_tui.hpp: pure-ANSI interactive TUI (937 lines, 7 screens) - cmake: vsepr_legacy_c STATIC library + test_particle_id_decay CTest target - tests/CMakeLists.txt: ParticleIDDecayTest (core nuclear physics quick)
Beta-6 instrumentation release (developed alongside v4.1.x, distinct goals). New: src/analysis/diffusion_analysis.hpp -- DiffusionRecord, DiffusionTracker, TransportInference, TransportAnalyzer, ActivationTrend, annotate_defect_ratios, annotate_formation_context New: src/analysis/packing_analysis.hpp -- PackingRecord, PackingTracker, PackingInference, PackingAnalyzer, compute_compressibility New: tests/test_macro_inference.cpp (Group 24) -- 12 diffusion cases + 4 packing cases. D_eff from MSD slope only. All macro properties analysis-only. Formation-context annotation. Formation codebase survey. Architecture rule: no inferred property stored in State or xyzFull.
- src/gen/metal_presets.hpp: static DB for Nitinol(B2), W(BCC), Inconel625(FCC), Ti-6Al-4V(HCP) with occupancy-cycle support for substitutional disorder - src/gen/lattice_builder.hpp: BCC/FCC/B2/HCP supercell builder → XYZFrame; 3-frame thermal trajectory generator (T=0/300/600 K placeholders) - src/gen/step_writer.hpp: minimal STEP AP203 writer (ISO-10303-21), CARTESIAN_POINT per atom — engineering geometry truth artifact - src/gen/metal_gen.cpp: driver emitting .xyz .xyza .xyzc .xyzf .step + geometry_map.json per material; reuses vsepr::io XYZ writer API throughout Generates 21 artifacts (5 per material) + geometry_map.json in gen_out/ Branch: v5.0.0-beta.7-step-attempt
- src/gen/.gitignore: suppress exe, gen_out/ from VCS - src/gen/README.md: full module doc — presets, builder, STEP writer, build/run instructions, artifact contract, extension guide - docs/FILE_FORMATS.md: add STEP AP203 section (structure, role, limitations, writer API); update Overview table to include .xyzf and .step; add src/gen/ cross-reference at bottom
tests/test_metal_gen.cpp — 15 test categories, 399 checks: 1. Preset database integrity 2. Atom count correctness (BCC/FCC/B2/HCP, 1^3–8^3 and asymmetric) 3. Coordinate bounds (cubic orthorhombic; HCP z-only due to hex cell) 4. Species fractions (alloy occupancy cycle verification) 5. XYZFrame invariants (N, has_* flags, PBC, T, E) 6. Per-atom fields (q, v, e present; build-time v==0) 7. Determinism (identical frames from independent calls) 8. Thermal trajectory (frame count, T values, T=0 zero velocity) 9. STEP AP203 output (header/footer tokens, CARTESIAN_POINT count) 10. geometry_map.json required keys 11. Scaling stress — 8x8x8, 2048 atoms, finite coords, valid STEP 12. Energy accumulation (frame total == N * ref_energy_per_atom) 13. Zero-velocity at build time 14. HCP geometry (NN distance using hex convention sqrt(a^2/9+c^2/4)) 15. B2 site ordering (even=Ni corner, odd=Ti body-centre) src/gen/lattice_builder.hpp — fix HCP box: - box.ay is now |a2| = ny*a (lattice vector length), not ny*a*sqrt3 - lattice[] matrix now stores the actual hex 3x3 vectors correctly All 399 checks PASS.
Simulates common new-user loop mistakes against the metal_gen pipeline:
Loop A (for) — off-by-one: i <= frame.N accesses atoms[N] (UB)
Fix: strict i < frame.N
Loop B (while) — missing ++i increment causes infinite loop
Guarded at 100k iters; produces -8.73e6 vs correct -4714.2
Fix: add ++i before closing brace
Loop C (for) — min_e initialised to 0.0 instead of +inf
Masks all all-positive energy blocks (returns 0, not 50.0)
Fix: std::numeric_limits<double>::max() as initial value
All 3 bugs demonstrated to produce wrong output; all 3 fixes verified correct.
8/8 checks pass.
VizMode::BATCH_PASSIVE (src/vis/viz_config.hpp) - New enum variant: zero overhead preset for extended batch runs - Disables outlines, shadows, AA, motion blur, interpolation - Adds batch_display_fps, batch_show_status, batch_run_label fields - apply_mode_preset() case sets target_fps = batch_display_fps BatchWindowBridge (src/vis/batch_window_bridge.hpp) - Lock-free frame slot: std::atomic<shared_ptr<XYZFrame>> (C++20) - Producer API: push_frame(), push_status(), push_progress(), start(), finish() - Consumer API: latest_frame(), status_text(), status_snapshot(), display_tick() - BatchStatus: run_label, frame/artifact counters, elapsed time, current_op - display_tick() throttle: returns true only when 1/target_fps has elapsed - Drop-oldest policy: producer never blocks; stale frame silently replaced ContinuousRunDisplay (src/vis/continuous_run_display.hpp) - Top-level wiring: configure() -> open() -> run_event_loop() pattern - ConsoleProgressBar fallback for headless / no-GL environments - Single-step tick() variant for embedding into existing event loops - GL window init deferred to continuous_run_display.cpp (beta.8 GL layer) - Does NOT modify existing Window::run_with_ui() interactive path Deprioritizes interactive UI layer per architecture directive: - BATCH_PASSIVE preset strips all interactive rendering features - No ImGui panel changes; overlay text injected via existing status path - Producer thread and display thread fully decoupled
- xyz_to_snapshot.hpp: XYZFrame -> FrameSnapshot inline converter - window.hpp/cpp: add run_batch(bridge, fps) -- throttled passive GL loop, BATCH_PASSIVE preset, no ImGui, exits when bridge.is_done() - continuous_run_display.hpp: clean interface (configure/open/close/bridge/ run_event_loop), pimpl-style GL delegation to .cpp - continuous_run_display.cpp: open() constructs Window, run_gl_loop() delegates to Window::run_batch(), run_console_loop() is headless fallback - Removed orphaned auto_pilot stanza that was floating outside any function in window.cpp
- continuous_run_display.hpp: WindowDeleter with #ifdef guards so the non-GL path needs no .cpp linkage; run_gl_loop() is inline no-op when VSEPR_HAS_GL not set - continuous_run_display.cpp: WindowDeleter body + GL loop (GL builds only) - metal_gen.cpp: wired ContinuousRunDisplay; worker thread owns generation; main thread runs display.run_event_loop() (console bar when no GL) - metal_gen builds clean, runs, shows live progress bar during batch
stress test (src/gen/batch_display_stress.cpp):
12 tests -- T1 round-trip, T2 10k-frame flood, T3 monotonicity,
T4 torn-read guard, T5 elapsed monotonic, T6 tick throttle,
T7 lifecycle FSM, T8 multi-cycle, T9 threaded console loop,
T10 empty-label guard, T11 late consumer, T12 zero-atom edge case
result: 12/12 ALL PASS
docs (docs/vis/):
batch_display_api.md -- full API reference for all public types
batch_display_usage.md -- thread model, build variants, integration
walkthrough, cadence guide, file map,
known limitations / future work
…ashboardRecord wiring + T1-T8 377/377
…figures — 46 pages, clean compile
…ocumentation - Add render_interval (step-count) to VisualSection and VisualExternalSection - Parse render_interval in vsim_parser.cpp for both visual scopes - Gate render dispatch in beta10_demo.cpp and kernel_demo.cpp - Create Group 35 acceptance tests (test_render_interval.cpp) - Create VSIM_LANGUAGE.md: canonical language guide - Create VSIM_REFERENCE.md: field reference adjacent to README - Create VSIM_DEVELOPMENT.md: 5-step add/wire/test/document checklist - Update STAGE.md and docs/wo/WO_56C.md to mark Day 57 D complete render_interval is orthogonal to display_fps; it controls simulation-step emission cadence for render and export layers, defaulting to 1 (render every step).
- Bump version date to 2026-05-07 - Add beta-7 Day 57 progress block with commit ref 142fb5e4 - Add Section 4: render_interval doctrine (orthogonal to display_fps) - Add Section 7: developer procedure 5-step checklist - Add Section 8: key reference files table - Renumber Terminology -> 5, System Layers -> 6
Beta-8 closes the runtime foundation stage for VSEPR-SIM. Runtime layer: - PBC wired into FIRE minimiser (wrap_coords after position update) - Ewald summation for ionic crystals (real + k-space + self-energy) - render_interval cadence field (WO-VSIM-57D, Group 35) Export / artifacts: - Export flushing (flush_exports, flush_pipeline_artifacts) - Dashboard SVG + PNG raster export (stb / PPM fallback) - STEP sidecar export foundation (point-cloud; B-Rep deferred) - Pipeline audit JSONL, report MD + JSON, run manifest Language / schema (WO-VSIM-03B): - Intent-based authoring: [material], [run], [environment] - [excite.*], [observe], [[override.particle]], [[raw.object]] - resolve_structure_alias(): 70-entry canonical alias map (ionic, metals, covalent, oxides, geometry, polymers, porous/framework, bead/premacro) - Group 36 acceptance tests (IntentAuthoringTest) - VSIM_LANGUAGE.md and VSIM_REFERENCE.md updated Stage / docs: - STAGE.md: beta-8 CLOSED, beta-9 promoted - WO-VSEPR-SIM-58A gate table (all 8 gates closed) - docs/wo/WO_58A.md work order record - VSIM_REFERENCE.md: beta-9 owned items table Deferred to beta-9: registry resolution engine (WO-VSIM-03C) Deferred to beta-10: installation / consumer packaging
Day 61 | WO-VSIM-61A–61D + WO-VSEPR-SIM-62A Schema ------ * vsim_document.hpp — added VsimSystemSection, VsimStructureAnalysisSection, VsimSamplingSection (RDF/MSD/unwrap_pbc), VsimScaleSamplingSection (field_projection / RVE), VsimAnalysisInferenceSection (packing/mobility regime), VsimVerifySection + verify sub-sections (structure / rdf / msd / mass) for the empirical verification layer (WO-62A) * VsimDocument gains: pipeline_system, pipeline_structure, pipeline_sampling, pipeline_scale_sampling, pipeline_inference, pipeline_output, pipeline_verify Parser / Runtime ----------------- * vsim_parser.cpp / vsim_parser.hpp — parse [analysis.structure], [analysis.sampling], [analysis.scale_sampling], [analysis.inference], [verify], [verify.structure], [verify.rdf], [verify.msd], [verify.mass] * vsim_runtime.hpp — runtime surface updated for analysis/verify pass New headers ----------- * include/vsim/exit.hpp — exit-code constants * include/vsim/reaction_bridge.hpp — ReactionBridge API * include/vsim/vsim_output_layout.hpp — AppDataPaths + run-folder helpers * include/vsim/vsim_registry.hpp — RegistryBundle + RegistryResolver * include/vsim_override/vsim/ — override copies synced Examples / scripts ------------------ * examples/wo61c_pipeline_test.vsim + wo61d_*.vsim — pipeline scenario files * scripts/demo_0[1-7]_*.vsim + val_0[1-8]_*.vsim — beta-11 demo and validation scripts for registry, PBC, laser-MD, variance, batch sweep, CaF2/ZnS/TiO2/SiO2/MFI/graphite/Ar/S22 empirical targets Documentation ------------- * STAGE.md — rebuilt from scratch; eliminated 4448-line corruption blob * VSIM_REFERENCE.md — appended WO-62A verify-layer section (encoding corruption repaired: 10 x U+FFFD and broken surrogate pair removed); WO-62B and WO-62C batch-study schema sections added * VSIM_LANGUAGE_REFERENCE.md — new language quick-reference * docs/VSIM_LANGUAGE.md — language spec updated * VSIM_DEVELOPMENT.md — naming-convention note added * tests/CMakeLists.txt — Day 62 group comment corrected (header vs source file) * CMakeLists.txt / atomistic/CMakeLists.txt / coarse_grain/CMakeLists.txt — build wiring updated Test groups passing: G39 (WO-62A verify, 19/19)
- Rewrote demo_approach1_defect_diffusion.vsim: [material] B1_NaCl + 4 batch jobs (vacancy_na, vacancy_cl, schottky_pair, frenkel_na), research_report export profile, SVG visual output - Rewrote demo_approach2_formation_path.vsim: 5 batch jobs for thermal protocols (slow_cool, rapid_quench, stepped_cool, reheat_cycle, isothermal_anneal), memory overlay for nucleation analysis - Rewrote demo_approach3_powder_sintering.vsim: [material] premacro_powder_bed MgO + 5 batch jobs (loose_drop, compressed, vibrated, bimodal, contaminated) - All three scripts: registry resolves B1_NaCl / premacro_powder_bed, 4-5 batch jobs confirmed, BOM-free, validate OK - Added reports/report_approach1.md (Sections 0-8, 12/12 sigs passed) - Added reports/report_approach2.md (Sections 0-8, 16/16 sigs passed) - Added reports/report_approach3.md (Sections 0-8, 17/17 sigs passed)
Leftover template workflow was firing on every branch push and failing because scripts/labelme_test.sh does not exist in this repo. VSEPR-SIM does not use labelme.
… routing
- Bump version 2.0.0 -> 5.0.0, publisher LMSM3, URL -> LMSM3/VSEPR-SIM
- Add kernel (vsepr.exe, vsepr-cli.exe, vsepr_batch.exe), vsim parser
headers (include/vsim/*), scripts/, VSIM_REFERENCE.md to [Files]
- Remove stale references: CHANGELOG.md, vsepr.bat, installer_banner.bmp
- Add installer/bin/open_xyz.cmd: thin pythonw launcher with multi-path
fallback (PATH -> LOCALAPPDATA -> C:\PythonXXX -> powershell msgbox)
- Wire .xyz and .vsxyz registry associations -> open_xyz.cmd (was vsepr.exe)
- Add .vsim script association -> vsepr-cli.exe
- All associations are optional installer Tasks (opt-in)
- tools/vsepr_xyz_popup.pyw: detect installed layout ({app}/bin/) in
find_project_root, resolve BUILD_DIR for both dev and installed trees,
update docstring to cover .xyz + .vsxyz
…uild paths AUDIT FINDINGS -------------- - Duplicate installer logic: dist/VSEPR-SIM-5.0.0-local/installer/ register-file-associations.ps1 (beta-10, canonical) was not referenced by setup.iss — the Inno Setup [Registry] block re-implemented the same associations independently. Removed the duplication. - build\bin\ does not exist; binaries land in build\ flat. Fixed 5 scripts that referenced the non-existent path. - No filename collisions between archive/legacy/bridge_beta and live source. INSTALLER CHANGES (setup.iss) ------------------------------ - Removed entire [Registry] block (was duplicating register-file-associations.ps1) - Added [UninstallRun] to call PS script -Unregister on removal - File associations now owned exclusively by register-file-associations.ps1 under HKCU — no admin required, clean uninstall guaranteed - [Tasks]: collapsed 3 per-ext tasks into one 'fileassoc' task - [Files]: added vsepr-sim.exe, register-file-associations.ps1; renamed open_xyz.cmd -> open_vsim_file.cmd UNIVERSAL OPENER (open_vsim_file.cmd, replaces open_xyz.cmd) ------------------------------------------------------------- - Single handler for .xyz .xyza .xyzA .xyzc .xyzf .xyzF .xyzfull .vsxyz .vsim - Priority: vsepr-sim.exe open -> vsepr.exe open -> pythonw popup - Python fallback probes PATH then common install locations ASSOCIATION SCRIPT (installer/register-file-associations.ps1) -------------------------------------------------------------- - Copied from dist/ (beta-10 canonical) into installer/ so Inno Setup can package it and it is tracked in version control - Added .vsxyz (full takeover) and .xyzfull lowercase mapping - All XYZ open commands now route through \ = open_vsim_file.cmd instead of hardcoded vsepr-sim.exe; preserves priority order SCRIPT PATH FIXES ----------------- - scripts/automate_review.ps1: build\bin\vsepr.exe -> build\vsepr.exe - scripts/random_discovery.ps1: same - scripts/run_cli_tests.ps1: all build\bin\ -> build\ (bulk replace) - scripts/create_portable_zip.bat: paths + version 2.0.0 -> 5.0.0 - scripts/build_formula_tests.ps1: build\bin\ -> build"
…taller vsepr.exe path; rewrite QUICKBUILD for v5; add deprecation policy - bridge_beta/CMakeLists.txt renamed to .disabled (cmake-invisible) - README stubs added to legacy/, archive/, bridge_beta/, v4/, v5/ - installer/setup.iss [Run]: -BinaryPath now vsepr.exe (was vsepr-sim.exe, missing binary) - installer/register-file-associations.ps1: fix error message to match vsepr.exe - QUICKBUILD.md: full v5 rewrite (was v2.4.0 meso-build era, stale binary/script names) - CONTRIBUTING-DEPRECATION.md: new file documenting deprecation criteria and archive workflow Closes 3.1 3.2 3.3 4.1 4.2
demo_viz_01_xyz_single — Ar gas cloud (64 atoms, 30 Ang, PBC): - emits via vsepr Ar@gas emit --cloud 64 - validates .vsim (visual section with advanced overlays) - opens in vsepr-sim terminal 3D viewer demo_viz_02_xyzf_anim — OsO4 NVT trajectory (5 frames, 450 atoms): - generates .xyzf via gen_xyz_demo - validates .vsim (visual.external export_trajectory) - opens in vsepr-sim trajectory player ([q]=quit [p]=pause) File associations re-registered from dev-tree (register-file-associations.ps1) pointing at build\vsepr.exe. Double-click any .xyzf file to launch the player.
…yback, Qt bridge, docs overhaul - FormationOutput -> KernelEventLog -> DashboardRecord pipeline wired (WO-57D) - Gas-mixing MD demo: four-corner N2/O2/H2O/Ar injection at 1200K, N>1200 - region + velocity_drift schema/parser support in vsim_document/vsim_parser - molecule_atoms_from_formula() helper (no hardcoded gas lists) - xyzf trajectory writer in cmd_run_vsim.cpp - Qt workstation: auto-launch with --xyzf on scripted run completion - EngineAdapter: multi-frame xyzf trajectory import, symbol_to_Z CPK fix - Organic formula parser added (chem/organic/) - Peptide formation updates and new test coverage - node_accessor: VSIM document node traversal helper - vsim_document_new: extended schema draft - Gallery VSIM scripts: helium reactor, NaCl PBC, calibration HTGR, room reactor - Installer: vsepr.cmd launcher, vsepr_xyz_popup.pyw, open_vsim_file.cmd updated - README: v5.0.0 rewrite — What's New section, vsper Quick Start, beta-gate validation status, v5 repo tree, softened closing tone, Python refs removed - TOUR.md: v5 architecture rewrite, Python/pykernel references removed - VSIM_LANGUAGE.md, VSIM_REFERENCE.md: schema updates for render_interval, velocity_drift, region fields - cmake/CoreBuild.cmake: build config template wired - tests: smoke_motd, smoke_tui, test_domain_audit, test_gallery_parse added
- Add pykernel/pillars/empirical_chem.py (Pillar F, v5.1.3)
Sources: PubChem REST API + PeriodicTableJSON warm fallback
+ NIST SRD-128 polarizability + Alvarez/Bondi/Shannon radii tables
- Generate data/elements.empirical.json (118 elements, schema v1)
Fields: atomic_weight, en_pauling, IE1, EA, radii (cov/vdW/ionic),
polarizability, electron_config, melt/boil, density,
molar_heat, phase — all with per-field _sources tags
- Add docs/audit/chem_audit_empirical.md (field coverage audit)
- Add pykernel/pillars/_verify_v5113.py (30-check verification suite)
Passes: pillar imports, JSON integrity, EA/IE unit sanity,
source-tag audit, API smoke test
- Update pykernel/pillars/__init__.py to export empirical_chem
Pre-electron / high-accuracy classical MD baseline checkpoint.
Verification: 30/30 PASS exit=0
…ocument.hpp - step6 analysis: +7 fields (cutoffs, msd, rmsd, variance/n_evolution probes); step7 export: +10 fields matching ExportSection keys, +new export.visual sub-module (8 fields); step8 visual: +18 fields (7 output_type choices, animation_mode fix, all VisualSection flags, GL/web/pacing options). All sourced from vsim_document.hpp. Demo verified, build clean.
…track WO-MF-01 ledger; add PROGRESS_SUMMARY.md
…ty, formal_charge, orphaned tests registered, reaction engine smoke test - types.hpp: add Atom::formal_charge (int8_t, default 0) - chemistry_v2.hpp: replace detect_rings() stub with DFS cycle detection - chemistry_v2.hpp: replace detect_aromaticity() stub with Hückel 4n+2 impl - chemistry_v2.hpp: wire formal_charge into validate_atom() (closes TODO) - chemistry_v2.hpp: switch include to element_data_integrated.hpp (production DB) - chemistry_universal_test.cpp: fix include + load_from_json_file() call (re-enables) - tests/CMakeLists.txt: register ElementDBPhase1Full, ChemistryValidation, ChemistryUniversal - tests/test_reaction_engine.cpp: new 17-check audit (RE-01..RE-17) - tests/CMakeLists.txt: register ReactionEngineAudit Chemistry CTest result: 12/12 PASS (was 4/12 before this commit)
- Implement DFS ring detection + Huckel aromaticity (chemistry_v2.hpp) - Implement simplified CIP tetrahedral R/S chirality (isomer_signature.hpp) - Fix Molecule::add_atom() mass lookup via chemistry_db().get_mass(Z) - Fix ReactionEngine element lookup from State::type (engine.cpp) - Wire evaluate_organic_diagnostics + flush_organic_diagnostics (vsim_runtime.hpp) - Re-enable ChemistryUniversalV2, Phase2ComplexMolecules, IsomerTest targets - Add init_chemistry_db() to 14 pre-existing tests that lacked DB init: energy_tests, optimizer_tests, angle_tests, vsepr_tests, torsion_tests, test_torsion_analysis, torsion_validation_tests, alkane_torsion_tests, butane_scan, vsepr_domain_test, basic_molecule_validation, test_ethane_torsion, test_thermal_animation, test_formation_event_wiring - Promote MF-C03 (chirality detection) -> COMPLETE in WO-MF-01 - Update PROGRESS_SUMMARY.md: 95% critical path, 87% overall velocity
MF-F01 (STAGE.md missing — was 🔴): - Recreated STAGE.md at repo root from git history (d734759) + current state - Updated milestone table: v5.13.4 COMMITTED, v5.13.5 IN PROGRESS - Full test group registry Groups 1-89 + ChemistryUniversalV2/Phase2/IsomerTest - Day 74 section: WO-74A/B/C all COMPLETE (per WO-74 doc) - Day 75 section: WO-75A Part A COMPLETE, B PENDING, C COMPLETE - v5.13.5 release gate table with accurate per-criterion status - Promoted MF-F01 to COMPLETE in WO-MF-01 WO-75A Part C (IKK Python time-series — was 🟡): - Added discover_identity_sidecar(search_dir) to reporting/generate_report.py - Added plot_dist_timeseries(sidecar_path, out_path): reads .identity.json, dual-axis matplotlib figure (D_rec left / entropy proxy right), amber identity-loss band, D=0.5 reference line, ASCII-safe cp1252-compatible caption - Updated generate_consolidated_report() to accept optional captions dict - Added step 2.5 in main(): scan sidecars, generate PNGs, pass captions - Graceful fallback (None, None) when matplotlib unavailable - Promoted MF-E02 to COMPLETE in WO-MF-01 Test count unchanged: 167/167 passing
- Calls vsepr classify on H2O, NH3, CO2 - Verifies vsepr_report, conf values, fallback state, automation branch - Exports dark-mode 3D matplotlib PNG per molecule to out/wo84s/ - 16 PASS / 0 FAIL (Day 84+ PNG export rule satisfied)
…5 demo PASS, PNG confirmed)
…VSIM_LANGUAGE_REFERENCE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Validation