stego-cli 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cspell.json +14 -0
- package/.gitignore +8 -0
- package/.markdownlint.json +5 -0
- package/.vscode/tasks.json +72 -0
- package/README.md +179 -0
- package/dist/exporters/exporter-types.js +1 -0
- package/dist/exporters/markdown-exporter.js +14 -0
- package/dist/exporters/pandoc-exporter.js +65 -0
- package/dist/stego-cli.js +1803 -0
- package/docs/conventions.md +182 -0
- package/docs/workflow.md +78 -0
- package/package.json +50 -0
- package/projects/docs-demo/README.md +20 -0
- package/projects/docs-demo/dist/.gitkeep +0 -0
- package/projects/docs-demo/manuscript/100-what-stego-is.md +37 -0
- package/projects/docs-demo/manuscript/200-writing-workflow.md +69 -0
- package/projects/docs-demo/manuscript/300-quality-gates.md +36 -0
- package/projects/docs-demo/manuscript/400-build-and-export.md +42 -0
- package/projects/docs-demo/notes/implementation-notes.md +17 -0
- package/projects/docs-demo/notes/style-guide.md +7 -0
- package/projects/docs-demo/package.json +10 -0
- package/projects/docs-demo/stego-project.json +9 -0
- package/projects/plague-demo/.markdownlint.json +4 -0
- package/projects/plague-demo/README.md +19 -0
- package/projects/plague-demo/dist/.gitkeep +0 -0
- package/projects/plague-demo/manuscript/100-the-commission.md +24 -0
- package/projects/plague-demo/manuscript/200-at-the-wards.md +38 -0
- package/projects/plague-demo/manuscript/300-the-hearing.md +38 -0
- package/projects/plague-demo/manuscript/400-the-final-account.md +30 -0
- package/projects/plague-demo/notes/style-guide.md +7 -0
- package/projects/plague-demo/package.json +10 -0
- package/projects/plague-demo/spine/characters.md +31 -0
- package/projects/plague-demo/spine/locations.md +33 -0
- package/projects/plague-demo/spine/sources.md +28 -0
- package/projects/plague-demo/stego-project.json +41 -0
- package/stego.config.json +56 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: draft
|
|
3
|
+
chapter: 2
|
|
4
|
+
chapter_title: The Accounting
|
|
5
|
+
pov: Etienne
|
|
6
|
+
timeline: '1348-09-26'
|
|
7
|
+
characters:
|
|
8
|
+
- CHAR-MATTHAEUS
|
|
9
|
+
- CHAR-ETIENNE
|
|
10
|
+
- CHAR-RAOUL
|
|
11
|
+
locations:
|
|
12
|
+
- LOC-COLLEGE
|
|
13
|
+
sources:
|
|
14
|
+
- SRC-CONJUNCTION
|
|
15
|
+
- SRC-GALEN
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
The faculty hearing began as a technical disputation and ended as an inquiry into method. Three masters objected to Matthaeus from different directions: one said he conceded too much to natural causes, another said he conceded too much to celestial judgment, a third said he imported suspect languages from Arabic traditions into Christian medicine. The objections were mutually exclusive, which should have cancelled them out but instead compounded them, because the real charge was not error but imprudence.
|
|
19
|
+
|
|
20
|
+
Raoul asked to see all sources. John presented the conjunction tables and the Galenic commentaries openly. He withheld the quire until asked a second time. When he produced it, the room changed temperature.
|
|
21
|
+
|
|
22
|
+
No one accused him of sorcery. They accused him of carelessness: in a season of mass death, even method could scandalize if its lineage looked foreign or secretive or insufficiently authorized. The problem was not what the quire said. The problem was that Matthaeus had kept it at all — that he had judged for himself which sources were useful and which were not, without waiting to be told.
|
|
23
|
+
|
|
24
|
+
He defended himself precisely. A text could be illicit in circulation yet sound in analysis; truth did not inherit legal status from its scribes. Raoul answered that governance could not afford that distinction under plague conditions.
|
|
25
|
+
|
|
26
|
+
The compromise was severe but survivable. Matthaeus would keep his position, surrender the quire, and circulate only conclusions framed in authorized language. Etienne copied the agreement and watched his master sign it without hesitation, as though the quire had already given him everything he needed and its confiscation changed nothing.
|
|
27
|
+
|
|
28
|
+
<!-- stego-comments:start -->
|
|
29
|
+
|
|
30
|
+
<!-- comment: CMT-0001 -->
|
|
31
|
+
<!-- meta64: eyJzdGF0dXMiOiJvcGVuIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDItMjFUMDQ6MjI6MzguMDE4WiIsInRpbWV6b25lIjoiQW1lcmljYS9OZXdfWW9yayIsInRpbWV6b25lX29mZnNldF9taW51dGVzIjotMzAwLCJwYXJhZ3JhcGhfaW5kZXgiOjAsImV4Y2VycHRfc3RhcnRfbGluZSI6MTgsImV4Y2VycHRfc3RhcnRfY29sIjozMDcsImV4Y2VycHRfZW5kX2xpbmUiOjE4LCJleGNlcnB0X2VuZF9jb2wiOjMxM30 -->
|
|
32
|
+
> _Feb 21, 2026, 4:22 AM — mattgold_
|
|
33
|
+
>
|
|
34
|
+
> > “Arabic”
|
|
35
|
+
>
|
|
36
|
+
> spicy
|
|
37
|
+
|
|
38
|
+
<!-- stego-comments:end -->
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: final
|
|
3
|
+
pov: Matthaeus
|
|
4
|
+
timeline: '1348-10-03'
|
|
5
|
+
characters:
|
|
6
|
+
- CHAR-MATTHAEUS
|
|
7
|
+
- CHAR-ETIENNE
|
|
8
|
+
- CHAR-AGNES
|
|
9
|
+
- CHAR-RAOUL
|
|
10
|
+
locations:
|
|
11
|
+
- LOC-COLLEGE
|
|
12
|
+
- LOC-HOTELDIEU
|
|
13
|
+
- LOC-CHARNEL
|
|
14
|
+
sources:
|
|
15
|
+
- SRC-CONJUNCTION
|
|
16
|
+
- SRC-GALEN
|
|
17
|
+
- SRC-WARD-DATA
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
The fever found Matthaeus before the memorandum was finished. He continued dictation from bed, his voice steady and his argument tightening as his body failed. Etienne checked each figure against the conjunction tables. Everything held.
|
|
21
|
+
|
|
22
|
+
The final account worked like this: celestial disposition was the universal cause. Humoral constitution was the selecting cause. Local conditions — trade, proximity, season — were distributing causes. Agnes's ward data occupied the third level cleanly. The grain routes were real. Their explanatory weight was tertiary. Nothing was denied. Everything was ranked.
|
|
23
|
+
|
|
24
|
+
Agnes visited once. He was lucid, almost calm. He thanked her for indispensable observations. Then he placed those observations inside a hierarchy that made them subordinate to forces she could not see and he could not test, and he seemed relieved to find that nothing was left outside the system.
|
|
25
|
+
|
|
26
|
+
She asked which street he expected to sicken next. He said that was not the kind of question the memorandum addressed. She said she knew. The families at Hôtel-Dieu also knew.
|
|
27
|
+
|
|
28
|
+
Raoul approved the text. By dawn the bells had begun the office for the dying. Matthaeus held Etienne's hand and said, with what sounded like genuine peace, that the account was complete and that nothing had been left out.
|
|
29
|
+
|
|
30
|
+
He died before terce. The second ledger was empty. Every observation had been reconciled. The manuscript traveled farther than his body did.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Style Guide
|
|
2
|
+
|
|
3
|
+
- Keep period belief systems sincere; Matthaeus is not wrong by the standards of his world, which is the point.
|
|
4
|
+
- Prose should be precise, declarative, and conceptually rigorous; resist ornamentation except in moments of sensory grounding.
|
|
5
|
+
- Let the central question — whether total coherence is the same as understanding — arrive through concrete scenes, never through exposition. CHAR-ETIENNE
|
|
6
|
+
- Agnes and Matthaeus disagree genuinely; neither is a straw figure for the other's position.
|
|
7
|
+
- Use the two-ledger motif (accepted causes, unreconciled observations) as a structural anchor: the second ledger empties over the course of the story.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "writing-project-plague-demo",
|
|
3
|
+
"private": true,
|
|
4
|
+
"scripts": {
|
|
5
|
+
"validate": "node --experimental-strip-types ../../tools/stego-cli.ts validate",
|
|
6
|
+
"build": "node --experimental-strip-types ../../tools/stego-cli.ts build",
|
|
7
|
+
"check-stage": "node --experimental-strip-types ../../tools/stego-cli.ts check-stage",
|
|
8
|
+
"export": "node --experimental-strip-types ../../tools/stego-cli.ts export"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Characters
|
|
2
|
+
|
|
3
|
+
## CHAR-MATTHAEUS
|
|
4
|
+
|
|
5
|
+
- Magister Matthaeus de Rota
|
|
6
|
+
- Role: Scholar of medicine and astrology at the University of Paris
|
|
7
|
+
- Disposition: Methodical, sincere, incapable of leaving an observation outside his system; treats coherence as a moral obligation
|
|
8
|
+
- Sources: Works primarily from the conjunction theory (SRC-CONJUNCTION) and Galenic tradition (SRC-GALEN); consults a prohibited astrological quire privately for its method of reasoning from hidden correspondences
|
|
9
|
+
- Arc: Builds a total explanation of the {{pestilence}} and dies at peace inside it; the question is whether his peace is understanding or its most sophisticated substitute
|
|
10
|
+
|
|
11
|
+
## CHAR-ETIENNE
|
|
12
|
+
|
|
13
|
+
- Etienne of Saint-Marcel
|
|
14
|
+
- Role: Young cleric-scribe attached to Matthaeus (CHAR-MATTHAEUS)
|
|
15
|
+
- Disposition: Careful, loyal, doctrinally cautious; sees everything his master does and says nothing about the parts that trouble him
|
|
16
|
+
- Function: The story's witness; records the system without fully believing it, but also without offering an alternative
|
|
17
|
+
|
|
18
|
+
## CHAR-AGNES
|
|
19
|
+
|
|
20
|
+
- Agnes the apothecary
|
|
21
|
+
- Role: Compounder and practical healer near the Petit Pont; supplies Hôtel-Dieu (LOC-HOTELDIEU)
|
|
22
|
+
- Disposition: Empirical, blunt, uninterested in frameworks that don't predict which street sickens next
|
|
23
|
+
- Sources: Her own ward observations (SRC-WARD-DATA); she has no name for her method, which is part of its strength and its institutional weakness
|
|
24
|
+
- Function: The counterweight; asks whether a system that can absorb any evidence without changing is a system or a habit
|
|
25
|
+
|
|
26
|
+
## CHAR-RAOUL
|
|
27
|
+
|
|
28
|
+
- Canon Raoul de Villiers
|
|
29
|
+
- Role: Cathedral canon and royal intermediary overseeing the inquiry
|
|
30
|
+
- Disposition: Pragmatic, literate, concerned with language fit for governance; judges arguments by their civic effects, not their truth
|
|
31
|
+
- Relationship: Commissioned Matthaeus (CHAR-MATTHAEUS) and will approve or suppress his conclusions; represents the institution's need for a single authorized account
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Locations
|
|
2
|
+
|
|
3
|
+
## LOC-COLLEGE
|
|
4
|
+
|
|
5
|
+
- College chamber near the Rue Saint-Jacques
|
|
6
|
+
- Study and disputation room
|
|
7
|
+
- Reference: [University of Paris](https://en.wikipedia.org/wiki/University_of_Paris), [Rue Saint-Jacques](https://en.wikipedia.org/wiki/Rue_Saint-Jacques_(Paris))
|
|
8
|
+
- Stone-walled, poorly lit, dominated by a long table covered in manuscripts; the room where Matthaeus (CHAR-MATTHAEUS) and Etienne (CHAR-ETIENNE) compile the memorandum
|
|
9
|
+
- Significance: The space where the system is built; physically separated from the wards and streets where the plague actually operates
|
|
10
|
+
|
|
11
|
+
## LOC-HOTELDIEU
|
|
12
|
+
|
|
13
|
+
- Hôtel-Dieu
|
|
14
|
+
- Hospital ward near Notre-Dame
|
|
15
|
+
- Reference: [Hôtel-Dieu de Paris](https://en.wikipedia.org/wiki/H%C3%B4tel-Dieu_de_Paris)
|
|
16
|
+
- Crowded, loud, smelling of vinegar and linen; priests read offices while surgeons open buboes; Agnes (CHAR-AGNES) manages the supply lines
|
|
17
|
+
- Significance: Where data is collected; the distance between this room and the college chamber is the distance between observation and explanation
|
|
18
|
+
|
|
19
|
+
## LOC-QUAY
|
|
20
|
+
|
|
21
|
+
- Grain quay on the Seine
|
|
22
|
+
- River unloading zone
|
|
23
|
+
- Reference: [Port de la Grève](https://en.wikipedia.org/wiki/Place_de_Gr%C3%A8ve) (medieval commercial riverfront)
|
|
24
|
+
- Torn sackcloth, heavy foot traffic, commercial contact between upstream suppliers and the city's markets
|
|
25
|
+
- Significance: Agnes's observations (SRC-WARD-DATA) trace infection along this route; it is the strongest evidence for material transmission and the hardest for the celestial framework (SRC-CONJUNCTION) to accommodate
|
|
26
|
+
|
|
27
|
+
## LOC-CHARNEL
|
|
28
|
+
|
|
29
|
+
- Charnel precinct at the cemetery edge
|
|
30
|
+
- Overflow burial ground
|
|
31
|
+
- Reference: [Holy Innocents' Cemetery](https://en.wikipedia.org/wiki/Saints_Innocents%27_Cemetery)
|
|
32
|
+
- Where the dead go when the dead outnumber the rites; compressed ritual, civic exhaustion
|
|
33
|
+
- Significance: The place that makes the need for an explanation urgent — not because understanding will stop the dying, but because the alternative is dying without a frame
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Sources
|
|
2
|
+
|
|
3
|
+
## SRC-CONJUNCTION
|
|
4
|
+
|
|
5
|
+
- The Great Conjunction theory
|
|
6
|
+
- Tradition: University astrology ([Paris faculty opinion of 1348](https://en.wikipedia.org/wiki/Black_Death#Medical_knowledge))
|
|
7
|
+
- Reference: [Great Conjunction](https://en.wikipedia.org/wiki/Great_conjunction)
|
|
8
|
+
- Claim: The conjunction of Saturn, Jupiter, and Mars in Aquarius corrupted the atmosphere universally; local outbreaks are secondary effects of a celestial primary cause
|
|
9
|
+
- Used by: Matthaeus (CHAR-MATTHAEUS) as the apex of his causal hierarchy; Raoul (CHAR-RAOUL) as the politically safest framing
|
|
10
|
+
- Limitation: Explains everything at once, which means it predicts nothing in particular
|
|
11
|
+
|
|
12
|
+
## SRC-GALEN
|
|
13
|
+
|
|
14
|
+
- Galenic humoral medicine
|
|
15
|
+
- Tradition: Greco-Arabic medical inheritance
|
|
16
|
+
- Reference: [Humorism](https://en.wikipedia.org/wiki/Humorism), [Galen](https://en.wikipedia.org/wiki/Galen)
|
|
17
|
+
- Claim: Individual susceptibility depends on bodily complexion (balance of humors); treatment involves restoring balance through diet, purgation, and environment
|
|
18
|
+
- Used by: Matthaeus (CHAR-MATTHAEUS) as the middle layer of his framework — celestial disposition selects who is vulnerable, humoral constitution determines who actually sickens
|
|
19
|
+
- Limitation: Cannot explain why entire neighborhoods fall at once regardless of individual constitution
|
|
20
|
+
|
|
21
|
+
## SRC-WARD-DATA
|
|
22
|
+
|
|
23
|
+
- Agnes's ward observations
|
|
24
|
+
- Tradition: None; empirical record-keeping without institutional backing
|
|
25
|
+
- Reference: [Miasma theory](https://en.wikipedia.org/wiki/Miasma_theory) (the contemporary framework Agnes's data implicitly challenges)
|
|
26
|
+
- Claim: Infection follows grain traffic and commercial contact; neighborhoods tied to the quay (LOC-QUAY) sicken first, then adjacent streets, then the rest
|
|
27
|
+
- Used by: Agnes (CHAR-AGNES) as practical knowledge; Matthaeus (CHAR-MATTHAEUS) acknowledges the pattern but classifies it as a secondary distributing cause, subordinate to celestial disposition
|
|
28
|
+
- Limitation: No theoretical framework to explain why the pattern holds; accurate but institutionally weightless
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "plague-demo",
|
|
3
|
+
"title": "Under Saturn's Breath (Demo)",
|
|
4
|
+
"subtitle": "Paris, 1348 — a scholar builds a total explanation of the pestilence",
|
|
5
|
+
"author": "Matt Gold",
|
|
6
|
+
"requiredMetadata": [
|
|
7
|
+
"status",
|
|
8
|
+
"chapter",
|
|
9
|
+
"pov",
|
|
10
|
+
"timeline"
|
|
11
|
+
],
|
|
12
|
+
"compileStructure": {
|
|
13
|
+
"levels": [
|
|
14
|
+
{
|
|
15
|
+
"key": "chapter",
|
|
16
|
+
"label": "Chapter",
|
|
17
|
+
"titleKey": "chapter_title",
|
|
18
|
+
"injectHeading": true,
|
|
19
|
+
"headingTemplate": "{label} {value}: {title}",
|
|
20
|
+
"pageBreak": "between-groups"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"spineCategories": [
|
|
25
|
+
{
|
|
26
|
+
"key": "characters",
|
|
27
|
+
"prefix": "CHAR",
|
|
28
|
+
"notesFile": "characters.md"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"key": "locations",
|
|
32
|
+
"prefix": "LOC",
|
|
33
|
+
"notesFile": "locations.md"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"key": "sources",
|
|
37
|
+
"prefix": "SRC",
|
|
38
|
+
"notesFile": "sources.md"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"projectsDir": "projects",
|
|
3
|
+
"chapterDir": "manuscript",
|
|
4
|
+
"spineDir": "spine",
|
|
5
|
+
"notesDir": "notes",
|
|
6
|
+
"distDir": "dist",
|
|
7
|
+
"requiredMetadata": [
|
|
8
|
+
"status"
|
|
9
|
+
],
|
|
10
|
+
"allowedStatuses": [
|
|
11
|
+
"draft",
|
|
12
|
+
"revise",
|
|
13
|
+
"line-edit",
|
|
14
|
+
"proof",
|
|
15
|
+
"final"
|
|
16
|
+
],
|
|
17
|
+
"stagePolicies": {
|
|
18
|
+
"draft": {
|
|
19
|
+
"minimumChapterStatus": "draft",
|
|
20
|
+
"requireSpine": false,
|
|
21
|
+
"enforceMarkdownlint": false,
|
|
22
|
+
"enforceCSpell": false,
|
|
23
|
+
"enforceLocalLinks": false
|
|
24
|
+
},
|
|
25
|
+
"revise": {
|
|
26
|
+
"minimumChapterStatus": "revise",
|
|
27
|
+
"requireSpine": true,
|
|
28
|
+
"enforceMarkdownlint": false,
|
|
29
|
+
"enforceCSpell": false,
|
|
30
|
+
"enforceLocalLinks": false
|
|
31
|
+
},
|
|
32
|
+
"line-edit": {
|
|
33
|
+
"minimumChapterStatus": "line-edit",
|
|
34
|
+
"requireSpine": true,
|
|
35
|
+
"enforceMarkdownlint": false,
|
|
36
|
+
"enforceCSpell": true,
|
|
37
|
+
"enforceLocalLinks": false
|
|
38
|
+
},
|
|
39
|
+
"proof": {
|
|
40
|
+
"minimumChapterStatus": "proof",
|
|
41
|
+
"requireSpine": true,
|
|
42
|
+
"enforceMarkdownlint": true,
|
|
43
|
+
"enforceCSpell": true,
|
|
44
|
+
"enforceLocalLinks": true,
|
|
45
|
+
"requireResolvedComments": true
|
|
46
|
+
},
|
|
47
|
+
"final": {
|
|
48
|
+
"minimumChapterStatus": "final",
|
|
49
|
+
"requireSpine": true,
|
|
50
|
+
"enforceMarkdownlint": true,
|
|
51
|
+
"enforceCSpell": true,
|
|
52
|
+
"enforceLocalLinks": true,
|
|
53
|
+
"requireResolvedComments": true
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|