Skip to content

[finding] ADR-0082's chain diagram labels the near-miss prop typo "hard" — decision 5 of the same ADR, and os validate itself, both say it is a non-fatal advisory #11914

Description

@os-steve

Found while repairing ADR-0082 line 99 for #10808 (PR #11912). That card's scope was deliberately narrowed by the PM to line 99 only, with adjacent citations to be filed rather than fixed — so this is filed, not fixed.

The site

docs/adr/0082-react-component-contract-governance.md, decision 6's chain diagram (the last box, four lines above the line #10808 repairs):

 prop gate (os validate — decision 5)
(hard: missing-required / typo)

The label puts missing-required and typo on the same side of one word, hard.

Why it is wrong

The same ADR says otherwise, fifteen lines earlier. Decision 5's own body splits the two by severity and is correct:

  • missing a required binding (e.g. ObjectForm with no objectName) → error (fails os build).
  • a near-miss of a known prop (edit distance ≤ 2, e.g. onSuccesonSuccess) → warning.

And the CLI agrees with decision 5, not with the diagram. Measured on origin/main at fd50e59e7, CLI and the showcase app's dependency closure built in a worktree, mistakes injected into examples/app-showcase/src/ui/pages/renewals-pipeline.page.ts under a trap restore (the same runs written up in PR #11912, whose report carries the full output):

injectedexitverdict line
missing required objectName1✗ Author-time rules failed (1 issue)
the onSucces typo alone0✓ Validation passed plus one advisory

A typo alone exits 0. Nothing about it is hard.

Why it is worth an edit

The diagram is the compressed form a reader takes away — it is what gets quoted into a skill, a doc page or a PR description, and it is the half of decision 6 a reader reaches first. Read as it stands, it advertises a gate that fails a build on a near-miss prop name, which the platform does not deliver (declared ≠ enforced, Prime Directive #10 — pointed the other way: the doc claims more enforcement than exists).

Note the near-miss tolerance is a deliberate, load-bearing design choice, not an accident: decision 5 records that arbitrary unknown props are not flagged at all because the contract's data props are a curated subset. A diagram that flattens the split erases the reasoning.

Suggested fix

One line in the diagram box, e.g. (missing-required: error / near-miss prop: advisory). Governed file (docs/adr/**), human-merge-only, so the edit is a draft PR with review requested — but no pre-ruling looks necessary here either: decision 5 already records the correct severities, so this is a factual repair of an illustration, not a decision change.


Generated by Claude Code

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions