Files
distributor/docs/roadmap/implementation.md

3.2 KiB

HTTP API Boundary Roadmap

Purpose

This roadmap records the accepted boundary for a future HTTP API. The current application exposes CLI commands and internal app-layer run contracts; it does not implement an HTTP server, HTTP routes, a serve command, app-level authentication, or in-app TLS.

Implemented internal run contracts are documented in docs/internal/app.md. This file is the canonical home for future HTTP boundary decisions until an HTTP implementation roadmap replaces it.

Accepted Direction

The future HTTP API should trigger configured distributor pipelines through the existing app-layer single-pipeline run path and in-memory coordinator.

The HTTP API is intentionally narrow:

  • A trigger request accepts only a pipeline ID as application input.
  • A trigger request starts work asynchronously and returns a run ID after admission.
  • Run status is read through a separate status endpoint keyed by run ID.
  • Status records expose run ID, pipeline ID, current status, timestamps, and completed report or error details when available.

The application remains a bundle distribution tool. The HTTP API must not turn distributor into a workflow engine, CMS, report generator, or public web authoring service.

Error Mapping

Future transport code should map app-layer errors without changing app-layer error ownership:

  • Unknown pipeline IDs map to 404 Not Found.
  • Duplicate in-flight runs for the same pipeline ID map to 409 Conflict.
  • Validation, config, source, destination, publish, transform, and notification errors map to transport errors according to their app-layer context.

Duplicate runs must not be queued. Run state remains in memory unless a later roadmap explicitly adds durable run storage.

Context And Lifetime

The request context guards admission. Once a run is admitted, execution is tied to the server or coordinator lifetime context rather than to the client request lifetime.

This split allows a client disconnect or request timeout to stop waiting for admission without canceling a run that has already been accepted.

Security Boundary

The first HTTP server should default to private binding, such as 127.0.0.1. Operators should expose it through a reverse proxy, private network, or external mTLS when transport security or remote access is required.

The first HTTP implementation should not include:

  • bearer-token authentication;
  • in-app TLS configuration;
  • public-network exposure defaults.

A later roadmap must explicitly change this security decision before any of those features are added.

Non-Goals

The future HTTP API should not add:

  • public CLI flags for selecting one pipeline during distributor run;
  • a CLI framework;
  • a generic workflow engine;
  • plugin execution;
  • durable run storage;
  • app-level authentication;
  • in-app TLS.

Verification Expectations

Any later HTTP implementation should preserve existing CLI behavior and keep the app-layer run contracts tested. At minimum, it should cover:

  • trigger requests with known and unknown pipeline IDs;
  • duplicate in-flight trigger requests;
  • asynchronous acceptance and status lookup;
  • private bind defaults;
  • request-context admission behavior;
  • coordinator-lifetime run execution.