Browse pages
Extensions
Extensions add conditional standards to the baseline stacks.
Intent#
Extensions add conditional standards to the baseline stacks. An extension stays inactive until a current requirement meets its activation criteria. The consumer lists its ID in selectedExtensions within litespec.project.json, with the criterion it met and a review date.
An extension may add requirements, packages, projects, and verification. It replaces a baseline rule only when its document names that provision ID. The manifest repeats that list where checks read it.
Selection#
| Extension | Activation scope | Replaces | Switches on | Activate when |
|---|---|---|---|---|
| bdd | local | None | case | Shared critical examples need executable BDD scenarios. |
| compat | project | None | None | Public or independently deployed consumers need breaking-change detection and versioning. |
| cache | local | None | limit | Measurements show repeated expensive reads with bounded staleness. |
| concurrency | local | None | limit | Conflicting writes or repeated delivery can violate behavior. |
| lifecycle | local | None | limit | Deletion, retention, archival, restore, or legal hold behavior applies. |
| containers | project | None | limit, runbook | A hosted environment deploys container images. |
| integrations | local | None | None | Behavior calls or receives data from an external system. |
| audit | project | litespec/quality/security#record-security-audit-events | None | A reviewer must establish who acted inside data another party owns. |
| locale | project | None | None | The product commits to more than one locale. |
| mcp | project | None | None | The product ships a Model Context Protocol server an LLM client starts on a user's own machine. |
| tenancy | project | None | None | Independent customer organizations share one deployment. |
| outbox | local | litespec/backend/persistence#collect-events-without-a-public-unit-of-work | event, limit, and runbook | A committed change requires delivery that cannot be lost. |
| efcore | local | The persistence and dependency provisions its Baseline relationship section names | None | Selected aggregates require relational persistence instead of Marten. |
| realtime | local | None | event, limit | Polling cannot meet a measured update-latency requirement. |
| report | local | None | limit | Complex reports or large exports exceed normal request reads. |
| jobs | local | None | limit, runbook | Behavior requires recurring, delayed, or calendar-based Worker work. |
| site | project | None | None | The product ships a public static website beside its application. |
| stage | project | None | None | The first deployment holds no customer data yet, or a past promotion goes on record. |
| delegation | project | None | None | One agent starts another agent on the same tree. |
The manifest is the machine-readable source for activationScope, replaces, and switchesOn. This table explains the selection decision.
Switched-on types#
switchesOn names the record types a selection requires. Selecting the outbox requires Event and Limit records, so a project that selects it writes both. A type the project already requires stays required.
Activation#
litespec/core/scope#select-conditional-extensions-explicitly states when an extension activates. litespec/core/scope#record-selected-extensions states where it is listed. litespec/core/scope#record-selected-extensions requires the project record.
The agent protocol carries the ordered steps an agent follows.
Example#
The project selects both locale and outbox, each with the criterion it met and a review date:
{
"selectedExtensions": [
{ "id": "locale", "criterion": "The product ships in English and Dutch.", "reviewBy": "2027-03-01" },
{ "id": "outbox", "criterion": "Shipment dispatch cannot lose a delivery.", "reviewBy": "2027-03-01" }
]
}litespec/core/scope#select-conditional-extensions-explicitly requires that an extension is selected only when its criteria apply. The object form records which criterion that was. The consumer validator reports a selection whose reviewBy has passed. A selection that costs nothing to keep is a selection no one removes.