Source: https://guthlabs.ai/docs/instruments/punnett-square-generator/

instrument / verified-clean

# Punnett Square Generator

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/punnett-square-generator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/punnett-square-generator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/punnett-square-generator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/punnett-square-generator/qualification/>)

## Ledger state

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

**Area**: Biology, Medicine & Pharmacology (educational estimates only — every panel labeled not-medical-advice)

**Tranche**: tranche-4

**Evidence ID**: t4-146

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The combinatorial Punnett-square method is correct for one or two loci under complete Mendelian dominance and independent assortment. The instrument should specify genotype syntax, dominance encoding, ratio format, and validation constraints before implementation. The educational and not-medical-advice labeling is appropriate.

### Formula and scope findings

- The stated formula is conceptually standard, but it is not specified algorithmically: allele notation, gamete generation, grid ordering, and whether ratios are reported as counts, simplified ratios, or probabilities are undefined.

- Phenotype ratios require an explicit phenotype-mapping rule. The spec does not formally state that each locus uses complete dominance, nor how multiple dominance relationships are encoded.

- The dihybrid calculation is valid only under independent assortment; linkage and recombination are not represented or constrained.

### Unit assumptions

- Alleles and genotypes are categorical symbols, not quantities with physical units.

- number_of_traits must be an integer boundary value of 1 or 2.

- Each parental genotype must contain exactly two alleles per represented locus, using a consistent allele notation.

- Test vectors assume complete Mendelian dominance, with uppercase alleles dominant over corresponding lowercase alleles, and independent assortment for separate loci.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The zero-trait input creates an empty cross with a normalization denominator of zero, so genotype and phenotype ratios are undefined; the instrument must reject it. The unspecified dominance convention also changes phenotype classification unless an explicit allele convention is enforced.

## 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": {
    "parent1_genotype": "Aa",
    "parent2_genotype": "Aa",
    "number_of_traits": 1,
    "dominance": {
      "A": "dominant",
      "a": "recessive"
    }
  },
  "expected_outputs": {
    "punnett_grid": [
      [
        "AA",
        "Aa"
      ],
      [
        "Aa",
        "aa"
      ]
    ],
    "genotype_ratio": {
      "AA": 1,
      "Aa": 2,
      "aa": 1
    },
    "phenotype_ratio": {
      "dominant_A": 3,
      "recessive_a": 1
    }
  },
  "working": "Each parent produces gametes A and a. The 2 x 2 grid has AA, Aa, Aa, aa, for 4 total outcomes. Genotype counts: AA = 1, Aa = 2, aa = 1, so the ratio is 1:2:1. Dominant phenotype count = AA + Aa = 1 + 2 = 3. Recessive phenotype count = aa = 1. Phenotype ratio = 3:1."
}
````

## 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-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
