Background
Evaluation in #190 concluded that VocabularyScope (GLOBAL/ORG/TEAM/PERSONAL enum) should be replaced with Path-based scope using isAncestorOf() instead of ordinal comparison. SettingsScope from casehub-platform-api is not the right target — it carries Instant effectiveAt semantics irrelevant here — but Path directly is the right type.
What needs to change
LabelVocabulary.scope: VocabularyScope enum → Path (with PathAttributeConverter)
isScopeAccessible(VocabularyScope, VocabularyScope) → isAccessibleFrom(Path callerPath) using Path.isAncestorOf()
- REST API: scope path param changes from GLOBAL/ORG/TEAM/PERSONAL strings to explicit path strings
- Flyway migration: convert existing enum values (GLOBAL → root, ORG/TEAM/PERSONAL → segment-based paths)
- Delete
VocabularyScope enum
Scale: M · Med
Background
Evaluation in #190 concluded that
VocabularyScope(GLOBAL/ORG/TEAM/PERSONAL enum) should be replaced withPath-based scope usingisAncestorOf()instead of ordinal comparison.SettingsScopefromcasehub-platform-apiis not the right target — it carriesInstant effectiveAtsemantics irrelevant here — butPathdirectly is the right type.What needs to change
LabelVocabulary.scope:VocabularyScopeenum →Path(withPathAttributeConverter)isScopeAccessible(VocabularyScope, VocabularyScope)→isAccessibleFrom(Path callerPath)usingPath.isAncestorOf()VocabularyScopeenumScale: M · Med