Skip to content

Front-matter ​

Initiative ​

yaml
---
type: feature
status: designed
status_note: waiting on the sensor vendor
tags: [notifications]
owner: locks/core
docs: ["services/locks/docs/LOCKS.md"]
updated: 2026-10-06
---
# Lock sensor CSV import
FieldNotes
statusRequired. See Statuses. Without it, a file in a status folder takes the folder's status.
typefeature, bug, refactor, perf, docs, chore, spike — or your own words. See Types.
status_noteA one-line qualifier shown beside the status.
tagsThemes, lowercase kebab-case.
ownerOwning team, module or person.
docsProject docs this initiative is expected to change.
docs_impactSet on completion: the docs changed, or none: <reason>.
superseded_byRequired when status: superseded — a reference like sb#30.
updatedISO date, maintained by the tools.
branchWhile in progress: the branch it's being built on. Set by set_status when work starts, removed when it stops.
priority, impact, complexity, …Scoring dimensions.

The title is the H1. Dependencies are links under ## Dependencies, not front-matter.

Collection README ​

yaml
---
brindley: 1
name: slot-booking
aliases: [locks]
title: LOCK-42 lock slot booking
summary: Let captains book ascending and descending lock slots online
status: active
owner: locks team
link: https://tracker.example.com/LOCK-42
agent: .github/agents/slot-booking.agent.md
docs: ["services/locks/docs/*.md"]
types: [feature, bug, refactor, perf, docs, chore, spike]
tags:
  notifications: Telling captains about changes to their slots
statuses:
  spiked: designed
ignore:
  - "*-rationale.md"
dimensions:
  priority: { values: [now, soon, later], default: soon, required: true }
  job_size: [1, 2, 3, 5, 8, 13]
---
FieldNotes
brindleyRequired: marks the folder as a collection.
nameName used in references; defaults to the folder name.
aliasesExtra short names for references.
title, summary, owner, linkDescriptive.
statusactive, done or abandoned — the changeset as a whole.
agentYour repo's implementing-agent instructions; the implement brief points to them.
docsGlobs of what counts as project documentation, in order; ! excludes (["site/**/*.md", "!site/releases.md"]), and the last match wins.
types, tagsDeclared values; others are flagged as likely typos.
statusesThis collection's own status words, mapped to core statuses.
ignore.gitignore-style patterns for numbered files that aren't initiatives.
dimensionsThis collection's scoring dimensions.
graphWhat the README's dependency graph shows — see Graph settings.
foldersOpt in to status folders: statuses mapped to folder names ({ done: completed, abandoned: closed }). Status changes then move initiatives — with their asset folders, rewriting links — and tidy puts existing ones in place. Without it, files never move.
reportWhat the progress report sizes work by and calls things — see Report settings.
columnsThe README tables' columns: active and/or completed, each an ordered list replacing that table's defaults — from number, title, type, status, ready, questions, owner, tags, updated and the collection's scoring dimensions.

Graph settings ​

The README's dependency graph has do-first work on the left, each edge pointing from an initiative to what it depends on, and only blocking dependencies drawn. A collection changes that under graph::

yaml
graph:
  direction: left-to-right   # where the do-first work goes: left-to-right, right-to-left, top-to-bottom, bottom-to-top
  arrows: from               # from: edges point at what an initiative needs; to: the reverse ("Y unblocks X")
  related: true              # also draw ## Related links, dotted (default: false)
  show: [done]               # also include initiatives in these statuses (default: none)
  external: false            # leave out external dependencies and other collections' work (default: true)
  themes: [box, icon]        # box: group by first theme; icon or label: mark each node's themes (default: off)
  links: false               # don't make nodes links to their initiatives (default: true)
  enabled: true              # false: no graph in this README (default: true)

A theme's icon comes from icon: in its theme doc; a theme without one shows as [name]. The settings also apply to the graph tool for this collection, which can override each one. Unknown settings and unusable values are graph-setting warnings.

Report settings ​

The progress report weighs work by a size scoring dimension when the collection has one, and counts work items otherwise. A collection changes that, and the words the report uses, under report::

yaml
report:
  size: complexity                          # the scoring dimension to size by (default: size)
  points: { low: 1, medium: 3, high: 8 }    # points for a dimension's word values
  workstreams: tags                         # tags (default when work is tagged) or collections
  labels:                                   # the report's words, each optional
    work_item: job
    work_items: jobs
    done: Shipped

Labels: work_item, work_items, area, areas, the chart bands not_started, in_progress and complete, and the statuses draft (Planning), designed (Ready to start), in-progress, done (Delivered), deferred (Parked), abandoned (Dropped) and superseded (Replaced). Unknown settings, a size that isn't a dimension and points for a word the dimension doesn't have are report-setting warnings.

Scoring dimensions ​

Scoring dimensions say how important, valuable or hard an initiative is. Each is an ordinary front-matter field (priority: high) whose value comes from an ordered set, first value ranking first. Every collection has three, all optional:

DimensionValues, first ranks first
prioritycritical, high, medium, low
impacthigh, medium, low
complexitylow, medium, high (simpler work ranks ahead)

A collection README adds its own, or replaces a default by using its name, under dimensions:: values (strings or numbers, in ranking order), and optionally required: true and a default that unset initiatives are treated as having. A bare list is shorthand for values. Set values with update's dimensions; filter and order with list's where and order_by. The fields tool lists a collection's dimensions, with their values and defaults, alongside every other field.

Example: adding a dimension ​

A lock-maintenance team wants to rank work by how disruptive it is to boats using the canal, and to make every initiative say so. In the collection README:

yaml
dimensions:
  disruption:
    values: [none, minor, closure]   # least disruptive first: it ranks ahead
    required: true                   # validate warns about any initiative without it
    default: minor                   # until set, an initiative sorts and filters as minor
  priority: [now, soon, later]       # replaces the default priority; a bare list is the values

Each initiative then records its value in front-matter:

yaml
---
status: designed
disruption: closure
priority: now
---
# Replace the bottom gates

or through a tool — update(ref: "locks#12", dimensions: { disruption: "none" }). Values outside the list are refused by update and flagged by validate. To find the least disruptive work that is ready, most urgent first:

list(ready: true, where: { disruption: [none, minor] }, order_by: [priority, disruption])

A dimension can also be a README column — columns: { active: [number, title, disruption, priority] } — where a value taken from the default is shown in italics.

Theme doc ​

yaml
---
theme: notifications
summary: How captains hear about changes
icon: 🔔
---

Any non-numbered .md in a collection folder with theme: is that theme's overview. Its optional icon marks the theme's initiatives in graphs that set themes: icon.

MIT licensed · Named after James Brindley, engineer of the Bridgewater Canal