strata-blueprints

Strata Blueprints

Version: 0.1.0 Status: Draft

A Strata Blueprints stack describes any subject, at any scale, in three layers. Every layer zooms into one element of the layer before it. The layers are the same everywhere; only the content changes. This is a guide, not a strict template: use what fits the subject and leave out what does not.

Strata Blueprints is a lightweight framework for spec-driven development, for anyone or anything. Models load it as context, so it stays small and high level, carrying context and intent. Use it for RFPs (requests for proposals), software documentation, project steering, standards, policies, ideas and more. As loose suggestions, Layer 1 reads like a product brief, Layer 2 like a high-level design and Layer 3 like a technical design for one part of the subject.

Short stacks. Write every layer the subject needs, and in each only the topics the subject needs, in their order. The required topics are, in Layer 1: Need, Target audience, Value, Focus, Assumptions and Decisions; in Layer 2: Parts, Seams between parts, Assumptions and Decisions; and in each Layer 3 part: Responsibility, Rules, Limits, Assumptions and Decisions. Every other topic is optional and left out when the owner gave nothing; add one when a maker would otherwise have to ask. Assumptions and Decisions are written as None. when empty. Mark each unknown fact Not supplied:. Costs, Risks and Open Concerns are written only when the owner gave something; an idea often has none.

Definitions

Element types

Every element has exactly one of these types, and a reader can tell which: stated beside its name, once for a list of one type (a topic such as Parts or Inside does so by its name), or plainly in its sentence. Subject and Part are types too, defined above.

Rules for the layers

  1. The layers are rings, with Layer 1 innermost: a layer may refer to the layers inside it, never to the layers outside it. A change to an inner layer reaches every layer outside it.
  2. A parent names its parts, each with a one-line responsibility; that is the parent’s own content. A part’s Detail is an entry in the parent’s stack (in its document or its sbp-detail-<part>.md file) or a stack of its own named in Layer 2 Standing; either way the parent never depends on how the part works inside.
  3. Each layer holds one kind of content, stated in its Intent. Content of another kind belongs in the layer that holds it. Specific means (tools, materials, methods) are named in Layer 3, under Construction. Earlier layers name them only when they are a constraint stated in Layer 1.
  4. Layer 3 is written where a maker needs it, as an entry in this stack or as the part’s own stack. A subject made of independent members needs only its upper layers; the lower layers are those members’ own stacks. Nesting is unlimited: any part may have its own stack, and any subject may have any number of peers.
  5. Every layer ends with its costs, then its risks, then its open concerns, then its assumptions, then its decisions. Each cost says what it takes and who pays; each risk says what could go wrong, how badly and what answers it; each open concern says what is unsettled and who raised it; each assumption says why we think so; each decision says why. Costs, risks and open concerns are valid in every layer. They weigh most in Layer 3, where a maker meets the amount, the harm and the unsettled question, and least in Layer 1.

How the layers depend on each other

Every layer rests on the layers above it, Layer 1 highest (the innermost ring in Rule 1). These four rules keep the layers saying one thing.

How to fill it out

Every layer has

Intent, Audience, a Success test written as Given, When, Then, and its Contents in dependency order. Each topic carries three parts: how to write it, what to ask the owner and what to check. Each layer also ends with a check of the whole layer. They are held in one guide file per layer, strata-blueprints-guide-layer-1.md, strata-blueprints-guide-layer-2.md and strata-blueprints-guide-layer-3.md, loaded when that layer’s turn comes.

A stack in separate files

A stack stands complete as one document. It may instead be written as one file per layer in one folder. Keep one document for an idea, for a stack that stops at Layer 2, and for a few small parts. Split when a part’s Detail is built separately, changes on its own schedule or has its own owner, or when Layer 3 outweighs Layers 1 and 2 together.

The files sit flat in one folder. The lint finds them by name and ignores every other file.

Each file opens with the stack’s # <Subject> title and holds its layer exactly as the one document would. Only sbp-vision.md carries Version: and Status:. A view is a ## View: <name> section at the end of sbp-structure.md; there is no view file.

Ids name one thing in the whole stack. A file cites an id by the id alone, never by a file name, and only ids of its own layer or the layers inside it. Layer 3 ids count up across the detail files together, in the order of the parts in Parts.

