AtlatestRepositoryfolio

folio / tree / test / fixturesf1b-note.sgd

1#lang folio/doc
2@note["topics/f1b-reader" title: "The folio/doc reader" tags: '("folio" "reader" "0.1")]
3
4@p{A folio note as the estate actually writes them: prose, then a @code{## Tasks}
5heading, then work items underneath it. Before SD-P7 this manuscript could not be
6represented at all -- @code{make-section} validated its children against
7@code{block-node?}, a closed enumeration of core kinds, so a @code{@@task} could
8never be a child of a @code{@@section}.}
9
10@section["Tasks" id: "tasks"]{
12@p{Ordinary blocks still belong here, and this paragraph is the POSITIVE CONTROL
13for that: a profile admitting work items by ACCEPTING EVERYTHING would satisfy
14the task assertions below just as well, and this paragraph is what a narrowing
15profile 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 to
19@code{(sigil doc reader)} and varies only the roots, the content profile and the
20author environment.}
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 to
25fire under @code{#lang sigil/doc}.}
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"]{}
36@section["Decisions" id: "decisions"]{
38@p{A second section, so the arm exercises a SET of sections rather than a single
39one, 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 and
43refusing later breaks documents in the field.}
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 the
48expression evaluates before any folio command sees a value.}
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.}
57@end note
59@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 is
62@code{'one-or-more} rather than @code{'one}. It also puts the identity check
63across 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 a
71structural container refuses the profile at construction.}
74@end phase
76@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.}
82@end phase
84@end milestone
86@end project