AtlatestRepositoryfolio

folio / tree / test / fixturesfolio-pressure-project.txt

1#lang folio/doc
2
3@project["projects/folio-sigil-doc" title: "Folio as a semantic Sigil Doc workspace" status: active tags: (list "folio" "sigil-doc" "knowledge-graph")]
4
5Turn Folio from a Markdown-convention server into a local-first semantic
6knowledge workspace whose canonical source is @code{(folio doc model)}
7
8@related[document: "procedures/plan-driven-execution-loop" kind: follows-procedure]{the plan-driven execution loop}
9
10@related[document: "topics/folio-architecture" node: "t-arch01" kind: governed-by-workflow]
12@term["source-of-truth" name: "source of truth"]
13@emph{Authored source files} are authoritative, and every derived table is
14disposable: deleting the index and rebuilding it must produce the same graph.
15@end term
17@milestone["m-first-edition" title: "First edition of the semantic workspace" status: active]
19@phase["p-freeze-estate" title: "Freeze the current estate and safety baseline" status: done order: 1]
21@task["t-f0a1" status: done priority: high tags: (list "inventory") due: "2026-08-09"]{Produce the canonical corpus manifest}
23@update["u-f0review" timestamp: "2026-08-10T09:14:00Z" author: "fable" commit: "3a7a0eb"]
24Independent re-execution in a detached worktree reproduced every recorded count.
25@end update
27@end phase
29@phase["p-freeze-model" title: "Freeze the folio/doc semantic model" status: active order: 2]
31The vocabulary frozen in this phase is deliberately small, because a universal
32ontology is not a first-edition deliverable.
34@task["t-f1a01" status: active priority: high tags: (list "model" "freeze")]{Immutable records for the whole vocabulary}
36@related[node: "t-f1a02" kind: blocks]
38@end task
40@task["t-f1a02" status: ready priority: medium tags: (list "reader")]{Build the profile reader and prove delegation parity}
42@task["t-f1a03" status: blocked priority: low]{Wire the passive inspector into the index}
44@related[document: "topics/sigil-doc-passive-parse-api" kind: depends-on]
46@end task
48@task["t-f1a04" status: inbox]{Decide whether a phase may carry a due date}
50@task["t-f1a05" status: cancelled]{Fork the prose grammar for folio}
52@decision["d-profile" title: "folio/doc is a prelude and profile, not a new language" status: accepted]
54Reusing one surface grammar is what makes a single toolchain pay off in five
55different places at once.
57@related[document: "topics/folio-sigil-doc-implementation-plan" node: "d-one" kind: supports]
59@end decision
61@decision["d-flat-ids" title: "Loosen the node id grammar to admit slashes" status: superseded]
63@end decision
65@decision["d-compact-address" title: "Add a compact doc#node address spelling" status: rejected]
67Only a form that can be semantically reasoned about should be spelled at all.
69@end decision
71@decision["d-reopen-policy" title: "Allow a done work item to return to ready" status: proposed]
73Today the transition relation admits no edge out of a finished item, while the
74shipping product still offers to reopen one, so one of the two has to move.
76@end decision
78@decision["d-two-grammars" title: "Node ids stay flat; document addresses are a second grammar" status: accepted]
80@related[node: "d-flat-ids" kind: supersedes]
82@question["q-compact-address" title: "Should a compact address spelling exist?" status: answered]
84Answered no for the first edition: only a form that can be semantically reasoned
85about is spelled at all, so the explicit two-part address is the only one.
87@end question
89@question["q-reopen" title: "May a done work item return to ready?" status: open]
91The frozen relation @code{task-transition-allowed?} draws no edge out of a
92finished item, while the shipping product still offers to reopen one.
94@end question
96@end decision
98@end phase
100@phase["p-passive-inspect" title: "Passive inspection and dual-format discovery" status: planned order: 3]
102@table[columns: (list left left) caption: "Trust levels"]
103@row[header: #t]@cell{trust level}@cell{what it may do}
104@row@cell{passive tier}@cell{parse syntax and inspect declared fields}
105@row@cell{trusted tier}@cell{evaluate author forms after an explicit grant}
106@end table
108@task["t-f2a01" status: ready tags: (list "passivity")]{Parse untrusted sources in a bounded worker}
110@question["q-subject-index" title: "How should a subject index beyond glossary terms work?" status: deferred]
112@end phase
114@phase["p-publication" title: "Publish a knowledgebase without a Folio runtime" status: paused order: 4]
116@end phase
118@end milestone
120@section["reading"]{Where the rules actually live}
122Rules are referenced rather than reproduced, as in @ref["reading"]{this very section},
123and the published plan lives at @url["https://codeberg.org/sigil/folio"]{the folio repository}
125@list[ordered: #t start: 1]
126@item{Source fidelity: untouched bytes stay exact.}
127@item{Identity: a move never changes a stable local id.}
128@item{Honesty about derived state: rebuilding yields the same answers.}
129@end list
131@code-block[language: "sigil"]
132(folio-update-field! coordinator id: "t-f1a01" field: 'status value: 'done)
133@end code-block
135@(glossary)
137@end section
139@section["unicode"]{Locations that are not ASCII}
141Several scripts at once, so that byte spans and scalar columns disagree:
142καλημέρα κόσμε, 日本語のテキスト, and a rocket 🚀 far past the basic plane.
144@end section
146@task["t-unicode" status: ready]{Prove καλημέρα spans survive the round trip}
148@query[id: "q-ready-work" title: "Everything ready and unblocked" spec: (and (kind task) (status ready))]
150@transclude[document: "topics/instrument-failure-taxonomy" node: "s-shape-15"]
152@end project
154@note["topics/folio-doc-freeze-notes" title: "Notes taken while freezing the model" tags: (list "folio" "freeze" "0.1")]
156Metadata on a note is ordinary declared data: an address for identity, a title
157for the outline, and tags for filtering, none of it computed by author code.
159@related[document: "projects/folio-sigil-doc" node: "t-f1a01" kind: mentions]{the freeze task}
161@task["t-note01" status: ready priority: low]{Record the reopen gap for the mutation phase}
163@transclude[node: "t-f1a01"]
165@end note