# Review product values after a field definition becomes stricter

Separate valid, out-of-range, wrong-type and missing values in one complete review set.

## Check existing values against the stated definition

The supplied product field requires an integer from 1 through 12, inclusive. P1 has 6, P2 has 0, P3 has the text six and P4 has null. This is a local required-field contract. It does not infer a vendor migration or silently convert a text word into a number.

Filled existing-value review

| Product | Stored value | Classification | Next check |
| --- | --- | --- | --- |
| P1 | 6 | Valid | Retain |
| P2 | 0 | Out of range | Obtain correct value |
| P3 | six | Wrong type | Verify numeric fact |
| P4 | null | Missing | Keep required-field gap |

## A new definition does not repair old records

One value is valid, two are invalid and one is missing. Correcting P2 alone does not resolve P3 or P4. The missing record is explicitly reported, rather than counted with valid values or ignored as an empty cell.

1. State type and inclusive limits
2. Inspect every existing value
3. Separate invalid and missing
4. Review each corrected fact

A correction must have its own supplied value; do not clamp or fill records just to pass validation.

P2 becomes 1, P3 becomes 6 and P4 becomes 12, all verified. Which records pass?

All four, including P1. Both 1 and 12 are inside the explicitly inclusive limits.

## Keep definition errors distinct from record errors

The download contains all four records plus the complete corrected case. It is a review worksheet, not an update file or a claim that a store save succeeded. Use the existing per-operation result owner for batch-write evidence.

Minimum 13 with maximum 12 rejects DEFINITION_INPUT; no records are classified under an impossible definition. Bounds are whole numbers 0–1,000 and every record has a distinct ID. Null means missing; wrong-type values remain original evidence.

A data-administration build needs a visible unresolved review set and controlled correction scope, rather than automatic replacements for every invalid value.

## Complete local records and trace

```json
{
  "issuer": "Astera Technology",
  "resource": "ops-product-invalid-field-review",
  "locale": "en",
  "contract": "The supplied product field requires an integer from 1 through 12, inclusive. P1 has 6, P2 has 0, P3 has the text six and P4 has null. This is a local required-field contract. It does not infer a vendor migration or silently convert a text word into a number.",
  "input": {
    "minimum": 1,
    "maximum": 12,
    "records": [
      {
        "id": "P1",
        "value": 6
      },
      {
        "id": "P2",
        "value": 0
      },
      {
        "id": "P3",
        "value": "six"
      },
      {
        "id": "P4",
        "value": null
      }
    ]
  },
  "output": {
    "ok": true,
    "state": "unknown",
    "result": {
      "valid": [
        "P1"
      ],
      "invalid": [
        "P2",
        "P3"
      ],
      "missing": [
        "P4"
      ]
    },
    "trace": [
      {
        "id": "P1",
        "value": 6,
        "decision": "valid"
      },
      {
        "id": "P2",
        "value": 0,
        "decision": "out-of-range"
      },
      {
        "id": "P3",
        "value": "six",
        "decision": "wrong-type"
      },
      {
        "id": "P4",
        "value": null,
        "decision": "missing"
      }
    ]
  },
  "verificationCases": [
    {
      "name": "baseline",
      "input": {
        "minimum": 1,
        "maximum": 12,
        "records": [
          {
            "id": "P1",
            "value": 6
          },
          {
            "id": "P2",
            "value": 0
          },
          {
            "id": "P3",
            "value": "six"
          },
          {
            "id": "P4",
            "value": null
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "unknown",
        "result": {
          "valid": [
            "P1"
          ],
          "invalid": [
            "P2",
            "P3"
          ],
          "missing": [
            "P4"
          ]
        }
      }
    },
    {
      "name": "material-edit",
      "input": {
        "minimum": 1,
        "maximum": 12,
        "records": [
          {
            "id": "P1",
            "value": 6
          },
          {
            "id": "P2",
            "value": 1
          },
          {
            "id": "P3",
            "value": 6
          },
          {
            "id": "P4",
            "value": 12
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "valid": [
            "P1",
            "P2",
            "P3",
            "P4"
          ],
          "invalid": [],
          "missing": []
        }
      }
    },
    {
      "name": "fresh-boundary",
      "input": {
        "minimum": 13,
        "maximum": 12,
        "records": [
          {
            "id": "P1",
            "value": 6
          },
          {
            "id": "P2",
            "value": 0
          },
          {
            "id": "P3",
            "value": "six"
          },
          {
            "id": "P4",
            "value": null
          }
        ]
      },
      "expected": {
        "ok": false,
        "error": "DEFINITION_INPUT"
      }
    }
  ],
  "meaningOfNull": "Unknown or no established value for the field; inspect its specific trace.",
  "businessSideEffects": false
}
```
