Files
scriptorium/docs/roadmap/documentation.md

38 KiB

Documentation Roadmap

Purpose

This roadmap defines the work required to bring Scriptorium's documentation into compliance with docs/policy/documentation.md and the current implementation. It is grounded in the repository state at the time of writing and should guide future documentation changes without rewriting current-behavior docs in this planning pass.

Repository Documentation Inventory

  • README.md - keep and rewrite. It is concise and has a valid quickstart, but it links to docs/integrations/http-api.md as the HTTP contract instead of the policy-required docs/api.md.
  • AGENTS.md - keep and lightly update. It correctly points coding agents at policy docs; keep it short and policy-oriented.
  • docs/policy/documentation.md - keep and lightly update only if policy itself changes. It is the controlling documentation policy and should not be rewritten as part of ordinary docs refresh work.
  • docs/policy/architecture.md - keep and lightly update. It is mostly current, but its package map and integration-doc guidance should be checked against the current tree, including internal/defaults, internal/filecatalog, and the public package.
  • docs/policy/development.md - keep and lightly update. It is required contributor guidance and should reflect any final target docs layout and validation commands.
  • docs/cli.md - keep and rewrite. It is the canonical CLI reference, but should be checked against internal/adapter/cli/run.go after recent serve flags and defaults.
  • docs/config.md - keep and rewrite. It is the canonical config and prompt/profile/schema file-format reference, but it is long and should be tightened around implemented behavior and source-of-truth code.
  • docs/operations.md - keep and rewrite. It should focus on operating the CLI and HTTP service, not repeat full CLI/API/config references.
  • docs/troubleshooting.md - keep and rewrite. It contains useful failure-mode entries, but should be shorter, link to canonical references, and be checked against current error codes.
  • docs/consumers/api.md - keep and rewrite. It is currently too thin for the policy-required consumer overview and should explain the recommended integration choices: Go package, CLI subprocess, and HTTP.
  • docs/consumers/pkg-scriptorium.md - keep and rewrite. It should be the canonical public Go package guide and should be checked against engine.go, types.go, profiles.go, llm_adapter.go, and tests.
  • docs/integrations/http-api.md - move or merge. The public HTTP endpoint contract belongs at docs/api.md; this file should be deleted after its accurate content is merged, or replaced only by a short pointer if the project intentionally keeps redirects.
  • docs/integrations/openai-compatible-chat.md - keep and lightly update. It documents the outbound OpenAI-compatible contract implemented by internal/llm.
  • docs/integrations/narratio.md - move or merge. The repository implements a generic CLI subprocess contract, not a Narratio-specific adapter. Generalize this into a non-product-specific subprocess integration doc or merge it into docs/consumers/api.md.
  • docs/internal/runner.md - keep and rewrite. It is a useful internal component doc and should be checked against internal/usecase.
  • docs/internal/adapters.md - split. Keep adapter behavior here, but move repository/source-loading details into a separate internal source/repository doc if they make the adapter doc too broad.
  • docs/roadmap/cleanup.md - delete or reduce after verification. It appears to describe work that is now largely implemented. Completed implementation plans should not be kept as current-behavior documentation.
  • docs/roadmap/documentation.md - create new. This roadmap is the current planning deliverable.
  • examples/config.yml - keep and lightly update. It is a working repository example used by smoke commands.
  • examples/render-markdown-summary.sh - keep and lightly update. It is a runnable CLI render example.
  • examples/http-run.json - keep and lightly update. It is a real HTTP request example, but docs must state it requires serve with an artifact root and a reachable model endpoint.
  • examples/go-library/prepare/main.go - keep and lightly update. It is a runnable public package example.
  • examples/prompts/ - keep and lightly update. These are valid prompt definitions with content_file usage and structured-output coverage.
  • examples/profiles/ - keep and lightly update. These are custom file-backed profiles for local testing.
  • examples/schemas/ - keep and lightly update. These are real JSON Schema examples used by prompt definitions.
  • examples/fixtures/ - keep and lightly update. These are sample inputs used by tests and examples.
  • internal/profile/builtin/assets/ - not documentation, but inspect while updating config/profile docs. It is the source of truth for the built-in profile catalog.

Policy Compliance Assessment

Required documents missing:

  • docs/api.md is missing. The project exposes HTTP POST /v1/runs, so the policy requires docs/api.md as the canonical public HTTP API contract.

