Skip to content

ADR-0702: Doc-sync, templating, and Confluence publication

Kollect collects and exports; rendering/publishing to a CMS stays out of the operator and belongs in external CI that consumes the exports.

Theme: 07 · Project & meta · Status: Dropped (binding scope guardrail)

Context

Early plans included a KollectPublication reconciled kind: render aggregated inventory with Go templates and push to Confluence or a documentation Git repo (patterns ported from a prior batch collector). That combined inventory collection, templating, and CMS sync in one operator.

Stakeholders still need rendered documentation, but that workflow fits a separate pipeline (e.g. GitLab CI job reading exported JSON from the Git sink) rather than in-cluster doc backends.

Decision

Do not implement KollectPublication, Confluence REST clients, or in-operator Go-template doc sync.

Approach Owner
Collect + export inventory Kollect (KollectTargetKollectInventory → sinks)
Template + publish to Confluence/wiki External CI or doc tool consuming Git/object-store export

Rationale (single responsibility):

  • The operator collects and exports auditable inventory snapshots.
  • Templating and Confluence push add CMS credentials, idempotent page merge, and content drift unrelated to Kubernetes watches.
  • Git (or Postgres/Kafka) export already satisfies portal and audit needs (ADR-0102).

Consequences

Positive

  • Smaller security surface (no Confluence tokens in the operator).
  • Faster path to production sinks (Git, S3, Postgres, Kafka — ADR-0402).
  • Clear boundary for platform teams: export contract in Git JSON; render elsewhere.

Negative

  • No one-click Confluence update from a CR; teams must wire CI to exported artifacts.
  • kpub short name and any Publication samples remain documentation-only rejected references.

Scope creep guardrails (binding)

Any feature that smells like doc-sync must be rejected unless it is plain inventory export:

In scope (Kollect) Out of scope (external CI / portal)
Deterministic JSON/YAML/row export to Git, S3, GCS, Postgres, Kafka Go templates, Confluence REST, wiki merge, CMS credentials
Read-only HTTP GET /inventory Rich portal UI, auth beyond ADR-0404
checksum, generation, itemCount in export metadata Rendered HTML/Markdown publication pipelines
Stable sort keys for git diff Idempotent page upsert, attachment handling

Review gate: before adding a reconciler or sink field, ask: does this render or publish content to a human CMS? If yes → reject and document the external pipeline pattern instead.

Platform review : guardrails reaffirmed — no scope creep into templating, Confluence, or rendered publication inside the operator. See PLATFORM-DECISIONS.md.

Rejected kind names and short names (KollectPublication, kpub) must not reappear in codegen, samples, or public docs except as historical rejection notes.

See also