Files
narratio/docs/integrations/scriptorium.md

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 dir
  • RenderArtifactRequest: same core fields for render mode

Outputs (ArtifactResult):

  • output path
  • stdout/stderr log paths
  • generated config path
  • exit code and duration
  • command mode (run or render)
  • prompt/profile provenance
  • validation failure signal
  • adapter metadata

Boundaries

Owns:

  • Deterministic CLI arg construction for scriptorium run and scriptorium 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 (analyze stage)
  • Bounds semantic validation (trim stage)

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.
  • run exit code 2 is treated as ValidationFailed=true and 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.go
  • internal/adapters/scriptorium/fake_test.go
  • internal/stage/analyze_test.go
  • internal/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.