Recommended or useful documents to add:

  • docs/integrations/subprocess.md should replace the product-specific subprocess integration doc if the project wants to keep a maintained subprocess contract outside the CLI reference.
  • docs/internal/sources.md should be added if docs/internal/adapters.md remains too broad. It would cover prompt/profile/schema/artifact repositories and source resolution.
  • examples/config.full.yml or examples/config.http.yml is recommended if operators need a maintained full or HTTP-oriented config example beyond the minimal examples/config.yml.

Documents stale or in the wrong canonical home:

  • docs/integrations/http-api.md is in the wrong home. Its endpoint reference belongs in docs/api.md.
  • README.md, docs/cli.md, docs/config.md, docs/troubleshooting.md, and docs/consumers/api.md link to docs/integrations/http-api.md; those links must point to docs/api.md after the move.
  • docs/integrations/narratio.md is too product-specific for repository evidence. The implemented contract is generic CLI subprocess use.
  • docs/roadmap/cleanup.md appears completed and should not remain as an active current-behavior source.

Content that may describe historical, planned, or unimplemented behavior outside docs/roadmap/:

  • Audit all non-roadmap docs for "future", "planned", "coming", "not implemented", "roadmap", "may add", and similar terms.
  • Keep statements about unimplemented strict realpath artifact containment only in roadmap docs. Current implemented behavior is lexical containment with symlinks followed.
  • Avoid implying HTTP authentication exists. Current serve is unauthenticated and should be deployed behind trusted controls.

Examples that are missing, stale, invalid, or untested:

  • Existing examples are valid enough for current smoke checks:
    • go run ./examples/go-library/prepare
    • go run ./cmd/scriptorium render --config ./examples/config.yml --prompt generic.markdown_summary --input transcript=./examples/fixtures/transcript.md --input glossary=./examples/fixtures/glossary.yml --format json
  • No automated HTTP example smoke exists because the HTTP endpoint calls an LLM endpoint. The docs should mark examples/http-run.json as a request-shape example unless a fake model server example is added later.
  • There is no full config example covering all current config fields, including HTTP size limits.

Links likely stale or needing verification:

  • All links to docs/integrations/http-api.md.
  • README links after creating docs/api.md and generic subprocess docs.
  • Links from docs/consumers/api.md to HTTP and package docs.
  • Relative links in docs/troubleshooting.md, which has many repeated "Relevant links" sections.
  • Any links to roadmap docs from non-roadmap docs should be removed unless explicitly describing future work.

Target Documentation Set

README.md

  • Audience: users, administrators, operators.
  • Purpose: concise project orientation and shortest useful command.
  • Canonical scope: description, quickstart, and links to task-specific docs.
  • Recommended section outline:
    • # scriptorium
    • one-paragraph description
    • ## Quickstart
    • ## Documentation
    • ## Examples
  • Source-of-truth areas: cmd/scriptorium/main.go, internal/adapter/cli/run.go, examples/config.yml, examples/render-markdown-summary.sh.
  • Acceptance criteria: under roughly 60 lines; quickstart command runs; links point to existing canonical docs; no detailed config, API, or package reference material.

AGENTS.md

  • Audience: LLM coding agents and contributors.
  • Purpose: direct agents to required policy docs.
  • Canonical scope: policy-read reminder only.
  • Recommended section outline:
    • policy docs to read before code changes
    • policy docs to read before docs changes
  • Source-of-truth areas: docs/policy/.
  • Acceptance criteria: short; no duplicate policy content; links or paths are accurate.

docs/api.md

  • Audience: external HTTP API consumers, developers, LLM coding agents integrating over HTTP.
  • Purpose: canonical public HTTP API reference.
  • Canonical scope: implemented HTTP POST /v1/runs contract only.
  • Recommended section outline:
    • # HTTP API Reference
    • base URL and route
    • authentication and deployment boundary
    • request headers and JSON rules
    • POST /v1/runs
    • request fields
    • response fields
    • validation failure behavior
    • error envelope and status codes
    • request/response examples
    • limits and artifact-root behavior
  • Source-of-truth areas: internal/adapter/http/handler.go, internal/adapter/http/dto.go, internal/adapter/http/handler_test.go, internal/adapter/cli/run.go, internal/config/config.go.
  • Acceptance criteria: replaces docs/integrations/http-api.md as canonical endpoint reference; documents request_too_large, artifact_too_large, and response_too_large; states raw API keys are not accepted by HTTP payloads; documents strict JSON and trailing-token rejection.

