Corporate documents
Minutes, status reports, postmortems, decision records: documents written by people with different profiles, reviewed, and from which someone ends up extracting data by hand. STXT lets the same file be both the document that is read and the source the data is extracted from.
Meeting minutes have a part that is text —what was discussed, why something was decided— and a part that is data: who attended, which actions were left open, by when and by whom. In practice both parts end up in the same text document, and the data is recovered later by reading: someone goes through the quarter's minutes to find out which actions are still open, or copies the status of twenty reports into a spreadsheet.
The problem is not the text format but that the data is not marked as such. STXT solves exactly that: data are nodes with a name and a value, text goes in literal blocks, and the document still reads top to bottom as it always did.
Meeting minutes
The minutes of a weekly meeting, as the person taking them would write them:
Minutes (com.acme.corp.minutes):
Title: Weekly sync — Platform
Date: 2026-01-09
Duration minutes: 45
Attendees:
Attendee: Joan Costa
Attendee: Mery Adams
Attendee: Keyla Brown
Notes >>
The quarter's roadmap is on track, but the team's capacity for February is
still open. The main risk is still the external provider dependency in
module X: response times vary too much from day to day.
Agreed to move the deployment window from Friday to Monday, to have full
support the following day. The cost of option B will be reviewed before
deciding on the cache.
Decisions:
Decision: Move the deployment window to Monday
Id: DEC-0142
Decision status: Approved
Owner: Platform Team
Rationale >>
Reduces operational risk: Tuesday support is full, Saturday support
is not.
Decision: Freeze non-critical changes in module X
Id: DEC-0143
Decision status: Proposed
Owner: Reliability
Actions:
Action: Prepare the quarter's capacity proposal
Id: ACT-0991
Owner: Mery Adams
Due: 2026-01-16
Action status: Open
Action: Estimate the cost of option B
Id: ACT-0992
Owner: Joan Costa
Due: 2026-01-14
Action status: In ProgressIt reads like minutes. And at the same time, for a program, it is a tree in which every action has an owner, a date and a status.
What is data and what is text
That is the only modelling decision to make, and the criterion is practical: data is what someone will search, filter or count; text is everything else.
- Attendees, decisions and actions are data: they are listed, cross-referenced with other minutes, they fall due. They go in inline nodes, one per element.
- The summary of the discussion and the rationale of each decision are text: they
are read, not processed. They go in
>>blocks, where paragraphs are written without any restriction. - The title of each decision and each action is the value of the node itself
(
Decision: Move the deployment…), and its attributes are children. That way the list reads at a glance.
If later something that is text today needs processing —the risks mentioned in the notes, for instance—, it is moved to a node of its own. The document does not change format; it gains a node.
The template
A template fixes what every set of minutes must have and what is optional, and narrows the statuses:
Template (@stxt.template): com.acme.corp.minutes
Description >>
Minutes: Meeting minutes
Decisions: Decisions taken or proposed in the meeting
Actions: Agreed actions, with owner and due date
Structure >>
Minutes:
Title: (1)
Date: (1) DATE
Duration minutes: (?) NATURAL
Attendees: (1)
Attendee: (+)
Notes: (?) TEXT
Decisions: (?)
Decision: (*)
Id: (1)
Decision status: (1) ENUM [Proposed, Approved, Rejected]
Owner: (?)
Rationale: (?) TEXT
Actions: (?)
Action: (*)
Id: (1) @Id
Owner: (?) @Owner
Due: (?) DATE
Action status: (1) ENUM [Open, In Progress, Done, Blocked]What it guarantees, minutes after minutes:
- Every set of minutes has a title, a date and at least one attendee; without that it does not validate.
- A decision is in one of three statuses, and an action in one of four. A status
written any other way (
Approved.,open) is an error, not a variant. - Dates are dates:
2026-01-32does not pass. - A node that is not in the template —
Atendeeswith a singlet, aPrioritysomeone added on their own— is rejected. That is the closed content model: the template is the complete list of what may appear. IdandOwnerare declared once and reused with@Idand@Owner: within a namespace, a node name identifies a single node. By the same rule, the status of a decision and that of an action are different nodes —Decision statusandAction status—: their value lists differ, and one name cannot have two definitions.
The template is stored in the .stxt/ directory of the repository where the minutes
live, and from then on the editor and the command line apply it with no
configuration (Working environment).
A status report
The same approach serves any periodic document. A weekly status report:
Status Report (com.acme.corp.status):
Project: Customer portal
Owner: Platform Docs
Period:
From: 2026-01-05
To: 2026-01-09
Status: Green
Summary >>
Steady progress on the base documentation. Work remains on the command
line tools and the use cases; none of it blocks the February delivery.
Progress:
Item: Introduction page
Item status: Done
Item: Tutorial
Item status: Done
Item: Command line reference
Item status: In Progress
Risks:
Risk: Missing migration examples from other formats
Id: RSK-020
Level: Medium
Mitigation >>
Prepare two migration examples before the end of the quarter.Template (@stxt.template): com.acme.corp.status
Description >>
Status Report: Periodic status report of a project
Structure >>
Status Report:
Project: (1)
Owner: (1)
Period: (1)
From: (1) DATE
To: (1) DATE
Status: (1) ENUM [Green, Amber, Red]
Summary: (1) TEXT
Progress: (?)
Item: (*)
Item status: (1) ENUM [Done, In Progress, Blocked]
Risks: (?)
Risk: (*)
Id: (1)
Level: (1) ENUM [Low, Medium, High]
Mitigation: (?) TEXTThe Status traffic light is an ENUM, not an adjective in the summary. With twenty
reports in a directory, a ten-line script answers how many projects are red and
what their high risks are, without anyone having read them one by one.
In the workflow
The documents live in a repository, like code:
- Writing: any text editor. With the VS Code extension, the template provides completion of names and statuses, and marks errors while typing.
- Review: a change is a diff of specific lines —an action going from
OpentoDone, a new decision—, not a binary file that has to be opened to see what changed. - Continuous integration:
stxt validate --recursive minutes/rejects incomplete minutes or an invalid status before they reach the repository (The command line). - Exploitation: the canonical tree (
stxt describe, or the library of each language) feeds whatever is needed: the list of open actions per person, a weekly summary by email, a dashboard with every project's traffic light.
None of this forces a change in how people write: minutes without a template are a valid STXT document, and validation is added when the team decides what it wants to guarantee.
Limits
STXT structures the document; it provides no approval workflow, access control or
notifications. Those come from the repository and the tools around it. Nor does it
validate rules between fields —that an action in Done status has no future date,
for instance—: that logic belongs to the application that exploits the data, not to
the template.
The neighbouring genres follow the same approach: RFCs and technical proposals for documents with a life cycle, and contracts where the data lives inside normative text. The language behind the examples is covered, rule by rule, in the tutorial.