ADR-0001 · Core architecture
What every implementation of dagstack/plugin-system consists of — manifest, registry, context, adapters, contract tests. How plugins are distributed. How versioning works.
ADR-0002 · Hook invocation semantics
Five dispatch classes — singleton / broadcast-collect / broadcast-notify / chain / capability — their normative behaviour, execution order, error handling, and lifecycle ordering.
ADR-0003 · Orchestration-neutral runtime
Eight runtime invariants that make a plugin work uniformly across FastAPI, a Dagster op, a Celery task, and a pytest fixture — with no conditional code. The orchestrator kind as the integration point with external systems.
ADR-0004 · Hookspec formalism
Hookspec as the source of truth for plugin-kind contracts — a YAML wrapper over JSON Schema, type generation for Python / TypeScript / Go / OpenRPC / Markdown, and a CI gate against drift.
ADR-0005 · Horizontal extensions
Five extension points of plugin-system for governance / quota / observability — open metadata slot, chain middleware, resource decoration, capability filtering, trace-context propagation.
ADR-0006 · File-based discovery
Normative contract for the discover(path) function — dagstack.toml as the canonical manifest, entry_point REQUIRED, namespace isolation through importlib, directory traversal rules.