You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Feature-flag and role guards now annotate the edges (and journey steps) they
gate (TRACKER step 3.5, failure modes G5/B5):
- A renders/handles edge enclosed by a flag call (isEnabled/useFlag/useFeature/…,
extensible via scan option `featureFlags`) or a role check (role===, hasRole,
hasPermission, can(), …) carries an EdgeCondition{kind:"flag"|"role"}.
- Ternary else-branches are negated; a flag hook result used as a bare boolean
(`const beta = useFlag("beta")`) is resolved back to its flag call.
- journeys() surfaces the handles-edge guard on the step it gates, so a path
reads "… onClick [flag isEnabled("new-billing")] → navigate /billing/new".
Also fix an inline-handler id collision: two inline-arrow on* handlers in one
component collapsed to a single event node (dropping the second's condition and
effect). Inline handlers are now disambiguated by line.
Eval: new `conditions` golden check + fixture g5-feature-flag (flag-gated
navigation, role-gated fetch, flag-gated child render). 92 parser + 29 core
tests pass; eval green (precision/recall 1.000). **Gate 3 passes — Phase 3 done.**
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
**Build:** feature-flag detection (configurable call names: `useFlag`, `useFeature`, `isEnabled`) and role checks in render branches → `EdgeCondition{kind:"flag"|"role"}` on the enclosed `renders`/`handles` edges.
215
215
**Accept:** fixture `g5-feature-flag` green: flag-gated UI's journey step carries the flag name. **Gate 3 passes.**
"note": "Feature-flag and role guards become EdgeConditions on the enclosed renders/handles edges, and journeys surface them: the flag-gated 'Try new billing' navigation and the role-gated 'Reset billing' fetch each carry their guard, so a journey step reads with the flag/role name. isEnabled(...) is a default flag callee; role === \"admin\" matches the role heuristic.",
0 commit comments