Troubleshooting
Common OpenTide failures — validation errors, generation drift, platform loading, and deployment — with fixes.
The failures you are most likely to hit, why they happen, and how to fix them. If your problem is a genuine bug, open an issue on opentide.
Setup and paths
Could not resolve repository root / objects not found
OpenTide does not know where your content lives. Set the repo root explicitly:
export OPENTIDE_REPO_ROOT=/path/to/detection-repo
# or per-command
opentide --repo /path/to/detection-repo validateSee Installation → environment variables.
The command opentide is not found
The CLI ships as an extra. Install it:
pip install 'opentide==0.1.0'Inside a virtualenv, confirm it is on PATH (which opentide). For MCP/agent hosts, point the host at the venv's opentide-mcp — see MCP configuration.
Generation
validate complains that schemas are missing
Validation checks objects against generated JSON Schemas. If they do not exist yet, generate them first:
opentide generate
opentide validate --strictRun generate after cloning a repo, after upgrading the OpenTide package, and whenever schema revisions change.
Editor stopped validating YAML
Your IDE reads the generated router at .opentide/schemas/opentide.schema.json. If it is stale or missing:
opentide generate schemasThen reload your editor's YAML/schema association.
Validation errors
unknown schema identifier / object won't load
metadata.schema must be a registered identifier such as rule::1.0. A typo (rule:1.0, rule::1, rules::1.0) means no model matches. Fix the value; the valid identifiers are threat::1.0, objective::1.0, rule::1.0. See Schema revision.
duplicate UUID
Two objects share a metadata.uuid. UUIDs must be unique across the repo — you almost certainly copy-pasted an object. Generate a fresh one:
python -c "import uuid; print(uuid.uuid4())"unknown objective / dangling reference
A detection_model or objective.threats UUID points at an object that does not exist. This is the dangling reference anti-pattern — usually a typo or a deleted file. Fix the UUID or restore the target.
unknown status
A rule's status (or a platform block's status) is not defined in the merged deployment.toml. Use a bundled status (STAGING, PRODUCTION, …) or add your own — see Configuration → deployment statuses.
Warnings fail my build but pass locally
Warnings alone exit 0 by default and are listed in --json output under warnings. Pass --strict to fail the run with exit 1. If your pipeline uses --strict, reproduce it locally with the same flag:
opentide validate --strictSee Exit codes.
Query validation
supported: false for a platform
CrowdStrike and HarfangLab are deploy-only — they cannot validate query syntax, and OpenTide reports this honestly rather than faking a pass. This is expected behaviour, not an error. Validate queries on a supporting platform (Sentinel, Defender, Splunk, SentinelOne, Carbon Black). See Platforms.
MCP validate_query always returns valid
The MCP validate_query and run_query tools are stubs — they do not parse queries yet. Use the CLI (opentide validate query --platform …) for real syntax checks, or the MCP validation_report tool for structured object validation. See Agentic setup.
Platforms and deployment
A platform I configured is not loaded
Platforms load only when enabled in your workspace config:
# .opentide/configurations/platforms/sentinel.toml
[platform]
enabled = trueVerify with opentide info --platform sentinel. See Configuration → enabling a platform.
Deploy fails with an authentication error
Credentials are missing or wrong. OpenTide reads them from your platform TOML, typically via environment variables. Confirm the variables are set in your shell (or CI secrets) and match the keys the platform expects (opentide info --platform <name>). Never commit secrets — see Configuration → credentials.
deploy metadata seems to do nothing
opentide deploy metadata (Splunk lookup tables) currently signals intent in logs — full metadata deployment is pending. See deploy.
Still stuck?
- Re-run with debug logging:
DEBUG=1 opentide validate --strict. - Compare your object against a known-good fixture.
- Check the CLI reference for the exact flags and exit codes.