2.3 KiB
2.3 KiB
Integration: scriptorium
Purpose
Define Narratio's adapter contract for Scriptorium artifact generation and render-debug subprocess invocations.
Inputs and Outputs
Inputs:
RunArtifactRequest: binary, config path, prompt/profile IDs, input map, vars map, timeout, output path, logs/config paths, optional API env and working dirRenderArtifactRequest: same core fields for render mode
Outputs (ArtifactResult):
- output path
- stdout/stderr log paths
- generated config path
- exit code and duration
- command mode (
runorrender) - prompt/profile provenance
- validation failure signal
- adapter metadata
Boundaries
Owns:
- Deterministic CLI arg construction for
scriptorium runandscriptorium render - Common request validation
- Invocation config emission
- Output existence/non-empty checks
- Validation-failure mapping for run exit code 2
Does not own:
- Artifact selection policy (
analyzestage) - Bounds semantic validation (
trimstage)
Config Fields Used
Via pipeline.scriptorium.* and stage-level artifact config:
binary,config_path,timeout,render_debug- artifact-level
prompt_id,profile_id,timeout,inputs,vars,output_path
External Adapters Used
- Shared subprocess helper (
internal/adapters/subprocess).
State and Manifest Behavior
- No direct manifest writes.
- Stage metadata records adapter outputs and command mode.
- Generated invocation YAML is written when requested.
Skip and Resume Behavior
- Adapter has no skip/resume logic. Stage/runner controls execution.
Failure Behavior
- Request validation fails for missing binary/prompt/output, invalid timeout, invalid input/var names, or missing required API env var.
- Subprocess errors bubble with command context.
runexit code 2 is treated asValidationFailed=trueand surfaced as error by calling stage.- Successful subprocess still fails if output file is missing/empty.
Tests to Inspect Before Changing
internal/adapters/scriptorium/subprocess_test.gointernal/adapters/scriptorium/fake_test.gointernal/stage/analyze_test.gointernal/stage/trim_test.go
Architectural Invariants
- Both modes require explicit timeout > 0.
- Input/var maps are sorted into deterministic CLI argument order.
- Run-mode validation failures are represented explicitly, not silently skipped.