Source: https://guthlabs.ai/docs/instruments/titration-curve-plotter/implementation/

instrument implementation / implementation-contract

# Titration Curve Plotter implementation

A source-bound implementation contract for Titration Curve Plotter; deployment and executable qualification remain separate.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **implementation-contract**

## Binding contract

This record describes what an executable surface must bind and validate. It does not claim that a public calculator, package, or production route is deployed.

**Record owner**: Guth Instruments

**Lifecycle**: verified-with-binding-errata

**Evidence ID**: t6-058

**Effect**: Computation or source lookup only

## Input and validation requirements

The zero-concentration titrant case creates a genuine division-by-zero in equivalence-volume calculation and must be rejected. The zero-volume boundary also exposes a likely log10(0) failure if the pre-equivalence Henderson-Hasselbalch formula is applied at the initial point. Volume-direction conventions require explicit handling.

## Required corrections

````
[
  {
    "vector": 2,
    "field": "curve_points pH@0",
    "wrong": 2.872327,
    "correct": 2.875277,
    "cause": "working computes x=0.001332671 correctly, then a WRONG 'Correction' drops Ka^2 under the root, concludes pH=2.875276 anyway — and the field ships 2.872327, matching neither"
  },
  {
    "vector": 4,
    "field": "curve_points pH@10.1",
    "wrong": 10.954243,
    "correct": 10.954677,
    "cause": "micro: [OH-]=1e-5/0.0111 rounded to 9.0e-4 before the log"
  }
]
````

## Inspectable interface fixture

The sample below is evidence for interface and validation tests, not a production implementation.

````
{
  "inputs": {
    "analyte": {
      "type": "strong_acid",
      "formula": "HCl",
      "concentration_M": 0.1,
      "volume_mL": 25
    },
    "titrant": {
      "type": "strong_base",
      "formula": "NaOH",
      "concentration_M": 0.1
    },
    "sampled_volumes_mL": [
      0,
      12.5,
      25,
      30
    ]
  },
  "expected_outputs": {
    "curve_points": [
      {
        "volume_mL": 0,
        "pH": 1
      },
      {
        "volume_mL": 12.5,
        "pH": 1.477121
      },
      {
        "volume_mL": 25,
        "pH": 7
      },
      {
        "volume_mL": 30,
        "pH": 11.958607
      }
    ],
    "equivalence_volume_mL": 25,
    "half_equivalence_volume_mL": 12.5,
    "half_equivalence_pH": 1.477121,
    "key_features": {
      "equivalence_point": "pH 7.000000 under the 25 C ideal strong/strong assumption",
      "half_equivalence_note": "pH is not pKa; the analyte is a strong acid"
    }
  },
  "working": "Initial acid moles = 0.100 mol/L * 0.0250 L = 0.002500 mol. Equivalence volume = 0.002500 mol / 0.100 mol/L = 0.0250 L = 25.0 mL. At 0 mL: [H+]=0.100, so pH=-log10(0.100)=1.000000. At 12.5 mL: OH- moles=0.100*0.0125=0.001250 mol; remaining H+ moles=0.002500-0.001250=0.001250 mol; total volume=0.0375 L; [H+]=0.001250/0.0375=0.0333333; pH=-log10(0.0333333)=1.477121. At 25.0 mL, strong acid and strong base exactly neutralize, so pH=7.000000. At 30.0 mL: excess OH- moles=0.100*0.0300-0.002500=0.000500 mol; total volume=0.0550 L; [OH-]=0.000500/0.0550=0.00909091; pOH=-log10(0.00909091)=2.041393; pH=14.000000-2.041393=11.958607."
}
````

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/titration-curve-plotter/>)[02**Mechanism**](<https://guthlabs.ai/docs/instruments/titration-curve-plotter/mechanism/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/titration-curve-plotter/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche6/tranche6-results.json`

- `tranche errata record`
