Skip to main content

best-practices-sparta

Best practices for the SPARTA pipeline: data model, edge persistence, QRA generation, ArangoDB collections, and common gotchas learned the hard way.

Datos de origen

Repositorio
grahama1970/agent-stack-public
Última actividad en el origen
24 de septiembre de 2026 a las 15:51
Idioma detectado de SKILL.md
inglés
Estrellas
0
Forks
0

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
best-practices-sparta
description
Best practices for the SPARTA pipeline: data model, edge persistence, QRA generation, ArangoDB collections, and common gotchas learned the hard way.
triggers
["sparta best practices","sparta pipeline","sparta data model","cwe sparta edges","qra generation"]
metadata
{"short-description":"SPARTA pipeline data model and QRA guardrails"}
provides
["sparta-pipeline-guidance","sparta-data-model-rules","qra-generation-guardrails"]
composes
["create-qras","create-evidence-case","ops-arango","best-practices-security","agentic-evals"]
complies
["best-practices-skills","best-practices-sparta","best-practices-security"]
disciplines
["engineering-standards","compliance-security"]
# SPARTA Pipeline Best Practices Hard-won lessons from building the SPARTA compliance mapping pipeline. ## Data Model Overview ``` SPARTA xlsx (v3.1) ↓ Stage 00-04: Ingest → sparta_controls (11K+ docs) ↓ Stage 08: Build edges → sparta_relationships (261K+ edges) ↓ /create-evidence-case: Query crosswalk chains ↓ /create-qras: Generate QRAs → sparta_qra ``` ## ArangoDB Collections | Collection | Purpose | Key Fields | |------------|---------|------------| | `sparta_controls` | All controls (SPARTA, NIST, CWE, CAPEC, ATT&CK, D3FEND) | `control_id`, `source_framework`, `control_type`, `cwe_class_ids` | | `sparta_relationships` | Crosswalk edges between controls | `source_control_id`, `target_control_id`, `source_framework`, `target_framework`, `method` | | `sparta_qra` | Generated QRA pairs | `question`, `reasoning`, `answer`, `evidence_quotes`, `qra_type` | | `sparta_url_knowledge` | Fetched URL content for grounding | `url`, `content`, `chunks` | ## Critical Rule: Field Arrays Need Edge Persistence **NEVER** assume field arrays (like `cwe_class_ids`) are queryable by graph tools. ```python # BROKEN: Data exists on doc but graph traversal fails doc = {"control_id": "IA-0001", "cwe_class_ids": ["CWE-287", "CWE-327"]} # /create-evidence-case queries sparta_relationships → finds NOTHING # FIX: Step 08 must create edges from field arrays # CWE-287 (source) → IA-0001 (target) in sparta_relationships ``` **Incident (2026-04-11):** SPARTA 3.1 CWE mappings existed on `cwe_class_ids` but weren't persisted as edges. QRA generation failed for hours. The script had a workaround that masked the bug. ## Edge Direction Matters SPARTA spreadsheet stores: **SPARTA Technique → CWE** (technique.cwe_class_ids) Crosswalk queries need: **CWE → SPARTA** (for "what SPARTA controls address this CWE?") Step 08 creates REVERSE edges: - CWE→SPARTA: `method: "curated:cwe_class_ids"`, `source_framework: "CWE"` - ATT&CK→SPARTA: `method: "curated:attack_technique_ids"`, `source_framework: "ATT_CK_Enterprise"` (not "ATT&CK") ## Description Preservation Some controls have descriptions from external sources (ISO 27001 inferred from web, D3FEND artifacts backfilled). The `description_preserve: true` flag in worksheets.yaml prevents overwriting. ```yaml # worksheets.yaml ISO 27001 References: description_source: inferred description_preserve: true # do not overwrite on re-ingestion ``` ## QRA Generation Flow ``` 1. /create-evidence-case CWE-287 → Returns: glossary, crosswalk_chains, prior_qra_evidence 2. Check deterministic gates: - glossary exists (entities resolved) - crosswalk_chains exist (2+ frameworks) 3. /scillm generate QRA with evidence payload 4. Verify grounding (evidence_quotes match source) 5. Store to sparta_qra via /upsert ``` ## Common Mistakes ### WRONG: Query sparta_controls for relationships ```python # Field arrays don't support graph traversal doc = get_control("IA-0001") for cwe in doc["cwe_class_ids"]: # Manual iteration - O(n) per query ... ``` ### RIGHT: Query sparta_relationships ```python # Graph edges support efficient traversal edges = query_edges(source="CWE-287", target_framework="SPARTA") ``` ### WRONG: Generate QRAs without /create-evidence-case ```python # No grounding verification prompt = f"Generate QRA for {cwe_id}" response = llm(prompt) # Hallucination risk ``` ### RIGHT: Use evidence-case gates ```python evidence = create_evidence_case(cwe_id) if not evidence["crosswalk_chains"]: skip() # No valid path, don't generate ``` ### WRONG: Overwrite descriptions blindly ```python # Destroys inferred/enriched descriptions doc["description"] = new_description upsert(doc) ``` ### RIGHT: Check description_preserve ```python if not worksheet_config.get("description_preserve"): doc["description"] = new_description ``` ## Skills for SPARTA Work | Skill | Use Case | |-------|----------| | `/ingest-sparta` | Re-ingest SPARTA xlsx, run pipeline stages | | `/create-evidence-case` | Build crosswalk chains for a control | | `/create-qras` | Generate QRA pairs with verification | | `/sparta-review` | Review SPARTA controls and mappings | | `/monitor-sparta` | Monitor pipeline health and data quality | | `/taxonomy` | Classify controls with SPARTA mind tags | ## Debugging Checklist When QRA generation fails: 1. **Check edges exist:** `curl /list {collection: sparta_relationships, limit: 10}` and filter for your control 2. **Check crosswalk direction:** Source framework should be CWE/CAPEC, target should be SPARTA 3. **Check /create-evidence-case response:** Does `crosswalk_chains` have entries? 4. **Check field arrays:** If data exists on `*_ids` field but not as edges, Step 08 needs updating 5. **Check LLM timeout:** scillm logs show if the call timed out vs returned empty ## Pipeline Stage Dependencies ``` Stage 00: Fetch xlsx, CWE XML, ATT&CK JSON Stage 01: Extract worksheets to raw tables Stage 01b: Load external sources (CWE, ATT&CK) Stage 01c: Load CAPEC + build CWE→ATT&CK bridge Stage 01d: Map CWE→NIST via Heimdall Stage 04: Extract controls → sparta_controls Stage 07: Knowledge anchors (embeddings) Stage 08: Build relationships → sparta_relationships ↳ Includes CWE→SPARTA from cwe_class_ids ``` ## References - `sparta/config/worksheets.yaml` - Column mappings and relationship definitions - `sparta/src/sparta/pipeline/steps/08_relationships.py` - Edge building logic - `sparta/scripts/generate_cwe_qras.py` - CWE QRA batch generation - `/create-evidence-case` skill contract - Evidence case daemon
Ver en GitHub