Skip to content

Implicit File Contracts and Output Paths

This document catalogs the implicit file conventions used by core and plugins. These are real but undocumented contracts. Prefer versioned artifacts (.sbt/artifacts/) for cross-plugin data sharing.

Core output paths

PathProducerPurpose
{docsOutput}/backend-atlas-data.jsonsbt generate-atlasAtlas JSON data; plugins contribute via getAtlasData

Plugin output paths (by convention)

PathProducerPurpose
{docsOutput}/migration-audit.htmlplugin-migration-auditFull migration audit report
{docsOutput}/migration-audit/<slug>.htmlplugin-migration-auditPer-migration detail pages (SQL viewer, operations, risk)
{docsOutput}/entity-relations/*.mdplugin-erdMermaid ERD diagrams
{docsOutput}/openapi-spec.jsoncore (docs)Merged OpenAPI spec

Artifact paths (versioned, preferred)

PathArtifact IDPurpose
.sbt/artifacts/migration.analysis/1.0.0/latest.jsonmigration.analysisMigration audit result
.sbt/artifacts/depgraph.graph/1.0.0/latest.jsondepgraph.graphDependency graph
.sbt/artifacts/openapi.partial.deno-functions/1.0.0/latest.jsonopenapi.partial.deno-functionsDeno functions OpenAPI partial
.sbt/artifacts/frontend.usage/1.0.0/latest.jsonfrontend.usageFrontend SDK usage scan

See artifact registry for the full contract set.

Merge semantics

  • Atlas categories: Plugins add keys to data.categories. Key collision overwrites previous value. Use unique, namespaced keys (e.g. migration_audit, not migrations).
  • Atlas stats: Stats are appended; countKey collision updates meta.object_counts. Use lowercase-with-underscores for labels to avoid collision.
  • Dashboard: Plugins contribute sections via getDashboardView() returning JSON-serializable DashboardSectionDef[].
  • OpenAPI: Deep merge of paths/components. Path collisions are overwritten; plugin should namespace or avoid PostgREST paths.

Migration path

New plugins should use versioned artifacts for data sharing. Atlas/OpenAPI hooks remain for UI integration but should use unique, prefixed identifiers.