Skip to content

Reason codes

Codes are append-only: never renamed or removed. sqy explain <CODE> prints one.

Code Category Meaning What to do
AGENTS_MD_UNMANAGED usage AGENTS.md has no signalquarry:begin/end blocks, so there is nothing safe to refresh. Compare it by hand with a fresh sqy init template, then keep the markers.
ASSET_DATASET_INVALID data An asset-keyed dataset has inconsistent identity, provenance, cutoff or raw-mark data. Correct the versioned synthetic or normalized manifest; do not infer missing aliases, events or marks.
BACKTEST_RANGE_EMPTY data No sessions in the requested backtest range. Widen --start/--end or fetch more data.
BENCHMARK_DATA_MISSING data No recorded dataset covers the declared benchmark for the run's sessions; results are shown without a comparison. Run sqy data fetch --strategy <id> (it fetches the benchmark too) and repeat the command.
BROKER_CREDENTIALS_REJECTED environment The broker rejected the paper credentials. Check the keys of the paper profile; use keys of a paper account.
BROKER_NOT_PAPER_ONLY risk A broker plugin returned a broker that does not declare paper_only = True. Only paper brokers can be used; there is no live path. Fix or remove the plugin.
BROKER_ORDER_REJECTED execution The broker rejected an order. The session is recorded as incomplete and retried on the next unchanged target.
BROKER_ORIGIN_NOT_PAPER execution A broker request targeted a host other than the Alpaca paper origin. Only https://paper-api.alpaca.markets is supported.
BROKER_PLUGIN_INVALID environment A broker plugin's broker lacks part of the paper broker interface (listed in the detail). Implement account, clock, positions, open_orders, order_by_client_id, submit, cancel and calendar.
BROKER_REQUEST_FAILED execution The broker returned an unexpected HTTP status. Inspect the status in the summary and retry.
BROKER_RESPONSE_INVALID execution The broker response could not be parsed. Retry; report it if it persists.
BROKER_UNAVAILABLE execution The broker did not answer (network error, 429 or 5xx). Rerun later; submissions are resolved by client order id, never resubmitted blindly.
BUNDLE_INVALID evidence The evidence bundle failed verification. See data.errors; bundles are never edited after export.
CACHE_DIR_NOT_WRITABLE environment The market-data cache directory cannot be written. Set SIGNALQUARRY_CACHE_DIR to a writable directory.
COMMITMENT_CODE_MISMATCH evidence The opening does not reproduce the committed code digest. The code tree differs from what was committed.
COMMITMENT_DIGEST_MISMATCH evidence The record's digest does not match its own fields. The record was edited after creation.
COMMITMENT_PROOF_PENDING evidence The commitment has no timestamp proof yet. Install the OpenTimestamps client (signalquarry[ots]) and run ots stamp on the record.
COMMITMENT_RECORD_INVALID evidence The commitment record is missing or malformed. Pass the record JSON from evidence/commitments/.
COMMITMENT_REVEAL_INVALID evidence The opening file is missing or malformed. Use the file written by sqy commit reveal.
COMMITMENT_REVEAL_IS_PRIVATE evidence A commitment opening reveals the configuration. Share it only under NDA, for example in a data room.
COMMITMENT_SALT_MISSING evidence The private salt for this commitment is not on this machine. Restore $SIGNALQUARRY_CONFIG_DIR/salts from your backup.
COMMITMENT_SPEC_MISMATCH evidence The opening does not reproduce the committed specification digest. The configuration or salt differs from what was committed.
CONFORMANCE_FAILED evidence One or more sqy check conformance checks failed. Fix each failed check listed in data.strategies[].checks.
CORPORATE_ACTION_UNSUPPORTED data Fetched data contains an unmodelled corporate action, or one affected an open options position. Exclude the period or underlying; data preparation or the run stops rather than guess.
CREDENTIALS_FILE_PERMISSIONS_TOO_OPEN environment credentials.toml is readable by other users. Run chmod 600 on the credentials file.
DATASET_SYMBOLS_MISSING data The dataset lacks a declared symbol. Fetch data for every symbol in data.symbols.
DATA_CREDENTIALS_MISSING environment No Alpaca market-data credentials were found. Set APCA_API_KEY_ID and APCA_API_SECRET_KEY, or use the synthetic provider.
DATA_CREDENTIALS_REJECTED environment Alpaca rejected the market-data credentials (HTTP 401/403). Check APCA_API_KEY_ID/APCA_API_SECRET_KEY; paper keys work for market data.
DATA_EMPTY data The provider returned no bars for the request. Check symbols and the date range.
DATA_IDENTITY_MISMATCH data Cached pages rebuild to a different dataset than the manifest records. Re-fetch; never edit manifests by hand.
DATA_MANIFEST_INVALID data A dataset manifest is malformed or its manifest_hash does not match. Restore the manifest from version control or re-fetch.
DATA_PAGE_CORRUPT data A cached raw page no longer matches its recorded hash. Delete the cache entry and re-fetch.
DATA_PAGE_MISSING data A raw page referenced by a manifest is not in the local cache. Re-run sqy data fetch for that dataset.
DATA_PANEL_INVALID data A derived research panel is missing, malformed, or has a file-hash mismatch. Rebuild the panel from verified cached pages and its dataset manifest.
DATA_PANEL_LOOKBACK_INVALID usage A research panel lookback must be a positive number of sessions. Set lookback to a positive integer, or omit it for all prior sessions.
DATA_PANEL_SYMBOL_INVALID data A research panel request has duplicate or unavailable symbols. Select each symbol once from the panel's recorded symbol list.
DATA_QUALITY_FINDINGS data The dataset quality report contains informational findings. Review the report under data/quality and verify the affected dates before a study.
DECISION_SYMBOL_NOT_DECLARED signal A target used a symbol not declared in strategy.yaml data.symbols. Declare the symbol or remove it from the target.
DECISION_WEIGHT_ABOVE_LIMIT risk A target weight exceeds limits.max_weight_per_symbol. Lower the weight or raise the declared limit.
DEPENDENCY_MISSING environment A required runtime dependency cannot be imported. Reinstall with pip install signalquarry.
EVIDENCE_FAMILY_REQUIRED evidence The per-family evidence layout needs a family for this log. Pass the strategy family; this is a framework bug if it reaches you.
EVIDENCE_INDEX_MISMATCH evidence A family evidence log does not end where the project index last recorded it. Restore the family log from version control; logs are append-only.
EVIDENCE_LOG_CORRUPT evidence An evidence log (trials, freezes or holdouts) was edited, truncated or reordered. Restore evidence/ from version control; never edit it by hand.
EVIDENCE_LOG_REWRITTEN evidence An evidence log or paper journal was shortened, edited or deleted since the base revision. Restore it from the base revision; evidence logs are append-only.
EXPORT_FILE_TYPE_NOT_ALLOWED evidence A file in the export has a type bundles may not carry. Bundles carry JSON, Markdown, SVG and timestamp proofs only.
EXPOSURE_DATA_MISSING data One or more requested exposure references have no usable passive return curve over the run's sessions. Fetch the named symbols on the strategy's feed over its sessions, or choose references with recorded data.
FACTOR_EVALUATION_IDENTITY_INVALID data A factor evaluation lacks a valid panel or membership identity. Use verified panel and dated membership manifests before evaluation.
FACTOR_EVALUATION_SESSIONS_INVALID data Factor decision sessions are duplicated, unordered, or outside the panel. Use strictly increasing decision sessions recorded in the panel.
FACTOR_EVIDENCE_BUSY evidence Another factor seal or formula trial writer holds the project's evidence lock. Wait for that writer to finish, then retry; keep the project configuration fixed while writing.
FACTOR_FAMILY_EMPTY usage No registered factor belongs to the requested family. Run sqy factor ls; a human must register a factor declaring this family before sealing it.
FACTOR_HOLDOUT_DECLARATION_CHANGED evidence Current factor declarations or dataset selection differ from the immutable family seal. Review the recorded seal and current declarations; resealing cannot change the fixed values.
FACTOR_HOLDOUT_UNDECLARED usage The factor family declares neither holdout months nor a training cutoff. Declare a holdout in factor.yaml before a human seals the family.
FACTOR_HOLDOUT_UNSEALED evidence The factor family has no recorded holdout seal. Have a human run sqy factor holdout seal --family F --dataset-id D before research trials.
FACTOR_ID_DUPLICATE usage Two registered factor modules declare the same id. Give each project factor a unique id.
FACTOR_IMPORT_FAILED signal A registered factor module could not be imported. Fix the module import and its dependencies in the project environment.
FACTOR_LABEL_ACTIONS_INVALID data A modeled split or cash dividend is invalid or duplicated for the requested outcomes. Verify action terms and resolve conflicting same-symbol, same-date records before labeling outcomes.
FACTOR_LABEL_ALIGNMENT_INVALID data Factor scores and outcome labels have incompatible identities or shapes. Derive labels from the same dated panel and align sessions and symbols exactly.
FACTOR_LABEL_HORIZONS_INVALID data A factor outcome horizon or forward-return array is invalid. Use positive horizons and finite, shape-aligned returns no lower than -100%.
FACTOR_MODULE_INVALID signal A factor module must be inside the project and define exactly one @factor function. Keep one decorated score function in each registered project module.
FACTOR_NOT_FOUND usage No registered factor has that id. Run sqy factor ls or add the module to signalquarry.toml.
FACTOR_PARAMS_INVALID usage Declared factor parameters do not validate against its Params model. Fix factor.yaml params or the factor's Params declaration.
FACTOR_PORTFOLIO_UNAVAILABLE data No eligible factor scores or prior-only factor weights are available for this decision. Provide completed factor history and a prior-cutoff weight row, or use equal weights.
FACTOR_REDUNDANCY_ALIGNMENT_INVALID data Factor scores cannot be compared across different datasets, dates, or universes. Compare factors scored on identical panel and membership identities.
FACTOR_REPORT_CONFIGURATION_CHANGED evidence The factor configuration changed between evaluation and report rendering. Rerun sqy factor report with the factor configuration held fixed.
FACTOR_REPORT_WRITE_FAILED environment The descriptive factor report could not be written to a new directory. Check project permissions and available disk space, then rerun sqy factor report.
FACTOR_SEARCH_BUDGET_EXHAUSTED evidence The requested formula search exceeds the remaining family trial budget. Reduce the search budget or have a human extend the family budget before searching.
FACTOR_SEARCH_CONFIG_INVALID usage Formula-search settings are invalid or exceed the configured bounds. Use a bounded seed, horizon, FDR threshold, and family trial budget.
FACTOR_SEARCH_INPUT_INVALID data Formula search needs aligned, dated panel, universe, and synthetic outcome inputs. Provide immutable training rows, dated eligibility, and forward-label end sessions through the cutoff.
FACTOR_SEARCH_INPUT_UNVERIFIED evidence Formula-search inputs have not passed the required identity, provenance or significance checks. Verify input manifests, bind normalized formula identity and grammar, and provide a finite p-value in [0, 1].
FACTOR_SPEC_INVALID usage A registered factor's metadata is invalid. Fix the reported factor.yaml field and schema version.
FACTOR_SPEC_MISSING usage factor.yaml is missing next to a registered factor module. Add a factor.yaml with an id, family, version, hypothesis and parameters.
FACTOR_SPEC_NOT_A_MAPPING usage factor.yaml must contain a YAML mapping. Use key-value fields matching signalquarry.factor/v1.
FACTOR_TRAINING_WINDOW_INVALID evidence The training cutoff cannot establish the required session gap before the factor holdout. Use a dataset session at least the longest label horizon before the first sealed session.
FACTOR_UNIVERSE_INVALID data A factor universe has duplicate, empty, or unavailable symbols. Supply distinct symbols that exist in the verified panel.
FACTOR_UNIVERSE_TIMING_INVALID data A factor universe was not observed by its decision cutoff. Use timezone-aware observation and cutoff times from verified manifests.
FREEZE_REQUIRED evidence The configuration is not frozen, so claims stay at in_sample and the holdout stays closed. Run sqy spec freeze --strategy <id> before evaluating.
FREEZE_STALE evidence The strategy changed after its last freeze. Freeze again; the new configuration counts as a new trial.
GATE_FAILED evidence A qualification gate did not pass. Report the failed gate; do not relax gates. Try a new hypothesis.
HOLDOUT_CLIPPED evidence The backtest stopped before the sealed holdout. Expected after sqy spec freeze; the holdout is only for sqy evaluate --holdout.
HOLDOUT_REQUIRES_GATES evidence The holdout can only be opened after G1-G3 pass. Report the failed gates; form a new hypothesis rather than tuning.
HOLDOUT_REUSED evidence The sealed holdout for this family was already opened once. Start a new hypothesis family; claims stay capped at walk_forward.
HUMAN_ACTION_RECORDED evidence A human-only action was recorded in the evidence log. Agents must not run human-only commands such as trials extend.
INSUFFICIENT_HISTORY data Fewer completed sessions than the strategy's declared lookback. Fetch more history or shorten the lookback.
INSUFFICIENT_SETTLED_CASH execution A cash-account buy was reduced to the settled cash available. Expected with cash accounts; use account.model: margin to spend unsettled proceeds.
INTERNAL_ERROR environment An unexpected error inside SignalQuarry (a bug, or a broken installation). Run sqy doctor; report the bug with the trace id and the traceback printed on stderr.
MARGIN_MODEL_WOULD_BORROW execution A margin-account buy would require borrowing. SignalQuarry never borrows; this indicates an engine bug. Please report it.
OPTIONS_CHAIN_EMPTY data The provider returned no option quotes for that underlying and window. Check the symbol, widen --width or --max-dte, and record during market hours.
OPTIONS_DELAY_STRESS_UNSUPPORTED usage The options simulator has no execution-delay model. Options stress tests vary costs only.
OPTIONS_HISTORY_UNAVAILABLE data The provider does not return daily bars for expired option contracts in that month. Options backtests keep using modelled prices (low evidence); rely on paper forward tests.
OPTIONS_RECORDED_CHAINS_USED data Recorded provider quotes replaced modelled option prices on some sessions (count after the colon). Informational: recorded sessions use real bid/ask snapshots; the rest stay modelled (low evidence).
OTS_CLIENT_MISSING environment The OpenTimestamps client is not installed, so new commitments stay unstamped (pending). Install it with pip install 'signalquarry[ots]' where commitments are made (the paper host).
PAPER_ACCOUNT_BLOCKED risk The paper account is not active or trading is blocked. Check the account in the Alpaca dashboard.
PAPER_ACCOUNT_MISMATCH risk The broker account differs from the deployment's expected or armed account. Use the deployment's own paper account; re-arm after an intentional switch.
PAPER_ACTIVITY_CACHE_UNSAFE risk The private paper activity cache is inside the project or has unsafe permissions. Choose a private cache outside the project with owner-only directory and file permissions.
PAPER_ACTIVITY_CAPTURE_INCOMPLETE execution The account activity capture reached its page limit before the final page. Capture a shorter creation-time window; do not treat the partial response as evidence.
PAPER_ARM_EXPIRED execution The arm token expired. A human re-arms with sqy paper arm.
PAPER_ARM_NOT_CONFIRMED execution The arm confirmation did not match the alias. Type the alias exactly to confirm.
PAPER_ARM_REQUIRES_HUMAN execution Arming needs a human at an interactive terminal. Agents must not arm paper trading; ask the owner.
PAPER_ARM_STALE execution The strategy configuration or freeze changed since arming. Freeze the new configuration; a human re-arms.
PAPER_BACKUP_INVALID usage The backup archive is unreadable or belongs to another deployment. Pass a tar.gz written by sqy paper backup for this alias.
PAPER_BROKER_PLUGIN_NOT_FOUND environment The paper config names a broker plugin that is not installed. Install the package that provides it (sqy doctor lists broker plugins) or fix broker:.
PAPER_BROKER_SIMULATED execution The deployment uses the offline simulated broker, which cannot be armed or submit orders. Use broker: alpaca-paper with a dedicated paper account for forward tests.
PAPER_CANCEL_UNCONFIRMED execution A cancel request was not confirmed yet. Rerun; the kernel waits for a terminal status.
PAPER_CLOCK_SKEW risk The local clock differs from the broker clock beyond the guard. Synchronize the host clock (NTP).
PAPER_CONFIG_INVALID usage The paper deployment config failed validation. Fix the field named in the summary; run sqy schema paper.
PAPER_CONFIG_NOT_FOUND usage No paper deployment config with that alias exists. Create paper/.paper.yaml (see sqy init).
PAPER_CONTINUITY_BROKEN risk The live journal does not extend the backup: history was rolled back or rewritten. Investigate the host; restore the journal from the backup and re-arm.
PAPER_CORPORATE_ACTION_PENDING execution A corporate action or its cash credit has not appeared at the broker yet. Wait for the broker to apply the action or credit, then rerun.
PAPER_CORPORATE_ACTION_UNRECONCILED risk Broker positions or activities do not prove the expected corporate-action effects. Keep paper submission halted; review the event terms, broker activity, asset mapping and journal.
PAPER_CREDENTIALS_MISSING environment No credentials were found for the deployment's paper profile. Add [paper.] to credentials.toml (0600) or set SIGNALQUARRY_PAPER_KEY_ID/SECRET_KEY.
PAPER_DATA_STALE execution The previous session's bars are not available yet. Rerun later in the window.
PAPER_DATA_UNAVAILABLE execution Market data for the session could not be loaded. Check data credentials and connectivity; rerun.
PAPER_DRAWDOWN_HALT risk Equity fell more than the daily drawdown guard. The deployment halted; review, then a human re-arms.
PAPER_EXECUTION_DELAY_UNSUPPORTED usage Paper deployments execute at the next open; execution_delay_sessions must be 0. Use the delay only for backtest stress runs.
PAPER_FRACTIONAL_UNSUPPORTED usage Market-on-open paper orders need whole shares. Set execution.sizing to whole_shares for paper deployments.
PAPER_HALTED risk The deployment is halted. Review the halt reason; a human re-arms with sqy paper arm to resume.
PAPER_JOURNAL_CORRUPT risk The deployment journal's hash chain does not verify. Restore the journal from backup; never edit it by hand.
PAPER_KEY_DENIED risk The paper key is on the deployment's deny-list (it belongs to another deployment). Use this deployment's own paper account keys.
PAPER_KIND_UNSUPPORTED usage This paper runner does not trade this strategy kind. Options deployments use the options runner.
PAPER_NOT_ARMED execution Paper trading is disabled until a human arms the deployment. A human runs sqy paper arm --reason ... after reviewing the evidence.
PAPER_NO_SESSION_TODAY execution The market has no session today. None; the scheduler retries on the next session.
PAPER_OPEN_ORDERS execution Own orders are still open. Retry after they fill, expire or are canceled.
PAPER_ORDER_NOT_FOUND execution A journaled order intent never reached the broker. None; it is recorded as not submitted.
PAPER_OUTSIDE_WINDOW execution The command ran outside the pre-open submission window. Schedule run-once inside the configured window (default 09:00-09:25 ET).
PAPER_PARITY_MISMATCH risk Replaying a paper session through the engine produced a different decision or orders. Investigate before trusting the forward record; G5 cannot pass with a mismatch.
PAPER_PENDING_ORDERS execution Journaled orders are not finalized yet. Run sqy paper reconcile.
PAPER_POSITION_DRIFT risk Broker positions differ from the journal in a way fills and splits cannot explain. The deployment halted; investigate, then a human re-arms.
PAPER_RUN_GAVE_UP execution paper run stopped retrying before run-once succeeded. Check the reason codes; the scheduler retries on the next tick.
PAPER_SESSION_ALREADY_COMPLETED execution Today's session was already submitted. None; run-once is idempotent.
PAPER_STALE_ORDER_CANCELED execution An own order from an earlier session was still open and was canceled. None; the target is retried.
PAPER_STRATEGY_FAILED risk The strategy raised or broke its contract during a paper session. The deployment halted; fix and re-freeze, then a human re-arms.
PAPER_STRATEGY_TIMEOUT risk The strategy's decide step exceeded its time limit in the isolated process. The deployment halted; make decide faster, re-freeze, then a human re-arms.
PAPER_SUBMISSION_DISABLED execution The deployment config has submission: disabled. A human sets submission: enabled after review.
PAPER_UNMANAGED_ORDERS risk The account has open orders this deployment did not create. Cancel them or use a dedicated paper account per deployment.
PAPER_UNMANAGED_POSITION risk The account holds positions outside the strategy's symbols. Close them or use a dedicated paper account per deployment.
PERF_FEED_INVALID evidence The existing feed file is not a performance snapshot, so the new one cannot chain to it. Move the file aside (a new chain starts) or restore the published snapshot.
PERF_PUBLISH_DENIED evidence The family's publication policy does not allow a live performance feed. Set live_feed: allow for a non-commercial family; commercial families publish lagged exports only.
PRICE_MISSING data No price for a symbol on the execution session; the order waits. Check data coverage for the symbol.
PROJECT_CHANGED_DURING_RUN evidence A worker process rebuilt a configuration from the project's files and did not arrive at the configuration or dataset that was checked: the project changed while the command was running. Leave the project's files alone while --jobs is in use, then run the command again; a study reuses the arms that completed.
PROJECT_CONFIG_INVALID usage signalquarry.toml could not be parsed or has invalid values. Fix the reported field in signalquarry.toml.
PROJECT_DIR_NOT_EMPTY usage sqy init only creates projects in a new or empty directory. Choose a new directory name.
PROJECT_NOT_FOUND usage No signalquarry.toml in this directory or its parents. Run sqy init <dir> or pass --project.
PROVIDER_PAGINATION_LIMIT data The request needed more pages than allowed. Fetch fewer symbols or a shorter range at a time.
PROVIDER_PAGINATION_LOOP data The provider repeated a page token. Retry later; the partial download was discarded.
PROVIDER_REQUEST_FAILED data The provider returned an unexpected HTTP status. Check symbols, dates and plan entitlements (SIP needs 15-minute-old data on free plans).
PROVIDER_RESPONSE_INVALID data A provider response was malformed or contained impossible values. Retry later; report the endpoint if it persists.
PROVIDER_UNAVAILABLE data The configured data provider is not available yet. Use provider = "synthetic" in signalquarry.toml, or fetch data first.
PUBLICATION_FAMILY_MISMATCH usage A published strategy belongs to a different family. List only strategies of this family.
PUBLICATION_INVALID usage The publication policy failed validation or breaks a disclosure cap. Fix the field named in the summary; commercial families are category-tier.
PUBLICATION_NOT_FOUND usage The family has no publication policy, so nothing may be exported. Create publication/FAMILY.publication.yaml (default-deny).
PUBLICATION_STRATEGY_UNKNOWN usage The publication policy names a strategy the project does not define. Use strategy ids from strategy.yaml.
PYTHON_ARCH_EMULATED environment Python is running under Rosetta emulation on Apple Silicon. Use a native arm64 Python build.
PYTHON_VERSION_UNSUPPORTED environment SignalQuarry needs Python 3.12 or newer. Install Python 3.12+ and recreate the environment.
QUALITY_GAP data A symbol has an internal gap longer than the configured session threshold. Investigate the reported gap dates and recover missing bars when available.
QUALITY_OHLC_INCONSISTENT data Present bars have open or close outside the low-high range or low above high. Verify the affected source bars and correct or refetch inconsistent data.
QUALITY_PRICE_NONPOSITIVE data Present bars contain a nonpositive OHLC price. Verify the source bars and replace invalid prices with corrected provider data.
QUALITY_SESSION_ON_HOLIDAY data The dataset records a weekday session on a known NYSE closure. Verify the reported dates against provider timestamps and the trading calendar.
QUALITY_SESSION_ON_WEEKEND data The dataset records a session on a weekend. Check provider timestamps and session-date normalization for the reported dates.
QUALITY_STALE_CLOSE data A symbol has consecutive identical raw closes meeting the stale-run threshold. Investigate the reported run for illiquidity or stale provider bars.
QUALITY_SYMBOL_EMPTY data A selected symbol has no present bars in the dataset. Verify the symbol and fetch its required history before studying it.
QUALITY_TRADING_DAY_MISSING data A known NYSE trading day is absent between the dataset's first and last sessions. Check provider coverage and fetch missing dates when available.
QUALITY_UNEXPLAINED_MOVE data A symbol has a large close-to-close move unexplained by recorded splits. Verify the source bars and corporate actions around the reported session.
QUALITY_ZERO_VOLUME data Present bars contain nonpositive or undefined volume. Check whether the reported sessions traded and verify the provider's volume fields.
REASON_CODE_UNDECLARED signal A strategy returned a reason code it did not declare in strategy.yaml. Declare the code under reason_codes in strategy.yaml.
REASON_CODE_UNKNOWN usage The code is not a framework or declared strategy reason code. Check spelling; codes are UPPER_SNAKE_CASE.
REPORT_CONFIGURATION_CHANGED evidence The reported runs used a different configuration than the current code and spec. Rerun the backtest and evaluation for the current configuration.
REPORT_NO_RUNS usage There is no backtest or evaluation run to report on. Run sqy backtest --strategy <id> (and sqy evaluate) first.
RUNS_NOT_COMPARABLE evidence The runs differ in dataset, sessions, account or evidence grade, so nothing was differenced or ranked. Compare runs produced on the same dataset and window with the same account; see data.reasons.
RUN_ARTIFACT_INVALID evidence A run's result document or equity curve is missing, unreadable or no longer matches its recorded hash. Do not edit .signalquarry/runs/; repeat the backtest to produce the run again.
RUN_LEASE_BUSY execution Another run holds the deployment lease. Retry after the running command finishes.
RUN_NOT_FOUND usage No run directory has that id. Run sqy runs ls to list run ids.
SCHEDULE_GITHUB_ACTIONS_DEMO_ONLY execution GitHub Actions schedules are delayed and best-effort; use them for demos only. Use systemd on a small VM (or launchd/cron on an always-on host) for forward tests.
SCHEMA_UNKNOWN usage No bundled schema has that name. Run sqy schema to list schema names.
STALE_OBSERVATIONS data The latest completed bar is older than the declared staleness limit. Refresh data with sqy data fetch.
STRATEGY_ID_DUPLICATE signal Two strategies share one id. Give each strategy.yaml a unique id.
STRATEGY_IMPORT_FAILED signal A strategy module could not be imported. Fix the import error shown in the detail.
STRATEGY_KIND_MISMATCH usage The strategy decorator does not match strategy.yaml's kind. Use @options_strategy for kind options_single_leg and @strategy for equity_daily.
STRATEGY_LOOKBACK_INVALID signal lookback(params) must return a positive integer. Fix the lookback in @strategy.
STRATEGY_MODULE_INVALID signal A strategy module must define exactly one @strategy function. Keep one decide function per module.
STRATEGY_NOT_FOUND usage No loaded strategy has that id. Run sqy check to list strategies, or add the module to signalquarry.toml.
STRATEGY_PARAMS_INVALID signal strategy.yaml params do not validate against the Params class. Make params match the Params fields and bounds.
STRATEGY_RAISED signal The strategy's decide function raised an exception during a backtest; the detail names the session, the exception type and its message. Fix the strategy code. SYMBOL_NOT_DECLARED means it read a symbol that data.symbols in strategy.yaml does not list. sqy check runs the same function under conformance checks.
STRATEGY_RETURNED_NON_DECISION signal decide() must return a Decision. Return Decision.target, Decision.hold or Decision.unavailable.
STRATEGY_SPEC_INVALID signal strategy.yaml does not match signalquarry.strategy/v1. Fix the fields named in the detail.
STRATEGY_SPEC_MISSING signal strategy.yaml is missing next to the strategy module. Add strategy.yaml next to strategy.py.
STRATEGY_STATE_NOT_SERIALIZABLE signal Strategy state must be canonical JSON (string keys, finite numbers, aware datetimes). Store plain JSON values in state.
STRATEGY_STATE_TOO_LARGE signal Strategy state exceeds 16 KB of canonical JSON. Keep state small; recompute from bars instead.
STUDY_ARM_INVALID usage An arm of the study cannot be built: invalid parameters or execution settings, a variant that changes nothing, or a baseline the dataset does not cover. Correct the arm named in the summary.
STUDY_BENCHMARK_UNDECLARED usage The strategy declares no benchmark, so the scaffolded benchmark baseline has no symbol yet. Give the baseline a symbol, or declare benchmark in strategy.yaml.
STUDY_DATASET_MISMATCH data The study pins a dataset other than the one its subject strategy resolves to. Fetch or select the pinned dataset, or update dataset in the study file (that makes a new study).
STUDY_DETERMINISM_FAILED evidence Recomputing an arm gave a different ledger than the run recorded earlier for the same configuration, dataset and window. Do not use either result. Check that the strategy is pure (sqy check) and that the cached data verifies (sqy data verify).
STUDY_EXISTS usage A study file with that id already exists. Choose another id or edit the existing file.
STUDY_FILE_CHANGED evidence The study file was edited after the result shown was produced, so the result belongs to a different study. Run the study again to get a result for the current file.
STUDY_NOT_FOUND usage The project has no studies/<id>/study.yaml with that id. Run sqy study ls, or create one with sqy study init --strategy <id> --id <study>.
STUDY_NO_RESULT usage The study has not been run yet. Run sqy study run --study <id>.
STUDY_SPEC_INVALID usage The study file does not satisfy the signalquarry.study/v1 contract. Fix the field named in the summary; the id must match the directory name.
SWEEP_RESULTS_ARE_IN_SAMPLE evidence Sweep results are in-sample and raise the trial count. Pick a configuration by reasoning, freeze it, then evaluate.
SWEEP_TOO_LARGE usage The parameter grid has too many points. Sweep fewer, better-reasoned values; each point on real data is a trial.
TRIAL_BUDGET_EXHAUSTED evidence The family's trial budget is used up. Stop, or have a human run sqy trials extend --reason.
TRIAL_BUDGET_NEARLY_USED evidence The family has used at least 80% of its trial budget. Spend the remaining trials on the best-reasoned ideas; extending the budget is a recorded human decision.
TRIAL_NOT_FOUND usage No trial ledger entry matches that sequence number or configuration-hash prefix. Run sqy trials ls to see the entries.
UNIVERSE_ASOF_UNAVAILABLE data No verified asset snapshot was captured by the requested cutoff within the freshness window. Capture snapshots prospectively; historical dates need an independently sourced point-in-time archive.
UNIVERSE_CLASSIFICATION_INVALID data A dated instrument classification snapshot is malformed, incomplete, or inconsistent with asset IDs. Supply a complete, hashed classification snapshot keyed by the stable asset IDs in the asset snapshot.
UNIVERSE_INPUT_UNAVAILABLE data A required asset, classification, or market-data observation is missing, stale, or later than the cutoff. Capture the inputs prospectively and rebuild with a decision cutoff after all required observations.
USAGE_INVALID usage The command line could not be parsed. Run sqy commands or sqy <command> --help.
VCS_DIRTY evidence The project had uncommitted changes when frozen. Commit before freezing so the frozen code is recoverable.
VOLUME_CAPPED execution An order was reduced to the fill model's share of that session's volume. The rest is retried next session; lower weights or accept slower fills for illiquid symbols.