What
Define the JSON manifest schema that drives everything Foundry does.
Schema
{
"name": "billing-service",
"description": "...",
"stack": {
"framework": "laravel",
"type": "microservice",
"php": "8.2",
"auth": "github-socialite",
"queue": "redis",
"db": "sqlite"
},
"models": [
{
"name": "Plan",
"attributes": ["name", "price_cents", "interval", "is_active"],
"relationships": [{ "type": "hasMany", "model": "Subscription" }]
}
],
"bifrost": {
"source": "billing-service",
"events": ["subscription.created", "subscription.cancelled"]
},
"quality": { "runner": true, "coverage": 100, "pint": true, "phpstan": true },
"deploy": { "host": "odin", "quadlet": true }
}
Acceptance Criteria
What
Define the JSON manifest schema that drives everything Foundry does.
Schema
{ "name": "billing-service", "description": "...", "stack": { "framework": "laravel", "type": "microservice", "php": "8.2", "auth": "github-socialite", "queue": "redis", "db": "sqlite" }, "models": [ { "name": "Plan", "attributes": ["name", "price_cents", "interval", "is_active"], "relationships": [{ "type": "hasMany", "model": "Subscription" }] } ], "bifrost": { "source": "billing-service", "events": ["subscription.created", "subscription.cancelled"] }, "quality": { "runner": true, "coverage": 100, "pint": true, "phpstan": true }, "deploy": { "host": "odin", "quadlet": true } }Acceptance Criteria
docs/manifest.mdManifestDataDTO validates and hydrates from JSONnameoptional with sensible defaults