AtlatestRepositoryfolio
1
#lang folio/doc2
@note["topics/f1b-reader" title: "The folio/doc reader" tags: '("folio" "reader" "0.1")]4
@p{A folio note as the estate actually writes them: prose, then a @code{## Tasks}5
heading, then work items underneath it. Before SD-P7 this manuscript could not be6
represented at all -- @code{make-section} validated its children against7
@code{block-node?}, a closed enumeration of core kinds, so a @code{@@task} could8
never be a child of a @code{@@section}.}10
@section["Tasks" id: "tasks"]{12
@p{Ordinary blocks still belong here, and this paragraph is the POSITIVE CONTROL13
for that: a profile admitting work items by ACCEPTING EVERYTHING would satisfy14
the task assertions below just as well, and this paragraph is what a narrowing15
profile would break.}17
@task["t-delegate" title: "Delegate the grammar rather than fork it" status: 'active priority: 'high tags: '("reader")]{18
@p{The reader hands scanning, bodies, escapes and every location to19
@code{(sigil doc reader)} and varies only the roots, the content profile and the20
author environment.}21
}23
@task["t-witness" title: "Prove the no-execution witness can see execution" status: 'ready priority: 'medium due: "2026-08-20"]{24
@p{Refusing author forms is worth nothing until the same tripwires are shown to25
fire under @code{#lang sigil/doc}.}26
}28
@related[document: "topics/folio-doc-frozen-vocabulary" kind: 'depends-on]{the frozen model}30
@query["q-open-work" title: "Everything ready and unblocked" spec: '(and (kind task) (status ready))]{}32
@transclude[document: "topics/sigil-doc-content-profiles" node: "s-limits"]{}34
}36
@section["Decisions" id: "decisions"]{38
@p{A second section, so the arm exercises a SET of sections rather than a single39
one, and so a bug that only ever populated the first would show.}41
@decision["d-refuse-author-forms" title: "A folio manuscript carries no code" status: 'accepted]{42
@p{Refusing now and permitting later is a relaxation; permitting now and43
refusing later breaks documents in the field.}44
}46
@question["q-argument-position" title: "Can an argument-position expression be refused at all?" status: 'open]{47
@p{The parser splices argument syntax into the lowered call unchanged, so the48
expression evaluates before any folio command sees a value.}49
}51
@update["u-2026-08-12" timestamp: "2026-08-12" author: "f1b" commit: "3516d45"]{52
@p{An update is a historical record and holds no live work items.}53
}55
}57
@end note59
@project["projects/f1b" title: "Reader and delegation parity" status: 'active tags: '("wave-3")]61
@p{A SECOND ROOT in the same file, which is why the document profile is62
@code{'one-or-more} rather than @code{'one}. It also puts the identity check63
across roots rather than inside one.}65
@milestone["m-reader" title: "The reader lands" status: 'active]67
@phase["p-profile" title: "Install the content profile" status: 'done order: 1]69
@task["t-profile" title: "Build the folio content profile" status: 'done priority: 'high]{70
@p{Declared witnesses are the enforcement: widening the predicate to admit a71
structural container refuses the profile at construction.}72
}74
@end phase76
@phase["p-parity" title: "Prove delegation parity" status: 'active order: 2]78
@decision["d-parity-shape" title: "Compare built documents, not lowered syntax" status: 'accepted]{79
@p{A lowering differential cannot fail on the input it is used on.}80
}82
@end phase84
@end milestone86
@end project