kapso-brief.md by convention, and the Brief
object in Python; one grammar, read by Brief.read(path) and written by
Brief.write(path). build() renders it whole into the campaign’s goal.
The fields
Names are matched as whole words at the start of an unindented line, in
any case;
Measured by needs nothing special to delimit it.
The grammar
- A field starts an unindented line with its name, then whitespace, then the value; the value may also start on the next line.
- An indented line continues the field above. The lines after a field’s first are dedented together, so a pasted block keeps its relative indentation; a bullet or a number at the start of such a line is text, not an item. The first line stands on its own (it follows the name).
- A blank line between two lines of the same field is a paragraph break; blank lines anywhere else are nothing.
RulesandExperiencetake items on indented lines starting with-; an item continues on further indented lines.Experiencealso takes one comma-separated line.Budgettakesname=valuetokens, on the field line or continuation lines:minutes,usdandreserve_minutesare positive numbers written in plain digits (0.00001, never1e-05),experimentsa positive integer,reserve_minutessmaller thanminutes.- Reference strings are kept as written:
acme/harnesses@v3#tradingand~/banks/mine.gitsurvive intact.
What is refused
Each with the file and line number, never guessed at:The Python object
render() is what the engine receives as its goal and what the checkpoint
fingerprints. A Brief normalizes its text on construction (the first
line of a field stripped, the rest dedented together, trailing whitespace
and outer blank lines removed), and over that form
Brief.parse(brief.render()) == brief holds for every brief, which is
what a bare resume relies on.
Related
The brief
What each line is for
Python API
build(), Brief, Budget and Solution
pip install leeroo-kapso · Every page as plain text: llms.txt.