docs/cli.md

  • Audience: users, administrators, operators.
  • Purpose: canonical CLI reference.
  • Canonical scope: run, render, and serve syntax, flags, workflows, exit codes.
  • Recommended section outline:
    • shortest useful command
    • command overview
    • common argument rules
    • flag reference by command
    • input and variable mapping syntax
    • output behavior
    • exit codes
    • common workflows
    • links to config, API, and subprocess docs
  • Source-of-truth areas: internal/adapter/cli/run.go, internal/adapter/cli/run_test.go, internal/format/prepared_run.go, examples.
  • Acceptance criteria: every documented flag exists; deprecated aliases are labeled; serve includes artifact-root and size-limit flags; no HTTP endpoint schema duplication beyond links to docs/api.md.

docs/config.md

  • Audience: administrators, operators, advanced users.
  • Purpose: canonical config and YAML file-format reference.
  • Canonical scope: app config, prompt definitions, profile definitions, built-in profile catalog, schemas, artifact refs, secrets handling.
  • Recommended section outline:
    • config discovery and precedence
    • minimal working config
    • production-oriented config
    • full app config reference
    • prompt definition files
    • profile definition files and built-ins
    • schema behavior
    • artifact reference behavior
    • secrets handling
    • maintained examples
    • integration references
  • Source-of-truth areas: internal/config/config.go, internal/defaults/defaults.go, internal/promptdef/filesystem_repository.go, internal/profile/filesystem_repository.go, internal/profile/builtin/assets/, internal/validate/standard_validator.go, tests under matching packages.
  • Acceptance criteria: all defaults match code; built-in profile catalog matches asset files; no raw secret examples; no repeated HTTP endpoint reference beyond link to docs/api.md.

docs/operations.md

  • Audience: administrators and operators.
  • Purpose: operating guidance for CLI and HTTP service.
  • Canonical scope: normal workflow, filesystem layout, service deployment caveats, recovery, cleanup, and exit/status handling.
  • Recommended section outline:
    • scope
    • operational model
    • filesystem layout
    • normal CLI workflow
    • HTTP service operation
    • secrets handling
    • output, logs, and exit codes
    • validation behavior
    • safe recovery steps
  • Source-of-truth areas: internal/adapter/cli/run.go, internal/config/config.go, internal/adapter/http/handler.go, docs/policy/architecture.md.
  • Acceptance criteria: links to CLI/config/API instead of duplicating references; states no durable run-state store; states HTTP service should be protected externally; documents current artifact-root and size-limit behavior.

docs/troubleshooting.md

  • Audience: administrators and operators.
  • Purpose: symptom-based recovery guide.
  • Canonical scope: common current failure modes and safe fixes.
  • Recommended section outline:
    • missing config
    • missing prompt directory
    • unknown flags
    • prompt/profile load failures
    • input artifact failures
    • missing API-key environment variables
    • LLM request failures
    • validation failures
    • HTTP request/response errors
  • Source-of-truth areas: internal/adapter/cli/run.go, internal/adapter/http/handler.go, internal/usecase/runner.go, internal/llm/openai_compatible_client.go, tests.
  • Acceptance criteria: each entry has symptom, likely cause, diagnostic step, safe fix, and relevant links; no duplicate long reference tables; error codes match code.

docs/consumers/api.md

  • Audience: downstream application developers and LLM coding agents integrating Scriptorium.
  • Purpose: consumer-facing overview and recommended workflows.
  • Canonical scope: choosing between Go package, CLI subprocess, and HTTP API; consumer responsibilities; retry/idempotency boundaries.
  • Recommended section outline:
    • intended consumers and use cases
    • integration surfaces
    • recommended workflow by use case
    • required deployment inputs
    • minimal Go package example
    • subprocess workflow
    • HTTP workflow link
    • consumer responsibilities and boundaries
    • retries, idempotency, and status behavior
  • Source-of-truth areas: public package files, internal/adapter/cli/run.go, docs/api.md, examples.
  • Acceptance criteria: no endpoint field tables duplicated from docs/api.md; no package type reference duplicated from pkg-scriptorium.md; links are canonical.