Standing names each detail file, such as Ledger: sbp-detail-ledger.md. The files Standing names and the detail files in the folder are the same set. A part with no Detail has no file and no Standing line. The line described here belongs to a stack written as one document.

A part’s own stack is a subfolder named by the part’s lower-case name, holding that stack’s sbp- files; Standing reads Presence: own stack, presence/. A nested stack has its own ids and is checked by its own run. This guide describes the form; the lint does not descend into it.

Check a folder with node scripts/strata-blueprints-lint.mjs <folder>.

Views across the layers

Views are not layers. A view is optional and refers inward. A view that stands on its own is a ## View: <name> section after Layer 3, or at the end of sbp-structure.md in a stack of separate files.

Lifecycle view

Diagrams

A diagram supplements the text; the text is the source of truth. Use a diagram only where it clarifies; Layer 2 is where it helps most. Choose the simplest form that works:

Every diagram has a title, one scope, and a key if it uses symbols, colours or shapes. Labels state intent, arrows point from the one that initiates, and no meaning rests on colour alone. The community garden example (strata-blueprints-example.md, beside this file) shows each form.

Notation

Every layer opens with a title and a one-line scope. A layer that uses symbols, colours or shapes carries a key. Every element has a name, a type, a one-line description and, where it applies, what it is made of. Every relationship has one label that states its intent and points from the one that initiates. Define terms and acronyms where first used. Never carry meaning by colour alone. One scope per view; never mix layers in one view.

Formatting

Markup

Diagrams (optional)

A diagram supplements the text, which is the source of truth; give it a title and, if it uses symbols, colours or shapes, a key. See Views across the layers, Diagrams, before drawing one.

Procedure

  1. Gather the facts about the subject as assertions, and have the owner confirm or correct them. Ask by layer:
    • Layer 1: who has the problem, what happens without a solution, how we would know it worked, and what it would cost, what could go wrong and what is still unsettled overall.
    • Layer 2: what the subject is divided into, what each part touches inside and outside, and what the division costs, what could go wrong with it and what is still unsettled.
    • Layer 3: for each part, what it must do, what it needs and what it offers, what it is made of, with what values, and what it costs, what could go wrong with it and what is still unsettled. Ask the owner for intent: the need, why each part exists and what it must achieve. Choose the Layer 3 values and specific means that serve that intent, and record each as a decision with its reason, which the owner can change. When the intent itself, or a fact about the world, is missing, write Not supplied: <what is needed> and ask for it. Never invent it.
  2. Write Layer 1, then Layer 2, reading each topic’s How to write it entry in its layer file before writing the topic. Stop there for an idea with no numbers, rules or means given, or for a subject made of independent members.
  3. Write Layer 3 for each part that needs it, as an entry in this stack or as the part’s own stack named in Layer 2 Standing, including Construction where a maker needs it.
  4. Add the views that are wanted.
  5. Run each layer’s Check lines, its Check (whole layer) and its Success test. Aim for yes on every answer; where one is no, fix it or note why.

How to interview

Each Ask the owner entry in a layer file holds the grouped question, then the value and edge follow-up, then the usual Not supplied: case. Read the topic’s entry before asking about it.

Interview the owner. The owner’s intent comes as assertions to confirm or correct, and you derive the specifics from it. Skip the interview when the owner has already specified the subject in full. To fill Not supplied: items in an existing blueprint, make them the agenda.

The question log

Write a Markdown table beside the blueprint as questions.md, with this header row:

| id | topic | question | status | answer | changed |

Audit

Audit: for each rule, definition, state, trigger, reason, measure, seam, cost and risk you wrote, point to the seed line or answer that gives it. Delete what has no source, or write Not supplied: instead; an inference you keep is an Assumption with Basis: and If wrong:. End your reply with the counts: audited, deleted, marked, made Assumptions.

Edge cases

Worked example

Three companion examples, beside this guide, fill the layers, each one way to fill them, not a template:

When it is done

A stack is done when anyone, person or model, can make the subject from it without asking. Light means no more than a maker needs, and no less. Every part has a place in Layer 2, with its Detail where a maker needs it, and every key scenario has a path through the parts.