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 todocs/integrations/http-api.mdas the HTTP contract instead of the policy-requireddocs/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, includinginternal/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 againstinternal/adapter/cli/run.goafter 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 againstengine.go,types.go,profiles.go,llm_adapter.go, and tests.docs/integrations/http-api.md- move or merge. The public HTTP endpoint contract belongs atdocs/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 byinternal/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 intodocs/consumers/api.md.docs/internal/runner.md- keep and rewrite. It is a useful internal component doc and should be checked againstinternal/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 requiresservewith 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 withcontent_fileusage 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.mdis missing. The project exposes HTTPPOST /v1/runs, so the policy requiresdocs/api.mdas the canonical public HTTP API contract.
Recommended or useful documents to add:
docs/integrations/subprocess.mdshould replace the product-specific subprocess integration doc if the project wants to keep a maintained subprocess contract outside the CLI reference.docs/internal/sources.mdshould be added ifdocs/internal/adapters.mdremains too broad. It would cover prompt/profile/schema/artifact repositories and source resolution.examples/config.full.ymlorexamples/config.http.ymlis recommended if operators need a maintained full or HTTP-oriented config example beyond the minimalexamples/config.yml.
Documents stale or in the wrong canonical home:
docs/integrations/http-api.mdis in the wrong home. Its endpoint reference belongs indocs/api.md.README.md,docs/cli.md,docs/config.md,docs/troubleshooting.md, anddocs/consumers/api.mdlink todocs/integrations/http-api.md; those links must point todocs/api.mdafter the move.docs/integrations/narratio.mdis too product-specific for repository evidence. The implemented contract is generic CLI subprocess use.docs/roadmap/cleanup.mdappears 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
serveis 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/preparego 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.jsonas 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.mdand generic subprocess docs. - Links from
docs/consumers/api.mdto 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/runscontract 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.mdas canonical endpoint reference; documentsrequest_too_large,artifact_too_large, andresponse_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, andservesyntax, 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;
serveincludes artifact-root and size-limit flags; no HTTP endpoint schema duplication beyond links todocs/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 frompkg-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; documentsWithProfiles,OpenAICompatibleProfile,WithPromptFS,WithPromptFile,WithProfileFS,WithProfileFile,WithSchemaFS, andWithSchemaFile.
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
RunreusesPrepare; 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.mdordocs/config.mdfor 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. Inspectexamples/config.yml,examples/render-markdown-summary.sh, anddocs/cli.md. Do not keep thedocs/integrations/http-api.mdlink afterdocs/api.mdexists.docs/api.md: create from the accurate parts ofdocs/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 frominternal/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 todocs/api.md,docs/cli.md,docs/integrations/subprocess.md, anddocs/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; directRunRequest.APIKeyand profileapi_key_envare 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 todocs/internal/sources.mdif 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 fromdocs/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 ofdocs/integrations/narratio.md. Avoid naming a downstream product as the generic contract.docs/integrations/http-api.md: delete afterdocs/api.mdexists and links are updated. If a temporary pointer file is kept, it should contain only a link todocs/api.mdand 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.
- Purpose: HTTP request-shape example for
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_fileand 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.
- Purpose: maintained prompt definition examples including
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:
RunreusesPrepare; no durable state; repairer is optional and not wired by CLI/HTTP.
- Path:
- 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.
- Path:
- Component: sources and repositories
- Path:
docs/internal/sources.md - Purpose: explain prompt/profile/schema/artifact source loading.
- Inputs and outputs: YAML files,
fs.FSsources, 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.FSroots are contained; HTTP artifact root uses lexical checks and follows symlinks.
- Path:
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
runandrendercommands 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/runsthroughserve. - Version or compatibility notes: no URL version beyond
/v1; route is implemented ininternal/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.
Recommended Implementation Sequence
Stage 1: Canonical Map And Link Move
- Goal: establish the policy-compliant target structure without large content rewrites.
- Files to create/update/delete/move: create
docs/api.mdfromdocs/integrations/http-api.md; update links to point atdocs/api.md; createdocs/integrations/subprocess.mdfrom generic parts ofdocs/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.mdexists; no non-roadmap docs link todocs/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, optionallyexamples/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 replacedocs/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.mdalready 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, createdocs/internal/sources.md, updatedocs/policy/architecture.md, updatedocs/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.mdbecomes 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 .andgo 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 examplesrg "max_request_bytes|max_artifact_bytes|max_response_bytes|request_too_large|artifact_too_large|response_too_large" docsrg "\]\(([^)#]+)(#[^)]+)?\)" 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.mdcontains the only full HTTP endpoint reference. - Confirm
docs/config.mdcontains 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.