docs/consumers/pkg-scriptorium.md

  • Audience: Go developers importing gitea.maximumdirect.net/eric/scriptorium.
  • Purpose: canonical public Go package guide.
  • Canonical scope: NewEngine, Config, options, prompts/profiles/schema sources, Prepare, Run, injected LLM clients, errors.
  • Recommended section outline:
    • import path
    • intended use cases
    • construct an engine
    • source options
    • in-memory profiles
    • prepare workflow
    • run workflow
    • injected LLM clients
    • overrides and API keys
    • errors and validation behavior
    • examples
  • Source-of-truth areas: engine.go, types.go, profiles.go, llm_adapter.go, errors.go, engine_test.go, examples/go-library/prepare/main.go.
  • Acceptance criteria: documents direct RunRequest.APIKey; states raw API keys do not belong in profiles; describes source precedence; documents WithProfiles, OpenAICompatibleProfile, WithPromptFS, WithPromptFile, WithProfileFS, WithProfileFile, WithSchemaFS, and WithSchemaFile.

docs/internal/runner.md

  • Audience: developers and LLM coding agents.
  • Purpose: internal runner orchestration reference.
  • Canonical scope: Runner.Prepare, Runner.Run, validation and repair hook behavior, error boundaries.
  • Recommended section outline:
    • purpose
    • inputs and outputs
    • dependencies
    • prepare flow
    • run flow
    • validation and repair
    • failure behavior
    • tests to inspect
    • architectural invariants
  • Source-of-truth areas: internal/usecase/runner.go, internal/usecase/repairer.go, internal/usecase/runner_test.go, internal/usecase/integration_test.go.
  • Acceptance criteria: no adapter DTO details; accurately states Run reuses Prepare; notes CLI/HTTP instantiate without repairer.

docs/internal/adapters.md

  • Audience: developers and LLM coding agents.
  • Purpose: adapter behavior and boundaries.
  • Canonical scope: CLI adapter, HTTP adapter, public package adapter wiring, config handoff.
  • Recommended section outline:
    • purpose
    • adapter map
    • inputs and outputs
    • boundaries
    • config fields used
    • failure behavior
    • tests to inspect
    • architectural invariants
  • Source-of-truth areas: internal/adapter/cli/run.go, internal/adapter/http/handler.go, engine.go, llm_adapter.go, tests.
  • Acceptance criteria: no long prompt/profile schema reference; links to docs/internal/sources.md or docs/config.md for source/file details; keeps adapter logic thin.

docs/internal/sources.md

  • Audience: developers and LLM coding agents.
  • Purpose: implemented prompt/profile/schema/artifact source behavior.
  • Canonical scope: repositories, built-in profile overlay, filecatalog helpers, artifact readers, schema loaders.
  • Recommended section outline:
    • purpose
    • prompt definition sources
    • profile sources and built-in overlay
    • schema sources
    • artifact readers
    • path containment and symlink behavior
    • failure behavior
    • tests to inspect
    • architectural invariants
  • Source-of-truth areas: internal/promptdef, internal/profile, internal/profile/builtin, internal/filecatalog, internal/artifact, internal/validate.
  • Acceptance criteria: describes only implemented source behavior; does not duplicate full user-facing YAML references from docs/config.md.

docs/integrations/openai-compatible-chat.md

  • Audience: developers and LLM coding agents maintaining the outbound provider adapter.
  • Purpose: outbound OpenAI-compatible chat-completions contract.
  • Canonical scope: fields Scriptorium sends and response fields it consumes.
  • Recommended section outline:
    • scope
    • endpoint construction
    • request fields sent
    • auth header behavior
    • timeout behavior
    • response expectations
    • error handling
    • unsupported fields
    • relationship to runner
  • Source-of-truth areas: internal/llm/openai_compatible_client.go, internal/llm/openai_compatible_client_test.go.
  • Acceptance criteria: documents explicit zero numeric override behavior; documents provider body redaction for non-2xx errors; does not describe unused OpenAI API features.

docs/integrations/subprocess.md

  • Audience: developers and LLM coding agents integrating Scriptorium as a subprocess.
  • Purpose: generic CLI subprocess contract for downstream applications.
  • Canonical scope: stable invocation shapes, stdout/stderr separation, exit codes, config and environment expectations.
  • Recommended section outline:
    • purpose
    • supported commands
    • recommended invocation shapes
    • config and directory behavior
    • input and variable contract
    • environment contract
    • stdout/stderr and exit status
    • security notes
    • canonical links
  • Source-of-truth areas: internal/adapter/cli/run.go, docs/cli.md, docs/operations.md, CLI tests.
  • Acceptance criteria: generic, not tied to a specific downstream application; no duplicate flag reference beyond stable examples and links.

