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 Progress

In 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: Pending

The 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: (?) TEXT

The 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 Open to Done, 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.