Files
distributor/docs/internal/transform.md

2.3 KiB

Transform

Purpose

internal/transform defines generated publication artifacts. internal/transform/markdown implements Markdown-to-HTML generation.

Inputs and outputs

Inputs are a validated source bundle, source backend, and transform options supplied by publish planning. Outputs include destination path, source path, transform id, generated bytes, SHA-256, and size.

Registry

internal/transform defines the transform interface and registry. The app layer registers the Markdown implementation; publish planning receives only a resolver.

Markdown behavior

Markdown sidecar mode renders files ending in .md to .html files in the same logical directory. Markdown index mode renders one selected manifest-listed Markdown file to index.html. Non-Markdown files do not generate sidecar outputs. Raw HTML embedded in Markdown is not passed through by the renderer.

Generated HTML is deterministic for the same source content and transform configuration.

See docs/integrations/markdown.md for the Goldmark integration contract.

Failure behavior

Transform resolution fails when a requested transform id is not registered. Markdown rendering fails when the source file cannot be read or rendered. Index input selection fails when the configured input is unsafe, not listed, not Markdown, or when no configured input can be inferred from exactly one manifest-listed Markdown file. Publish planning fails when HTML output is requested and the selected transform produces no outputs for a bundle.

Boundaries

Transforms do not publish files, mutate source bundles, or write destination state. Publish planning selects and writes transform outputs.

The app layer owns default transform registration. The transform package does not import concrete transform implementations.

Tests

Before changing transform behavior, inspect tests under:

  • internal/transform
  • internal/transform/markdown

Invariants

  • Source bundle files are never mutated by transforms.
  • Generated outputs record destination path, source path, transform id, SHA-256, and size.
  • Markdown sidecar naming changes only the .md extension to .html.
  • Markdown index mode always writes index.html.
  • Non-Markdown source files do not generate Markdown outputs.
  • Transform registration stays outside publish planning.