docs/policy/architecture.md

  • Audience: developers and LLM coding agents.
  • Purpose: development architecture policy.
  • Canonical scope: stable principles and invariants, not detailed flags or endpoint fields.
  • Recommended section outline: keep current structure.
  • Source-of-truth areas: current package tree, architecture policy itself.
  • Acceptance criteria: package map matches current packages; references target internal docs; does not document volatile details.

docs/policy/development.md

  • Audience: contributors and LLM coding agents.
  • Purpose: contributor workflow.
  • Canonical scope: repository layout, build/test commands, coding and documentation conventions.
  • Recommended section outline: keep current structure, add docs validation expectations after the migration.
  • Source-of-truth areas: current package tree, common commands, examples.
  • Acceptance criteria: commands run; docs validation guidance matches available tooling.

docs/roadmap/

  • Audience: maintainers, developers, LLM coding agents.
  • Purpose: active future work and implementation plans only.
  • Canonical scope: proposed or accepted work not yet reflected in current-behavior docs.
  • Recommended section outline: one roadmap file per active plan.
  • Source-of-truth areas: current code and accepted product decisions.
  • Acceptance criteria: completed plans are removed or reduced to remaining future work; non-roadmap docs do not link to completed plans as current behavior.

File-by-File Rewrite Guidance

  • README.md: cover what Scriptorium is, the render quickstart, and links. Avoid full CLI/config/API explanations. Inspect examples/config.yml, examples/render-markdown-summary.sh, and docs/cli.md. Do not keep the docs/integrations/http-api.md link after docs/api.md exists.
  • docs/api.md: create from the accurate parts of docs/integrations/http-api.md. Cover one route only. Avoid upstream LLM details and public Go package details. Inspect HTTP handler DTOs and tests. Do not document authentication as implemented.
  • docs/cli.md: rewrite from internal/adapter/cli/run.go. Cover flags by command and common workflows. Avoid repeating config schema or HTTP response fields. Inspect CLI tests for parse behavior and exit codes. Do not omit --max-request-bytes, --max-artifact-bytes, or --max-response-bytes.
  • docs/config.md: rewrite as the canonical config and YAML format reference. Avoid long operational advice and HTTP endpoint tables. Inspect config, promptdef, profile, built-in assets, validator, and examples. Do not carry stale example paths that do not exist.
  • docs/operations.md: focus on running and recovering. Link to CLI/config/API instead of duplicating them. Inspect serve wiring and config defaults. Do not imply Scriptorium has persistent run state or built-in auth.
  • docs/troubleshooting.md: keep symptom-driven entries. Avoid repeating full commands under every entry when a shorter diagnostic is enough. Inspect error mapping in CLI, HTTP, usecase, llm, and validators. Do not include provider response body snippets as a default diagnostic because they are redacted.
  • docs/consumers/api.md: rewrite as a consumer decision guide. Link to docs/api.md, docs/cli.md, docs/integrations/subprocess.md, and docs/consumers/pkg-scriptorium.md. Avoid endpoint tables and type catalogs.
  • docs/consumers/pkg-scriptorium.md: rewrite from public package code and tests. Cover public options and error categories. Avoid internal package names except where necessary to explain boundaries. Do not say a credential resolver exists; direct RunRequest.APIKey and profile api_key_env are the implemented mechanisms.
  • docs/internal/runner.md: rewrite from usecase code. Keep it developer-facing. Avoid public API tutorials and operator procedures.
  • docs/internal/adapters.md: narrow to adapters and wiring. Move repository/source detail to docs/internal/sources.md if created. Avoid full HTTP API schemas.
  • docs/internal/sources.md: create if splitting adapter docs. Cover repository and source behavior. Avoid duplicating the full prompt/profile schema from docs/config.md.
  • docs/integrations/openai-compatible-chat.md: update from the LLM client. Avoid documenting OpenAI-compatible features not serialized or parsed by code.
  • docs/integrations/subprocess.md: create by generalizing useful parts of docs/integrations/narratio.md. Avoid naming a downstream product as the generic contract.
  • docs/integrations/http-api.md: delete after docs/api.md exists and links are updated. If a temporary pointer file is kept, it should contain only a link to docs/api.md and should be removed in a later cleanup.
  • docs/integrations/narratio.md: delete after generic subprocess docs exist unless maintainers confirm a product-specific integration doc is still required.
  • docs/policy/architecture.md: lightly update package map and internal doc references only. Avoid volatile details.
  • docs/policy/development.md: lightly update docs validation workflow after examples and target docs settle.
  • docs/roadmap/cleanup.md: remove or reduce after confirming it no longer tracks active future work.

