- serve the pinned auth-server OpenAPI contract as the standards MCP resource docs://spec (no auth-server MCP bundle) - add Auth Integration recipe (14) and wire it into the registry, prompts, index, and nav - un-defer Auth Server in the library registry (spec/recipe pointers) - ship the opt-in template auth slice: interfaces/auth/ (placeholder + mergeable bearerAuth security.yaml) and AUTH_SERVER/JWT_SERVER env - rebuild bundle (13 modules, 44 components); template stays authless by default
274 lines
7.6 KiB
JSON
274 lines
7.6 KiB
JSON
{
|
|
"project": "standards",
|
|
"template": "templates/app",
|
|
"seed": {
|
|
"resource": "item",
|
|
"family": "example"
|
|
},
|
|
"components": [
|
|
{
|
|
"kind": "model",
|
|
"path": "domain/item/models.py",
|
|
"placeholder": "resource",
|
|
"description": "Business Pydantic model for a resource."
|
|
},
|
|
{
|
|
"kind": "ports-db",
|
|
"path": "domain/item/ports/db.py",
|
|
"placeholder": "resource",
|
|
"description": "Document model + repository factory for a resource."
|
|
},
|
|
{
|
|
"kind": "ports-service",
|
|
"path": "domain/item/ports/service.py",
|
|
"placeholder": "resource",
|
|
"description": "CRUD service wired through the DI library."
|
|
},
|
|
{
|
|
"kind": "converters",
|
|
"path": "domain/item/ports/converters.py",
|
|
"placeholder": "resource",
|
|
"description": "Optional pure converters between domain types."
|
|
},
|
|
{
|
|
"kind": "routes",
|
|
"path": "interfaces/item/routes.py",
|
|
"placeholder": "resource",
|
|
"description": "Thin HTTP handlers bound to operationIds."
|
|
},
|
|
{
|
|
"kind": "openapi-routes",
|
|
"path": "interfaces/openapi.py",
|
|
"placeholder": "",
|
|
"description": "Route registry: flat re-export of every handler namespace."
|
|
},
|
|
{
|
|
"kind": "auth",
|
|
"path": "interfaces/auth/security.yaml",
|
|
"placeholder": "",
|
|
"description": "Mergeable bearerAuth security scheme + global security for openapi.yaml."
|
|
},
|
|
{
|
|
"kind": "test-model",
|
|
"path": "tests/unit/test_item_models.py",
|
|
"placeholder": "resource",
|
|
"description": "Unit test for the resource model."
|
|
},
|
|
{
|
|
"kind": "test-routes",
|
|
"path": "tests/integration/test_item_routes.py",
|
|
"placeholder": "resource",
|
|
"description": "Integration test at the HTTP edge."
|
|
},
|
|
{
|
|
"kind": "test-openapi-build",
|
|
"path": "tests/integration/test_openapi_app_builds.py",
|
|
"placeholder": "",
|
|
"description": "Generic test: every spec operationId resolves and the app builds."
|
|
},
|
|
{
|
|
"kind": "test-pipeline",
|
|
"path": "tests/unit/test_item_sync.py",
|
|
"placeholder": "",
|
|
"description": "Unit test for the smallest pipeline form."
|
|
},
|
|
{
|
|
"kind": "pipeline-abc",
|
|
"path": "pipelines/example/abc.py",
|
|
"placeholder": "family",
|
|
"description": "Port contracts for a pipeline family."
|
|
},
|
|
{
|
|
"kind": "pipeline-impl",
|
|
"path": "pipelines/example/impl.py",
|
|
"placeholder": "family",
|
|
"description": "Concrete stages, wired root, and family registration."
|
|
},
|
|
{
|
|
"kind": "pipeline-yaml",
|
|
"path": "pipelines/example/pipeline.yaml",
|
|
"placeholder": "family",
|
|
"description": "Graph spec (nodes, edges, roots, schema)."
|
|
},
|
|
{
|
|
"kind": "pipeline-resources",
|
|
"path": "pipelines/example/resources/pipeline.yaml",
|
|
"placeholder": "family",
|
|
"description": "Runtime spec consumed by the shared loader."
|
|
},
|
|
{
|
|
"kind": "pipeline-pattern",
|
|
"path": "pipelines/example/resources/patterns/example.yaml",
|
|
"placeholder": "family",
|
|
"description": "Pattern/rule fragment merged by the loader."
|
|
},
|
|
{
|
|
"kind": "pipeline-ports",
|
|
"path": "pipelines/shared/ports.py",
|
|
"placeholder": "",
|
|
"description": "Shared pipeline ports (FinalizePort, RegistryPort)."
|
|
},
|
|
{
|
|
"kind": "pipeline-loader",
|
|
"path": "pipelines/shared/loader.py",
|
|
"placeholder": "",
|
|
"description": "Shared loader: DI wiring + pattern merge."
|
|
},
|
|
{
|
|
"kind": "pipeline-registry",
|
|
"path": "pipelines/shared/registry.py",
|
|
"placeholder": "",
|
|
"description": "Shared registry: (kind, variant, mode) -> root class."
|
|
},
|
|
{
|
|
"kind": "pipeline-simple",
|
|
"path": "pipelines/item_sync.py",
|
|
"placeholder": "",
|
|
"description": "Smallest pipeline form (plain async steps)."
|
|
},
|
|
{
|
|
"kind": "job-model",
|
|
"path": "domain/job/models.py",
|
|
"placeholder": "",
|
|
"description": "Seeded second resource model (job)."
|
|
},
|
|
{
|
|
"kind": "job-ports-db",
|
|
"path": "domain/job/ports/db.py",
|
|
"placeholder": "",
|
|
"description": "Seeded second resource repository (job)."
|
|
},
|
|
{
|
|
"kind": "job-ports-service",
|
|
"path": "domain/job/ports/service.py",
|
|
"placeholder": "",
|
|
"description": "Seeded second resource service (job)."
|
|
},
|
|
{
|
|
"kind": "job-routes",
|
|
"path": "interfaces/job/routes.py",
|
|
"placeholder": "",
|
|
"description": "Seeded second resource routes (job)."
|
|
},
|
|
{
|
|
"kind": "config",
|
|
"path": "config.py",
|
|
"placeholder": "",
|
|
"description": "Settings dataclass + singleton."
|
|
},
|
|
{
|
|
"kind": "init",
|
|
"path": "init.py",
|
|
"placeholder": "",
|
|
"description": "Composition root (init/shutdown, get_svc)."
|
|
},
|
|
{
|
|
"kind": "main",
|
|
"path": "main.py",
|
|
"placeholder": "",
|
|
"description": "Spec-first app bootstrap + lifespan."
|
|
},
|
|
{
|
|
"kind": "worker",
|
|
"path": "worker.py",
|
|
"placeholder": "",
|
|
"description": "Poll loop + job status machine."
|
|
},
|
|
{
|
|
"kind": "openapi",
|
|
"path": "openapi.yaml",
|
|
"placeholder": "",
|
|
"description": "OpenAPI contract skeleton."
|
|
},
|
|
{
|
|
"kind": "pyproject",
|
|
"path": "pyproject.toml",
|
|
"placeholder": "",
|
|
"description": "Packaging + dependency pins."
|
|
},
|
|
{
|
|
"kind": "dockerfile",
|
|
"path": "Dockerfile",
|
|
"placeholder": "",
|
|
"description": "API + worker image with private-index wiring."
|
|
},
|
|
{
|
|
"kind": "dockerignore",
|
|
"path": ".dockerignore",
|
|
"placeholder": "",
|
|
"description": "Docker build-context exclusions."
|
|
},
|
|
{
|
|
"kind": "gitignore",
|
|
"path": ".gitignore",
|
|
"placeholder": "",
|
|
"description": "VCS exclusions (caches, venv, generated _gen/)."
|
|
},
|
|
{
|
|
"kind": "compose",
|
|
"path": "docker-compose.yaml",
|
|
"placeholder": "",
|
|
"description": "api + worker + mongo compose file."
|
|
},
|
|
{
|
|
"kind": "env-example",
|
|
"path": ".env.example",
|
|
"placeholder": "",
|
|
"description": "Environment variable template."
|
|
},
|
|
{
|
|
"kind": "db-setup",
|
|
"path": "infra/db/setup.py",
|
|
"placeholder": "",
|
|
"description": "Mongo connection lifecycle."
|
|
},
|
|
{
|
|
"kind": "repo",
|
|
"path": "infra/db/repos/mongo.py",
|
|
"placeholder": "",
|
|
"description": "Repository factory (base/populating/cached)."
|
|
},
|
|
{
|
|
"kind": "service-adapter",
|
|
"path": "infra/adapters/service.py",
|
|
"placeholder": "",
|
|
"description": "Generic CRUD service adaptor."
|
|
},
|
|
{
|
|
"kind": "http-cache",
|
|
"path": "infra/http_cache.py",
|
|
"placeholder": "",
|
|
"description": "Response cache decorator + Redis store (generation invalidation)."
|
|
},
|
|
{
|
|
"kind": "progress-bus",
|
|
"path": "infra/adapters/sse.py",
|
|
"placeholder": "",
|
|
"description": "In-memory SSE progress bus (keyed by an event attribute)."
|
|
},
|
|
{
|
|
"kind": "kv-store",
|
|
"path": "infra/adapters/kv.py",
|
|
"placeholder": "",
|
|
"description": "KV port + in-memory fallback + optional Redis adaptor."
|
|
},
|
|
{
|
|
"kind": "package-init",
|
|
"path": "domain/__init__.py",
|
|
"placeholder": "",
|
|
"description": "Empty package marker; add an __init__.py to every package dir."
|
|
},
|
|
{
|
|
"kind": "script-seed",
|
|
"path": "scripts/seed.py",
|
|
"placeholder": "",
|
|
"description": "Operator seed script."
|
|
},
|
|
{
|
|
"kind": "script-drop",
|
|
"path": "scripts/drop.py",
|
|
"placeholder": "",
|
|
"description": "Operator drop script."
|
|
}
|
|
]
|
|
} |