11 KiB
Troubleshooting
This guide maps common implemented failure modes to inspection steps and fixes. For command syntax, see CLI Reference. For YAML fields and environment overrides, see Configuration. For output and diagnostics layout, see Operations.
Config File Not Found
Symptom:
notarius: config file not found; pass --config or set NOTARIUS_CONFIG
Fix:
- Pass
--config path/to/config.yml. - Or set
NOTARIUS_CONFIGto a readable file. - Or install a config at
/usr/local/etc/notarius/config.yml.
If the message says the config path is a directory or is not available, correct the path or file permissions.
Unsupported Or Invalid Config
Symptoms include:
unsupported config versionconfig version is requiredfield <name> not foundtotal LLM concurrency must be greater than zerodiagnostics retention "<value>" is not supported
Fix:
- Use
version: 2. - Remove unknown YAML fields.
- Validate with:
go run ./cmd/notarius config validate --config path/to/config.yml
Unknown Pipeline
Symptom:
notarius: pipeline "..." is not configured
Fix:
- List configured pipeline IDs:
go run ./cmd/notarius pipelines list --config path/to/config.yml
- Use one of those IDs in
notarius run <pipeline-id>. - Check indentation under the top-level
pipelinesmap.
Unknown Or Incompatible Module
Symptoms mention a module key, pipeline slot, lane, capability, or not registered.
Fix:
- Validate the pipeline against the production module catalog:
go run ./cmd/notarius config validate \
--config path/to/config.yml \
--pipeline dnd-session
- Use only implemented production module keys listed in Configuration.
- Check that artifact lanes include an
extractbinding.
Invalid --only
Symptoms include:
--only must contain comma-separated non-empty artifact lane IDs--only requires --pipelineselected artifact lane
Fix:
- Use comma-separated lane IDs with no empty entries:
go run ./cmd/notarius run dnd-session \
--config path/to/config.yml \
--input path/to/input.json \
--only spells
- For
config validate, include--pipelinewhen using--only. - Confirm the lane ID exists under
pipelines.<id>.artifacts.
Reference Binding Failure
Symptoms include:
reference slot "..." is not declaredreference slot "..." is declared by multiple selected targetsrequired reference slot "..." is not bound--reference must use slot=path--without-reference must use a reference selector without =pathread "...": no such filemust be UTF-8 textmedia type "..." is not acceptedis ... bytes, limit ...
Fix:
- Confirm the selected chunker, extractor, merger, or normalizer declares the slot. The
implemented
dnd/sceneschunker anddnd/spellsextractor declare optionalrosterandglossaryslots. - Use a specific selector when more than one selected target declares the same
slot:
chunk.context=./context.txt,spells.extract.context=./extract-context.txt,spells.merge.context=./merge-context.txt, orspells.normalize.context=./normalize-context.txt. lane.slot=pathis valid only when exactly one selected extractor, merger, or normalizer in that lane declares the slot. If more than one does, uselane.extract.slot=path,lane.merge.slot=path, orlane.normalize.slot=path.- Use
--without-reference selectorto remove optional config bindings; do not pass an empty--reference selector=. - Check whether a path came from config or CLI. Config paths are relative to the config file. CLI reference paths are relative to the current working directory.
- Ensure the file is readable UTF-8 text and within any byte limit declared by the declaring module.
- If the declaring module narrows accepted media types, use a file extension that
infers an accepted type such as
text/markdown,application/yaml, orapplication/json. Unknown extensions inferapplication/octet-stream. - If diagnostics are retained, inspect
resolved-pipeline.json,resolved-references.json, anderror.log.
Seriatim Input Validation Failure
Symptoms include seriatim input, parse JSON, segments must not be empty,
or validation errors naming a segment field.
Fix:
- Compare the input to examples/seriatim-minimal-transcript.json.
- Ensure the JSON has a
metadataobject and a non-emptysegmentsarray. - Each segment needs a non-empty
id, non-emptyspeaker, non-emptytext, non-negative numericstart, and non-negative numericend. - Segment IDs must be unique and must not contain leading or trailing whitespace.
endmust be greater than or equal tostart.
Scriptorium Profile Source Failure
Symptoms include:
scriptorium profile_dir and profile_file are mutually exclusivescriptorium.profile_dir must not be empty when setscriptorium.profile_file must not be empty when setprofile loadprofile not found
Fix:
- Configure at most one of
scriptorium.profile_dirorscriptorium.profile_file. - Confirm the selected Scriptorium profile ID exists in the configured profile source or Scriptorium built-in profiles.
- If using
--llm-profile, pass a Scriptorium profile ID, not a removed Notarius profile ID. - Validate the config and selected pipeline:
go run ./cmd/notarius config validate \
--config path/to/config.yml \
--pipeline dnd-session
LLM Profile Override Failure
Symptom:
notarius: LLM profile override "..." is not configured
Fix:
- Add the profile to the configured Scriptorium profile source.
- Or use an existing Scriptorium profile ID with
--llm-profile.
Use --llm-profile <id> when one run should force every LLM-backed binding to
the same Scriptorium profile. The override applies to effective chunk, extract,
merge, and normalize bindings.
Missing API Key Environment Variable
Symptoms include:
api_key_envunset environment variable- provider authentication failures after selecting a profile that needs a key
Fix:
- Check the selected Scriptorium profile's
api_key_envfield. - Set that environment variable before running Notarius.
- Do not put raw API keys in Notarius config or file-backed Scriptorium profiles.
Prompt Or Structured Output Failure
Symptoms include:
prompt not foundprompt renderschemavalidationdecode structured output
Fix:
- Ensure production modules register their embedded Scriptorium prompt and schema assets.
- If the error names a profile, select a Scriptorium profile that is available through the configured profile source or built-in catalog.
- If the error names generated output validation, retry with a model that follows JSON schema instructions reliably.
- Inspect retained diagnostics
error.log,resolved-pipeline.json, andrun-manifest.jsonwhen available. Prompt text, source text, reference content, raw schema JSON, and secrets are not written to default diagnostics. - Provider errors are redacted for bearer tokens and configured API key values.
Scene Chunking Failure
Symptoms include:
dnd scenes chunkermalformed structured outputboundary_caveatsstart_unit_idend_unit_idgapoverlapfinal scenecomplete structured output
Fix:
- Validate the pipeline configuration and confirm the input module provides a
transcript source when using
chunk: dnd/scenes. - Confirm the selected Scriptorium profile has a working endpoint, model, and credentials.
- Inspect retained diagnostics for the run error and resolved pipeline.
- If the error names malformed structured output, retry with a model that follows structured response schemas reliably.
- If the error names
boundary_caveats, check for blank or whitespace-only caveat text in the scene response. - Scene boundaries must resolve to valid source units, cover the full source document, be contiguous, and not overlap.
Session ID
Symptom: external logs or provider traces cannot be correlated with a Notarius run.
Fix:
- Pass
--session-id <id>tonotarius run. - Use a stable, non-secret identifier from the external orchestrator.
Output Write Failure
Symptoms include:
create output directorywrite output fileoutput file name mustunsupported media typeinvalid JSON
Fix:
- Ensure
--output-dirpoints to a directory path or a path that can be created. - Check filesystem permissions and available disk space.
- The production JSON output encoder writes lane payloads under
lanes/and accepts only validapplication/jsonnormalized outputs. If an error names an unsupported media type or invalid JSON, inspect the lane's merge and normalize module output. - If diagnostics were retained, inspect
run-report.json,run-manifest.json, anderror.log.
The CLI rejects unsafe logical output paths before writing files.
Raw Output Rejection
Symptoms include a successful run with:
validation_statusset torejected;- non-empty
rejected.json; rejected_outputsentries inmanifest.json.
Explanation and fixes:
- Validator rejection is a non-fatal run outcome. Rejected module outputs do not pass to the next pipeline stage.
- Check
rejected.jsonfor the stage, lane, module, chunk, validator, reason, message, and attempt count. - Increase a module binding's
retriesonly when re-running the same module input can reasonably produce an acceptable output. - If rejection is deterministic, fix the source input, module configuration, or validation policy rather than adding retries.
Retry Exhaustion
Symptoms include:
- errors containing
failed after ... attempt(s); - rejected output records with
attempt_countgreater than1.
Fix:
retriesis the number of extra attempts after the first attempt for chunk, extract, merge, and normalize bindings.- Framework-level errors after the last attempt fail the run.
- Validator rejections after the last attempt are recorded as rejected outputs.
- Check retained
error.log,run-manifest.json, andrejected.jsonfor the operation, module key, lane, chunk, and attempt count.
Diagnostics Directory Surprise
Symptom: the diagnostics directory is missing after a successful run.
Fix:
- Check
diagnostics.retention. - With
auto, successful runs without warnings are removed. - Use
diagnostics.retention: alwayswhen every diagnostics run directory should be kept. - Use
--diagnostics-dirto override the configured work directory for a run.
Symptom: diagnostics exist even with retention: never.
Explanation:
- Failed runs are retained so that
error.logand available context can be inspected.