Examples Plan

  • examples/config.yml
    • Purpose: minimal working repository config.
    • Expected validity check: render smoke command using this config.
    • Link from: README, docs/config.md, docs/cli.md, docs/operations.md.
  • examples/render-markdown-summary.sh
    • Purpose: copyable CLI render example.
    • Expected validity check: run the script from repo root.
    • Link from: README, docs/cli.md, docs/config.md.
  • examples/http-run.json
    • Purpose: HTTP request-shape example for POST /v1/runs.
    • Expected validity check: JSON parses; field names match internal/adapter/http/dto.go; full request requires a running server and reachable model endpoint.
    • Link from: docs/api.md, docs/operations.md.
  • examples/go-library/prepare/main.go
    • Purpose: public Go package prepare example.
    • Expected validity check: go run ./examples/go-library/prepare.
    • Link from: README, docs/consumers/api.md, docs/consumers/pkg-scriptorium.md.
  • examples/prompts/
    • Purpose: maintained prompt definition examples including content_file and structured output.
    • Expected validity check: covered by public and internal tests plus render smoke command.
    • Link from: docs/config.md, docs/consumers/pkg-scriptorium.md.
  • examples/profiles/
    • Purpose: custom file-backed profile examples.
    • Expected validity check: used by render and library smoke commands.
    • Link from: docs/config.md, docs/operations.md.
  • examples/schemas/
    • Purpose: JSON Schema validation example.
    • Expected validity check: structured-output tests and config reference review.
    • Link from: docs/config.md, docs/consumers/pkg-scriptorium.md.
  • examples/config.full.yml - recommended create.
    • Purpose: maintained full app config example covering all current config fields, including HTTP limits.
    • Expected validity check: load with go run ./cmd/scriptorium render --config ./examples/config.full.yml ... or add a config-load test.
    • Link from: docs/config.md.

Do not add examples for unimplemented authentication, multi-route HTTP APIs, persistent run storage, or strict realpath artifact containment.

Internal Documentation Plan

  • Component: runner
    • Path: docs/internal/runner.md
    • Purpose: explain prepare/run orchestration.
    • Inputs and outputs: domain.RunRequest, domain.PreparedRun, domain.RunResult.
    • Boundaries: depends on repository, artifact reader, renderer, LLM client, validator, optional repairer.
    • Config fields used: none directly; adapters provide configured dependencies.
    • Adapters used: none directly.
    • Failure behavior: wraps prompt/profile/artifact/render/LLM/validation errors with usecase categories.
    • Tests to inspect: internal/usecase/runner_test.go, internal/usecase/integration_test.go.
    • Architectural invariants: Run reuses Prepare; no durable state; repairer is optional and not wired by CLI/HTTP.
  • Component: adapters
    • Path: docs/internal/adapters.md
    • Purpose: explain CLI, HTTP, and public package adapter boundaries.
    • Inputs and outputs: CLI args/stdout/stderr, HTTP JSON DTOs, public package types.
    • Boundaries: translate external shapes to domain requests and results.
    • Config fields used: prompt_dir, profile_dir, schema_dir, server.*, defaults.render_format.
    • Adapters used: CLI runner wiring, HTTP handler, public LLM adapter.
    • Failure behavior: CLI exit codes, HTTP status/error envelope, public errors.
    • Tests to inspect: internal/adapter/cli/run_test.go, internal/adapter/http/handler_test.go, engine_test.go.
    • Architectural invariants: adapter logic stays thin; no adapter-specific business rules.
  • Component: sources and repositories
    • Path: docs/internal/sources.md
    • Purpose: explain prompt/profile/schema/artifact source loading.
    • Inputs and outputs: YAML files, fs.FS sources, artifact refs, JSON Schema documents.
    • Boundaries: repositories load definitions; artifact readers load input content; validators load schemas.
    • Config fields used: prompt_dir, profile_dir, schema_dir, server.artifact_root, server.max_artifact_bytes.
    • Adapters used: CLI/HTTP/public package source wiring.
    • Failure behavior: strict YAML decode errors, not-found errors, artifact not allowed/too large errors, schema load errors.
    • Tests to inspect: internal/promptdef/repository_test.go, internal/profile/repository_test.go, internal/profile/builtin/repository_test.go, internal/artifact/reader_test.go, internal/validate/standard_validator_test.go.
    • Architectural invariants: built-ins are lowest profile precedence; explicit profile sources override built-ins; public fs.FS roots are contained; HTTP artifact root uses lexical checks and follows symlinks.

