35 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 a planning document only; future agents should use it to update the canonical documentation without describing unimplemented behavior outside docs/roadmap/.
Repository Documentation Inventory
README.md- keep and rewrite. It is currently a full manual covering config, CLI, HTTP, prompt/profile authoring, examples, and build commands; policy says README should be a short orientation page with a quickstart and links.architecture.md- move/merge/delete after rewrite. It overlaps withdocs/policy/architecture.md, contains "should" guidance and future extension notes outsidedocs/roadmap/, and references architecture that is partly stale or aspirational.docs/policy/documentation.md- keep and lightly update only if policy itself changes. It is the controlling documentation policy.docs/policy/architecture.md- keep and lightly update. It is the canonical development architecture policy, but some package-layout defaults do not exactly match this repository (internal/adapter/...versus policy examples such asinternal/adapters/...).docs/policy/development.md- create new. Required by policy for projects maintained by humans and LLM coding agents.docs/config/config-yml.md- merge intodocs/config.md. The content mostly matches code but lives in the wrong canonical home.docs/config/prompt-definitions.md- merge intodocs/config.md. The field reference is mostly accurate, but it needs caveats aboutrepair_attempts, repeated message roles, schema path resolution, and examples.docs/config/profile-definitions.md- merge intodocs/config.md. It must stop implying that every profile field is sent to the provider; the current OpenAI-compatible client does not sendreasoning_effortorextra_params.docs/config/schema-definitions.md- merge intodocs/config.mdor link from it. Schema behavior is implemented, but the canonical config reference should own this material.docs/cli.md- create new. Required by policy for the implemented CLI.docs/operations.md- create new. Required by policy for this CLI/service application; scope should cover normal operation, config paths, secret handling, stdout/stderr, exit codes, HTTP serving, and the fact that there is no durable run state/resume behavior.docs/troubleshooting.md- create new. Recommended by policy and justified by implemented failure modes in parser, config, prompt/profile loading, artifact reading, validation, LLM calls, and HTTP error mapping.docs/internal/- create new. Required by policy for this modular application.docs/integrations/narratio.md- keep and rewrite. It documents an actual CLI integration contract, but it includes future extension notes outside roadmap and illustrative prompt IDs that are not all present in the repository.docs/integrations/http-api.md- create new. The implementedPOST /v1/runsAPI is an external integration contract and should not live in README.docs/integrations/openai-compatible-chat.md- create new. The outbound LLM contract is important and implemented ininternal/llm/openai_compatible_client.go.examples/config.yml- keep and lightly update if paths move. It is a valid app config example for the current rootprompts/,profiles/, andschemas/directories.examples/fixtures/transcript.md- keep. It is used by integration tests.examples/fixtures/glossary.yml- keep. It is used by integration tests.prompts/- keep as maintained sample prompt library for now; recommended to move or mirror underexamples/only if tests and docs are updated together.profiles/- keep as maintained sample profile library for now; recommended to move or mirror underexamples/only if tests and docs are updated together.schemas/- keep as maintained sample schema library for now; recommended to move or mirror underexamples/only if tests and docs are updated together.local-test/- delete, move out of the repository, or explicitly exclude from maintained docs. It contains ad hoc local artifacts and provider profiles; it should not be linked from canonical docs unless promoted to maintained examples with tests and secret review.
Policy Compliance Assessment
Required documents that are missing:
docs/cli.mddocs/config.mddocs/operations.mddocs/internal/docs/policy/development.md
Recommended documents that should be added:
docs/troubleshooting.md- Validated examples under
examples/beyond the current config and fixtures, especially command examples that can be checked withrender. - Integration docs for the implemented HTTP API and outbound OpenAI-compatible chat API.
Documents that exist but are stale or in the wrong canonical home:
README.mdduplicates material that belongs indocs/cli.md,docs/config.md,docs/integrations/, anddocs/internal/.docs/config/*.mdshould be merged intodocs/config.md.architecture.mdshould be merged intodocs/policy/architecture.md,docs/internal/, ordocs/roadmap/, then removed.docs/integrations/narratio.mdshould remain under integrations but must be narrowed to implemented CLI behavior and actual integration guidance.
Content that appears to describe deprecated, historical, planned, or unimplemented behavior outside docs/roadmap/:
architecture.mdhas future extension notes for S3 artifact references, additional LLM providers, streaming, batch execution, database-backed repositories, profile versioning, and HTTP render endpoints.architecture.mdandREADME.mddescribe bounded repair as if it is generally active. The code has an injected repairer hook, but the CLI and HTTP server constructRunnerwithout a repairer, so production commands do not currently perform repair attempts.README.mdsays "additional output formats can be added later"; this belongs in roadmap only.README.mdreferencesgo build -o scriptorium ./cmd/scriptorium, which is valid, but the README should not be the build/test manual afterdocs/policy/development.mdexists.docs/integrations/narratio.mdhas "Future Extension Notes" and examples for prompt IDs not present in the repository, such asdnd.structured_events,dnd.glossary_suggestions, anddnd.player_summary.- Any docs implying S3 artifact support should be removed from current-behavior docs.
domain.ArtifactRefS3exists, butartifact.CompositeReadersupports onlyinlineandfile.
Examples that are missing, stale, invalid, or untested:
examples/config.ymlpoints at rootprompts/,profiles/, andschemas/; it is valid for repository-root execution but should be tested or explicitly checked.- There are no copyable CLI example scripts or expected-output files under
examples/. - The maintained prompt/profile/schema examples live outside
examples/; this is usable, but policy prefers copyable examples underexamples/. local-test/appears unmaintained and should not be treated as documentation.
Links that are likely stale or need verification:
- Existing links from README to docs should be rewritten after canonical files are created.
- Any references to
docs/config/config-yml.md,docs/config/prompt-definitions.md,docs/config/profile-definitions.md, ordocs/config/schema-definitions.mdshould be updated after those files are merged. - References to default config paths must use the implemented search order:
/usr/local/etc/scriptorium/config.yml, then/etc/scriptorium/config.yml.
Target Documentation Set
README.md
- Audience: users, administrators, operators.
- Purpose: concise orientation and shortest useful command.
- Canonical scope: project purpose, elevator pitch, quickstart, and links.
- Recommended outline: description; why scriptorium exists; shortest useful
scriptorium renderorscriptorium runexample; documentation links. - Source of truth:
cmd/scriptorium/main.go,internal/adapter/cli/run.go,examples/config.yml,prompts/generic.markdown_summary.yaml. - Acceptance criteria: no full flag reference; no HTTP schema; no prompt/profile field tables; no future work; all links point to existing target docs.
docs/cli.md
- Audience: users, administrators, operators.
- Purpose: complete CLI reference and common workflows.
- Canonical scope: commands, flags, outputs, exit codes, and command examples.
- Recommended outline: shortest useful command; command overview;
run;render;serve; flag reference; input and variable mapping syntax; output behavior; exit codes; common workflows. - Source of truth:
internal/adapter/cli/run.go,internal/adapter/cli/run_test.go,internal/format/prepared_run.go,cmd/scriptorium/main.go. - Acceptance criteria: documents real flags only; notes deprecated aliases
--prompt-idand--profile-id; documents thatrenderdoes not currently accept--schema-dir; documents stdout/stderr split and exit code2for validation failure.
docs/config.md
- Audience: administrators, operators, advanced users.
- Purpose: canonical reference for app config, prompt definitions, profiles, and schemas.
- Canonical scope: all implemented YAML/JSON file formats and precedence rules.
- Recommended outline: config file discovery and precedence; minimal app config; production-oriented app config; app config reference; prompt definition reference; profile definition reference; schema behavior; secrets handling; maintained examples.
- Source of truth:
internal/config/config.go,internal/defaults/defaults.go,internal/promptdef/filesystem_repository.go,internal/profile/filesystem_repository.go,internal/validate/standard_validator.go, repositoryprompts/,profiles/,schemas/, and config/profile/prompt tests. - Acceptance criteria: replaces split
docs/config/*.md; documents strict YAML decoding; documents raw API key rejection; documentsschema_dirdefault.; documents promptcontent_filerelative to prompt YAML; statescontent_typeis metadata only; does not claim operational repair unless a repairer is configured.
docs/operations.md
- Audience: administrators, operators.
- Purpose: operational use of CLI and HTTP service.
- Canonical scope: normal workflow, filesystem expectations, config deployment, secrets, logs/output, validation behavior, and recovery from failed runs.
- Recommended outline: normal run/render workflow; config and library directories; environment variables for API keys; serving HTTP; output and stderr summaries; validation failure handling; no durable state/resume/archive behavior; safe recovery steps.
- Source of truth:
internal/adapter/cli/run.go,internal/adapter/http/handler.go,internal/config/config.go,internal/llm/openai_compatible_client.go,internal/usecase/runner.go. - Acceptance criteria: makes clear scriptorium does not persist run state; does not invent cleanup/archive/resume; documents that HTTP has no built-in authentication and should be deployed behind trusted controls.
docs/troubleshooting.md
- Audience: administrators, operators.
- Purpose: safe diagnosis and fixes for recurring implemented failure modes.
- Canonical scope: symptoms, likely causes, diagnostics, safe fixes, and links.
- Recommended outline: missing config; missing prompt/profile dirs; unknown flags; prompt/profile load failures; missing input files; template render failures; missing API-key environment values; LLM non-2xx/malformed responses; JSON/schema validation failures; HTTP error codes.
- Source of truth:
internal/adapter/cli/run_test.go,internal/adapter/http/handler_test.go,internal/config/config_test.go,internal/promptdef/repository_test.go,internal/profile/repository_test.go,internal/validate/standard_validator_test.go,internal/llm/openai_compatible_client_test.go. - Acceptance criteria: every entry includes symptom, likely cause, diagnostic step, safe fix, and links to canonical CLI/config/operations docs.
docs/policy/architecture.md
- Audience: developers, LLM coding agents.
- Purpose: controlling development architecture and invariants.
- Canonical scope: development principles, boundaries, invariants, non-goals.
- Recommended outline: keep current policy shape; add scriptorium-specific package map or link to
docs/internal/; clarify no orchestration creep; clarify current adapters. - Source of truth: existing policy,
internal/package layout,architecture.md. - Acceptance criteria: remains policy-oriented; does not become user docs; future work stays in roadmap; no stale package names.
docs/policy/development.md
- Audience: developers, LLM coding agents.
- Purpose: contributor workflow and change checklist.
- Canonical scope: repository layout, build/test commands, coding conventions, dependency policy, adding config/CLI/adapters, updating examples/docs.
- Recommended outline: repository layout; common commands; coding conventions; dependency policy; how to add config fields; how to add CLI flags; how to add adapters; how to update examples; documentation expectations.
- Source of truth:
go.mod,cmd/scriptorium/main.go,internal/adapter/cli/run.go,internal/config/config.go,docs/policy/architecture.md, existing tests. - Acceptance criteria: includes
go test ./...; referencesgo build ./cmd/scriptorium; tells contributors to update docs and tests with behavior changes.
docs/internal/runner.md
- Audience: developers, LLM coding agents.
- Purpose: implemented core prepare/run behavior.
- Canonical scope:
Runner.Prepare,Runner.Run, profile selection, runtime merge, artifact loading, rendering, structured output setup, validation, repair hook boundary. - Recommended outline: purpose; inputs/outputs; prepare flow; run flow; boundary contracts; failure behavior; tests; invariants.
- Source of truth:
internal/usecase/runner.go,internal/usecase/repairer.go,internal/usecase/runner_test.go,internal/usecase/integration_test.go. - Acceptance criteria: states CLI/HTTP currently construct
Runnerwithout a repairer; documents validation content failures versus runtime validation errors; no provider-specific details except through ports.
docs/internal/adapters.md
- Audience: developers, LLM coding agents.
- Purpose: implemented adapter boundaries.
- Canonical scope: CLI adapter, HTTP adapter, filesystem repositories, artifact reader, prompt renderer, OpenAI-compatible LLM client, validator, prepared-run formatter.
- Recommended outline: adapter map; inputs/outputs; config fields used; external dependencies; failure behavior; tests to inspect.
- Source of truth:
internal/adapter/cli,internal/adapter/http,internal/promptdef,internal/profile,internal/artifact,internal/prompt,internal/llm,internal/validate,internal/format. - Acceptance criteria: documents only implemented adapters; states
inlineandfileartifact refs are supported and S3 is not; states OpenAI request fields actually sent.
docs/integrations/http-api.md
- Audience: developers, LLM coding agents, API clients.
- Purpose: implemented inbound HTTP contract.
- Canonical scope:
POST /v1/runs, request/response shape, raw output opt-in, error mapping, validation-failed status behavior. - Recommended outline: scope; endpoint; request fields; response fields; error responses; validation behavior; security/auth note.
- Source of truth:
internal/adapter/http/dto.go,internal/adapter/http/handler.go,internal/adapter/http/handler_test.go. - Acceptance criteria: no unimplemented render endpoint; no built-in auth claim; unknown JSON fields rejected; raw API key fields rejected by strict JSON.
docs/integrations/openai-compatible-chat.md
- Audience: developers, LLM operators, LLM adapter maintainers.
- Purpose: implemented outbound LLM API contract.
- Canonical scope: OpenAI-compatible chat completions request/response subset and provider-level structured output behavior.
- Recommended outline: endpoint construction; request fields sent; auth header from
api_key_env; timeout behavior; response expectations; error handling; unsupported profile fields. - Source of truth:
internal/llm/openai_compatible_client.go,internal/llm/openai_compatible_client_test.go,internal/usecase/runner.go. - Acceptance criteria: says endpoint appends
/chat/completions; says empty first choice content is malformed; saysreasoning_effortandextra_paramsare not currently serialized into the outbound request.
docs/integrations/narratio.md
- Audience: developers, LLM coding agents maintaining Narratio integration.
- Purpose: CLI subprocess contract for Narratio.
- Canonical scope: how Narratio should call implemented
scriptorium runandscriptorium render. - Recommended outline: purpose; assumptions; command shapes; inputs/vars; profile selection; runtime overrides; config behavior; environment handling; output handling; exit statuses; security notes; non-goals.
- Source of truth:
internal/adapter/cli/run.go,internal/adapter/cli/run_test.go,docs/cli.md,docs/config.md. - Acceptance criteria: removes future extensions; labels any Narratio-specific prompt IDs as external examples only or removes them; links to canonical CLI/config docs.
File-by-File Rewrite Guidance
README.md: cover what scriptorium does and show one minimal command. Avoid field tables, complete flag lists, HTTP schema, internal package details, future extensions, and long examples. Link todocs/cli.md,docs/config.md,docs/operations.md,docs/troubleshooting.md, anddocs/integrations/.docs/cli.md: coverrun,render,serve, flags, output behavior, and exit codes. Avoid duplicating prompt/profile YAML field references; link todocs/config.md. Inspect CLI parser tests before writing examples. Do not carry forward README's claim that render supports--schema-dir.docs/config.md: cover app config, prompt YAML, profile YAML, and schema behavior. Avoid provider API details except where needed for profile fields; link to OpenAI integration doc. Do not carry forward claims thatrepair_attemptsenables repair for normal CLI/HTTP runs unless code later wires a repairer.docs/operations.md: cover deployed operation and recovery boundaries. Avoid inventing durable state, resume behavior, cleanup, backups, or archives. State that rerunning a command is the recovery model.docs/troubleshooting.md: use tested errors and behavior. Avoid exposing internal wrapped error details that HTTP intentionally suppresses. Link to CLI/config/operations instead of repeating full references.docs/policy/architecture.md: preserve policy authority and update only scriptorium-specific facts. Avoid copying the long historicalarchitecture.mdwholesale. Move future extension ideas to roadmap docs only.docs/policy/development.md: cover contributor mechanics and how to update behavior safely. Avoid user-facing manuals. Include tests and docs update expectations.docs/internal/runner.md: explain implemented core flow and invariants. Avoid CLI flag tables and HTTP DTO detail; link to adapter docs.docs/internal/adapters.md: explain implemented adapter boundaries and tests. Avoid proposing new adapters. Do not implyArtifactRefS3works.docs/integrations/http-api.md: document onlyPOST /v1/runs. Avoid documenting a render/prepare HTTP endpoint.docs/integrations/openai-compatible-chat.md: document the outbound request subset. Avoid documenting unsupported OpenAI fields or provider-specific options unless code sends them.docs/integrations/narratio.md: keep it as a subprocess contract. Avoid future work, S3, HTTP-as-primary-path, and undeployed prompt IDs as current examples.architecture.md: after target docs exist, delete it or replace it with a short pointer todocs/policy/architecture.mdanddocs/internal/. Do not leave future notes in this root file.docs/config/*.md: afterdocs/config.mdexists and links are updated, delete these split files or replace them with pointers only if backwards-compatible links are necessary.
Examples Plan
Existing maintained examples:
examples/config.yml: minimal app config pointing at root prompt/profile/schema libraries. Validity check:go test ./internal/config ./internal/adapter/cliandgo run ./cmd/scriptorium render --config ./examples/config.yml --prompt generic.markdown_summary --input transcript=./examples/fixtures/transcript.md --format json. Link from README,docs/config.md, anddocs/cli.md.examples/fixtures/transcript.md: sample transcript input. Validity check: used byinternal/usecase/integration_test.goand render smoke command. Link from README anddocs/cli.md.examples/fixtures/glossary.yml: sample optional glossary input. Validity check: used byinternal/usecase/integration_test.go. Link fromdocs/config.mdand examples section indocs/cli.md.prompts/generic.markdown_summary.yaml: sample markdown prompt. Validity check: render smoke command. Link from config docs until or unless it is moved underexamples/.prompts/generic.structured_events.yamlplusschemas/structured_events.schema.json: sample JSON-schema prompt. Validity check:go test ./internal/usecase. Link fromdocs/config.md.profiles/local-fast.yamlandprofiles/local-quality.yaml: sample profiles. Validity check: profile repository tests plus integration test. Link fromdocs/config.md, with a note thatlocal-qualityrequiresSCRIPTORIUM_API_KEYbecause it setsapi_key_env.
Recommended example additions, all based on implemented behavior:
examples/render-markdown-summary.sh: copyable render smoke command usinggeneric.markdown_summary. Expected check: run script or equivalentgo runcommand exits0. Link from README anddocs/cli.md.examples/http-run.json: copyablePOST /v1/runsrequest body usinginlineorfileartifact refs. Expected check: parse as JSON and keep aligned withinternal/adapter/http/dto.go. Link fromdocs/integrations/http-api.md.examples/prompts/,examples/profiles/,examples/schemas/: optional future move or mirror of maintained sample libraries. Expected check: update integration tests andexamples/config.ymltogether. This is recommended for policy alignment but should be done as its own implementation stage to avoid breaking tests.
Do not document local-test/ as maintained examples.
Internal Documentation Plan
Core runner
- Path:
docs/internal/runner.md - Purpose: explain implemented prepare/run lifecycle.
- Inputs and outputs:
domain.RunRequest,domain.PreparedRun,domain.RunResult,domain.GenerateRequest. - Boundaries: usecase owns profile selection, runtime merge, artifact resolution orchestration, rendering orchestration, structured output setup, validation, and run metadata; adapters own transport/config parsing.
- Config fields used: none directly; adapters pass resolved repositories, validators, and request values.
- Adapters used: promptdef repository, profile repository, artifact reader, prompt renderer, LLM client, validator, optional injected repairer.
- Failure behavior: invalid request, prompt/profile load, artifact load, render failure, LLM failure, validation runtime failure; validation content failures return a result.
- Tests to inspect before changing:
internal/usecase/runner_test.go,internal/usecase/integration_test.go. - Architectural invariants:
RunreusesPrepare; no resolved API key values in prepared data; repair attempts bounded and only possible when a repairer is injected; no orchestration creep.
Adapters and repositories
- Path:
docs/internal/adapters.md - Purpose: explain implemented external boundaries.
- Inputs and outputs: CLI args/stdout/stderr/exit codes; HTTP JSON DTOs; YAML prompt/profile/config files; file/inline artifacts; OpenAI-compatible HTTP requests; prepared-run text/JSON output.
- Boundaries: adapters translate external forms into domain requests/results and must not own domain decisions.
- Config fields used:
prompt_dir,profile_dir,schema_dir,server.addr,defaults.render_format; profileendpoint,model, generation fields, timeout,api_key_env. - Adapters used: CLI, HTTP, filesystem repositories, artifact reader, Go template renderer, OpenAI-compatible client, standard validator, prepared-run formatter.
- Failure behavior: strict YAML/JSON decoding, unknown fields rejected, unsupported artifact refs rejected, LLM non-2xx/malformed responses become errors.
- Tests to inspect before changing: adapter, repository, artifact, renderer, LLM, validator, and formatter tests under
internal/**. - Architectural invariants: no raw API keys; no S3 docs until reader exists; OpenAI client sends only implemented request fields.
Validation and structured output
- Path: include in
docs/internal/runner.mdor createdocs/internal/validation.mdif the section grows. - Purpose: explain
none,basic,json,json_schema, schema loading, and provider-level JSON schema request setup. - Inputs and outputs:
domain.Artifact,domain.OutputContract,domain.ValidationResult,domain.StructuredOutputSpec. - Boundaries: validator checks output; runner creates provider-level structured output spec for
json_schema; OpenAI adapter serializesresponse_format. - Config fields used:
schema_dir; promptoutput.schema_path,output.validation_mode,output.format. - Adapters used: standard validator and OpenAI-compatible client.
- Failure behavior: invalid generated JSON is validation failure; missing/invalid schema file is runtime validation error before or during run preparation.
- Tests to inspect before changing:
internal/validate/standard_validator_test.go,internal/usecase/runner_test.go,internal/llm/openai_compatible_client_test.go. - Architectural invariants: schema docs must load before
json_schemaLLM request; schema paths resolve relative toschema_dir.
Integration Documentation Plan
HTTP API
- Path:
docs/integrations/http-api.md - External system or contract: inbound HTTP clients of scriptorium.
- Current usage in scriptorium:
scriptorium serveexposesPOST /v1/runs. - Version or compatibility notes: route is
/v1/runs; request decoding rejects unknown JSON fields. - What should be documented: request fields,
fileandinlineartifact refs, model overrides, raw output opt-in, response shape, error codes, validation-failed200 OK, no built-in auth. - What should not be documented: unimplemented render endpoint, streaming, batch, authentication middleware, remote artifact storage.
OpenAI-compatible chat completions
- Path:
docs/integrations/openai-compatible-chat.md - External system or contract: outbound OpenAI-compatible
/chat/completionsAPI. - Current usage in scriptorium:
OpenAICompatibleClient.Generateposts chat messages and optional JSON schema response format. - Version or compatibility notes: compatibility is defined by the subset used in code, not by a pinned OpenAI API version.
- What should be documented: endpoint construction, request fields, auth header behavior, timeout behavior, expected response shape, error handling, structured output payload.
- What should not be documented: provider features not serialized by code, retries, streaming, tool calls, reasoning controls, or extra provider params.
Narratio CLI subprocess
- Path:
docs/integrations/narratio.md - External system or contract: Narratio calling scriptorium as a subprocess.
- Current usage in scriptorium: public CLI commands
runandrender. - Version or compatibility notes: contract should be tied to implemented CLI flags and exit codes.
- What should be documented: command construction, config use, input files, vars, profile overrides, timeout override, output paths, stdout/stderr handling, exit status semantics.
- What should not be documented: future S3 support, future HTTP primary integration, unimplemented prompt IDs as current examples, or Narratio stage state internals.
JSON Schema is important but does not need a separate integration doc in the first migration; keep schema behavior in docs/config.md and internal validation docs unless compatibility issues require a dedicated page later.
Recommended Implementation Sequence
Stage 1: Canonical README, CLI, and Config
- Goal: make user-facing docs accurate and move reference material to canonical homes.
- Files to create/update/delete/move: rewrite
README.md; createdocs/cli.md; createdocs/config.md; leave olddocs/config/*.mdtemporarily with pointers or delete them only after links are updated. - Repository areas to inspect:
cmd/scriptorium/main.go,internal/adapter/cli/run.go,internal/adapter/cli/run_test.go,internal/config,internal/promptdef,internal/profile,internal/validate,examples/config.yml,prompts/,profiles/,schemas/. - Acceptance criteria: README is short; CLI flags match parser; config paths and precedence match code; no future work outside roadmap; no repair claims beyond implemented behavior.
- Suggested validation commands:
go test ./...;go run ./cmd/scriptorium render --config ./examples/config.yml --prompt generic.markdown_summary --input transcript=./examples/fixtures/transcript.md --format json;rg -n "future|planned|may be added|can be added later|S3|streaming|batch" README.md docs/cli.md docs/config.md. - One-prompt size: yes, if old split config files are deleted or replaced with pointers in the same change.
Stage 2: Operations and Troubleshooting
- Goal: document operational behavior and known failure modes.
- Files to create/update/delete/move: create
docs/operations.md; createdocs/troubleshooting.md; update README links. - Repository areas to inspect: CLI and HTTP adapters, config tests, LLM client tests, validator tests, prompt/profile repository tests.
- Acceptance criteria: no invented state/resume/backup behavior; troubleshooting entries are actionable and link to canonical docs; HTTP no-auth caveat is clear.
- Suggested validation commands:
go test ./internal/adapter/cli ./internal/adapter/http ./internal/config ./internal/llm ./internal/validate;rg -n "resume|archive|backup|cleanup|state" docs/operations.md docs/troubleshooting.md. - One-prompt size: yes.
Stage 3: Development Policy and Internal Docs
- Goal: give developers and LLM agents accurate package boundaries and invariants.
- Files to create/update/delete/move: create
docs/policy/development.md; updatedocs/policy/architecture.md; createdocs/internal/runner.md; createdocs/internal/adapters.md; optionally createdocs/internal/validation.md. - Repository areas to inspect: all
internal/packages,go.mod, rootarchitecture.md, tests. - Acceptance criteria: package names match repository; current adapters only; future extension ideas absent except links to roadmap; repairer hook boundary is accurate.
- Suggested validation commands:
go test ./...;rg -n "should expose|may be added|future|S3|batch|streaming|database-backed|additional providers" docs/policy docs/internal. - One-prompt size: maybe split into two prompts if
docs/internal/becomes too large.
Stage 4: Integration Docs
- Goal: move external contracts out of README and make integration docs precise.
- Files to create/update/delete/move: create
docs/integrations/http-api.md; createdocs/integrations/openai-compatible-chat.md; rewritedocs/integrations/narratio.md; update README and CLI/config links. - Repository areas to inspect:
internal/adapter/http,internal/llm,internal/usecase, CLI tests, HTTP tests, LLM tests. - Acceptance criteria: HTTP docs cover only
POST /v1/runs; OpenAI docs cover only serialized fields; Narratio docs include only implemented CLI integration and no future notes. - Suggested validation commands:
go test ./internal/adapter/http ./internal/llm ./internal/adapter/cli;rg -n "POST /v1/renders|S3|future|later|batch|streaming" docs/integrations. - One-prompt size: yes.
Stage 5: Examples and Link Cleanup
- Goal: make examples policy-compliant and verify links after moves.
- Files to create/update/delete/move: optionally add
examples/render-markdown-summary.sh; optionally addexamples/http-run.json; decide whether to move or mirrorprompts/,profiles/,schemas/underexamples/; delete or excludelocal-test/; remove or replace rootarchitecture.md; delete obsoletedocs/config/*.mdif not already removed. - Repository areas to inspect:
examples/,prompts/,profiles/,schemas/,internal/usecase/integration_test.go, docs links. - Acceptance criteria: examples are copyable, secret-free, and tested where practical; no links to deleted docs; no maintained docs link to
local-test/. - Suggested validation commands:
go test ./...;go run ./cmd/scriptorium render --config ./examples/config.yml --prompt generic.markdown_summary --input transcript=./examples/fixtures/transcript.md --format text;rg -n "docs/config/|architecture.md|local-test|dnd.structured_events|dnd.glossary_suggestions|dnd.player_summary" README.md docs examples. - One-prompt size: split if moving prompt/profile/schema assets because tests and paths must be updated carefully.
Validation Plan
- Run
go test ./...after documentation changes that touch examples, paths, command examples, or config references. - Smoke-test the documented render quickstart with
go run ./cmd/scriptorium render --config ./examples/config.yml --prompt generic.markdown_summary --input transcript=./examples/fixtures/transcript.md --format json. - If documenting JSON-schema render/run examples, set
SCRIPTORIUM_API_KEYor use a profile withoutapi_key_env;Runner.Preparevalidates the named environment variable. - Validate CLI flags against
internal/adapter/cli/run.goand parser tests, especiallyrenderlacking--schema-dirandserverejecting runtime override flags. - Validate app config examples against
internal/config/config.gostrict YAML decoding. - Validate prompt/profile examples against
internal/promptdef/filesystem_repository.goandinternal/profile/filesystem_repository.go. - Validate HTTP request examples against
internal/adapter/http/dto.gostrict JSON decoding. - Run grep checks for stale or roadmap-only terms outside
docs/roadmap/:future,planned,may be added,can be added later,S3,streaming,batch,database-backed,render endpoint, and prompt IDs not present inprompts/. - Run grep checks for stale paths after file moves:
docs/config/,architecture.md, andlocal-test. - No automated documentation link checker is currently configured; perform manual link review or add a link checker in a separate roadmap item if desired.
Open Questions
No open questions block the documentation migration. The recommended path is to document the current implementation conservatively, move future ideas into docs/roadmap/, and avoid claiming production behavior for hooks that are present in code but not wired into CLI or HTTP adapters.