ID:WORK-118Status:done
Validate property and ref name uniqueness in createComponentRenderable
Priority:highComplexity:simpleMilestone:v1.0.0Source:ADR-008
Summary
Add a static validation step to createComponentRenderable that checks for naming collisions between properties keys and refs keys. Since ADR-008 uses a flat namespace where both properties and refs become component props/slots, duplicate names would cause silent overwrites.
Acceptance Criteria
createComponentRenderablethrows a descriptive error if any key appears in bothpropertiesandrefs- Error message includes the rune name and the colliding key(s)
- All existing runes pass validation (no current collisions)
- Unit test for collision detection
- Unit test confirming no false positives on valid runes
Approach
- In
packages/runes/src/lib/component.ts, add a Set intersection check betweenObject.keys(properties)andObject.keys(refs)before building the renderable - Throw with rune name and colliding keys if intersection is non-empty
Resolution
Completed: 2026-04-04
Branch: claude/adr-008-implementation-nBN9K
What was done
- Added Set intersection validation in
packages/runes/src/lib/component.ts - Fixed 3 pre-existing collisions: bento-cell
icon(renamed property toiconSource), faction/realmname(removed from properties, kept as ref only) - 9 unit tests in
packages/runes/test/component.test.ts
Notes
- Validation runs before attribute decoration, catching collisions at build time
- All 1969 existing tests pass after fixing the 3 collisions
Relationships
History
- 1676387complexitylow→simple
- f262d7bsource+ADR-008
- c435d57statusready→done
- ☑ `createComponentRenderable` throws a descriptive error if any key appears in both `properties` and `refs`
- ☑ Error message includes the rune name and the colliding key(s)
- ☑ All existing runes pass validation (no current collisions)
- +2 more criteria
- dca6250milestone+v1.0.0
- ece282cCreated (ready, high, low, runes, validation, architecture)