Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Support `$.flags` context values in segment conditions

Open
#40 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
52/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
rust
Domain
backend

Research direction

Start by locating the engine's get_value_from_jsonpath path and the JsonPath::parse call, then read the evaluation flow around segment conditions and the serde_json_path_core::spec AST. Use the shared dependency cases from engine-test-data and compare the reference implementation in flagsmith-engine#343. Done means the dependency cases pass, contexts without $.flags avoid per-evaluation overhead, and detection follows the parser AST.

Written by the indexing model from the issue text.

Description

Dependent flags let a segment condition read another flag's result via a $.flags.<feature name>.<enabled|value|variant> property, so that flag has to be resolved before the condition is evaluated. Behaviour is defined by the shared cases in Flagsmith/engine-test-data#59; schema in Flagsmith/flagsmith#8396; reference implementation in Flagsmith/flagsmith-engine#343.

The reference implementation resolves a flag lazily, on first read, rather than scanning every condition up front to discover dependencies. Three things in this engine currently prevent that:

  • get_value_from_jsonpath calls serde_json::to_value(ec) on every lookup, serialising the whole context (~268 µs on a 263-feature environment, of which the query itself is 389 ns). A lazily resolved flags map has nothing to be inserted into, and lookups already dominate evaluation.
  • JsonPath::parse also runs on every lookup (~1.5 µs), uncached.
  • serde_json::Value exposes no lookup hook, so resolution must be triggered by inspecting the parsed path. serde_json_path::JsonPath keeps its Query private, though the AST is public in serde_json_path_core::spec.
Acceptance criteria
  • engine-test-data is bumped from v3.7.0 to the tag containing the flag dependency cases, and they pass.
  • An environment with no $.flags conditions gains no per-evaluation cost.
  • Dependency detection uses the parser's AST, not a bespoke matcher, so all pinned spellings of a query agree.
Dominant language
Rust
Stars
1
Forks
0
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Flagsmith/flagsmith-rust-flag-engine

All issues in Flagsmith/flagsmith-rust-flag-engine

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.