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.
Files changed (36) hide show
  1. package/.cspell.json +14 -0
  2. package/.gitignore +8 -0
  3. package/.markdownlint.json +5 -0
  4. package/.vscode/tasks.json +72 -0
  5. package/README.md +179 -0
  6. package/dist/exporters/exporter-types.js +1 -0
  7. package/dist/exporters/markdown-exporter.js +14 -0
  8. package/dist/exporters/pandoc-exporter.js +65 -0
  9. package/dist/stego-cli.js +1803 -0
  10. package/docs/conventions.md +182 -0
  11. package/docs/workflow.md +78 -0
  12. package/package.json +50 -0
  13. package/projects/docs-demo/README.md +20 -0
  14. package/projects/docs-demo/dist/.gitkeep +0 -0
  15. package/projects/docs-demo/manuscript/100-what-stego-is.md +37 -0
  16. package/projects/docs-demo/manuscript/200-writing-workflow.md +69 -0
  17. package/projects/docs-demo/manuscript/300-quality-gates.md +36 -0
  18. package/projects/docs-demo/manuscript/400-build-and-export.md +42 -0
  19. package/projects/docs-demo/notes/implementation-notes.md +17 -0
  20. package/projects/docs-demo/notes/style-guide.md +7 -0
  21. package/projects/docs-demo/package.json +10 -0
  22. package/projects/docs-demo/stego-project.json +9 -0
  23. package/projects/plague-demo/.markdownlint.json +4 -0
  24. package/projects/plague-demo/README.md +19 -0
  25. package/projects/plague-demo/dist/.gitkeep +0 -0
  26. package/projects/plague-demo/manuscript/100-the-commission.md +24 -0
  27. package/projects/plague-demo/manuscript/200-at-the-wards.md +38 -0
  28. package/projects/plague-demo/manuscript/300-the-hearing.md +38 -0
  29. package/projects/plague-demo/manuscript/400-the-final-account.md +30 -0
  30. package/projects/plague-demo/notes/style-guide.md +7 -0
  31. package/projects/plague-demo/package.json +10 -0
  32. package/projects/plague-demo/spine/characters.md +31 -0
  33. package/projects/plague-demo/spine/locations.md +33 -0
  34. package/projects/plague-demo/spine/sources.md +28 -0
  35. package/projects/plague-demo/stego-project.json +41 -0
  36. 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
+ }