@@ -75,26 +75,29 @@ values are preserved exactly as they appear in the source playbooks.
7575
7676## A note on the source format
7777
78- These workflows were sourced from CrowdStrike Content Library catalog records (JSON)
79- and converted to YAML for developer readability. Node labels and condition names are
80- derived from the original graph, so ` ${data['...']} ` references between actions stay
81- consistent.
82-
83- The YAML here matches the Falcon console's own ** import/export** format (a flat
84- ` trigger ` + ` actions ` map with ` next ` edges), which is a strict superset of what the
85- catalog record carried — YAML loses nothing the platform needs. Every example is
86- verified against the live import API (` import_definition ` with ` validate_only ` ).
87-
88- ** Authoring guardrail — always ground new examples in a real export.** The catalog
89- record is not the import format, and hand-conversion is lossy: an early version of
90- these examples dropped the Signal trigger's required ` event: ` field and invented a
91- trigger ` id ` , which broke import. To add or fix an example, either export a working
92- workflow from the console (or ` export_definition ` ) and adapt that real YAML, or run
93- the deterministic converter ` bin/convert_catalog_to_yaml.py ` on a catalog record —
94- do not hand-translate. The converter resolves the Signal ` event: ` from the trigger
95- catalog automatically. A Signal trigger must carry ` event: ` (the trigger category,
96- e.g. ` Investigatable/NGSIEM ` ); discover values with ` trigger_search.py --events ` .
97-
98- Every example here is generated by ` bin/convert_catalog_to_yaml.py ` and verified to
99- import cleanly (` import_definition ` with ` validate_only ` ), so regenerating them is
100- reproducible rather than a manual re-typing pass.
78+ These workflows are real Falcon Fusion playbooks from the CrowdStrike Content
79+ Library, in the Falcon console's own ** import/export** format: a flat ` trigger `
80+ plus an ` actions ` map with ` next ` edges, ` conditions ` , and ` loops ` . Every example
81+ is verified against the live import API (` import_definition ` with ` validate_only ` ).
82+
83+ Examples come from one of two sources, noted in each file's header:
84+
85+ - ** Console export (preferred, definitive).** Installed from the Content Library
86+ and exported unmodified from the console. This is ground truth — it round-trips
87+ through Fusion's own serializer, so it imports cleanly by construction. Newer
88+ examples (e.g. the VirusTotal, AbuseIPDB, phishing-ITP, and LLM-enrichment
89+ playbooks) use this path.
90+ - ** Deterministic conversion.** Some examples were produced by running
91+ ` bin/convert_catalog_to_yaml.py ` on a Content Library catalog record (JSON).
92+ The converter resolves the Signal ` event: ` from the trigger catalog
93+ automatically. Prefer a console export when one is available; the catalog record
94+ is not the import format and conversion is a best-effort reproduction of it.
95+
96+ ** Authoring guardrail — always ground new examples in a real workflow.** Never
97+ hand-translate a catalog record: an early version of these examples dropped the
98+ Signal trigger's required ` event: ` field and invented a trigger ` id ` , which broke
99+ import. To add or fix an example, either export a working workflow from the console
100+ (` export_definition ` ) — the preferred path — or run
101+ ` bin/convert_catalog_to_yaml.py ` on a catalog record. A Signal trigger must carry
102+ ` event: ` (the trigger category, e.g. ` Investigatable/NGSIEM ` ); discover values with
103+ ` trigger_search.py --events ` .
0 commit comments