Source: https://guthlabs.ai/docs/instruments/oblique-shock-calculator/implementation/

instrument implementation / implementation-contract

# Oblique Shock Calculator implementation

A source-bound implementation contract for Oblique Shock Calculator; 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-075

**Effect**: Computation or source lookup only

## Input and validation requirements

The formula produces an undefined result when its denominator is forced to zero, and the specification does not state how negative deflection angles should be interpreted. The calculator should reject nonphysical gamma=0 and signed expansion inputs rather than silently returning shock results.

## Required corrections

````
[
  {
    "vector": 1,
    "field": "M2",
    "wrong": "sqrt(3)=1.732",
    "correct": 2,
    "cause": "own working concludes M2=Mn2/sin(beta-theta)=1/sin30=2 (degenerate Mach wave, M unchanged) then field ships sqrt(3)"
  },
  {
    "vector": 2,
    "field": "M2",
    "wrong": 1.45605,
    "correct": 1.456324,
    "cause": "micro 5th-digit slip"
  },
  {
    "vector": 3,
    "field": "theta / M2",
    "wrong": "atan(75/382)=11.09 deg / 382.0",
    "correct": "atan(25*sqrt(3)/191)=12.77 deg / 2.3673",
    "cause": "working equates 25*sqrt(3)/191 with 75/382, i.e. sqrt(3)=1.5; M2 field ships the denominator 382 — nonsense value"
  },
  {
    "vector": 4,
    "field": "M2",
    "wrong": 4.14728827,
    "correct": 1.036822,
    "cause": "M2 through a beta=60deg shock at M1=2 cannot exceed M1"
  }
]
````

## Inspectable interface fixture

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

````
{
  "inputs": {
    "mode": "beta",
    "M1": 2,
    "beta": 30,
    "gamma": 1.4,
    "angle_unit": "degrees",
    "branch": "weak"
  },
  "expected_outputs": {
    "theta": 0,
    "beta": 30,
    "M2": "sqrt(3) = 1.73205080757",
    "P2_over_P1": 1,
    "T2_over_T1": 1
  },
  "working": "Mn1=M1 sin(beta)=2 sin(30°)=2(1/2)=1. Mn1^2=1. tan(theta)=2 cot(30°)(1-1)/[4(1.4+cos(60°))+2]=0, so theta=0°. Normal-shock pressure ratio=1+[2 gamma/(gamma+1)](Mn1^2-1)=1+[2(1.4)/2.4](0)=1. Density ratio=[(gamma+1)Mn1^2]/[(gamma-1)Mn1^2+2]=2.4/(0.4+2)=1. Temperature ratio=(P2/P1)/(rho2/rho1)=1/1=1. Mn2^2=[1+0.2(1)]/[1.4(1)-0.2]=1.2/1.2=1, so Mn2=1. M2=Mn2/sin(beta-theta)=1/sin(30°)=2. This is the Mach-wave boundary, not a finite-strength shock; equivalently the weak oblique-shock limit gives M2=M1=2. For the same theta=0°, the strong branch is beta=90° with M2=sqrt(1/3)=0.57735026919."
}
````

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/oblique-shock-calculator/>)[02**Mechanism**](<https://guthlabs.ai/docs/instruments/oblique-shock-calculator/mechanism/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/oblique-shock-calculator/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`
