Corporate documents
Minutes or a report in STXT are at once the document people read and the data a program processes.
Meeting minutes
Minutes (com.acme.corp.minutes):
Title: Weekly Platform sync
Date: 2026-01-09
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.
Agreed to move the deployment window from Friday to Monday, to have full
support the following day.
Decisions:
Decision: Move the deployment window to Monday
Id: DEC-0142
Decision status: Approved
Owner: Platform Team
Rationale >>
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 ProgressIn this example there are two kinds of content:
- Data: the attendees, the decisions and the actions. They are inline nodes, one per element.
- Text: the meeting notes and the rationale of a decision. They are block nodes, and they are written without any restriction.
The criterion is practical: data is what someone will search, filter or count. For example, a program can get the actions of the minutes without interpreting anything:
| Action | Id | Owner | Due | Action status |
|---|---|---|---|---|
Prepare the quarter's capacity proposal |
ACT-0991 | Mery Adams | 2026-01-16 | Open |
Estimate the cost of option B |
ACT-0992 | Joan Costa | 2026-01-14 | In Progress |
The template
A template defines what minutes must have, what is optional and which statuses exist:
Template (@stxt.template): com.acme.corp.minutes
Structure >>
Minutes:
Title: (1)
Date: (1) DATE
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]Within a namespace, a name identifies a single node. That is why Id and Owner
are defined once and reused with @Id and @Owner. And that is why there is a
Decision status and an Action status: they have different values, so they are different nodes.
Minutes that do not validate
# ERROR: this document does not validate
Minutes (com.acme.corp.minutes):
Title: Weekly Platform sync
# Day 32 does not exist
Date: 2026-01-32
# `Atendees` is not in the template (a `t` is missing), and `Attendees` is missing
Atendees:
Attendee: Joan Costa
Actions:
Action: Prepare the quarter's capacity proposal
Id: ACT-0991
# `Pending` is not a status of the list
Action status: PendingThe template is the complete list of what may appear: a node that is not in it is rejected (closed content model).
A status report
The same works for any periodic document:
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 reference, which does not block 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.And its template:
Template (@stxt.template): com.acme.corp.status
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. With twenty reports in a directory, a program
can answer how many projects are Red and which are their High risks.
How it is used
- The documents live in a repository, with the template in the
.stxt/directory. - A change is a diff of lines: an action going from
OpentoDone, a new decision. - The VS Code extension completes names and statuses, and marks errors while typing.
stxt validate --recursive minutes/runs the same validation in continuous integration.
All of this is explained in The working environment.
Limits
The template does not validate rules between fields (for example, that a Done action has
no future date). That logic belongs to the application that uses the data.
STXT does not provide an approval workflow, access control or notifications either.