Integration Documentation Plan

  • Path: docs/integrations/openai-compatible-chat.md
    • External system or contract: OpenAI-compatible chat completions API.
    • Current usage: outbound LLM generation through internal/llm.OpenAICompatibleClient.
    • Version or compatibility notes: repository implements a subset; compatibility is field-based, not tied to one provider SDK.
    • Document: endpoint construction, headers, messages, cache control, structured output, numeric parameter presence, extra params, response usage fields, timeout behavior, non-2xx error redaction.
    • Do not document: unsupported OpenAI endpoints, streaming, tools, embeddings, provider-specific catalogs beyond fields actually forwarded.
  • Path: docs/integrations/subprocess.md
    • External system or contract: downstream applications invoking Scriptorium CLI as a subprocess.
    • Current usage: implemented CLI run and render commands with stdout/stderr and exit codes.
    • Version or compatibility notes: no formal versioning is implemented; stability comes from documented CLI behavior and tests.
    • Document: supported commands, recommended invocation shapes, stdout/stderr contract, exit codes, config/environment expectations, security notes.
    • Do not document: downstream product-specific behavior or private application assumptions.
  • Path: docs/api.md
    • External system or contract: inbound HTTP JSON API.
    • Current usage: HTTP POST /v1/runs through serve.
    • Version or compatibility notes: no URL version beyond /v1; route is implemented in internal/adapter/http.
    • Document: as canonical API reference, not under docs/integrations/.
    • Do not document: upstream model provider details or public Go package API.

No additional integration docs are recommended for config, prompt, profile, or schema file formats because docs/config.md is the canonical file-format reference.

  • Goal: establish the policy-compliant target structure without large content rewrites.
  • Files to create/update/delete/move: create docs/api.md from docs/integrations/http-api.md; update links to point at docs/api.md; create docs/integrations/subprocess.md from generic parts of docs/integrations/narratio.md; mark old integration docs for deletion.
  • Repository areas to inspect: HTTP handler/dto/tests, CLI run code/tests, README links.
  • Acceptance criteria: docs/api.md exists; no non-roadmap docs link to docs/integrations/http-api.md; subprocess docs are generic.
  • Suggested validation commands: rg "integrations/http-api|Narratio" README.md docs; go test ./internal/adapter/http ./internal/adapter/cli.
  • Prompt size: small enough for one implementation prompt.

Stage 2: README, CLI, And Config References

  • Goal: refresh the primary user/operator references.
  • Files to create/update/delete/move: README.md, docs/cli.md, docs/config.md, optionally examples/config.full.yml.
  • Repository areas to inspect: CLI flags, config structs/defaults, prompt/profile/schema loaders, built-in profile assets, examples.
  • Acceptance criteria: README quickstart runs; all CLI flags documented; all config defaults match code; built-in profile catalog matches asset IDs.
  • Suggested validation commands: go test ./internal/adapter/cli ./internal/config ./internal/profile/builtin; render smoke command; rg -e "--max-request-bytes|server.max_request_bytes|docs/api.md" README.md docs/cli.md docs/config.md.
  • Prompt size: likely one implementation prompt if kept focused; split config into a separate prompt if built-in catalog generation is done manually.

Stage 3: HTTP API And Operations

  • Goal: make HTTP and operations docs accurate without duplication.
  • Files to create/update/delete/move: docs/api.md, docs/operations.md, docs/troubleshooting.md, delete or replace docs/integrations/http-api.md.
  • Repository areas to inspect: HTTP handler/dto/error mapping, config, serve wiring, artifact reader.
  • Acceptance criteria: HTTP error codes match code; operations links to API instead of duplicating it; troubleshooting entries match current errors and limits.
  • Suggested validation commands: go test ./internal/adapter/http ./internal/artifact; rg "request_too_large|artifact_too_large|response_too_large|artifact_root" docs/api.md docs/operations.md docs/troubleshooting.md.
  • Prompt size: one implementation prompt if docs/api.md already exists from Stage 1.

