Jump to a problem, path or page
Jump to a problem, path or page
Updates as you edit. Run the review to record it; passing every check completes the problem.
Not yet passed: Caller responsibility
Add Caller and define its responsibility.
Not yet passed: Flag evaluator responsibility
Add Flag evaluator and define its responsibility.
Not yet passed: Rule predicate responsibility
Add Rule predicate and define its responsibility.
Not yet passed: Type validator responsibility
Add Type validator and define its responsibility.
Not yet passed: Cohort hasher responsibility
Add Cohort hasher and define its responsibility.
Not yet passed: Flag snapshot responsibility
Add Flag snapshot and define its responsibility.
Not yet passed: Caller → Flag evaluator
A directed path must connect Caller to Flag evaluator. Arrows represent requests, dependencies, or event flow.
Not yet passed: Flag evaluator → Rule predicate
A directed path must connect Flag evaluator to Rule predicate. Arrows represent requests, dependencies, or event flow.
Not yet passed: Flag evaluator → Type validator
A directed path must connect Flag evaluator to Type validator. Arrows represent requests, dependencies, or event flow.
Not yet passed: Flag evaluator → Cohort hasher
A directed path must connect Flag evaluator to Cohort hasher. Arrows represent requests, dependencies, or event flow.
Not yet passed: Flag evaluator → Flag snapshot
A directed path must connect Flag evaluator to Flag snapshot. Arrows represent requests, dependencies, or event flow.
Not yet passed: Which matching rule wins?
Not yet passed: How should missing attributes compare?
Not yet passed: What makes percentage allocation reproducible?
Not yet passed: Interfaces and invariants
Write at least 80 characters describing concrete operations, inputs, outputs, state and errors. This check measures completeness, not semantic correctness.
Not yet passed: Trade-offs and failure cases
Write at least 80 characters about alternatives, failure handling and edge cases. Review the reasoning yourself using the reference discussion.
Rule-based educational feedback. Notes are checked by length only; topology checks confirm directed reachability. These checks do not validate semantics, latency, reliability or every valid design.
Build a pure evaluator over immutable typed snapshots, with explicit predicate semantics and deterministic cohort hashing. Return safe reason metadata so callers can explain results without hidden I/O. Validate the snapshot’s schema, unique flag/rule identities, result types and hash-spec version at load time. Keep a runtime guard for unsupported or corrupt inputs. Resolve the flag and validate context types. Operators use explicit typed comparisons; missing attributes return nonmatch unless an operator specifically handles absence. Walk rules in declared order. For a matched percentage rule, derive a stable bucket from canonical salt/subject bytes using the versioned hash contract; compare against configured integer basis points. Return a typed variant or configured/caller fallback with reason, rule ID and snapshot revision. The evaluator does not mutate context, read clocks implicitly or log raw attributes.
There is no single correct diagram. Explain where yours differs and which requirement justifies it.