# Generated pipeline artifacts — never committed
/workspaces/
/tasks/candidates/
/traces/raw/
/traces/meta/
/traces/diffs/
/traces/probes/
/traces/archive/
/traces/reviews/archive/
/traces/behavior-authoring/
/traces/imported_index.json
/runs/
/config.local.json
/data/full/
/data/next_step/
/data/security/
/data/harvest/
/data/harness/
/data/imported/
/data/hf-sync/
/data/*.jsonl
/data/manifest.json

# Security phase private material (imported from ../fable-secure; ephemeral runtime)
/security/catalog/
/security/keys/
/security/corpus/
/security/traces/
/security/runtime/

# Node / Pi runtime
/node_modules/
/package-lock.json

# Python
__pycache__/
*.pyc
*.pyo
.pytest_cache/
.mypy_cache/
.ruff_cache/

# Coding-agent runtime state (session scheduler locks, etc.) — never source
/.claude/

# Local overrides & staged secrets
*.key
/dist/
.moonshiner/

# The seed corpus is product content and must never be filtered by the rules
# above. Seeds legitimately ship fake keys and files under .moonshiner/ as
# protected fixtures; excluding any of them silently commits a broken seed.
!/tasks/seeds/**
# ...except sandbox runtime state. A trace that runs inside a seed directory
# leaves its throwaway HOME behind; it is not corpus content and must never be
# committed or shipped in a seed release.
/tasks/seeds/**/.sandbox-home/