Stage 4: Consumer Documentation

  • Goal: make downstream integration docs useful and policy-compliant.
  • Files to create/update/delete/move: docs/consumers/api.md, docs/consumers/pkg-scriptorium.md, docs/integrations/subprocess.md.
  • Repository areas to inspect: public package files, public package tests, CLI subprocess behavior, examples.
  • Acceptance criteria: consumer overview explains how to choose Go package vs subprocess vs HTTP; package guide documents all exported construction/source/profile methods; examples compile/run.
  • Suggested validation commands: go test .; go run ./examples/go-library/prepare; rg "credential resolver|raw API key.*profile|docs/api.md" docs/consumers docs/integrations/subprocess.md.
  • Prompt size: one implementation prompt.

Stage 5: Internal And Policy Docs

  • Goal: align developer docs with implemented architecture and package boundaries.
  • Files to create/update/delete/move: docs/internal/runner.md, docs/internal/adapters.md, create docs/internal/sources.md, update docs/policy/architecture.md, update docs/policy/development.md.
  • Repository areas to inspect: internal package tree, usecase, adapters, repositories, validators, artifact readers, tests.
  • Acceptance criteria: internal docs include purpose, inputs/outputs, boundaries, config fields, adapters, failure behavior, tests, and invariants; policy docs remain stable and concise.
  • Suggested validation commands: go test ./internal/...; rg "internal/sources|docs/internal" docs/policy docs/internal.
  • Prompt size: one implementation prompt if internal docs are concise; split if docs/internal/sources.md becomes large.

Stage 6: Examples And Stale Roadmap Cleanup

  • Goal: keep examples maintained and remove stale completed plans.
  • Files to create/update/delete/move: examples as needed, docs/roadmap/cleanup.md, this roadmap if implementation is complete.
  • Repository areas to inspect: examples, tests that reference examples, roadmap directory.
  • Acceptance criteria: maintained examples are linked; stale completed roadmap content is removed or reduced to active future work only; no non-roadmap doc describes unimplemented behavior.
  • Suggested validation commands: go test ./...; go vet ./...; go run ./examples/go-library/prepare; render smoke command; rg "future|planned|coming|not implemented|roadmap|integrations/http-api|Narratio" README.md docs --glob '!docs/roadmap/**'.
  • Prompt size: one implementation prompt.

Validation Plan

Run during or after implementation:

go test ./...
go vet ./...
go run ./examples/go-library/prepare
go run ./cmd/scriptorium render \
  --config ./examples/config.yml \
  --prompt generic.markdown_summary \
  --input transcript=./examples/fixtures/transcript.md \
  --input glossary=./examples/fixtures/glossary.yml \
  --format json

Targeted checks:

  • CLI parser and examples: go test ./internal/adapter/cli.
  • HTTP contract: go test ./internal/adapter/http.
  • Config defaults and examples: go test ./internal/config.
  • Built-in profile catalog: go test ./internal/profile/builtin.
  • Public package examples: go test . and go run ./examples/go-library/prepare.
  • Internal docs source checks: go test ./internal/....

Grep/link checks:

  • rg "integrations/http-api|Narratio" README.md docs --glob '!docs/roadmap/**'
  • rg "future|planned|coming|not implemented|roadmap" README.md docs --glob '!docs/roadmap/**'
  • rg "api_key|API key|secret" README.md docs examples
  • rg "max_request_bytes|max_artifact_bytes|max_response_bytes|request_too_large|artifact_too_large|response_too_large" docs
  • rg "\]\(([^)#]+)(#[^)]+)?\)" README.md docs

No dedicated markdown linter or link checker is currently configured in the repository. If one is added later, document it in docs/policy/development.md and include it in this validation plan.

Manual review items:

  • Confirm every target doc has one canonical scope and links elsewhere for details.
  • Confirm examples are secret-free.
  • Confirm docs/api.md contains the only full HTTP endpoint reference.
  • Confirm docs/config.md contains the only full config/prompt/profile/schema file-format reference.
  • Confirm consumer docs do not duplicate HTTP endpoint tables.
  • Confirm non-roadmap docs document implemented behavior only.

Open Questions

No open questions block this roadmap. The recommended path is to create docs/api.md, generalize the subprocess integration doc, keep current-behavior docs concise and canonical, and remove completed roadmap material once the documentation migration is finished.