Type to search pages and rules.

Browse pages

Folder Reference

Every record has exactly one parent, and its folder states that parent: the product, a module, an aggregate, or an entry point. This guide lists the one folder each record type lives in, the parent each folder stands for, and the qualified identifier the tool computes from the placement. Each step names the standard it satisfies, and the guide adds no rule of its own.

Markdown

Prerequisites#

Start with:

Read the Project Model before this guide: it states the placement rules, and this guide lists the folders they resolve to. The command index states how litespec runs in a consumer.

Procedure#

Place Intent Records#

Intent reads module, then feature, then requirement. Product-level records sit directly under .litespec/intent/; records under a module sit under .litespec/intent/modules/<module>/. A folder under modules/ that names no declared module is a blocking finding. This satisfies litespec/core/model#write-every-record-in-its-home and litespec/core/model#give-every-record-one-parent.

FolderHoldsParent
.litespec/intent/product.yamlThe productNone
.litespec/intent/goals/GoalsProduct
.litespec/intent/problems/ProblemsProduct
.litespec/intent/constraints/ConstraintsProduct
.litespec/intent/decisions/DecisionsProduct
.litespec/intent/research/ResearchProduct
.litespec/intent/actors/ActorsProduct
.litespec/intent/roles/RolesProduct
.litespec/intent/journeys/JourneysProduct
.litespec/intent/modules/<module>/module.yamlThe moduleProduct
.litespec/intent/modules/<module>/goals/GoalsModule
.litespec/intent/modules/<module>/problems/ProblemsModule
.litespec/intent/modules/<module>/constraints/ConstraintsModule
.litespec/intent/modules/<module>/decisions/DecisionsModule
.litespec/intent/modules/<module>/research/ResearchModule
.litespec/intent/modules/<module>/features/Features with requirement entriesModule

Place Behavior Records#

Behavior reads module, then aggregate, then use case. A module folder under .litespec/behavior/modules/ carries the same name as its Intent module. Inside it, a subfolder is either a fixed type folder from the table or an aggregate holding aggregate.yaml. This satisfies litespec/core/model#write-every-record-in-its-home and litespec/core/model#give-every-record-one-parent.

FolderHoldsParent
.litespec/behavior/modules/<module>/<aggregate>/aggregate.yamlThe aggregateModule
.litespec/behavior/modules/<module>/<aggregate>/<use-case>.yamlUse cases owned by the aggregateAggregate
.litespec/behavior/modules/<module>/use-cases/Use cases with no aggregateModule
.litespec/behavior/modules/<module>/<aggregate>/events/Events beside the aggregate fileAggregate
.litespec/behavior/modules/<module>/<aggregate>/rules/Rules of the aggregateAggregate
.litespec/behavior/modules/<module>/rules/Rules of the moduleModule
.litespec/behavior/rules/Rules across modulesProduct
.litespec/behavior/modules/<module>/reactions/ReactionsModule
.litespec/behavior/modules/<module>/jobs/JobsModule
.litespec/behavior/modules/<module>/notifications/NotificationsModule
.litespec/behavior/modules/<module>/settings/SettingsModule
.litespec/behavior/modules/<module>/integration-events/Integration eventsModule
.litespec/behavior/modules/<module>/permissions.yamlPermission entriesModule
.litespec/behavior/modules/<module>/external-systems/External systemsModule
.litespec/behavior/external-systems/External systemsProduct
.litespec/behavior/entry-points/<entry-point>/entry-point.yamlThe entry pointProduct
.litespec/behavior/entry-points/<entry-point>/screens/ScreensEntry point
.litespec/behavior/retention-schedule.yamlRetention rows for every data classProduct

Results and scenarios live as entries in their use case file: a result's parent is the use case, and a scenario's parent is its result. Events live in aggregate.yaml or under events/.

Place Implementation Records#

Implementation holds how the product is built and operated. Runbooks and operations documents live here only. This satisfies litespec/core/model#write-every-record-in-its-home and litespec/core/model#give-every-record-one-parent.

FolderHoldsParent
.litespec/implementation/decisions/Technical decisionsProduct
.litespec/implementation/modules/<module>/decisions/Technical decisionsModule
.litespec/implementation/runbooks/RunbooksProduct
.litespec/implementation/modules/<module>/runbooks/RunbooksModule
.litespec/implementation/entry-points/<entry-point>/UI catalog, captures, and patternsEntry point
.litespec/implementation/api/The API contractProduct
.litespec/implementation/operations/Operations documentsProduct
.litespec/implementation/guides/Guides, as documents, not recordsProduct

Place Governance Records#

Governance holds exceptions and project conventions. An exception sits at product level, or under the module holding every record it sets aside. Proof holds no authored records: generated registers, gate files, and operating logs only. Terms live in the product glossary at .litespec/glossary.yaml. This satisfies litespec/core/model#write-every-record-in-its-home and litespec/core/model#give-every-record-one-parent.

FolderHoldsParent
.litespec/governance/exceptions/ExceptionsProduct
.litespec/governance/modules/<module>/exceptions/ExceptionsModule
.litespec/governance/conventions/Project conventionsProduct

Read the Qualified Identifier#

The identifier is short and unique in the product, and every link uses it. The qualified identifier adds the placement, is computed and never written, and the book and the tool show both. This satisfies litespec/core/model#give-every-record-one-parent.

PlacementQualified identifier
Product level<type>/<name>, the identifier itself
Module level<module>/<type>/<name>
Under an aggregate<module>/<aggregate>/<type>/<name>
Under an entry point<entry-point>/<type>/<name>
An entryThe qualified identifier of its file, then /<type>/<name>

For example, problem/organizers-wait-for-ticket-money at product level keeps its identifier, finance/problem/organizers-wait-for-ticket-money is the same form under the finance module, and finance/payout/use-case/request-payout is a use case under an aggregate.

Follow the Folder on a Move#

The folder wins: an identifier whose home segment disagrees with its folder is a blocking finding. A move to another module changes the module segment of the identifier and every citation in the same change, so run litespec rename for the move. This satisfies litespec/core/model#write-every-record-in-its-home.

Check#

  • litespec model check exits 0 from the consumer root with no finding on placement.
  • litespec model query <qualified identifier> resolves the record at the folder this guide lists.