Skip to content

[Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144

Open

Description

@EvenSol

Purpose

Create a durable engineering campaign for continuously improving NeqSim electrolyte calculations, including thermodynamic models, flash and stability algorithms, chemical-reaction equilibrium, data regression, and coupled process applications.

The campaign must turn literature and public experimental data into verified, reusable NeqSim improvements. It is not a sequence of isolated dataset fits: every increment must improve a clearly stated validity range without degrading previously supported fluids, neutral systems, or established APIs.

Maintain at most one active implementation PR for this campaign. Use this issue as the persistent roadmap and run ledger for scope, evidence, accepted data, active work, blockers, merged increments, and the next dependency-ready hypothesis.

Engineering outcomes

Improve reliable calculation of:

  1. gas–water–salt and gas–oil–water–ion phase equilibrium;
  2. hydrate equilibrium in brines, hydrocarbon liquids, mixed inhibitors, acid gases, and reactive aqueous systems;
  3. mineral-scale saturation and precipitation in gas–oil–water systems;
  4. aqueous chemical equilibrium with ions, charge balance, acid/base reactions, water dissociation, complex formation, and salt speciation;
  5. CO2 and H2S absorption in alkanolamines, including MEA, MDEA and promoted/mixture systems where supported by public data;
  6. reactive absorbers and process calculations using the same thermodynamic and reaction basis as standalone equilibrium calculations;
  7. electrolyte-model parameters, mixing rules, activity/fugacity formulations, properties, initialization, convergence, diagnostics, and performance;
  8. Java and Python usability, documentation, examples, and reproducible benchmarks.

Owned scope

  • electrolyte CPA and other NeqSim electrolyte-capable thermodynamic models;
  • aqueous activity/fugacity coefficients, standard states, dielectric/electrostatic terms, association, ion–molecule and ion–ion interactions;
  • parameter provenance, regression, uncertainty, validity ranges, and missing-parameter behavior;
  • electrolyte-aware phase stability, TP/multiphase/reactive/solid/hydrate flashes and continuation/fallback behavior;
  • reaction-set construction, speciation, electroneutrality, elemental conservation, reaction-equilibrium residuals, and phase/reaction coupling;
  • hydrate chemical-potential calculations with salts, thermodynamic inhibitors, hydrocarbons, oil, and reactive brines;
  • mineral precipitation/dissolution, saturation indices, solid-phase selection, and complementarity;
  • alkanolamine acid-gas VLE/speciation/loading/heat effects and equilibrium support needed by rigorous absorber calculations;
  • electrolyte-specific diagnostics, deterministic repeated execution, stale-state protection, cloning, serialization and thread safety;
  • focused performance work that preserves the accepted physical and numerical path;
  • validation datasets, regression tools, tests, documentation, and executable examples.

Coordination boundaries

Coordinate instead of duplicating:

  • generic TP-flash and multiphase solver work: #2937;
  • reactive absorber equipment and column architecture: #205;
  • neutral-salt input/API behavior: #448;
  • generic hybrid EOS/aqueous model architecture: #2862.

A generic flash defect belongs to #2937. An electrolyte-specific reproducer, thermodynamic-model change, reaction coupling, or parameter/data improvement belongs here. If one increment touches both areas, use one coordinated PR and update both ledgers; never open competing implementation PRs.

The current electrolyte/hydrate increment is draft PR #3142. The first campaign run must inspect its exact current head, CI, reviews, diff, scientific evidence, and overlap before selecting new work.

Frozen validation matrix

Every applicable implementation increment must freeze a deterministic subset of this matrix before editing and retain the smallest public reproducer.

A. Brine and aqueous speciation

  • water + NaCl over dilute to concentrated conditions and a justified temperature/pressure range;
  • mixed ions including Na+, K+, Ca2+, Mg2+, Cl-, sulfate and carbonate species where model support and public data exist;
  • water dissociation, acid/base systems, CO2/H2O/carbonate/bicarbonate, and H2S species where applicable;
  • charge-neutral and deliberately difficult initial compositions;
  • repeated, changed-state, and nearby concentration/T/P paths.

B. Multiphase hydrocarbon/electrolyte systems

  • GAS+AQUEOUS, OIL+AQUEOUS, and GAS+OIL+AQUEOUS;
  • methane-rich, CO2-rich, H2S-containing, condensate/oil, water, single salt, and mixed brine;
  • phase appearance/disappearance, trace ions, high water cut, low water cut, and difficult initial guesses;
  • ordinary versus explicit multiphase paths where both are applicable.

C. Hydrates and inhibitors

  • methane and representative natural-gas hydrate dissociation points;
  • salts alone and salts with MEG, methanol, and mixed inhibitors;
  • CO2/H2S-containing systems and reactive brines;
  • gas–oil–water–salt cases when public validation data are available;
  • hydrate temperature at fixed pressure and hydrate pressure at fixed temperature.

D. Mineral scale

  • at minimum CaCO3, BaSO4, SrSO4, CaSO4 and FeCO3 as public data and NeqSim component support permit;
  • saturation index without precipitated solid;
  • equilibrium precipitation/dissolution with non-negative solid amount;
  • mixed brines, acid-gas speciation, pressure/temperature change, and gas/oil/water phase coupling.

E. Alkanolamines and acid-gas removal

  • CO2 and, where supported, H2S in aqueous MEA and MDEA;
  • promoted or mixed amines only when the reaction set and parameter provenance are explicit;
  • acid-gas partial pressure versus loading, speciation, heat of absorption/enthalpy and physical properties where data exist;
  • lean/rich conditions and T/P/concentration ranges relevant to absorber and regenerator calculations;
  • standalone equilibrium plus at least one process-level mass/energy-balance case when absorber support is available.

F. Controls

  • neutral PR/SRK/CPA hydrocarbon systems;
  • neutral hydrocarbon–water systems;
  • non-reactive process calculations;
  • cold start, warm continuation, identical repeat, changed composition/model/mixing rule, clone, and parallel execution.

Scientific acceptance gates

For each applicable case, record equations, conventions, units, reference state, model and mixing rule, reaction set, parameter source, data license, validity range, and uncertainty.

Required checks:

  • total and elemental material balance;
  • aqueous electroneutrality;
  • finite, non-negative and normalized phase fractions/compositions within case-specific tolerances;
  • phase-equilibrium chemical-potential or log-fugacity/activity residual;
  • reaction-equilibrium residual, for example max absolute ln(Q/K), with a frozen tolerance;
  • stable phase topology and lower defensible total Gibbs energy;
  • hydrate water chemical-potential residual and agreement with independent dissociation data;
  • mineral complementarity: absent solids remain undersaturated/non-precipitating and present solids satisfy saturation equilibrium with non-negative amounts;
  • deterministic repeated execution and no stale state after T/P/composition/model/reaction-set changes;
  • physically plausible nearby-state trends and no discontinuity introduced merely by solver history;
  • mass and energy closure for process examples;
  • no unexplained regression outside the fitted range.

Do not silently tune to one dataset. Separate calibration and validation data, report residual definitions and parameter covariance/sensitivity where practical, and retain cross-dataset or hold-out evidence. A parameter improvement must not be accepted solely because it reduces its training objective.

Performance and compatibility gates

  • benchmark the complete calculation as well as any optimized kernel;
  • report iterations, retries/fallbacks, residuals, and failure rate, not wall time alone;
  • preserve public API and serialized compatibility unless a reviewed migration is justified;
  • neutral/non-ionic systems must show no statistically or practically material slowdown; target no more than about 1% median overhead in representative controls unless a larger cost is explicitly justified by new requested behavior;
  • electrolyte calculations must not gain speed by weakening convergence, stability, balance, or diagnostics;
  • preserve Java/Python composability, cloning, deterministic calculation identity, and thread safety.

Literature and data workflow

Each run may search peer-reviewed literature, authoritative public databases, standards, theses, and open benchmark datasets. Prefer primary sources and stable public data.

For every adopted dataset or correlation:

  1. record the full citation/DOI or stable URL and license/access conditions;
  2. preserve original units and reported uncertainty;
  3. store only redistributable data in the repository;
  4. document digitization or preprocessing;
  5. map species, apparent/true composition basis, standard states, and reaction conventions explicitly;
  6. split regression and validation evidence;
  7. compare current master before proposing code or parameters;
  8. explain discrepancies instead of silently fitting them away.

Commercial simulator output may be supporting evidence only when legally shareable and independently described; never infer or copy proprietary algorithms or parameters.

Scheduled-run protocol

Every scheduled run must:

  1. read this issue and its newest comments;
  2. inspect current master, repository instructions, related open/recent PRs and issues, and the previous run ledger;
  3. inspect and repair the sole active campaign PR first, including CI and review feedback, before starting another increment;
  4. search for existing or superseding implementation and avoid duplicate work;
  5. choose the largest coherent dependency-ready increment with a frozen scope, baseline, public reproducer, acceptance criteria, stop boundary, documentation impact, and validation target;
  6. search current relevant literature/data when it can materially improve the selected increment;
  7. reproduce the limitation on unmodified current master before editing;
  8. implement the smallest reusable model/solver/data/API improvement with focused regression coverage;
  9. run the applicable NeqSim formatting, documentation, focused/broader test, scientific-validation and performance gates;
  10. publish or update at most one draft implementation PR; do not merge, enable auto-merge, force-push, weaken checks, or mark ready for review;
  11. add a concise run-ledger comment here with date, exact master/base/head SHAs, active PR, question, data/references, files, tests, numerical evidence, documentation impact, blocker, and next dependency;
  12. stop without a PR when no unique evidence-qualified improvement is ready.

Repository-wide scheduled campaigns may have no more than ten open autonomous implementation PRs in total.

Initial dependency-ordered queue

  1. Complete or repair electrolyte CPA hydrate/reactive-brine PR Fix electrolyte CPA hydrate equilibrium, including reactive brines #3142 and establish its exact supported case matrix.
  2. Freeze a common electrolyte benchmark harness with balance, electroneutrality, phase/reaction residual, phase-topology, repeatability, and timing metrics.
  3. Audit species/reaction construction and stale-state behavior for CO2/H2O/carbonate and water dissociation.
  4. Validate and improve simple/mixed-brine activity and phase-equilibrium parameters against public data.
  5. Extend hydrate validation from simple brines to inhibitors, acid gases, oil, and reactive systems.
  6. Establish mineral saturation/precipitation architecture and public scale benchmarks.
  7. Improve MEA/MDEA CO2/H2S equilibrium, properties and parameter provenance.
  8. Connect the validated equilibrium basis to rigorous reactive-absorber calculations under Implement reactive absorber #205.
  9. Continue ranked, evidence-based parameter/model/solver improvements without losing the frozen controls.

Definition of done

This is a long-running roadmap. Individual increments are complete only after the implementation, focused tests, applicable broader tests, scientific benchmark, documentation-impact assessment, repository publication gates, and exact-head CI/review audit are recorded.

The campaign is complete only when the supported scope and validity ranges are documented; the frozen matrix passes on current master; outstanding limitations are either resolved or explicitly accepted; and a final audit shows no dependency-ready evidence-qualified improvement remains.

Activity

  1. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    2026-08-22 run ledger — #3142 merged; reactive-clone ownership defect frozen

    Authoritative current master: 884810a814f9
    Completed electrolyte increment: PR #3142, exact head 4af3a935664e, squash-merged as dd89babf2474.
    Active #3144 implementation PR: none.

    Merged-master verification

    Current master is one unrelated field-economics commit ahead of #3142; comparison shows no later electrolyte, reaction, TP-flash, hydrate, or scale file changes.

    #3142 delivered the requested electrolyte-CPA hydrate configurations and reactive CO2/brine coupling. Recorded focused evidence from the exact merged head includes:

    • gas + fresh water: 20.647 °C;
    • gas + water + NaCl: 6.444 °C;
    • gas + oil + water + ions: 5.413 °C;
    • gas + water + MEG: 1.934 °C;
    • gas + water + MEG + NaCl: -14.909 °C;
    • reactive CH4 + CO2 + water + NaCl: 6.810 °C;
    • comprehensive offshore gas/condensate/MEG/NaCl: 12.197 °C;
    • maximum non-reactive focused inventory residual below 1.3e-12;
    • reactive carbon recovered at 0.0500000002 mol, Na+ and Cl- at 0.0100000000 mol, charge residual 3.0e-10 mol, with bicarbonate production;
    • 12/12 focused hydrate, produced-water, and CaCO3/FeCO3 salt-saturation methods passed;
    • non-ionic benchmark geometric aggregate changed -2.52% cold and -3.66% warm, with identical phase counts and checksums.

    Exact-head pre-commit, Spotless, documentation search, PaperLab, CodeQL, Javadoc, Java 21 Ubuntu/Windows fast tests, and all four Java 21 slow shards passed. Both Java 8 aggregate jobs failed on the same unrelated FieldDevelopmentNPVTest.testSubseaTiebackWithAdjuster floating-point boundary (10.000000000000002 versus an inclusive 10.0 limit); the six #3142 changed files do not include field-development code. No review submissions, PR comments, or unresolved review threads existed.

    Documentation impact: docs/thermo/hydrate_models.md was updated with supported non-reactive and reactive configurations and examples.

    Frozen next increment — clone-independent reactive electrolyte state

    Engineering question: Does SystemInterface.clone() produce an independently usable reactive electrolyte system, or can chemical-equilibrium work on the clone read or mutate the original system?

    Authoritative source inspection at 884810a814f9 confirms a structural ownership defect:

    1. SystemThermo.clone() deep-clones the phase array but leaves the chemicalReactionOperations field shallow-copied by super.clone(); the old intended clone line remains commented out.
    2. ChemicalReactionOperations.clone() itself is shallow and retains its system, reactive-component array, reaction list, matrices, LP/Newton solver state, and kinetics references.
    3. CalcSaltSatauration.createTrialSystem() already works around this locally by calling trialSystem.chemicalReactionInit() immediately after cloning, explicitly to bind chemical reactions to the clone.

    Repository issue/PR search found no separate active clone fix; this belongs to #3144 because it affects reactive electrolyte correctness, scale trials, process stream cloning, thread safety, and stale-state isolation.

    Frozen reproducer

    Use SystemElectrolyteCPAstatoil, mixing rule 10, at 298.15 K and 10 bara with CO2, water, Na+, and Cl-. Initialize reactions and flash the original, clone it, change only the clone temperature/pressure or CO2 loading, and solve/flash the clone.

    Fail-before-fix gates:

    • original and clone currently expose the same ChemicalReactionOperations identity;
    • solving the clone can operate through original-system and original-component references;
    • the existing salt-saturation path requires explicit clone reinitialization to avoid this ownership leak.

    Acceptance criteria

    • original and clone own distinct reaction-operation graphs bound to their respective phase/component objects;
    • flashing or solving chemistry on the clone leaves every original phase amount, species inventory, temperature, pressure, beta, and reaction state unchanged;
    • clone result agrees with an independently constructed fresh reference at the same state;
    • original and clone each close C/H/O/Na/Cl inventories and charge within frozen tolerances;
    • deterministic repeat plus changed T/P/composition paths do not inherit stale matrices or solver state;
    • two clones may solve concurrently without shared mutable reaction state;
    • ordinary non-chemical PR/SRK/CPA clone behavior and performance remain unchanged;
    • measure reactive-clone construction and complete-flash overhead;
    • retain or remove the salt-saturation workaround only after focused scale regressions prove equivalent behavior.

    Implementation direction: after phase arrays are cloned, rebuild ChemicalReactionOperations against the cloned system when the source owns reaction operations; do not rely on the current shallow ChemicalReactionOperations.clone(). Add a focused clone-isolation regression near SystemThermo plus CO2/brine and salt-saturation controls. Update clone Javadocs/API documentation to state reactive-state independence.

    Validation and blocker

    A local checkout at exact master was established. Java 17.0.19 and Maven wrapper 3.9.16 start successfully with task-specific writable Maven directories. Focused Maven execution is currently blocked before compilation because the clean dependency repository cannot resolve the canonical https://repo.maven.apache.org/maven2/ host (temporary DNS failure). Consequently no Java edit, formatter run, commit, branch, or PR was published; the mandatory direct Spotless/documentation gates were not bypassed.

    Next dependency: reproduce the clone mutation with the focused JUnit test on current master, implement clone-owned reaction reconstruction, run direct Spotless/documentation/pre-commit gates and focused/broader electrolyte/scale tests, then open the sole #3144 draft PR.

  2. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    2026-08-22 blocker update — Maven/Spotless network bootstrap fixed

    Authoritative master: 884810a814f918aea948f6bb05a37f92b8077394 (unchanged from the preceding ledger; connector comparison to master is identical).
    Active #3144 implementation PR: none; base/head: not applicable.

    Question: Was the reported Maven Central failure a Central outage or a runtime proxy/DNS routing defect?

    Diagnosis: direct resolver lookup for repo.maven.apache.org failed, while HTTPS reached Central successfully through the runtime proxy. Maven/Java did not automatically consume the shell proxy variables. Spotless's embedded Eclipse/P2 downloader also bypassed Maven settings.xml and attempted direct DNS for ftp.fau.de.

    Shared fix: updated the work-with-neqsim workflow with a reusable private Maven bootstrap and updated neqsim-scheduled-campaign to require it before Maven/Spotless work. The bootstrap:

    • forces canonical https://repo.maven.apache.org/maven2/;
    • translates HTTP_PROXY/HTTPS_PROXY and NO_PROXY into a private mode-0600 Maven settings file;
    • sets host/port-only JVM proxy properties for plugin-internal Java downloaders;
    • keeps wrapper/dependency caches and all environment configuration outside NeqSim feature diffs;
    • preserves existing Maven arguments/options and does not emit credentials.

    Verification:

    • Java 17.0.19; Maven wrapper 3.9.16;
    • clean-cache maven-dependency-plugin:3.8.1:get fetched org.apache.commons:commons-lang3:3.17.0: PASS;
    • fresh wrapper-home ./mvnw --version: PASS;
    • nested python3 devtools/run_spotless.py check downloaded Central and Eclipse/P2 dependencies and reached formatting evaluation: network-resolution PASS;
    • that disposable source checkout then reported an actual pre-existing trailing-blank-line Spotless violation in SystemElectrolyteCPATest.java; therefore Spotless itself is not claimed as passed for that tree;
    • skill validation, no-proxy behavior, repeat-bootstrap idempotence, XML parsing, and diff checks: PASS.

    Documentation impact: no NeqSim repository or user API change. Shared NeqSim workflow instructions and quality gates now document the bootstrap.

    Remaining limitation: this repairs proxied/DNS-restricted runtimes that expose standard proxy variables; it cannot bypass a genuinely unavailable or unauthorized network.

    Next dependency: the Maven DNS blocker is cleared. Resume the frozen clone-independent reactive-electrolyte-state reproducer and implementation on exact current master, then run the mandatory final-tree Spotless/documentation/focused/broader gates before any PR publication.

  3. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    2026-08-22 run ledger — draft PR #3151: clone-owned reactive state

    Authoritative master/base: 59f485417abb9cc34a3bd8c6779fc188b070ec25
    Exact head: d26c707ba707120fc80f4163b62ee83f6949ba0d
    Active campaign work: draft PR #3151; mergeable, CI in progress, no comments/reviews/threads at the post-publication audit. #3142 remains merged. One other autonomous NeqSim PR (#3150) is open, so the repository campaign cap is satisfied.

    Scientific/software question: can a cloned reactive electrolyte system solve independently, or does its shallow-copied ChemicalReactionOperations retain the source system/components/matrices/solvers? Current master reproduced shared object identity. The patch reinitializes reaction operations after phases are cloned; neutral systems retain the null fast path.

    Frozen qualified case: SystemElectrolyteCPAstatoil, mixing rule 10, database-selected water dissociation; 298.15 K/10 bara, 0.98 mol water + 0.01 mol Na+ + 0.01 mol Cl-, with changed clone states at 293.15–306.15 K, 7–18 bara and 0.008–0.012 mol NaCl. No model parameter, reaction constant, flash equation, hydrate algorithm, absorber equipment, or salt-input API change.

    Files:

    • src/main/java/neqsim/thermo/system/SystemThermo.java
    • src/main/java/neqsim/thermo/system/SystemInterface.java
    • src/test/java/neqsim/thermo/system/SystemThermoReactiveCloneTest.java

    Evidence: distinct reaction graphs; exact source immutability; fresh-reference agreement; deterministic repeat/changed state; H/O/Na/Cl and total phase-state closure; non-negative/normalized phases; aqueous charge; max |ln(Q/K)|; serialization; two-clone concurrency; neutral SRK control. Representative 303.15 K/14 bara maxima: element error 4.1e-10 mol, charge 6.6e-21 mol-equivalent, beta-sum error 1.9e-14, |ln(Q/K)|=1.9e-14; clone/fresh phase amounts agree within 2e-8 mol, source unchanged exactly.

    Commands/tests: Spotless apply/check, documentation-search audit, and git diff --check passed. Focused clone regression 4/4; selected reaction/electrolyte/serialization/neutral command reported 39 tests, 0 failures/errors, 1 existing skip; explicit slow hydrate 4/4; explicit slow scale 6/6. The pre-commit package was unavailable, so its three current local hook commands were run directly; the wrapper itself is not claimed. Exact-head CI is pending.

    Performance: seven alternating master/head JVM pairs; paired-median head/master ratios were 0.923 for neutral clone and 0.916 for clone+TP flash. Wide sign-changing fork variation means “no detectable slowdown,” not a speedup; phase counts/checksums were unchanged.

    References/data/license: no fitted parameter or experimental dataset. Software contract: Oracle Object.clone(). NeqSim source and submitted changes are Apache-2.0. Regression evidence is separate from calibration.

    Documentation impact: SystemInterface.clone() Javadoc now states phase/component/initialized reaction ownership; no guide/example is required for this internal ownership correction.

    Limitation / changed blocker: a broader CO2/brine case was rejected rather than weakening gates. Ordinary 303.15 K/14 bara reactive TP flash showed pre-existing elemental distortion; a reactive hydrate clone/fresh pair at 120 bara agreed with each other but ended at max |ln(Q/K)|=0.1011. #3151 does not claim CO2 reaction closure. Coordinate the generic flash aspect with #2937; the electrolyte reaction-coupling residual remains the next #3144 dependency.

    Open draft work remains IN PROGRESS until exact-head CI/review completes; do not classify ready to merge yet.

  4. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    2026-08-22 run ledger — draft PR #3156 opened

    • Authoritative base/master: bd07729f105efb48b14c641697e0f99fe9af6898
    • Active campaign PR: draft #3156
    • Exact head: f44ea9890243f4b8c7a62625c372b7fdbe02b63b
    • Question: can modified RAND return an extensive, internally consistent reactive electrolyte SystemInterface while keeping the initial element/charge inventory fixed across outer solves?
    • Frozen case: SystemElectrolyteCPAstatoil, 303.15 K, 14 bara, mixing rule 10, reactions + multiphase enabled; 7.0 CH4 / 0.5 CO2 / 2.3 H2O / 0.1 Na+ / 0.1 Cl- mol.
    • Master reproducer: returned beta sum 2.0 and maximum element error 0.488081974 mol in the one-mole diagnostic; solver variables were not synchronized to public component/system state, and each outer solve rebuilt its element target.
    • Implementation/files: FormulaMatrix.java, ModifiedRANDSolver.java, ReactiveMultiphaseTPflash.java, focused ReactiveElectrolyteStateConsistencyTest.java, and docs/thermo/reactive_flash.md. The flash now freezes extensive feed elements/charge, preserves feed scale, synchronizes ionic total/component/phase state, enforces 1e-8 normalized ionic element residual on every acceptance path, exposes residual diagnostics, and retains established neutral acceptance/writeback behavior.
    • Numerics at head: converged in 535 iterations; total 9.999999955559398 mol; beta sum 1.0; combined residual 5.823048851993917e-7; element residual 8.677387968605933e-9; maximum C/H/O/Na/Cl error 1.7508681793287906e-7 mol (5.37e-9 relative); charge -2.9997306138236003e-10 mol; gas ions 1e-30 mol; normalized/non-negative phases and component phase sums verified.
    • Validation: 25/25 focused + TP/PH reactive tests; 4/4 relevant electrolyte/gas-oil-water benchmark methods; Spotless; documentation search (655 Markdown + 1 HTML); docs tests 103/103; git diff --check. Existing neutral Gibbs-decrease control caught and prevented an over-broad writeback before publication. One cold complete calculation was 20.69 s / 522 iterations on invalid master versus 22.33 s / 535 on corrected head (+7.9%/+2.5%; single run, not statistically conclusive). Neutral/ordinary TP dispatch is unchanged.
    • Reference/data: algorithm basis Tsanas et al. 2017, doi:10.1021/acs.iecr.7b02714 and White et al. 1958, doi:10.1063/1.1744264. Synthetic regression only; no fitted or redistributed dataset, license, uncertainty preprocessing, or standard-state/species change.
    • Documentation: API table now distinguishes extensive equilibrium moles and exposes combined/element residual getters.
    • Limit/blocker: local -DskipTests package reached attached Javadoc but this runtime lacks javac/javadoc; VALIDATION BLOCKED BY INFRASTRUCTURE, pending exact-head CI. Pre-commit, PaperLab, and Spotless passed on the exact head; build/test/Javadoc, documentation search, and CodeQL remain in progress. No reviews, comments, or threads yet. PR remains in progress, not READY TO MERGE.
    • Coordination/next dependency: no ordinary TP stability change ([Campaign] TP-flash stability, multiphase equilibrium and performance roadmap #2937), absorber equipment change (Implement reactive absorber #205), or NaCl input/API change (handle NACl #448). First next action is exact-head CI/review follow-up; after merge, proceed to reaction/speciation stale-state and reaction-residual diagnostics rather than opening overlapping work.
  5. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    Electrolyte campaign run ledger — 2026-08-22

    • Portfolio / dependency state: positively identified autonomous implementation PRs open before publication: 1/10 ([AI-Assisted] feat(diagrams): add exchange-neutral graphical projection #3155). Prior electrolyte PR [AI-Assisted] fix(thermo): preserve reactive electrolyte state #3156 is merged and verified as current master; no [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144 implementation PR was active. Coordination boundaries remain [Campaign] TP-flash stability, multiphase equilibrium and performance roadmap #2937 (generic flash), Implement reactive absorber #205 (absorber equipment), and handle NACl #448 (salt API).
    • Exact SHAs: master/base 885e3986c195ba5ed4da95b772b3ca0407e22716; new draft #3158; exact head d1af8184688891d64ef05027d4291c70b84e4c95.
    • Frozen question: can reaction-equilibrium diagnostics retain finite signed ln(Q/K) for trace ions without changing the model, reaction constants, flash solver, or standard-state convention? Exact-master ChemicalReaction.calcK() underflowed to 0.0 for H3O+/OH- each at 1e-200 mol.
    • Model / basis / acceptance: Electrolyte-CPA Statoil, mixing rule 10; 298.15 K/10 bara synthetic water-dissociation numerical regression (K=1), plus database-selected aqueous reaction at 303.15 K/14 bara. Existing mole-fraction/activity-coefficient convention and units retained. Required finite trace residual, exact repeatability, increasing-activity nearby-state trend, immutable diagnostics, and ordinary aqueous max |ln(Q/K)| <= 2e-6.
    • References / data: White, Johnson & Dantzig (1958), DOI 10.1063/1.1744264; Tsanas et al. (2017), DOI 10.1021/acs.iecr.7b02714. No experimental/fitted/redistributed data; licensing, reported uncertainty, preprocessing, and calibration/hold-out splitting are N/A for this synthetic numerical regression.
    • Changed files: ChemicalReaction.java, ChemicalReactionOperations.java, new ChemicalReactionUnderflowDiagnosticTest.java, SystemThermoReactiveCloneTest.java, and docs/thermo/reactive_flash.md. Adds direct log-space quotient/residual methods plus immutable reaction-map and maximum-residual Java/JPype APIs; no serialized state or default solve-path dispatch.
    • Numerical evidence: legacy Q = 0.0; log-space ln(Q)=-939.570271423658; nearby 1e-190 mol state -893.518569563777; ordinary aqueous max |ln(Q/K)|=1.42108547152020e-14. Existing clone regression retains total/element balance, electroneutrality, non-negative normalized phase state, deterministic changed-state/serialization/concurrency coverage.
    • Validation: Spotless apply/check passed; documentation-search audit passed (655 Markdown + one HTML); docs unit suite 103/103; focused diagnostics/clone batch 6 applicable tests passed (one pre-existing reaction-list skip); Pitzer 22/22; explicit slow electrolyte-CPA 28/28. Commands are recorded in [AI-Assisted] feat(thermo): add stable reaction residual diagnostics #3158. Configured hook commands passed directly; the pre-commit package is absent locally. Optional three-species diagnostic kernel averaged 72.9 ms/call over 250 calls in this constrained runtime; complete neutral/electrolyte solve paths have zero new diagnostic calls and therefore no added default-path work.
    • Documentation impact: reactive-flash reference now documents residual API, conventions, and empty/NaN behavior.
    • Status / limitation / next dependency: VALIDATION PENDING CI. Exact-head PaperLab, Spotless, and pre-commit workflows passed; build/test/Javadoc, CodeQL, and documentation-search remain in progress. No reviews, comments, or inline threads. Draft is mergeable but remains in progress and is not READY TO MERGE. Next run: audit every exact-head CI job and review thread, repair only technically justified findings, then classify [AI-Assisted] feat(thermo): add stable reaction residual diagnostics #3158; after merge, return to the common electrolyte benchmark/speciation queue.
  6. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    Electrolyte campaign run ledger — 2026-08-22

    • Portfolio / dependency state: 3 positively identified autonomous implementation PRs were open before publication ([AI-Assisted] fix(process): serialize shared-stream consumers #3160, [AI-Assisted] fix(optimization): reject non-finite plant candidates #3163, [AI-Assisted] test(mcp): verify schema and example resources #3164), below the 10-PR limit; no [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144 implementation PR was active. Draft #3165 now occupies this campaign slot. Fix electrolyte CPA hydrate equilibrium, including reactive brines #3142 and [AI-Assisted] feat(thermo): add stable reaction residual diagnostics #3158 are merged. Boundaries remain [Campaign] TP-flash stability, multiphase equilibrium and performance roadmap #2937 generic flash, Implement reactive absorber #205 absorber equipment, and handle NACl #448 salt API.
    • Exact SHAs: current master/base c63eaa00320ba309dc5a27ab888fe37091c32b54; draft head c8c8c3f9e55423740875c155741a19fe9e7df938. The baseline reproducer was run on 3c2a7234c20a1579c858613aecee2f7690a2aef0; connector comparison proves every touched file is identical on the publication base.
    • Frozen question / baseline: after water-only chemicalReactionInit(), adding 0.001 mol CO2 left the same water-only operations object active, isChemicalSystem()==true, and no HCO3-. The increment must fail fast after add/remove/rename, preserve amount-only updates, and refresh only through reaction-init/database/mixing-rule lifecycle.
    • Model / basis: Electrolyte-CPA Statoil at 298.15 K/1.01325 bara, one aqueous phase, mixing rule 10 after refresh; 1.0 mol water + 0.001 mol CO2 and existing carbonate reactions. Direct Pitzer/GE coverage at 298.15 K/10 bara with 55.508 mol water. Existing model-specific reaction selection and parameters are retained.
    • References / data: White, Johnson & Dantzig (1958), DOI 10.1063/1.1744264; Tsanas et al. (2017), DOI 10.1021/acs.iecr.7b02714. Synthetic lifecycle regression only; no fitted/redistributed data, so licensing, uncertainty, preprocessing, and train/hold-out splitting are N/A.
    • Changed files: SystemThermo.java, SystemInterface.java, ChemicalReactionOperations.java, new SystemThermoChemicalReactionStaleStateTest.java, docs/thermo/reactive_flash.md, and docs/thermo/hydrate_models.md.
    • Evidence: refresh discovers HCO3-/CO3--; carbon residual 2.0e-10 mol (tolerance 1e-9); aqueous charge residual 3.0e-10 mol (tolerance 1e-9); diagnostic map non-empty. Add/remove/rename, retained operations, amount-only identity, clear, clone independence, serialization, electrolyte EOS, and Pitzer/GE are covered.
    • Validation / performance: focused stale suite 6/6; Pitzer 22/22; broader clone/diagnostic/CO2-water/Pitzer batch 38/38; explicit slow Electrolyte-CPA/hydrate 32/32; neutral SRK benchmark 1/1 (100 warmups + 2,000 measured flashes; 68.39 s Surefire wall time); Spotless apply/check passed; documentation search passed (655 Markdown + 1 HTML); docs tests 103/103. No EOS/activity/fugacity/stability kernel changed; neutral isChemicalSystem() gains one predictable boolean check. No statistically powered paired slowdown claim is made.
    • Documentation impact: Javadocs plus reactive-flash and hydrate guidance now document invalidation, recovery, and the EOS/GE model boundary.
    • Status / limitation / next dependency: VALIDATION PENDING CI. Draft is mergeable; all six exact-head workflows are in progress, with no reviews, comments, or inline threads. Local pre-commit was unavailable; local pomJava8.xml failed before assertions because org.ejml.simple.ConstMatrix was absent from that classpath, so hosted Java 8 remains required. No reaction tables or K parameters changed. Next run: inspect every exact-head CI/review thread and repair only branch-attributable findings; after merge, investigate evidence-backed model-specific active-reaction/parameter selection across electrolyte EOS and GE models.
  7. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    Campaign ledger — 2026-08-22

    • Master at publication / PR base: fc01e56e228e61ecf0dafbbe2c28d40e4d43eb0e; implementation reproduced and validated from 242b9539d68d5a6a16faacd783bf60b2238e4ca7; exact head ce62a8dd483cf71c93f4b85b60f72a99d2c7e02c.
    • Active draft: [AI-Assisted] feat(thermo): expose reaction parameter provenance #3168 — model-specific reaction-data selection and equilibrium-parameter provenance. The exact head merges the unrelated [AI-Assisted] feat(mcp): expose implementation inventory #3166 master update; compare is 2 ahead / 0 behind and contains only the nine intended provenance files.
    • Question/scope: make reaction table, stored reference, Tref, and K(T) coefficients inspectable for electrolyte EOS, Pitzer GE, and Kent-Eisenberg without changing reactions, parameters, standard states, flash/equilibrium equations, or neutral paths. Current mapping remains CPA/Pitzer → STANDARD, Kent-Eisenberg → KENT_EISENBERG; this is an implementation fact, not cross-model validation.
    • References/data: existing standard CO2water identifier cites Plummer–Busenberg 1982 (DOI); Kent–Eisenberg 1976 remains the apparent-constant source; Huttenhuis et al. 2008 (DOI) documents activity-based mole-fraction/infinite-dilution conventions and validity ranges relevant to future MDEA work. No external values were copied or fitted; existing repository data remains under Apache-2.0.
    • Files: new ChemicalReactionDataSource; updated ChemicalReaction, ChemicalReactionList, ChemicalReactionFactory, ChemicalReactionOperations, SystemInterface, SystemKentEisenberg; new ChemicalReactionProvenanceTest; updated docs/thermo/reactive_flash.md.
    • Validation: current-master missing-API reproducer 1/1; focused provenance 6/6 on normal build and 6/6 with pomJava8.xml; broader Kent/Pitzer/CPA/CO2-water/stale-state/clone/underflow matrix 53/53; Maven Javadoc BUILD SUCCESS; direct Spotless apply/check, docs search (655 Markdown + 1 HTML), and whitespace checks passed. The local pre-commit executable was absent; mandatory Spotless actions ran directly. Hosted exact-head CI is in progress; no CI pass is claimed.
    • Numerical/performance: standard CO2water coefficients [253.235548,-12865.665607,-39.440767,0], Kent [231.465,-12092.1,-36.7816,0], both Tref 298.15 K, unchanged. Typed selection 11.5 ns/call vs legacy string selection 12.0 ns/call; complete CPA reaction init 19.8 ms median; neutral SRK clone+TP-flash 76.2 µs median with no new neutral call path.
    • Documentation/limits/next dependency: API mapping, provenance access, citations, and non-interchangeability warning documented. No parameter accuracy claim. Next dependency after [AI-Assisted] feat(thermo): expose reaction parameter provenance #3168 is an evidence/license-qualified audit of active reactions and parameter validity by model family, using independent validation data before any table split or fit.
  8. EvenSol commented on Aug 22, 2026

    @EvenSol
    CollaboratorAuthor

    2026-08-23 — first exact-head READY TO MERGE classification for draft #3168

    • Master/base: fc01e56e228e61ecf0dafbbe2c28d40e4d43eb0e; head: ce62a8dd483cf71c93f4b85b60f72a99d2c7e02c; implementation base 242b9539d68d5a6a16faacd783bf60b2238e4ca7.
    • Active campaign PR: [AI-Assisted] feat(thermo): expose reaction parameter provenance #3168 (still draft, mergeable, 0 commits behind). Portfolio audit found 4 positively identified open autonomous implementation PRs; [AI-Assisted] feat(thermo): expose reaction parameter provenance #3168 remains this campaign's only active PR.
    • Scientific question: make reaction-table selection and per-reaction equilibrium-parameter provenance auditable across electrolyte EOS/GE systems without changing reaction thermodynamics or adding work to neutral calculations.
    • References/data: existing NeqSim identifiers are traced to Plummer & Busenberg (1982), https://doi.org/10.1016/0016-7037(82)90056-4; Kent & Eisenberg (1976), Hydrocarbon Processing 55, 87–90; and Huttenhuis et al. (2008), https://doi.org/10.1016/j.fluid.2007.10.020. No external numerical dataset was copied, transformed, or fitted; only already-shipped Apache-2.0 repository values/identifiers are exposed.
    • Files: no source changes in this follow-up. The exact-head diff remains the 9 intended provenance/API/test/docs files listed in the PR.
    • Exact-head hosted gates: all 6 workflows succeeded—build/test/Javadoc, CodeQL, PaperLab, Spotless, pre-commit, and documentation-search coverage. Full build jobs also succeeded: Java 21 fast tests on Ubuntu/Windows, Java 8 full tests on Ubuntu/Windows, Java 21 Javadocs, and all 4 Java 21 slow-test shards. No human/Copilot reviews, conversation comments, or inline threads existed before classification.
    • Local evidence retained from the unchanged head: focused provenance 6/6 on normal and Java 8 profiles; broader reactive matrix 53/53; Maven Javadoc, direct Spotless apply/check, and documentation search passed. Typed selector median 11.5 ns/call versus legacy 12.0 ns/call; CPA reaction initialization 19.8 ms; neutral SRK clone + TP-flash 76.2 µs. No numerical thermodynamic result changed.
    • Documentation impact: docs/thermo/reactive_flash.md and additive Javadocs document source selection, diagnostics, current mappings, and the scientific stop boundary.
    • Limitations/blocker: no merge blocker is known on this exact head. This is regression/provenance evidence, not independent accuracy validation. CPA and Pitzer still map to STANDARD; no model-specific reaction set or parameter table is yet scientifically validated.
    • Next dependency: maintainer merge/closure of [AI-Assisted] feat(thermo): expose reaction parameter provenance #3168. While it remains open, no second electrolyte PR will be created. After merged-master verification, audit model-specific active reactions, standard-state conventions, parameter validity ranges, and public/licensed independent validation evidence before proposing any table split or coefficient change.

    Readiness classification was recorded on #3168; the PR remains draft and no merge/auto-merge/ready transition was performed.

  9. EvenSol commented on Aug 23, 2026

    @EvenSol
    CollaboratorAuthor

    Electrolyte campaign run ledger — 2026-08-23

    • Portfolio/dependency state: prior campaign PR [AI-Assisted] feat(thermo): expose reaction parameter provenance #3168 is merged; no [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144 implementation PR was active at run start. Repository-wide open-PR search returned no open PRs, so the shared 10-slot cap was not limiting this run. New draft [AI-Assisted] feat(thermo): audit reaction data across electrolyte models #3175 now occupies the sole [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144 implementation slot.
    • Exact SHAs: authoritative master/base 5a851750f8d12b3a598a87da0acadb3faef8b4e6; draft head 4d817bfe294f12392ca496711a55f5e06e64b080; branch codex/electrolyte-reaction-model-audit; compare is 3 commits ahead / 0 behind with exactly 3 intended added files.
    • Frozen question: before splitting reaction tables or activating model-specific reactions, can NeqSim compare the actual initialized active reaction set and stored equilibrium-parameter provenance across electrolyte EOS and electrolyte GE models without modifying either solve path?
    • Model/basis/stop boundary: SystemElectrolyteCPAstatoil, SystemPitzer, and SystemKentEisenberg; 298.15 K / 1.01325 bara; 0.01 mol CO2 + 0.99 mol water; explicit chemicalReactionInit(). Current mapping remains CPA/Pitzer -> STANDARD, Kent-Eisenberg -> KENT_EISENBERG. No reaction activation, coefficient, standard state, EOS/GE model, flash/stability, hydrate, absorber, or salt-input behavior is changed.
    • Implementation/files: new ChemicalReactionModelAudit provides immutable side-effect-free snapshots of model name, typed reaction source, active reactions, stoichiometry, stored reference, Tref, and K(T) coefficients plus EOS-vs-GE comparison; new ChemicalReactionModelAuditTest; new docs/thermo/reaction_model_audit.md.
    • Scientific references/data/license: no external numerical dataset was copied, transformed, fitted, or redistributed. The documentation retains the existing carbonate-equilibrium foundation (Plummer & Busenberg 1982, DOI 10.1016/0016-7037(82)90056-4) and identifies Pitzer activity-coefficient treatment as the relevant GE-model context. Repository data/code remain Apache-2.0. This increment is regression/audit infrastructure, not parameter validation.
    • Regression/acceptance coverage added: CPA-vs-Pitzer source/reaction/parameter comparison; Kent-Eisenberg source/parameter difference detection; immutable defensive snapshots; fail-fast behavior before reaction initialization. These tests verify repository selection/provenance only and deliberately do not claim independent parameter accuracy.
    • Validation: VALIDATION PENDING CI. The connector-only run did not execute local Maven/Spotless/pre-commit/Javadoc/docs tests, so none are claimed as passed. Exact-head workflow query immediately after publication had not yet produced runs; no reviews, review submissions, conversation comments, or inline threads existed at that audit point. Hosted CI must establish Java 8, Spotless, pre-commit, Javadoc, documentation search, focused/broader tests, and static checks before any readiness classification.
    • Performance/compatibility: opt-in diagnostic only; zero added calls in neutral PR/SRK/CPA and zero added calls in ordinary electrolyte solve paths unless the audit is explicitly requested. Java 8-compatible APIs only; returned collections/arrays are immutable or defensive copies.
    • Documentation impact: new focused guide explains why a shared table is not proof of cross-model validity and gives the evidence-gated workflow for deciding whether EOS and GE models need different active reactions/tables.
    • Limit/blocker/next dependency: PR [AI-Assisted] feat(thermo): audit reaction data across electrolyte models #3175 is open draft and IN PROGRESS. Next action is exact-head CI/review audit and technically justified repair if needed. After merge, use the audit surface with independent public/licensed validation data and explicit standard-state/species conventions before proposing any model-specific reaction-table split or coefficient change. Generic TP/phase stability remains [Campaign] TP-flash stability, multiphase equilibrium and performance roadmap #2937; absorber equipment Implement reactive absorber #205; salt input/API handle NACl #448.
  10. EvenSol commented on Aug 23, 2026

    @EvenSol
    CollaboratorAuthor

    Electrolyte campaign follow-up ledger — 2026-08-23

    • Portfolio/dependency state: 2 positively identified open autonomous implementation PRs ([AI-Assisted] feat(thermo): audit reaction data across electrolyte models #3175 electrolyte, [AI-Assisted] fix(flash): refine high-pressure hydrogen boundary roots #3176 generic flash), below the shared 10-slot limit. [AI-Assisted] feat(thermo): audit reaction data across electrolyte models #3175 remains this campaign's sole active PR; no competing electrolyte PR was opened.
    • Exact SHAs: current master/base 5a851750f8d12b3a598a87da0acadb3faef8b4e6; inspected head 4d817bfe294f12392ca496711a55f5e06e64b080; repaired exact head f5996963b5c6e6786421ed3c9cee77dde18cb225; branch codex/electrolyte-reaction-model-audit. Final compare is 5 ahead / 0 behind with the same 3 scoped files.
    • Scientific question/model/basis: unchanged from the frozen [AI-Assisted] feat(thermo): audit reaction data across electrolyte models #3175 scope—side-effect-free comparison of actual initialized reaction sets and stored parameter provenance for Electrolyte-CPA, Pitzer GE, and Kent-Eisenberg at 298.15 K, 1.01325 bara, 0.01 mol CO2 + 0.99 mol water after explicit reaction initialization. No reaction, coefficient, standard state, EOS/GE equation, flash, hydrate, salt API, or absorber behavior changed.
    • References/data/license: unchanged: Plummer & Busenberg (1982), DOI 10.1016/0016-7037(82)90056-4, plus the Pitzer activity-coefficient framework. No external numerical data were copied, processed, fitted, or redistributed; repository material remains Apache-2.0. Regression evidence remains separate from scientific parameter validation.
    • Defect/review repair: exact-head CI on 4d817… reproduced a Spotless failure in both new Java files. The successful hosted Spotless artifact supplied the exact formatting patch. A code-quality review also identified stored-list representation exposure. On f5996963b5c6e6786421ed3c9cee77dde18cb225, getReactions() returns a fresh unmodifiable copy and the focused regression verifies distinct list identities plus rejected mutation. The review was answered and its only thread resolved.
    • Files changed this run: ChemicalReactionModelAudit.java (exact Spotless format plus defensive list view) and ChemicalReactionModelAuditTest.java (exact Spotless format plus copy-identity regression). Documentation source remains unchanged and still accurately describes a read-only opt-in API.
    • Validation/commands: no local Maven result is claimed. Hosted exact-head workflows currently pass CodeQL, Spotless format patch, pre-commit checks, documentation search, PaperLab, Java 21 Javadocs, agent-skill checks, and slow shards 1/4, 3/4, and 4/4. Java 21 Ubuntu/Windows fast tests and slow shard 2/4 remain active; Java 8 jobs are downstream. VALIDATION PENDING CI and no READY TO MERGE classification.
    • Numerical/performance evidence: no thermodynamic numerical result or solve path changed. Copy-on-read allocates only when the explicit audit getter is invoked; neutral PR/SRK/CPA and ordinary electrolyte calculations have zero new calls.
    • Documentation impact: no additional documentation edit was required for this repair; the existing new audit guide already documents immutability, opt-in execution, EOS/GE boundaries, and the evidence gate for future table splits.
    • Limit/blocker/next dependency: mandatory full build matrix is still running. Next run must inspect the exact f5996963b5c6e6786421ed3c9cee77dde18cb225 results, every new review/thread, mergeability, and final diff; repair only branch-attributable failures or classify readiness if all gates pass. After maintainer merge, proceed to independent public/licensed model-family validation before any reaction-table or parameter split.
  11. 458 remaining items

  12. EvenSol commented on Nov 6, 2026

    @EvenSol
    CollaboratorAuthor

    #3144 ledger update — draft PR #4896 is the sole active campaign implementation PR. Initial implementation 118ea2cc1afb52fed4ae6d8203424dd0304f692d; current exact append-only head 7d36d1bbbf44b8868c46fba1bbf2ae462204139e; unchanged base de81c1f81c226988a2326c27ed1873094ed86e11.

    This raises positively identified autonomous implementation occupancy from 8/10 to 9/10. It converts the #4234 source-semantics diagnosis into an explicit, fixed-topology PHREEQC reactive NaCl/carbonate mode with frozen pH/water-activity and coupled reactive-flash evidence. Legacy/default selection remains unchanged and fail-closed; no empirical offset, invented parameter, tolerance relaxation, or unsupported qualification is present.

    Continuity: four append-only commits (implementation, generated inventory, exact hosted Spotless patch, regenerated inventory), six changed paths, zero behind base. Preserve exact head; keep draft; do not rebase, replace, close, abandon, merge, or mark ready from this workflow. Initial pre-commit failed only formatting; the hosted Spotless artifact was applied exactly. Replacement pre-commit, Spotless, coverage, PaperLab, skill lint, Java 8/21 model specifications, and Java 21 Javadoc pass. Fast/slow tests and CodeQL remain in progress on the identical Java/docs parent; duplicate exact-head runs await approval because the final inventory commit is bot-authored.

    Scientific receipt and next dependency are recorded on #4234. #4044 remains awaiting independent Henry-data scientific/provenance review and does not block this distinct work.

  13. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    #3144 ledger — #4896 merged; KCl follow-on remains evidence-gated

    Current master: d8c9354ab490564c3c2220b8f735c645cd575c79.

    PR #4896 merged on the preserved exact feature head 7d36d1bbbf44b8868c46fba1bbf2ae462204139e as 6de7d5b720269fa1aa20da63f532338c6db2f250. Its tested parent completed all eight hosted workflow groups successfully. The campaign now has no active implementation PR.

    Global autonomous implementation occupancy is 3/10, with all existing heads preserved:

    Capacity is therefore available but is not the scientific gate. Fresh #4234 reconciliation confirms:

    • current-master runtime/reproducer blobs are identical to the fully executed checkpoint;
    • eight-point K10/K15 MAE remains 0.183089025 K, maximum 0.348203156 K;
    • the measured-state guest/hydrate term is only 2.855e-6–4.374e-6, with maximum |G/A| = 6.606e-5; the material model contrast remains aqueous-side;
    • NaCl, CaCl2, mixed-salt, full-family and Burgass controls remain retained;
    • the merged [AI-Assisted] feat(pitzer): add exact-source reactive carbonate mode #4896 mode is source-qualified only for reactive NaCl/carbonate and correctly rejects K+.

    A follow-on KCl PR is not dependency-ready: forcing #4896 into K10/K15 would violate its fixed topology; the alternate Pitzer hydrate route still requires an unqualified caller-supplied CO2-K-Cl zeta, and the K10/K15 low endpoints are below its 274.19 K CO2 Henry-reference floor. The next safe dependency is source-qualified K+-bearing reactive-carbonate semantics with independent frozen PHREEQC validation plus defensible low-temperature dissolved-CO2 evidence, or an independently cleared K+/Cl- association formalism with full derivatives, validity range and held-out cross-paper validation.

    No new branch, PR, parameter, offset, tolerance, default or qualification was created. #4044 remains independently review-gated for Henry-data closure only and does not block unrelated electrolyte work. Detailed numerical evidence: #4234 comment 6703162841.

  14. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    #3144 ledger — #4903 exact-head reactive-brine increment; KCl diagnosis retained

    Scientific checkpoint: #4234 (comment)
    Draft implementation checkpoint: #4903 (comment)

    • Draft [AI-Assisted] feat(pitzer): automate reactive brines and preserve characterized oil #4903 is [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144's sole active implementation PR at preserved head 9e0087c5d19290949e2dda1cde43228dab53a336; tested synthetic merge 7c4d60111e7576827656a59c280b6a6f549698bd; base d8c9354ab490564c3c2220b8f735c645cd575c79.
    • Current master is c7deef24d25ac8904fcaabf7bc8992c44ecb00ae. The PR is mergeable, 3 commits ahead / 1 behind, and remains draft. No sync, rebase, replacement, readiness transition, close or merge was performed.
    • Scope is bounded automatic Na/K/Ca chloride/sulfate CO2/H2S acid-base selection, native Pitzer activity/pH accessors, the opposite-sign ternary-ψ correction, and characterized-oil phase-property preservation. Generic missing definitions and unsupported topology extensions remain fail-closed; explicit legacy/manual modes are preserved.
    • New evidence is 135 pinned IPhreeqc free-species states with maximum discrepancies of approximately 0.000804 pH, 0.0000565 water activity and 0.00299 log10 gamma. This is implementation agreement, not full experimental qualification.
    • The published Millero comparison still differs by approximately 0.174 pK1 / 0.218 pK2. Full reactive-speciation qualification remains closed; no redox, minerals, calcium ion pairs, experimental oil-solubility, hydrate or Huldra qualification is claimed.
    • All eight Java 21 slow-test shards and the aggregate gate passed. Model specifications pass on Java 8/21, plus Java 21 Javadocs and the other recorded workflow groups. No hosted failure is present; broad Java 21 fast tests on Windows and Ubuntu remain in progress, so complete CI is pending.
    • The hosted synthetic merge reran all Qualify electrolyte-CPA CO2 hydrate accuracy for KCl and mixed brines against Dholabhai (1993) #4234 controls. K10/K15 remains 0.183089025 K eight-point MAE and 0.348203156 K maximum absolute error; guest/hydrate contribution remains negligible relative to the aqueous term. NaCl, CaCl2, mixed-salt, pure-water, Archer, He–Morse and Burgass controls are retained.
    • Portfolio occupancy is 8/10 positively identified autonomous implementation capabilities, absolute ceiling 10. The PR description's obsolete 8/20 and ceiling-24 wording was corrected without moving the head. Capacity does not permit a second [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144 implementation PR under the one-active-PR-per-campaign rule.

    Classification: scientifically bounded exact-head increment; final two platform jobs and independent electrolyte/Pitzer plus petroleum-characterization review pending. Keep draft.

  15. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    #3144 ledger — repaired #4903 head and new low-temperature KCl evidence

    Classification: material scientific evidence found; current implementation remains bounded and draft; final Java 8 CI plus independent scientific/provenance review and like-for-like low-temperature CO2–KCl reproduction remain open.

  16. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    Campaign ledger — low-temperature KCl/CO2 diagnostic — 2026-11-07

  17. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    Exact-head hosted validation and dependency triage — 7 November 2026

  18. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    Targeted provenance reconciliation — 7 November 2026

    A fresh primary/peer-reviewed source pass did not locate an accessible copy or catalog record for the 1995 Burgass MSc method/uncertainty record. It did sharpen the observable boundary:

    • Tohidi's 1995 thesis explicitly says Tables 6.2–6.5 are laboratory data generated by Burgass (1995), covering NaCl, CaCl2, KCl and mixed salts, but the accessible carrier still does not define the Table 6.4 "mole %" denominator or uncertainty: https://www.ros.hw.ac.uk/bitstream/handle/10399/1183/KaloraziBT_0995_dpeBL.pdf?isAllowed=y&sequence=1
    • Mousavi et al. (2024), DOI https://doi.org/10.1002/ghg.2298, is a modern Heriot-Watt CO2-solubility method with explicit uncertainty propagation. It states that solubility is reported as the CO2 mole fraction in the salt-free aqueous phase, i.e. the molecular-only water+CO2 basis. Its KCl data are 323.15–423.15 K, however, so it is an adjacent convention/control and not a like-for-like low-temperature replacement for the 266.5/273.2 K Burgass points.
    • Burgass et al. (2023), DOI https://doi.org/10.2516/stet/2023005, documents low-temperature CO2 hydrate measurements in NaCl/NaCl+CaCl2 brines, but measures hydrate-equilibrium temperature rather than dissolved KCl CO2 mole fraction.
    • Jibril et al. (2025), DOI https://doi.org/10.1021/acs.jced.5c00173, gives an explicit modern hydrate-dissociation uncertainty treatment (reported standard uncertainties 0.22 K and 0.054 MPa) and surveys Burgass/Dholabhai controls, but likewise cannot supply uncertainty for the 1995 Table 6.4 solubilities.

    Implication: the molecular-only mapping reported by #4915 now has a documented modern methodological analogue, but selecting it for the 1995 data would still be an inference. Its exact-head residual range remains −0.1922 to −0.2317 percentage points, and the native/pseudo-salt mappings remain retained. No source value, tolerance, parameter, offset or qualification is changed.

    Next evidence action is unchanged but more precise: obtain the original Burgass sample-analysis/mass-balance definition, or a contemporaneous Heriot-Watt procedure explicitly tied to Tables 6.2–6.5. Modern hydrate-HET uncertainty and elevated-temperature KCl solubility should remain controls, not substitutes.

  19. EvenSol commented on Nov 7, 2026

    @EvenSol
    CollaboratorAuthor

    Current-head K10/K15 artifact decomposition — 7 November 2026

    This checkpoint reads the completed hosted evidence artifacts for exact PR head a5abb611122007ba13bc7db83e67c8f84fda455d on base/master 2f6ea706cde0760adea991fac4e9dd5c4d33c290. It changes no branch file, source value, model, parameter, offset, tolerance or qualification.

    Artifact provenance

    Core run https://github.com/equinor/neqsim/actions/runs/42403013961 produced complete selected evidence:

    • electrolyte-assessment-evidence-0 (artifact 13587346212): 110-row full Dholabhai family, fixture SHA-256 07b4a213e10bc49ae3251dd6c1efd95410cf17894e4d69980dd6e6baafe17201.
    • electrolyte-assessment-evidence-1 (artifact 13587010595): 110-row matched measured-state aqueous/guest partition plus the four Burgass–Tohidi low-temperature states.
    • electrolyte-assessment-evidence-4 (artifact 13586776251): 28-row K10/K15/pure-water/cross-salt diagnostic plus 10-row Archer water-activity sequence.

    All producer manifests report passed tests, complete selected evidence, and zero failures/errors/skips.

    Current-head K10/K15 roots

    Recipe P / bara measured / K calculated / K error / K water activity aqueous xCO2 guest CO2 fugacity / bara
    K10 low 11.30 269.02 269.317637 +0.297637 0.940974 0.00926062 10.4341
    K10 high 34.85 277.86 277.775116 -0.0848845 0.929986 0.0199461 27.4616
    K15 low 14.15 269.03 268.958359 -0.0716408 0.910284 0.0103111 12.7920
    K15 high 35.75 276.01 275.661797 -0.348203 0.900990 0.0191918 27.7772

    Across all eight K10/K15 points, MAE is 0.183089024509208 K; maximum absolute error is 0.348203156258705 K. K10 MAE is 0.140825437271701 K; K15 MAE is 0.225352611746715 K.

    Contribution separation at measured states

    The independent measured-state artifact evaluates brine and matched salt-free states at the source temperature and pressure:

    • absolute aqueous contribution: 0.0484252267–0.0793532790;
    • absolute guest/hydrate contribution: 2.8552489e-6–4.3737959e-6;
    • |guest/aqueous|: 5.1265e-5–6.6061e-5;
    • identity residual: at numerical roundoff;
    • every K10/K15 state: accepted numerical diagnostic, still explicitly diagnostic_not_qualified.

    The guest/hydrate term is therefore negligible relative to the aqueous contrast. The unresolved K10/K15 bias is bounded to aqueous water chemical potential/activity, dissolved CO2 delivery, and ion-specific aqueous association/model semantics—not the hydrate guest term.

    The four Burgass–Tohidi low-temperature states remain unchanged: all three observable mappings underpredict the printed source by 0.1922–0.3124 percentage points; water activity is 0.91448–0.95820; inventory and molecular fugacity close to numerical precision. The source denominator and original method/uncertainty remain unresolved, so no mapping is selected.

    Platform and portfolio state

    Both Java 21 fast suites, all eight slow shards and the aggregate slow suite pass after #4914 merged. Only the two Java 8 broad suites remain active. Review state remains 0 submissions / 0 threads. Portfolio occupancy is 5/10 positively identified autonomous implementation capabilities, with #4915 still the sole active #3144 PR.

    Classification: exact-head scientific decomposition and Java 21 platform validation passed; Java 8 broad suites, original Burgass method/uncertainty, and independent electrolyte/hydrate review remain pending. Keep draft.

  20. EvenSol commented on Nov 8, 2026

    @EvenSol
    CollaboratorAuthor

    Post-merge validation and scientific gate — 8 November 2026

    PR #4915 merged from preserved exact head a5abb611122007ba13bc7db83e67c8f84fda455d as merge commit a2899775547a540c1fb7c5bb9a3d2fc08f917d55. Current master is 97c03ecf50d16a6dab7bd812364f49d5f4c5c444; no branch was rebased, replaced, restarted, force-updated, or closed for capacity.

    All eight exact-head workflow groups completed successfully. Core run https://github.com/equinor/neqsim/actions/runs/42403013961 is fully green: both Java 21 fast suites, all eight slow shards and aggregate, model specifications, Javadocs, and both Java 8 broad suites (Ubuntu and Windows) passed. Code Health, CodeQL, pre-commit, Spotless, documentation coverage, devtools tests, and engineering-capability coverage also passed. There are no submitted reviews or review threads on #4915.

    The merged no-fit benchmark preserves four Burgass–Tohidi low-temperature KCl/CO2 states and the retained Dholabhai/Archer/He–Morse/Yasunishi/Burgass/Carroll/NaCl/CaCl2/mixed-salt controls. Exact-head K10/K15 results remain MAE 0.183089024509208 K, maximum absolute error 0.348203156258705 K. At measured states the aqueous contribution is 0.0484252267–0.0793532790, while the guest/hydrate contribution is only 2.8552489e-6–4.3737959e-6 (|guest/aqueous| = 5.1265e-5–6.6061e-5). The unresolved bias is therefore localized to aqueous water chemical potential/activity, dissolved-CO2 delivery, and ion-specific aqueous association/model semantics—not the hydrate guest term.

    Technical benchmark status is complete on merged default-branch evidence. Scientific qualification is not complete: the original Burgass sample-analysis/mass-balance definition, the 1995 “mole %” denominator, and source uncertainty remain unavailable. The modern salt-free-aqueous convention is an analogue, not proof of the 1995 convention. Therefore no mapping, empirical temperature offset, new parameter, tolerance relaxation, production-model change, or accuracy claim is justified.

    The one-active-PR gate for #3144 is now clear. Three open AI-assisted implementation PRs are positively identified globally (#4872, #4876, #4877), so occupancy is 3/10. Spare capacity does not override the scientific/provenance gate; no speculative follow-on PR is opened. Next action is to recover the original Burgass method/uncertainty record or a contemporaneous Heriot-Watt procedure explicitly tied to Tables 6.2–6.5, then perform a like-for-like observable comparison before any physical correction. #4044 remains independently review-gated only for Henry-data closure.

  21. EvenSol commented on Nov 8, 2026

    @EvenSol
    CollaboratorAuthor

    Campaign progress — published draft PR #4925 on the exact append-only head e75b0169e773d660d5c97d0920a68d535647e376 (base 97c03ecf50d16a6dab7bd812364f49d5f4c5c444, tree 642fd162c10ef8461825fdb3ff7a31be32a225b7). Portfolio occupancy is now 7/10 positively identified autonomous implementation PRs; #4925 is the sole active #3144 campaign PR.

    Scientific increment: the accessible Burgass/Tohidi dissolved-CO2 diagnostic now covers all 16 KCl states in Table 6.4 and the four NaCl/KCl/CaCl2 Table 6.5 states. The source says Table 6.5 was excluded from parameter optimization, so those four rows are retained as no-fit mixed-salt holdouts. All 16 KCl states underpredict the reported “mole %” under each of the three defensible denominator mappings; the mixed-salt holdouts bracket zero. This rules out a single denominator choice as a complete explanation, but does not identify a hydrate-model root cause.

    No production equations, Pitzer/CPA interactions, hydrate parameters, flash tolerances or empirical temperature offsets changed. Exact local validation includes Java 17 and actual Java 8 focused tests, 20 rows + reservoir regression, Javadocs, Spotless/docs/pre-commit gates, and source/PMD/SpotBugs against the exact base baseline with 0 new finding groups. Hosted exact-head CI and independent scientific/provenance review are pending.

    Remaining evidence gap: the source “mole %” denominator, original Burgass measurement method details, and uncertainty remain unavailable. Next action is to use this expanded aqueous/guest-fugacity evidence alongside the existing K10/K15 water-activity and hydrate-contribution split; do not fit or qualify until the missing source basis or an independent measurement series resolves that boundary.

    PR: #4925

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions