{
  "product": "Specification (reference)",
  "title": "Feature Flag Service",
  "summary": "Evaluate flags per user with targeting, rollouts and audit.",
  "category": "services",
  "entries": [
    {
      "path": [
        "AI",
        "Flags",
        "Create, update, archive a flag"
      ],
      "value": "",
      "status": "yes",
      "note": "keys are stable and unique"
    },
    {
      "path": [
        "AI",
        "Flags",
        "Boolean and multivariate flags"
      ],
      "value": "",
      "status": "yes",
      "note": "string, number or JSON variants"
    },
    {
      "path": [
        "AI",
        "Flags",
        "Default value when nothing matches"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Targeting",
        "Rules on user attributes"
      ],
      "value": "country, plan, email domain",
      "status": "yes",
      "note": "ordered, first match wins"
    },
    {
      "path": [
        "AI",
        "Targeting",
        "Individual user overrides"
      ],
      "value": "",
      "status": "yes",
      "note": "allow and deny lists"
    },
    {
      "path": [
        "AI",
        "Targeting",
        "Percentage rollout"
      ],
      "value": "",
      "status": "yes",
      "note": "stable bucketing by user key"
    },
    {
      "path": [
        "AI",
        "Targeting",
        "Consistent bucketing across evaluations"
      ],
      "value": "",
      "status": "yes",
      "note": "same user, same variant"
    },
    {
      "path": [
        "AI",
        "Environments",
        "Separate values per environment"
      ],
      "value": "dev/staging/prod",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "Evaluate a single flag for a context"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "Bulk evaluate all flags for a context"
      ],
      "value": "",
      "status": "yes",
      "note": "one round trip per page load"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "Local evaluation from a cached ruleset"
      ],
      "value": "",
      "status": "yes",
      "note": "no network call per check"
    },
    {
      "path": [
        "AI",
        "Delivery",
        "Streaming updates to connected SDKs"
      ],
      "value": "SSE or websocket",
      "status": "yes",
      "note": "with polling fallback"
    },
    {
      "path": [
        "AI",
        "Safety",
        "Kill switch takes effect immediately"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Audit",
        "Change log of who changed what, when"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Audit",
        "Evaluation metrics per flag and variant"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "UI",
        "Console",
        "Flag list with environment and state"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "UI",
        "Console",
        "Rule editor with a live preview of who matches"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "UI",
        "Console",
        "Change history with diff and rollback"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    }
  ]
}
