Source: https://guthlabs.ai/docs/instruments/snell-s-law-refraction-calculator/

instrument / verified-clean

# Snell's Law Refraction Calculator

The current ledger marks this instrument verified clean within the source-bound verification corpus.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/snell-s-law-refraction-calculator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/snell-s-law-refraction-calculator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/snell-s-law-refraction-calculator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/snell-s-law-refraction-calculator/qualification/>)

## Ledger state

The current ledger marks this instrument verified clean within the source-bound verification corpus.

**Area**: Physics — Kinematics/Projectiles/Orbits, Forces/Energy/Momentum, Rotational Dynamics, Gravitation, Oscillations/Waves, Optics, E&M Fields, Relativity, Quantum, Statistical Thermo

**Tranche**: tranche-5

**Evidence ID**: t5-132

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The core law is correct, but the specification is incomplete because it does not define angle units, angle reference direction, inverse-solving behavior, physical-domain validation, or total-internal-reflection handling. The verdict is NEEDS_REVIEW until those behaviors are specified.

### Formula and scope findings

- The relation n1 sin(theta1) = n2 sin(theta2) is the standard Snell's law formula for a planar interface, assuming isotropic, non-magnetic media and angles measured from the interface normal.

- The calculator must explicitly implement the inverse forms theta2 = asin((n1/n2) sin(theta1)) and theta1 = asin((n2/n1) sin(theta2)); the listed equation alone does not specify which angle is solved for.

- The valid inverse-sine domain must be enforced: if the argument magnitude exceeds 1, no real refracted angle exists because of total internal reflection.

- The physical branch should normally return angles from 0 to 90 degrees for ordinary refraction; this branch convention is not specified.

### Unit assumptions

- Refractive indices n1 and n2 are dimensionless.

- Angles in the test vectors are in degrees, and inverse-trigonometric results are converted back to degrees. The specification does not state whether the implementation expects degrees or radians.

- Angles are measured from the interface normal, not from the interface surface.

- The media are assumed homogeneous, isotropic, and non-magnetic; refractive index values are wavelength- and condition-dependent.

- For ordinary transparent media, n1 and n2 are assumed positive and nonzero.

## Boundary hardening

### Recorded hazards

- If n2 is zero, the inverse formula divides by zero.

- If n1 or n2 is negative, the physical interpretation requires handling complex or signed refractive indices; this is not specified.

- For light going from a higher-index medium to a lower-index medium, an input above the critical angle produces an inverse-sine argument greater than 1 and must be reported as total internal reflection rather than NaN or a fabricated angle.

- Passing degree values directly to JavaScript Math.sin or Math.asin, which use radians, causes incorrect results; explicit conversion is required.

- The interface-normal convention is not stated, so complementary angle results are possible if users measure from the surface.

- A refractive-index table requires wavelength, temperature, pressure, and material-state assumptions; a generic air/water/glass/diamond table can be misleading without those qualifiers.

## Errata and corrections

No applied erratum is attached to this unique-name record.

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "mode": "solve_theta2",
    "n1": 1,
    "n2": 1.5,
    "theta1_deg": 0
  },
  "expected_outputs": {
    "theta2_deg": 0
  },
  "working": "sin(theta2) = (n1/n2) sin(theta1) = (1.0/1.5) sin(0 degrees) = (2/3)(0) = 0. Therefore theta2 = asin(0) = 0 degrees."
}
````

## Related workflows

No source-defined multi-instrument workflow membership is recorded.

## Sources and evidence

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

- `VERIFIED_LEDGER.json · VERIFIED_CLEAN`

- `evidence-tranche5/tranche5-results.json`
