mirror of
https://github.com/hanzoai/insights.git
synced 2026-11-03 00:52:32 +00:00
The tree was a debranded snapshot of upstream taken around 2026-02-20, and upstream has moved about five months since. This replaces it with upstream master, mechanically re-derived: bin/debrand does the rename, and the pipeline and squashed migrations are restored from the shipped tree. Not a merge. The previous import replaced the tree wholesale in a single commit, so there is no shared content history to merge against. Reproducing the rename on the new tree is what actually converges. What survives: .hanzo/workflows, the Dockerfiles and bin/docker* entrypoints, compose files, LLM.md, and insights/migrations. The squashed initial migration is load-bearing — the live database records it by name, so upstream's ~918 individual migrations cannot come back. Nine products are dropped as unreferenced. Twenty-one more that we do not run are kept anyway because the core app still imports them; unpicking those is a refactor and does not belong in a rebase. This base does not build yet, and the reasons are not in the rename: upstream now wants Python 3.13.13 against our 3.12.12 and Django 5.2 against our 4.2, and the dependency manifests still name upstream packages that we republish under our own names. Those are decisions, not renames.
2428 lines
180 KiB
JSON
2428 lines
180 KiB
JSON
{
|
||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
"properties": {
|
||
"allow_unknown_events": {
|
||
"default": false,
|
||
"description": "Suppresses the validation that rejects metrics referencing events not yet ingested by this project. REQUIRES explicit user confirmation before being set to true — never flip this silently to retry a failed call. The default validation catches typo'd event names and missing instrumentation. Set this to true only when the user has confirmed the event is intentional (e.g. they are about to instrument it).",
|
||
"type": "boolean"
|
||
},
|
||
"description": {
|
||
"anyOf": [
|
||
{
|
||
"maxLength": 3000,
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Description of the experiment hypothesis and expected outcomes."
|
||
},
|
||
"exposure_criteria": {
|
||
"anyOf": [
|
||
{
|
||
"properties": {
|
||
"exposure_config": {
|
||
"anyOf": [
|
||
{
|
||
"properties": {
|
||
"event": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Custom exposure event name. Required when kind is 'ExperimentEventExposureConfig'."
|
||
},
|
||
"id": {
|
||
"anyOf": [
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Action ID. Required when kind is 'ActionsNode'."
|
||
},
|
||
"kind": {
|
||
"anyOf": [
|
||
{
|
||
"enum": ["ExperimentEventExposureConfig", "ActionsNode"],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Defaults to 'ExperimentEventExposureConfig' when omitted. Pass 'ActionsNode' for an action-based exposure."
|
||
},
|
||
"properties": {
|
||
"description": "Property filters (event, person, and other supported types). Pass an empty array if no filters needed.",
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"anyOf": [
|
||
{
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"default": "exact"
|
||
},
|
||
"type": {
|
||
"const": "event",
|
||
"default": "event",
|
||
"description": "Event properties",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "person",
|
||
"default": "person",
|
||
"description": "Person properties",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "person_metadata",
|
||
"default": "person_metadata",
|
||
"description": "Top-level columns on the persons table (e.g. created_at), not properties JSON",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"enum": ["tag_name", "text", "href", "selector"],
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "element",
|
||
"default": "element",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "event_metadata",
|
||
"default": "event_metadata",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "session",
|
||
"default": "session",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"cohort_name": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"key": {
|
||
"const": "id",
|
||
"default": "id",
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"anyOf": [
|
||
{
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"default": "in"
|
||
},
|
||
"type": {
|
||
"const": "cohort",
|
||
"default": "cohort",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"type": "number"
|
||
}
|
||
},
|
||
"required": ["value"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"anyOf": [
|
||
{
|
||
"enum": [
|
||
"duration",
|
||
"active_seconds",
|
||
"inactive_seconds"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "string"
|
||
}
|
||
]
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "recording",
|
||
"default": "recording",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "log_entry",
|
||
"default": "log_entry",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"group_key_names": {
|
||
"anyOf": [
|
||
{
|
||
"additionalProperties": {
|
||
"type": "string"
|
||
},
|
||
"propertyNames": {
|
||
"type": "string"
|
||
},
|
||
"type": "object"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"group_type_index": {
|
||
"anyOf": [
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "group",
|
||
"default": "group",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "feature",
|
||
"default": "feature",
|
||
"description": "Event property with \"$feature/\" prepended",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"description": "The key should be the flag ID",
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"const": "flag_evaluates_to",
|
||
"default": "flag_evaluates_to",
|
||
"description": "Only flag_evaluates_to operator is allowed for flag dependencies",
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "flag",
|
||
"default": "flag",
|
||
"description": "Feature flag dependency",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "string"
|
||
}
|
||
],
|
||
"description": "The value can be true, false, or a variant name"
|
||
}
|
||
},
|
||
"required": ["key", "value"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"type": {
|
||
"const": "insightsql",
|
||
"default": "insightsql",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"type": {
|
||
"const": "empty",
|
||
"default": "empty",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "data_warehouse",
|
||
"default": "data_warehouse",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "data_warehouse_person_property",
|
||
"default": "data_warehouse_person_property",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "error_tracking_issue",
|
||
"default": "error_tracking_issue",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"log",
|
||
"log_attribute",
|
||
"log_resource_attribute"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator", "type"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "metric_attribute",
|
||
"default": "metric_attribute",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"span",
|
||
"span_attribute",
|
||
"span_resource_attribute"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator", "type"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "revenue_analytics",
|
||
"default": "revenue_analytics",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "account_custom_property",
|
||
"default": "account_custom_property",
|
||
"description": "Customer analytics account custom property — the key is the property definition id",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"key": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"operator": {
|
||
"enum": [
|
||
"exact",
|
||
"is_not",
|
||
"icontains",
|
||
"not_icontains",
|
||
"starts_with",
|
||
"not_starts_with",
|
||
"ends_with",
|
||
"not_ends_with",
|
||
"regex",
|
||
"not_regex",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_set",
|
||
"is_not_set",
|
||
"is_date_exact",
|
||
"is_date_before",
|
||
"is_date_after",
|
||
"between",
|
||
"not_between",
|
||
"min",
|
||
"max",
|
||
"in",
|
||
"not_in",
|
||
"is_cleaned_path_exact",
|
||
"flag_evaluates_to",
|
||
"semver_eq",
|
||
"semver_neq",
|
||
"semver_gt",
|
||
"semver_gte",
|
||
"semver_lt",
|
||
"semver_lte",
|
||
"semver_tilde",
|
||
"semver_caret",
|
||
"semver_wildcard",
|
||
"icontains_multi",
|
||
"not_icontains_multi"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"type": {
|
||
"const": "workflow_variable",
|
||
"default": "workflow_variable",
|
||
"type": "string"
|
||
},
|
||
"value": {
|
||
"anyOf": [
|
||
{
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
},
|
||
{
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"required": ["key", "operator"],
|
||
"type": "object"
|
||
}
|
||
]
|
||
},
|
||
"type": "array"
|
||
}
|
||
},
|
||
"required": ["properties"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"filterTestAccounts": {
|
||
"anyOf": [
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"multiple_variant_handling": {
|
||
"anyOf": [
|
||
{
|
||
"enum": ["exclude", "first_seen"],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "How to handle entities exposed to multiple variants. 'exclude' (default) drops them from the analysis; 'first_seen' assigns them to the variant from their earliest exposure."
|
||
}
|
||
},
|
||
"type": "object"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Exposure configuration including filter test accounts and custom exposure events."
|
||
},
|
||
"feature_flag": {
|
||
"description": "Variant split, rollout scope, payloads, and experience continuity for the auto-created feature flag, in the flag's own filters shape. This is the canonical input for flag config. If the user mentions a specific percentage, load the configuring-experiment-rollout skill and clarify before setting these values. Set filters.multivariate.variants (each with key and rollout_percentage; percentages must sum to 100) to customize the variant split. Set filters.groups to a single group [{\"properties\": [], \"rollout_percentage\": N}] (0-100) to control the overall fraction of users entering the experiment. Default: 50/50 control/test, 100% rollout. Omit this parameter entirely when feature_flag_key refers to a pre-existing flag: the experiment links to that flag as-is and explicit config is rejected. No specific variant key is required. The analysis baseline defaults to the variant keyed `control` (lowercase) when present, else the first variant; override with stats_config.baseline_variant_key. Convention: when the user describes variants as \"A/B\", \"old/new\", \"original/redesign\", or any other natural-language pair without naming explicit keys, key the baseline `control` and keep their wording in the variant `name`. When the user asks for specific keys, use them as-is and put the baseline first.",
|
||
"properties": {
|
||
"ensure_experience_continuity": {
|
||
"anyOf": [
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Whether the flag persists variant assignment across authentication steps."
|
||
},
|
||
"filters": {
|
||
"description": "Flag config to apply: `multivariate.variants` (2 to 20 variants; the baseline defaults to the variant keyed 'control' when present, else the first variant), `groups` (a single group with `rollout_percentage` only; release conditions are not supported here, edit the feature flag directly), `aggregation_group_type_index`, and `payloads` (JSON-encoded strings keyed by variant key). On update, config this object omits is preserved from the linked flag's current state.",
|
||
"properties": {
|
||
"aggregation_group_type_index": {
|
||
"anyOf": [
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Group type index for group-based feature flags."
|
||
},
|
||
"groups": {
|
||
"description": "Overall rollout as a single group: [{\"properties\": [], \"rollout_percentage\": N}].",
|
||
"items": {
|
||
"description": "A single release-condition group carrying only the overall rollout percentage, the one\ngroups entry the experiment input applies.",
|
||
"properties": {
|
||
"properties": {
|
||
"description": "Must be empty or omitted: release-condition properties are not supported via the experiment input. Edit the feature flag directly for targeting.",
|
||
"items": {},
|
||
"maxItems": 0,
|
||
"type": "array"
|
||
},
|
||
"rollout_percentage": {
|
||
"anyOf": [
|
||
{
|
||
"maximum": 100,
|
||
"minimum": 0,
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Percentage of users who enter the experiment (0-100)."
|
||
}
|
||
},
|
||
"type": "object"
|
||
},
|
||
"type": "array"
|
||
},
|
||
"multivariate": {
|
||
"anyOf": [
|
||
{
|
||
"description": "Multivariate config for the experiment's feature flag.",
|
||
"properties": {
|
||
"variants": {
|
||
"description": "Variant definitions (2 to 20). The baseline defaults to the variant keyed 'control' when present, else the first variant.",
|
||
"items": {
|
||
"description": "A single multivariate variant. Extra per-variant keys are dropped.",
|
||
"properties": {
|
||
"key": {
|
||
"description": "Unique variant key. The baseline defaults to the variant keyed 'control' when present, else the first variant.",
|
||
"type": "string"
|
||
},
|
||
"name": {
|
||
"description": "Human-readable variant name.",
|
||
"type": "string"
|
||
},
|
||
"rollout_percentage": {
|
||
"description": "Variant rollout percentage (0-100). Across variants these must sum to 100.",
|
||
"maximum": 100,
|
||
"minimum": 0,
|
||
"type": "number"
|
||
}
|
||
},
|
||
"required": ["key", "rollout_percentage"],
|
||
"type": "object"
|
||
},
|
||
"type": "array"
|
||
}
|
||
},
|
||
"required": ["variants"],
|
||
"type": "object"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Multivariate variant configuration."
|
||
},
|
||
"payloads": {
|
||
"additionalProperties": {
|
||
"type": "string"
|
||
},
|
||
"description": "Optional payload values keyed by variant key.",
|
||
"propertyNames": {
|
||
"type": "string"
|
||
},
|
||
"type": "object"
|
||
}
|
||
},
|
||
"type": "object"
|
||
}
|
||
},
|
||
"type": "object"
|
||
},
|
||
"feature_flag_key": {
|
||
"description": "Unique key for the experiment's feature flag. Letters, numbers, hyphens, and underscores only. Search existing flags with the feature-flag-get-all tool first — reuse an existing flag when possible.",
|
||
"type": "string"
|
||
},
|
||
"holdout_id": {
|
||
"anyOf": [
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "ID of a holdout group to exclude from the experiment."
|
||
},
|
||
"name": {
|
||
"description": "Name of the experiment.",
|
||
"maxLength": 400,
|
||
"type": "string"
|
||
},
|
||
"parameters": {
|
||
"anyOf": [
|
||
{
|
||
"properties": {
|
||
"minimum_detectable_effect": {
|
||
"anyOf": [
|
||
{
|
||
"type": "number"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Minimum detectable effect as a percentage. Lower values need more users but catch smaller changes. Suggest 20–30% for most experiments."
|
||
},
|
||
"variant_notes": {
|
||
"anyOf": [
|
||
{
|
||
"additionalProperties": {
|
||
"type": "string"
|
||
},
|
||
"propertyNames": {
|
||
"type": "string"
|
||
},
|
||
"type": "object"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Free-text notes per variant, keyed by variant key. Use to document what each variant does or its reroute URL."
|
||
}
|
||
},
|
||
"type": "object"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
],
|
||
"description": "Experiment parameters JSON. Supported keys include `custom_exposure_filter` and `variant_notes` (free-text notes per variant, keyed by variant key). Flag config (variants, rollout, aggregation, payloads, experience continuity) belongs on the `feature_flag` object; send it there. For backward compatibility, config still sent through these deprecated keys is copied onto the linked flag rather than rejected, and reads project the flag's current config back into this field. Excluded variants live on the top-level `excluded_variants` field, not here."
|
||
},
|
||
"stats_config": {}
|
||
},
|
||
"required": ["name", "feature_flag_key"],
|
||
"type": "object"
|
||
}
|