Repository navigation
LiteSpec 4.0.0
LiteSpec 4.0.0 is a standard for specification-driven development of one bounded-context business application by people and coding agents. It defines a strict specification model of linked records beside graded engineering provisions, with git as the decision record. A consumer pins this release in reviewedLiteSpecVersion. The release takes effect as the v4.0.0 tag.
Part A: The Nature of LiteSpec
- The specification model is strict: a record follows its schema, links resolve, and code and tests mark the records they serve; a violation is a defect.
- Each provision states its strength, rule, default or advice, and where it applies; a check exists where one is cheap and sure.
- Git is the decision record: a record in the repository is decided, and the pull request that changes it is its review.
- The specification is closed: an agent builds what the specification states and takes anything missing to the owner or the backlog board.
- Every record is about the software: what the application does, holds, refuses at runtime or runs on.
Part B: Git Is the Decision Record
- Records carry no history of their own; git carries who changed what and when.
- Completion is computed from code, tests and passing scenarios, and the book shows it first.
- An exception carries reason, exit and expiry; an expired exception is a blocking finding.
- A date about the outside world sits with its source as
readOn.
Part C: Eight Commands
- The CLI has eight commands:
init,new,rename,model check,model format,model query,bookandrules. model checkis the one command CI runs: schema, folders, names, links, locality, reachability, marks and exceptions.model renderhas three regions:alert-inventory,runbook-indexandoperations-log.- An additional command, finding code, analyzer rule or generated file needs an owner decision that records it.
Part D: Provisions by Situation
- Each page declares its stack and layer; a provision adds
Applies toonly when narrower than its page. - Every provision states
Strength: rule, default or advice. - The provision index carries scope and strength; the site groups Standard, Reference, Learn and LiteSpec's own records.
Part E: Rules for the File at Hand
litespec rules <path or record id>lists the applying provisions grouped by strength, with why each was retrieved;--fulladds rationale and example.- Project conventions and departures merge into the result; a departure shows in place of the provision it replaces.
- A retrieval evaluation with a precision target proves the command.
Part F: The Consumer Uses the Same Structure
- Layer and artifact derive from the stack structure and the records a file marks.
- Project conventions live in
.litespec/governance/conventions/in provision shape. - A departure names the provision it replaces and a scope.
- Records use the same layer and artifact terms, so one query answers file, records and provisions together.
Part G: Surfaces That State the Nature
- The README, AGENTS.md, the core pages, the command pages, the templates and this changelog state the nature above.
- The docs index groups pages with generated counts; the site navigation follows the same groups.
Part H: Consumers Adopt the Whole Contract
- A consumer pins one release and adopts a later release by accepting its whole contract.
- A consumer declares the conformance level it claims in
.litespec/project.json:records,tracedorfull. The levels nest, andmodel check, the book,rulesand the analyzers report only the part of the contract the level claims. - At
recordsa project keeps its own code layout and needs no stack; attracedits code and tests mark their records and its test runs prove scenarios, in its own layout; atfullit takes the selected stacks, the code layout, the analyzers and the operations provisions. - Provision identifiers stay stable within a major version; the changelog of each release lists the provision changes since the previous tag, generated by
litespec-maintain changelog.
Part I: Every Record Is About the Software
- Intent reads module, then feature, then requirement; Behavior reads module, then aggregate, then use case.
- Features sit under
intent/modules/<module>/features/with their requirements as entries; a requirement identifier has the formrequirement/<feature>.<name>. - A folder under
intent/modules/that names no declared module is a blocking finding. - Reachability blocks: a goal reaches a journey or a quality requirement, a problem reaches a feature or requirement, a feature or requirement reaches Behavior, a constraint is answered, research is cited, and a decision decides a record that reaches Behavior.
- Identifiers are short and unique in the product; the qualified identifier is computed from identifier segments plus placement, never written.
Part J: One Placement Model for Every Layer
- Every record has one parent; the container is the parent; product, module, aggregate and entry point are the only folder nodes.
- Behavior, Implementation and Governance place each type per the placement table in the model page; Proof holds no authored records.
- Code and tests match the qualified identifier of the record they mark in folder and namespace, including frontend module folders.
- Module
dependsOnholds no cycle; an integration event has one publishing module.
Part K: Fields That State the Product
- Every record carries type, id, title, terms and records plus its type fields; every record carries one
summary, and a record that makes a testable claim carries onestatement. - The project file carries project, size, shape, stacks, stackConfig, paths, marks, proof, dependencies, screenshots, refusals, selectedExtensions and
reviewedLiteSpecVersion. risksits on permission only;setByuses product, operator or tenant; a rule names where retained facts live inretainedIn; a use case states its field read and write lifecycle.
Part L: Complete Work Before Merging
- A branch may be incomplete; what merges is complete.
model checkreports reachability locally and blocks in the pull-request check; an exception withexpiresOnparks one record. - The folder wins: an identifier whose home segment disagrees with its folder is a blocking finding; each name segment is unique in the product.
- Tiers: G reads records and always blocks, S reads code and blocks where qualified, A reports and never blocks.
- An exception is live when present and unexpired.
Part M: The Module Layout as the Default Architecture
- Layers are roles: Domain, Application, Infrastructure and WebApi with the reference table the architecture page states.
- One application project holds every module; hosts hold composition and HTTP plumbing.
- The folder tree uses closed folder sets per level; use case folders are flat; cross-module access runs only through
Contracts/alongdependsOn. - The
layer-projectsextension holds the five-project layout for consumers that select it.
Part N: Gaps Closed in the Standard
- A deviation is an exception of kind departure whose
coversnames the provision it replaces. - Product patterns live in
implementation/patterns/; product copy rules live inimplementation/writing/; document pages may sit at a layer root. - Module rules live in
behavior/modules/<module>/rules/; adapter tests sit under the adapter'sInfrastructure/path. - Guidance precedence lives in one provision on the agent page.
Part O: Checks a Partial Adopter Can Read
- Findings about Intent that no Behavior reaches yet report locally and block in the pull-request check, so Intent can run ahead of Behavior.
- The .NET reader reads several web and worker hosts, reports a default project root that matches nothing as
reader-missing, and attracedfinds an aggregate root by its mark and its state record. - A JUnit test case proves a Behavior scenario through a
litespec.provesproperty, so a runner whose steps carry no mark, or a stack with no code reader, still proves its scenarios. model checklists level A findings as a summary by code unless--allis given, and its JSON output maps G, S and A to error, warning and note.initwrites a project file the schema accepts for every preset, including therecordspreset, and no size requires an exception record.
Part P: Analyzers as Proof and a Smaller Rules Output
- A structural boundary needs an architecture test only where no analyzer or
model checkfinding covers it;analyzer-lowering-unrecordedreports an analyzer rule lowered or switched off without an exception, so an analyzer can stand as the proof. - LS1013 reports a switch over a state or closed-set record hierarchy that leaves a sealed case to its discard arm; the tests, not the compiler, catch a new case.
- LS2012 also reports a handler that takes the authorization guard.
litespec rulesprints statements only for the provisions that need judgment, the checked provisions as one line with their codes, and the layer-wide provisions by identifier; every provision on a page that names kinds of file names its own.
Provision Changes Since v3.0.0
Added (238):
litespec/backend/architecture#organize-code-by-module-aggregate-and-use-caselitespec/backend/architecture#read-another-module-only-through-its-contractslitespec/backend/architecture#restrict-commands-to-their-own-module-aggregateslitespec/backend/architecture#subscribe-across-modules-only-to-integration-eventslitespec/backend/dotnet/api#place-endpoints-in-their-use-case-folderslitespec/backend/dotnet/application#use-the-use-case-folder-layoutlitespec/backend/dotnet/architecture#follow-declared-module-dependencieslitespec/backend/dotnet/architecture#follow-layer-direction-in-every-filelitespec/backend/dotnet/architecture#keep-application-types-in-their-layer-folderslitespec/backend/dotnet/architecture#keep-closed-folder-sets-at-every-levellitespec/backend/dotnet/architecture#keep-host-endpoints-in-hostslitespec/backend/dotnet/architecture#keep-use-case-folders-isolatedlitespec/backend/dotnet/architecture#mirror-modules-aggregates-and-use-cases-in-one-namespace-treelitespec/backend/dotnet/architecture#reach-another-module-only-through-contractslitespec/backend/dotnet/architecture#separate-the-shared-kernel-from-the-moduleslitespec/backend/dotnet/architecture#use-one-public-assembly-markerlitespec/backend/dotnet/domain#use-the-domain-layer-folder-layoutlitespec/backend/dotnet/ext/layer-projects#keep-application-dependencies-narrowlitespec/backend/dotnet/ext/layer-projects#keep-domain-package-freelitespec/backend/dotnet/ext/layer-projects#keep-net-production-and-test-projects-separatelitespec/backend/dotnet/ext/layer-projects#keep-one-application-assemblylitespec/backend/dotnet/ext/layer-projects#keep-the-test-projects-the-size-requireslitespec/backend/dotnet/ext/layer-projects#mirror-modules-in-folders-and-namespaceslitespec/backend/dotnet/ext/layer-projects#run-litespecanalyzers-in-every-application-projectlitespec/backend/dotnet/ext/layer-projects#use-five-application-projectslitespec/backend/dotnet/ext/layer-projects#use-the-domain-module-layoutlitespec/backend/dotnet/ext/layer-projects#use-the-endpoint-folder-layoutlitespec/backend/dotnet/ext/layer-projects#use-the-operation-folder-layoutlitespec/backend/dotnet/ext/layer-projects#use-the-project-reference-graphlitespec/backend/dotnet/ext/layer-projects#use-this-baseline-package-ownershiplitespec/backend/dotnet/ext/layer-projects#use-this-infrastructure-layoutlitespec/backend/dotnet/packages#run-litespec-analyzers-in-the-business-projects-and-hostslitespec/backend/dotnet/persistence#use-the-persistence-layer-folder-layoutlitespec/backend/dotnet/stack#identify-an-aggregate-root-by-its-mark-and-state-record-at-tracedlitespec/backend/dotnet/stack#read-every-declared-web-and-worker-hostlitespec/backend/dotnet/stack#report-a-stack-root-that-matches-no-folderlitespec/core/access#keep-permission-lists-to-entrieslitespec/core/agent#load-applicable-provisions-before-editinglitespec/core/agent#name-judged-provisions-in-the-completion-reportlitespec/core/agent#raise-open-figures-to-the-ownerlitespec/core/authoring#generate-the-provision-diff-for-each-releaselitespec/core/domain-model#name-each-module-after-its-capabilitylitespec/core/intent#admit-only-outside-pains-as-problemslitespec/core/intent#define-each-recurring-capitalized-phraselitespec/core/intent#describe-every-journeylitespec/core/intent#explain-every-problem-in-four-sectionslitespec/core/intent#grade-problem-evidence-by-kindlitespec/core/intent#group-product-records-by-modulelitespec/core/intent#keep-actors-to-people-and-organizationslitespec/core/intent#keep-company-operation-out-of-intentlitespec/core/intent#move-every-goal-with-a-journey-or-a-quality-requirementlitespec/core/intent#name-each-sibling-problem-or-merge-itlitespec/core/intent#name-every-actor-from-a-journey-a-problem-or-an-access-positionlitespec/core/intent#name-no-solution-in-a-problem-statementlitespec/core/intent#perform-each-journey-step-with-an-actor-or-a-systemlitespec/core/intent#reach-every-intent-record-with-behaviorlitespec/core/intent#shape-each-module-pagelitespec/core/intent#state-each-feature-with-its-offeringlitespec/core/intent#state-the-cost-and-workaround-of-every-problemlitespec/core/layers#raise-open-needs-as-owner-questions-or-backlog-itemslitespec/core/layers#send-commercial-and-observable-figures-to-the-ownerlitespec/core/maintaining#keep-provision-identifiers-stable-within-a-major-versionlitespec/core/model#compute-completion-in-the-builderlitespec/core/model#connect-across-modules-only-through-declared-dependencieslitespec/core/model#declare-size-and-stackslitespec/core/model#hold-module-rules-in-rule-setslitespec/core/model#keep-each-name-unique-in-the-productlitespec/core/model#keep-module-dependencies-free-of-cycleslitespec/core/model#move-each-identifier-with-its-modulelitespec/core/model#publish-each-integration-event-from-one-modulelitespec/core/model#reach-behavior-from-every-intent-recordlitespec/core/model#record-each-screens-captures-from-the-gallerylitespec/core/model#take-decision-numbers-from-one-sequencelitespec/core/principles#build-only-what-the-specification-stateslitespec/core/principles#complete-work-before-merginglitespec/core/principles#compute-completion-from-code-and-testslitespec/core/principles#keep-git-as-the-decision-recordlitespec/core/principles#keep-tools-smalllitespec/core/principles#raise-what-a-lower-layer-needs-to-the-ownerlitespec/core/principles#state-the-strength-of-every-provisionlitespec/core/principles#treat-code-beyond-silent-intent-as-evidence-for-an-owner-questionlitespec/core/principles#write-every-record-about-the-softwarelitespec/core/privacy#complete-the-subject-export-before-erasurelitespec/core/privacy#discard-rows-that-leave-no-tracelitespec/core/privacy#keep-a-tombstone-where-deletion-stays-visiblelitespec/core/privacy#keep-tombstone-fields-minimallitespec/core/privacy#move-data-to-its-next-controller-instead-of-erasinglitespec/core/privacy#purge-erased-data-from-restored-backupslitespec/core/privacy#record-which-duty-wins-each-conflictlitespec/core/privacy#remove-child-rows-through-their-parent-onlylitespec/core/privacy#require-a-fresh-export-after-changeslitespec/core/privacy#run-one-sweep-job-per-data-classlitespec/core/privacy#scope-erasure-to-what-the-subject-requestedlitespec/core/privacy#state-the-erasure-sentence-in-intentlitespec/core/scope#declare-the-conformance-levellitespec/core/scope#keep-every-litespec-file-under-one-folderlitespec/core/scope#keep-every-record-about-the-softwarelitespec/core/scopes#declare-the-page-scopelitespec/core/scopes#depart-from-a-rule-only-through-a-recorded-exceptionlitespec/core/scopes#give-every-provision-a-conformance-levellitespec/core/scopes#name-the-artifact-of-every-provision-on-a-page-that-names-onelitespec/core/scopes#record-each-replaced-defaultlitespec/core/scopes#state-applies-to-only-when-narrowerlitespec/core/scopes#use-only-declared-scope-valueslitespec/core/system#drive-work-from-recordslitespec/core/use-cases#write-prose-on-every-use-caselitespec/core/writing#apply-plain-mechanicslitespec/core/writing#comment-on-why-not-whatlitespec/core/writing#compare-real-options-in-each-decision-recordlitespec/core/writing#give-each-explanation-file-its-fixed-sectionslitespec/core/writing#give-each-paragraph-one-idealitespec/core/writing#keep-company-facts-out-of-intent-proselitespec/core/writing#keep-each-record-sentence-within-twenty-five-wordslitespec/core/writing#name-each-title-in-its-record-type-formlitespec/core/writing#open-each-summary-with-who-and-what-is-at-stakelitespec/core/writing#put-the-actor-firstlitespec/core/writing#state-each-statement-without-modal-wordslitespec/core/writing#use-literal-wordslitespec/core/writing#write-each-changelog-as-a-release-comparisonlitespec/core/writing#write-each-documentation-page-as-one-kindlitespec/core/writing#write-every-record-title-in-title-caselitespec/core/writing#write-for-the-reader-who-arrives-coldlitespec/ext/automation#record-the-automation-cataloglitespec/ext/compat#record-breaking-behavior-changes-as-decisionslitespec/ext/compat#reject-breaking-diffs-without-authorizationlitespec/ext/delivery#accept-every-shipped-package-license-explicitlylitespec/ext/delivery#apply-oci-release-labelslitespec/ext/delivery#apply-schema-work-before-trafficlitespec/ext/delivery#apply-the-documented-defaultslitespec/ext/delivery#attach-dashboard-links-to-production-objectiveslitespec/ext/delivery#build-from-the-workspace-rootlitespec/ext/delivery#build-release-images-in-stageslitespec/ext/delivery#copy-only-runtime-fileslitespec/ext/delivery#cover-the-baseline-alert-setlitespec/ext/delivery#declare-writable-paths-and-limitslitespec/ext/delivery#define-actionable-baseline-alertslitespec/ext/delivery#define-backup-and-restore-behaviorlitespec/ext/delivery#enforce-the-supply-chain-gatelitespec/ext/delivery#exclude-build-material-from-runtime-imageslitespec/ext/delivery#exclude-build-timestamps-from-contractslitespec/ext/delivery#exclude-environment-configuration-from-imageslitespec/ext/delivery#exclude-insecure-frontend-secret-carrierslitespec/ext/delivery#exercise-a-restore-before-the-first-production-datalitespec/ext/delivery#exercise-every-runbook-before-releaselitespec/ext/delivery#keep-a-canonical-job-graphlitespec/ext/delivery#keep-a-first-release-readiness-recordlitespec/ext/delivery#keep-deployment-descriptors-togetherlitespec/ext/delivery#keep-each-alert-threshold-to-its-requirements-measurelitespec/ext/delivery#keep-mutable-data-externallitespec/ext/delivery#keep-rollback-executablelitespec/ext/delivery#keep-schema-work-out-of-startuplitespec/ext/delivery#keep-scripts-at-the-rootlitespec/ext/delivery#limit-container-privilegeslitespec/ext/delivery#match-every-shipped-package-to-its-pinlitespec/ext/delivery#meet-release-readiness-gateslitespec/ext/delivery#place-dockerfiles-beside-deployableslitespec/ext/delivery#promote-verified-artifactslitespec/ext/delivery#protect-the-default-branchlitespec/ext/delivery#provide-release-data-recoverylitespec/ext/delivery#provide-release-delivery-controlslitespec/ext/delivery#provide-release-operating-visibilitylitespec/ext/delivery#publish-a-book-preview-for-every-changelitespec/ext/delivery#record-each-drill-run-as-a-check-resultlitespec/ext/delivery#record-every-branch-protection-bypasslitespec/ext/delivery#record-image-digestslitespec/ext/delivery#record-operating-readinesslitespec/ext/delivery#record-release-evidencelitespec/ext/delivery#report-liveness-from-every-recurring-joblitespec/ext/delivery#review-schema-artifactslitespec/ext/delivery#route-each-severity-to-a-declared-destinationlitespec/ext/delivery#run-images-as-non-rootlitespec/ext/delivery#run-the-application-as-pid-1litespec/ext/delivery#separate-frontend-configuration-classeslitespec/ext/delivery#set-sufficient-shutdown-timelitespec/ext/delivery#state-availability-objectives-as-openslo-fileslitespec/ext/delivery#supply-runtime-configuration-externallylitespec/ext/delivery#test-released-trafficlitespec/ext/delivery#treat-check-warnings-as-failureslitespec/ext/delivery#use-a-repeatable-deploymentlitespec/ext/delivery#use-protected-frontend-secret-deliverylitespec/ext/delivery#use-stable-service-nameslitespec/ext/delivery#wait-for-replica-readinesslitespec/ext/delivery#write-runtime-logs-to-streamslitespec/ext/jobs#apply-item-read-authorizationlitespec/ext/jobs#audit-export-readslitespec/ext/jobs#avoid-speculative-reporting-systemslitespec/ext/jobs#bound-the-ingest-bufferlitespec/ext/jobs#confirm-bulk-money-actions-out-of-bandlitespec/ext/jobs#declare-export-paginglitespec/ext/jobs#declare-ingest-steps-in-orderlitespec/ext/jobs#declare-the-engine-carrierlitespec/ext/jobs#define-export-encoding-and-columnslitespec/ext/jobs#define-report-limitslitespec/ext/jobs#define-the-closed-drop-reason-setlitespec/ext/jobs#discard-poison-records-after-three-attemptslitespec/ext/jobs#escape-formula-leading-export-valueslitespec/ext/jobs#expose-drop-counts-per-reasonlitespec/ext/jobs#keep-engine-retry-configuration-in-implementationlitespec/ext/jobs#keep-raw-sql-in-infrastructurelitespec/ext/jobs#keep-report-definitions-in-applicationlitespec/ext/jobs#keep-report-providers-in-infrastructurelitespec/ext/jobs#map-each-engine-step-to-one-use-caselitespec/ext/jobs#name-engine-steps-after-use-caseslitespec/ext/jobs#order-queue-items-by-scorelitespec/ext/jobs#order-unscored-queues-by-agelitespec/ext/jobs#parameterize-report-sqllitespec/ext/jobs#protect-export-outputlitespec/ext/jobs#read-enrichment-data-from-declared-sourceslitespec/ext/jobs#record-one-drop-reason-per-dropped-recordlitespec/ext/jobs#record-reporting-needlitespec/ext/jobs#reject-unmapped-engine-stepslitespec/ext/jobs#release-claims-past-their-leaselitespec/ext/jobs#review-report-planslitespec/ext/jobs#run-budget-exceeding-exports-in-workerlitespec/ext/jobs#scope-export-output-to-the-tenantlitespec/ext/jobs#separate-worker-orchestrationlitespec/ext/jobs#show-a-preview-before-bulk-money-actionslitespec/ext/jobs#show-the-score-beside-each-itemlitespec/ext/jobs#state-each-step-compensationlitespec/ext/jobs#state-the-claim-modelitespec/ext/jobs#state-the-freshness-consequencelitespec/ext/jobs#support-report-cancellationlitespec/ext/outbox#authenticate-and-authorize-subscriptionslitespec/ext/outbox#bound-realtime-resourceslitespec/ext/outbox#declare-realtime-freshnesslitespec/ext/outbox#place-realtime-code-at-outer-boundarieslitespec/ext/outbox#reconnect-and-refresh-authoritative-statelitespec/ext/outbox#record-realtime-needlitespec/ext/outbox#record-transport-supportlitespec/ext/outbox#reject-cosmetic-realtime-adoptionlitespec/ext/outbox#reject-unbounded-slow-client-bufferinglitespec/ext/outbox#revalidate-long-lived-accesslitespec/ext/outbox#subscribe-through-narrow-functionslitespec/ext/outbox#tolerate-notification-ordering-differenceslitespec/ext/outbox#use-server-sent-events-for-notificationslitespec/ext/outbox#use-signalr-for-interactive-messaginglitespec/frontend/web/components#keep-component-boundaries-typedlitespec/quality/operations#name-every-runbook-from-an-alert-job-reaction-or-failure-policy
Removed (439):
litespec/backend/api#state-an-unexpressible-transition-as-a-custom-methodlitespec/backend/api#use-put-for-a-whole-replacementlitespec/backend/architecture#keep-one-application-partlitespec/backend/architecture#organize-every-layer-by-module-and-use-caselitespec/backend/architecture#use-five-application-partslitespec/backend/dotnet/api#use-the-endpoint-folder-layoutlitespec/backend/dotnet/application#use-the-operation-folder-layoutlitespec/backend/dotnet/architecture#keep-one-application-assemblylitespec/backend/dotnet/architecture#mirror-modules-in-folders-and-namespaceslitespec/backend/dotnet/architecture#use-five-application-projectslitespec/backend/dotnet/architecture#use-one-public-assembly-marker-per-scanned-projectlitespec/backend/dotnet/config#bind-setting-records-to-optionslitespec/backend/dotnet/config#validate-backend-options-at-startuplitespec/backend/dotnet/domain#use-the-domain-module-layoutlitespec/backend/dotnet/ext/efcore#apply-migrations-as-release-worklitespec/backend/dotnet/ext/efcore#avoid-per-aggregate-read-storeslitespec/backend/dotnet/ext/efcore#commit-ef-core-command-work-oncelitespec/backend/dotnet/ext/efcore#configure-ef-core-mappings-in-infrastructurelitespec/backend/dotnet/ext/efcore#configure-optimistic-tokenslitespec/backend/dotnet/ext/efcore#configure-relational-details-explicitlylitespec/backend/dotnet/ext/efcore#define-ef-core-query-rootslitespec/backend/dotnet/ext/efcore#exclude-direct-handler-commitslitespec/backend/dotnet/ext/efcore#generate-migrations-for-schema-changeslitespec/backend/dotnet/ext/efcore#implement-query-roots-in-infrastructurelitespec/backend/dotnet/ext/efcore#keep-migration-files-togetherlitespec/backend/dotnet/ext/efcore#map-ef-core-concurrency-conflictlitespec/backend/dotnet/ext/efcore#map-stable-relational-state-shapelitespec/backend/dotnet/ext/efcore#map-unique-constraint-violations-to-their-refusalslitespec/backend/dotnet/ext/efcore#map-unsupported-state-shapes-in-infrastructurelitespec/backend/dotnet/ext/efcore#process-changed-aggregate-eventslitespec/backend/dotnet/ext/efcore#project-ef-core-queries-directlylitespec/backend/dotnet/ext/efcore#record-ef-core-replacement-scopelitespec/backend/dotnet/ext/efcore#record-provider-selectionlitespec/backend/dotnet/ext/efcore#register-one-command-post-handlerlitespec/backend/dotnet/ext/efcore#reject-automatic-command-retrylitespec/backend/dotnet/ext/efcore#reject-cross-provider-outbox-storagelitespec/backend/dotnet/ext/efcore#reject-mixed-provider-writeslitespec/backend/dotnet/ext/efcore#reject-startup-schema-mutationlitespec/backend/dotnet/ext/efcore#resolve-cross-provider-invariantslitespec/backend/dotnet/ext/efcore#resolve-the-tenant-at-context-creationlitespec/backend/dotnet/ext/efcore#retain-domain-state-valueslitespec/backend/dotnet/ext/efcore#retain-marten-query-boundarylitespec/backend/dotnet/ext/efcore#retain-unaffected-baseline-persistencelitespec/backend/dotnet/ext/efcore#review-migration-effectslitespec/backend/dotnet/ext/efcore#review-new-persisted-stateslitespec/backend/dotnet/ext/efcore#stage-aggregate-writes-in-repositorieslitespec/backend/dotnet/ext/efcore#stage-ef-core-outbox-records-togetherlitespec/backend/dotnet/ext/efcore#test-migration-starting-stateslitespec/backend/dotnet/ext/efcore#use-direct-state-mapping-only-when-supportedlitespec/backend/dotnet/ext/efcore#use-durable-outbox-deliverylitespec/backend/dotnet/ext/efcore#use-one-write-providerlitespec/backend/dotnet/ext/efcore#use-snake-case-relational-nameslitespec/backend/dotnet/ext/efcore#use-the-ef-core-infrastructure-layoutlitespec/backend/dotnet/naming#group-event-handlers-by-the-fact-they-handlelitespec/backend/dotnet/naming#name-asynchronous-methods-completelylitespec/backend/dotnet/naming#name-repository-variables-after-their-interfacelitespec/backend/dotnet/naming#name-result-parts-after-their-resultlitespec/backend/dotnet/packages#keep-application-dependencies-narrowlitespec/backend/dotnet/packages#keep-domain-package-freelitespec/backend/dotnet/packages#pin-every-dependency-centrallylitespec/backend/dotnet/packages#run-litespecanalyzers-in-every-application-projectlitespec/backend/dotnet/packages#use-the-project-reference-graphlitespec/backend/dotnet/packages#use-this-baseline-package-ownershiplitespec/backend/dotnet/persistence#use-this-infrastructure-layoutlitespec/backend/dotnet/testing#enforce-architecture-ruleslitespec/backend/dotnet/testing#gate-changed-lines-with-mutation-testinglitespec/backend/dotnet/testing#generate-model-tests-from-declared-transitionslitespec/backend/dotnet/testing#keep-the-test-projects-the-size-requireslitespec/backend/dotnet/testing#prove-each-scenario-with-a-test-that-calls-its-use-caselitespec/backend/dotnet/testing#seed-property-tests-from-example-tableslitespec/backend/dotnet/testing#test-http-integration-through-the-real-hostlitespec/backend/dotnet/testing#use-one-production-faithful-integration-harnesslitespec/backend/dotnet/workspace#declare-size-and-stacks-in-project-configlitespec/backend/dotnet/workspace#keep-net-production-and-test-projects-separatelitespec/backend/identifiers#keep-aggregate-names-unique-across-the-projectlitespec/backend/identifiers#keep-use-case-names-unique-across-the-projectlitespec/backend/testing#assert-architecture-boundaries-with-testslitespec/core/access#keep-permission-and-entry-point-lists-to-entrieslitespec/core/access#name-the-actor-for-every-external-systemlitespec/core/access#route-cross-tenant-access-through-the-security-queuelitespec/core/agent#mark-transcribed-records-during-adoptionlitespec/core/agent#raise-questions-in-ballots-with-recommendationslitespec/core/authoring#check-the-vocabulary-on-every-surface-a-reader-meetslitespec/core/domain-model#close-every-saga-with-named-exits-and-a-driverlitespec/core/domain-model#prove-every-saga-guard-and-exit-with-a-scenariolitespec/core/domain-model#state-each-saga-step-with-its-compensationlitespec/core/intent#group-product-records-by-arealitespec/core/intent#group-questions-into-ballotslitespec/core/intent#leave-business-choices-to-the-deciderlitespec/core/intent#name-the-person-who-approved-a-decisionlitespec/core/intent#replace-a-decision-with-a-new-recordlitespec/core/intent#shape-each-topic-pagelitespec/core/intent#state-each-feature-with-its-lifecyclelitespec/core/language#name-each-change-code-with-a-past-participlelitespec/core/layers#flag-records-when-a-parent-record-changeslitespec/core/layers#raise-commercial-and-observable-figures-as-questionslitespec/core/layers#raise-open-needs-as-draft-questionslitespec/core/model#answer-each-question-on-its-recordlitespec/core/model#apply-guidance-precedencelitespec/core/model#approve-tier-1-records-by-a-personlitespec/core/model#declare-size-stacks-and-optional-typeslitespec/core/model#derive-generic-refusalslitespec/core/model#end-transcription-at-the-named-decisionlitespec/core/model#flag-every-record-whose-parent-changedlitespec/core/model#hold-approval-behind-draft-decisionslitespec/core/model#hold-approval-behind-open-questionslitespec/core/model#hold-each-finding-to-its-own-statuslitespec/core/model#hold-transcribed-records-in-draftlitespec/core/model#keep-one-owner-and-status-on-every-recordlitespec/core/model#record-approval-as-datalitespec/core/model#resolve-ties-by-the-later-decisionlitespec/core/model#retire-records-with-replaceslitespec/core/model#use-the-layer-status-vocabularylitespec/core/principles#classify-record-authoritylitespec/core/principles#locate-record-status-in-frontmatterlitespec/core/principles#raise-what-a-lower-layer-needs-as-a-questionlitespec/core/principles#refuse-approval-behind-a-draft-decisionlitespec/core/principles#render-consequences-as-context-outside-approvallitespec/core/principles#retire-public-behavior-deliberatelylitespec/core/principles#separate-authority-from-implementationlitespec/core/principles#treat-code-beyond-silent-intent-as-evidence-for-a-questionlitespec/core/privacy#review-every-erasure-exemption-before-its-datelitespec/core/release#advise-without-gating-as-an-agentlitespec/core/release#approve-drafts-in-bounded-batcheslitespec/core/release#compute-the-review-queue-from-the-modellitespec/core/release#draw-each-tier-3-sample-from-the-semantic-hashlitespec/core/release#hold-only-the-blocked-records-of-a-type-batchlitespec/core/release#keep-a-first-release-readiness-recordlitespec/core/release#keep-unfinished-behavior-in-draftlitespec/core/release#meet-release-readiness-gateslitespec/core/release#name-the-security-reviewer-in-the-project-filelitespec/core/release#provide-release-data-recoverylitespec/core/release#provide-release-delivery-controlslitespec/core/release#provide-release-operating-visibilitylitespec/core/release#record-operating-readinesslitespec/core/release#record-release-evidencelitespec/core/release#refuse-a-batch-holding-an-open-questionlitespec/core/release#refuse-a-batch-without-a-named-approverlitespec/core/release#refuse-a-record-whose-effective-status-stays-draftlitespec/core/release#refuse-self-review-alone-for-tier-1-behaviorlitespec/core/release#require-passing-scenarios-and-advisory-review-for-tier-1-behaviorlitespec/core/release#review-behavior-changes-through-the-behavior-difflitespec/core/release#review-intent-changes-through-the-intent-diff-and-ballotslitespec/core/release#review-the-security-queue-separately-from-reviewedlitespec/core/release#sample-tier-3-behavior-reviewslitespec/core/release#treat-check-warnings-as-failureslitespec/core/release#write-a-manifest-for-every-batch-approvallitespec/core/scope#record-the-review-configurationlitespec/core/scope#record-the-transcription-endpointlitespec/core/system#drive-work-from-approved-recordslitespec/core/use-cases#write-prose-on-significant-use-caseslitespec/ext/automation#review-the-automation-cataloglitespec/ext/compat#raise-breaking-behavior-changes-as-intent-questionslitespec/ext/compat#reject-unapproved-breaking-diffslitespec/ext/containers#apply-oci-release-labelslitespec/ext/containers#apply-schema-work-before-trafficlitespec/ext/containers#build-from-the-workspace-rootlitespec/ext/containers#build-release-images-in-stageslitespec/ext/containers#copy-only-runtime-fileslitespec/ext/containers#declare-writable-paths-and-limitslitespec/ext/containers#exclude-build-material-from-runtime-imageslitespec/ext/containers#exclude-build-timestamps-from-contractslitespec/ext/containers#exclude-environment-configuration-from-imageslitespec/ext/containers#exclude-insecure-frontend-secret-carrierslitespec/ext/containers#keep-mutable-data-externallitespec/ext/containers#keep-schema-work-out-of-startuplitespec/ext/containers#limit-container-privilegeslitespec/ext/containers#place-dockerfiles-beside-deployableslitespec/ext/containers#record-image-digestslitespec/ext/containers#retain-rollback-materiallitespec/ext/containers#run-images-as-non-rootlitespec/ext/containers#run-the-application-as-pid-1litespec/ext/containers#separate-frontend-configuration-classeslitespec/ext/containers#set-sufficient-shutdown-timelitespec/ext/containers#supply-runtime-configuration-externallylitespec/ext/containers#test-released-trafficlitespec/ext/containers#use-protected-frontend-secret-deliverylitespec/ext/containers#wait-for-replica-readinesslitespec/ext/containers#write-runtime-logs-to-streamslitespec/ext/pipeline#bound-the-ingest-bufferlitespec/ext/pipeline#declare-ingest-steps-in-orderlitespec/ext/pipeline#define-the-closed-drop-reason-setlitespec/ext/pipeline#discard-poison-records-after-three-attemptslitespec/ext/pipeline#expose-drop-counts-per-reasonlitespec/ext/pipeline#read-enrichment-data-from-declared-sourceslitespec/ext/pipeline#record-one-drop-reason-per-dropped-recordlitespec/ext/pipeline#state-the-freshness-consequencelitespec/ext/plans#record-plan-prices-as-business-requirement-valueslitespec/ext/privacy#approve-the-erasure-sentence-in-intentlitespec/ext/privacy#complete-the-subject-export-before-erasurelitespec/ext/privacy#discard-rows-that-leave-no-tracelitespec/ext/privacy#keep-a-tombstone-where-deletion-stays-visiblelitespec/ext/privacy#keep-tombstone-fields-minimallitespec/ext/privacy#move-data-to-its-next-controller-instead-of-erasinglitespec/ext/privacy#purge-erased-data-from-restored-backupslitespec/ext/privacy#record-which-duty-wins-each-conflictlitespec/ext/privacy#remove-child-rows-through-their-parent-onlylitespec/ext/privacy#require-a-fresh-export-after-changeslitespec/ext/privacy#run-one-sweep-job-per-data-classlitespec/ext/privacy#scope-erasure-to-what-the-subject-requestedlitespec/ext/queues#confirm-bulk-money-actions-out-of-bandlitespec/ext/queues#order-queue-items-by-scorelitespec/ext/queues#order-unscored-queues-by-agelitespec/ext/queues#release-claims-past-their-leaselitespec/ext/queues#show-a-preview-before-bulk-money-actionslitespec/ext/queues#show-the-score-beside-each-itemlitespec/ext/queues#state-the-claim-modelitespec/ext/realtime#authenticate-and-authorize-subscriptionslitespec/ext/realtime#bound-realtime-resourceslitespec/ext/realtime#declare-realtime-freshnesslitespec/ext/realtime#place-realtime-code-at-outer-boundarieslitespec/ext/realtime#reconnect-and-refresh-authoritative-statelitespec/ext/realtime#record-realtime-needlitespec/ext/realtime#record-transport-supportlitespec/ext/realtime#reject-cosmetic-realtime-adoptionlitespec/ext/realtime#reject-unbounded-slow-client-bufferinglitespec/ext/realtime#revalidate-long-lived-accesslitespec/ext/realtime#subscribe-through-narrow-functionslitespec/ext/realtime#tolerate-notification-ordering-differenceslitespec/ext/realtime#use-server-sent-events-for-notificationslitespec/ext/realtime#use-signalr-for-interactive-messaginglitespec/ext/report#apply-item-read-authorizationlitespec/ext/report#audit-export-readslitespec/ext/report#avoid-speculative-reporting-systemslitespec/ext/report#declare-export-paginglitespec/ext/report#define-export-encoding-and-columnslitespec/ext/report#define-report-limitslitespec/ext/report#escape-formula-leading-export-valueslitespec/ext/report#keep-raw-sql-in-infrastructurelitespec/ext/report#keep-report-definitions-in-applicationlitespec/ext/report#keep-report-providers-in-infrastructurelitespec/ext/report#parameterize-report-sqllitespec/ext/report#protect-export-outputlitespec/ext/report#record-reporting-needlitespec/ext/report#review-report-planslitespec/ext/report#run-budget-exceeding-exports-in-workerlitespec/ext/report#scope-export-output-to-the-tenantlitespec/ext/report#separate-worker-orchestrationlitespec/ext/report#support-report-cancellationlitespec/ext/site#avoid-client-scripts-without-a-named-interactive-needlitespec/ext/site#declare-each-static-site-in-the-project-recordlitespec/ext/site#default-to-a-light-scheme-with-a-reader-chosen-dark-schemelitespec/ext/site#generate-a-sitemap-covering-every-pagelitespec/ext/site#generate-the-site-with-astrolitespec/ext/site#give-every-page-one-main-heading-and-landmark-elementslitespec/ext/site#keep-each-repeated-fact-in-one-data-sourcelitespec/ext/site#list-every-page-for-language-modelslitespec/ext/site#load-every-script-from-the-site-originlitespec/ext/site#load-nothing-from-a-third-party-originlitespec/ext/site#mark-pages-with-json-ld-structured-datalitespec/ext/site#mark-unfinished-facts-with-visible-placeholderslitespec/ext/site#name-every-page-with-a-title-and-a-descriptionlitespec/ext/site#point-crawler-rules-at-the-sitemaplitespec/ext/site#point-every-page-at-its-absolute-canonical-addresslitespec/ext/site#publish-a-markdown-copy-beside-every-pagelitespec/ext/site#publish-full-page-text-for-language-modelslitespec/ext/site#read-prices-and-claims-from-brief-and-business-requirementslitespec/ext/site#read-site-prices-and-claims-from-consumer-recordslitespec/ext/site#reference-language-alternates-from-every-translated-pagelitespec/ext/site#reject-a-release-build-carrying-a-placeholderlitespec/ext/site#render-components-on-the-server-with-astro-or-sveltelitespec/ext/site#render-every-language-from-one-page-structurelitespec/ext/site#render-every-page-to-static-fileslitespec/ext/site#state-allowed-sources-in-a-content-security-policylitespec/ext/site#use-tailwind-for-site-styleslitespec/ext/stage#end-transcription-at-the-named-decisionlitespec/ext/stage#hold-transcribed-records-in-draftlitespec/ext/stage#record-rested-on-draft-intentlitespec/ext/stage#resolve-rested-on-draft-intent-at-promotionlitespec/ext/tenancy#review-delegated-cross-tenant-grants-through-the-security-queuelitespec/ext/workflow-engine#declare-the-engine-carrierlitespec/ext/workflow-engine#keep-engine-retry-configuration-in-implementationlitespec/ext/workflow-engine#map-each-engine-step-to-one-use-caselitespec/ext/workflow-engine#name-engine-steps-after-use-caseslitespec/ext/workflow-engine#reject-unmapped-engine-stepslitespec/ext/workflow-engine#state-each-step-compensationlitespec/frontend/blazor/browser#bound-what-is-storedlitespec/frontend/blazor/browser#keep-a-stable-serialization-contractlitespec/frontend/blazor/browser#own-storage-in-infrastructurelitespec/frontend/blazor/browser#provide-a-migration-for-every-changed-shapelitespec/frontend/blazor/browser#provide-export-and-importlitespec/frontend/blazor/browser#record-the-classificationlitespec/frontend/blazor/browser#select-the-storage-mechanism-per-shapelitespec/frontend/blazor/browser#treat-reads-as-falliblelitespec/frontend/blazor/browser#version-and-scope-every-storage-keylitespec/frontend/blazor/components#apply-one-styling-systemlitespec/frontend/blazor/components#declare-every-parameter-typelitespec/frontend/blazor/components#keep-accessibility-in-the-componentlitespec/frontend/blazor/components#keep-components-presentationallitespec/frontend/blazor/components#name-for-the-boundary-rolelitespec/frontend/blazor/components#own-the-layer-contractlitespec/frontend/blazor/components#place-one-component-per-filelitespec/frontend/blazor/components#raise-events-rather-than-mutatinglitespec/frontend/blazor/components#resolve-browser-behavior-through-an-interfacelitespec/frontend/blazor/data#classify-statelitespec/frontend/blazor/data#keep-derived-values-single-sourcedlitespec/frontend/blazor/data#keep-forms-typedlitespec/frontend/blazor/data#load-persisted-state-oncelitespec/frontend/blazor/data#make-refusals-explicitlitespec/frontend/blazor/data#prefer-explicit-refreshlitespec/frontend/blazor/data#route-use-cases-through-applicationlitespec/frontend/blazor/data#validate-at-the-boundarylitespec/frontend/blazor/rendering#declare-routes-on-pageslitespec/frontend/blazor/rendering#give-every-route-explicit-stateslitespec/frontend/blazor/rendering#keep-navigation-state-in-the-urllitespec/frontend/blazor/rendering#keep-the-acquisition-surface-staticlitespec/frontend/blazor/rendering#name-routes-for-the-readerlitespec/frontend/blazor/rendering#operate-offline-after-first-loadlitespec/frontend/blazor/rendering#render-on-the-client-onlylitespec/frontend/blazor/stack#keep-blazor-outside-the-ui-contractlitespec/frontend/blazor/stack#publish-static-webassembly-outputlitespec/frontend/blazor/stack#record-a-first-load-budgetlitespec/frontend/blazor/stack#verify-with-the-net-toolchainlitespec/frontend/blazor/structure#isolate-module-internalslitespec/frontend/blazor/structure#keep-domain-free-of-browser-concernslitespec/frontend/blazor/structure#keep-imports-directionallitespec/frontend/blazor/structure#keep-static-content-out-of-the-assemblylitespec/frontend/blazor/structure#organize-features-by-module-and-use-caselitespec/frontend/blazor/structure#place-interop-adapters-togetherlitespec/frontend/blazor/structure#use-the-client-solution-treelitespec/frontend/blazor/testing#enforce-the-first-load-budgetlitespec/frontend/blazor/testing#keep-browser-capability-tests-honestlitespec/frontend/blazor/testing#keep-end-to-end-tests-fewlitespec/frontend/blazor/testing#prove-each-scenario-with-a-testlitespec/frontend/blazor/testing#replace-interop-in-component-testslitespec/frontend/blazor/testing#test-the-core-without-a-browserlitespec/frontend/blazor/testing#use-the-four-client-test-projectslitespec/frontend/blazor/testing#verify-real-browser-behavior-end-to-endlitespec/frontend/mobile/android/stack#build-with-net-for-androidlitespec/frontend/mobile/android/stack#keep-android-outside-the-ui-contractlitespec/frontend/mobile/android/stack#pin-every-android-binding-packagelitespec/frontend/mobile/android/stack#record-a-package-size-budgetlitespec/frontend/mobile/android/stack#record-the-minimum-android-versionlitespec/frontend/mobile/android/stack#store-streamed-media-uncompressedlitespec/frontend/mobile/android/stack#verify-with-the-net-toolchainlitespec/frontend/mobile/android/views#apply-insets-from-windowinsetslitespec/frontend/mobile/android/views#avoid-platform-names-that-collide-with-the-app-namespacelitespec/frontend/mobile/android/views#build-views-in-code-or-layout-resources-not-bothlitespec/frontend/mobile/android/views#deliver-app-links-to-the-controllerlitespec/frontend/mobile/android/views#host-screens-in-one-activitylitespec/frontend/mobile/android/views#keep-text-colors-and-icons-in-resourceslitespec/frontend/mobile/android/views#persist-navigation-state-in-the-activity-bundlelitespec/frontend/mobile/android/views#use-the-android-back-dispatcherlitespec/frontend/mobile/data#classify-statelitespec/frontend/mobile/data#route-use-cases-through-applicationlitespec/frontend/mobile/data#update-the-store-from-command-resultslitespec/frontend/mobile/structure#keep-imports-directionallitespec/frontend/testing#query-by-accessible-behaviorlitespec/frontend/web/components#compose-class-names-in-the-shared-packagelitespec/frontend/web/components#give-card-and-section-titles-heading-semanticslitespec/frontend/web/components#keep-primitives-and-composites-in-one-shared-packagelitespec/frontend/web/components#meet-accessibility-requirementslitespec/frontend/web/components#place-a-drawing-no-composite-makes-in-a-visual-filelitespec/frontend/web/components#protect-rich-content-boundarieslitespec/frontend/web/components#use-no-raw-element-in-page-codelitespec/frontend/web/data#assign-state-to-the-narrowest-ownerlitespec/frontend/web/data#build-a-form-on-the-shared-form-librarylitespec/frontend/web/data#generate-the-client-from-the-published-contractlitespec/frontend/web/data#keep-the-client-boundary-in-the-framelitespec/frontend/web/data#localize-copy-through-locale-dictionarieslitespec/frontend/web/data#map-every-failure-to-one-problem-typelitespec/frontend/web/data#place-a-refusal-beside-what-was-refusedlitespec/frontend/web/data#regenerate-the-client-rather-than-editing-itlitespec/frontend/web/data#update-the-cache-a-command-changedlitespec/frontend/web/data#validate-a-form-with-the-generated-schemalitespec/frontend/web/patterns#implement-a-chosen-pattern-oncelitespec/frontend/web/patterns#keep-a-visual-registrylitespec/frontend/web/react/components#keep-component-boundaries-typedlitespec/frontend/web/react/components#write-components-as-functionslitespec/frontend/web/react/stack#build-a-device-client-as-one-static-pagelitespec/frontend/web/react/stack#select-a-rendering-mode-by-audiencelitespec/frontend/web/rendering#build-the-server-query-cache-per-requestlitespec/frontend/web/rendering#keep-authenticated-caching-explicitlitespec/frontend/web/rendering#keep-proxy-behavior-at-the-edgelitespec/frontend/web/rendering#keep-search-parameters-validated-by-a-schemalitespec/frontend/web/rendering#load-a-route-on-intentlitespec/frontend/web/rendering#load-route-data-in-the-loaderlitespec/frontend/web/rendering#read-route-data-with-a-suspense-querylitespec/frontend/web/rendering#split-one-chunk-per-route-and-per-languagelitespec/frontend/web/rendering#use-a-pathless-layout-route-for-a-shelllitespec/frontend/web/structure#keep-a-route-file-thinlitespec/frontend/web/structure#keep-imports-directionallitespec/frontend/web/structure#keep-tests-near-their-ownership-boundarylitespec/frontend/web/structure#use-explicit-public-entry-points-for-workspace-packageslitespec/frontend/web/svelte/components#keep-component-boundaries-typedlitespec/frontend/web/svelte/stack#build-a-device-client-as-one-static-pagelitespec/frontend/web/svelte/stack#select-a-rendering-mode-by-audiencelitespec/frontend/web/testing#assert-each-declared-refusal-by-its-codelitespec/frontend/web/testing#gate-changed-lines-with-mutation-testinglitespec/frontend/web/testing#keep-mocks-at-owned-boundarieslitespec/frontend/web/testing#match-test-level-to-risklitespec/frontend/web/testing#prove-the-module-mirror-in-a-structure-testlitespec/frontend/web/testing#query-by-accessible-behaviorlitespec/frontend/web/testing#run-browser-checks-through-the-playwright-clilitespec/frontend/web/testing#seed-property-tests-from-example-tableslitespec/frontend/web/testing#use-network-mocks-for-component-testslitespec/frontend/web/ui#check-every-route-in-a-browserlitespec/frontend/web/ui#compose-each-route-from-one-floorplanlitespec/frontend/web/ui#derive-each-page-type-from-a-named-referencelitespec/frontend/web/ui#hold-the-declared-base-colorlitespec/frontend/web/ui#keep-layout-inside-floorplanslitespec/frontend/web/ui#keep-tokens-in-one-stylesheetlitespec/frontend/web/ui#pin-the-baseline-in-the-shared-packagelitespec/frontend/web/ui#prove-every-result-a-route-callslitespec/frontend/web/ui#prove-ui-behavior-and-appearancelitespec/frontend/web/ui#refuse-token-violations-with-stylelintlitespec/frontend/web/ui#select-a-tone-from-the-closed-setlitespec/quality/ci#apply-the-documented-defaultslitespec/quality/ci#approve-breaking-changes-by-the-highest-record-ownerlitespec/quality/ci#enforce-the-supply-chain-gatelitespec/quality/ci#keep-a-canonical-job-graphlitespec/quality/ci#map-record-areas-to-ownerslitespec/quality/ci#promote-verified-artifactslitespec/quality/ci#protect-the-default-branchlitespec/quality/ci#publish-a-book-preview-for-every-changelitespec/quality/ci#publish-the-intent-diff-on-every-pull-requestlitespec/quality/ci#record-every-branch-protection-bypasslitespec/quality/ci#require-zero-surviving-mutants-on-changed-lineslitespec/quality/ci#review-schema-artifactslitespec/quality/ci#show-intent-counts-in-the-job-summarylitespec/quality/operations#attach-dashboard-links-to-production-objectiveslitespec/quality/operations#cover-the-baseline-alert-setlitespec/quality/operations#define-actionable-baseline-alertslitespec/quality/operations#define-backup-and-restore-behaviorlitespec/quality/operations#exercise-a-restore-before-the-first-production-datalitespec/quality/operations#exercise-every-runbook-before-releaselitespec/quality/operations#keep-deployment-descriptors-togetherlitespec/quality/operations#keep-each-alert-threshold-to-its-requirements-measurelitespec/quality/operations#keep-rollback-executablelitespec/quality/operations#record-each-drill-run-as-a-check-resultlitespec/quality/operations#report-liveness-from-every-recurring-joblitespec/quality/operations#route-each-severity-to-a-declared-destinationlitespec/quality/operations#state-availability-objectives-as-openslo-fileslitespec/quality/operations#use-a-repeatable-deploymentlitespec/quality/operations#use-stable-service-nameslitespec/quality/security#route-tier-1-access-and-data-changes-through-the-security-reviewerlitespec/workspace/dependencies#accept-every-shipped-package-license-explicitlylitespec/workspace/dependencies#match-every-shipped-package-to-its-pinlitespec/workspace/structure#keep-scripts-at-the-root
Renamed (2):
litespec/core/model#connect-every-use-case-to-intenttolitespec/core/model#connect-every-behavior-record-to-intentlitespec/core/system#use-this-consumer-documentation-layouttolitespec/core/system#use-the-docs-layout-on-the-model-page
Extensions added (2):
deliverylayer-projects
Extensions removed (8):
containerspipelineprivacyqueuesrealtimereportsiteworkflow-engine