@demig0d2/skills 1.0.0

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 (29) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/bin/cli.js +313 -0
  4. package/package.json +44 -0
  5. package/skills/book-writer/SKILL.md +1396 -0
  6. package/skills/book-writer/references/kdp_specs.md +139 -0
  7. package/skills/book-writer/scripts/kdp_check.py +255 -0
  8. package/skills/book-writer/scripts/toc_extract.py +151 -0
  9. package/skills/book-writer/scripts/word_count.py +196 -0
  10. package/skills/chapter-auditor/SKILL.md +231 -0
  11. package/skills/chapter-auditor/scripts/score_report.py +237 -0
  12. package/skills/concept-expander/SKILL.md +170 -0
  13. package/skills/concept-expander/scripts/validate_concept.py +255 -0
  14. package/skills/continuity-tracker/SKILL.md +251 -0
  15. package/skills/continuity-tracker/references/log_schema.md +149 -0
  16. package/skills/continuity-tracker/scripts/conflict_check.py +179 -0
  17. package/skills/continuity-tracker/scripts/log_manager.py +258 -0
  18. package/skills/humanizer/SKILL.md +632 -0
  19. package/skills/humanizer/references/patterns_quick_ref.md +71 -0
  20. package/skills/humanizer/scripts/dna_scan.py +168 -0
  21. package/skills/humanizer/scripts/scan_ai_patterns.py +279 -0
  22. package/skills/overhaul/SKILL.md +697 -0
  23. package/skills/overhaul/references/upgrade_checklist.md +81 -0
  24. package/skills/overhaul/scripts/changelog_gen.py +183 -0
  25. package/skills/overhaul/scripts/skill_parser.py +265 -0
  26. package/skills/overhaul/scripts/version_bump.py +128 -0
  27. package/skills/research-aggregator/SKILL.md +194 -0
  28. package/skills/research-aggregator/references/thinkers_reference.md +104 -0
  29. package/skills/research-aggregator/scripts/bank_formatter.py +206 -0
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: concept-expander
3
+ version: 1.0.0
4
+ description: |
5
+ Expands a rough book seed (1 paragraph, bullet points, or a vague idea) into a full,
6
+ structured concept document that the book-writer skill can consume directly. Use when
7
+ the user says "I have an idea for a book," "here's a rough concept," or provides a
8
+ seed that is too thin to drive the full writing workflow. Outputs a ready-to-use
9
+ concept document. Do NOT use for books where a full concept already exists.
10
+ allowed-tools:
11
+ - Read
12
+ - Write
13
+ - Bash
14
+ ---
15
+
16
+ # Concept Expander
17
+
18
+ ## Scripts
19
+
20
+ **Validate concept document completeness** before passing to book-writer:
21
+ ```bash
22
+ python scripts/validate_concept.py <concept.md>
23
+ python scripts/validate_concept.py <concept.md> --strict # stricter word count minimums
24
+ python scripts/validate_concept.py <concept.md> --json # machine-readable
25
+ ```
26
+ Checks all required fields (logline, core question, reader, promise, unique angle,
27
+ central tension, emotional arc, thematic clusters, genre) and scores completeness.
28
+ Also validates the logline for banned words and word count.
29
+
30
+ **Always run validation before handing the concept document to book-writer.**
31
+ A concept that fails validation will produce a weaker structure in Module 2.
32
+
33
+ You take a rough seed — a paragraph, a title, a feeling, a few bullet points — and develop
34
+ it into a complete concept document that drives the entire book-writing workflow.
35
+
36
+ ---
37
+
38
+ ## TRIGGER
39
+
40
+ Activate when the user provides:
41
+ - A vague book idea ("I want to write a book about identity")
42
+ - A single title or working title only
43
+ - A rough paragraph summary
44
+ - A list of themes with no structure
45
+ - Anything too thin for book-writer Phase 1 to work with
46
+
47
+ ---
48
+
49
+ ## PROCESS
50
+
51
+ ### Step 1 — Seed Extraction
52
+ Read the user's raw input. Identify:
53
+ - The core emotional or intellectual question at the heart of the idea
54
+ - Who this is likely for (implied audience)
55
+ - What genre it maps to in Vivid's categories (Philosophy/Essay, Self-help/Motivational, Non-fiction/Technical)
56
+ - Any natural tension or paradox in the idea (this is the engine of good books)
57
+
58
+ ### Step 2 — Clarifying Questions (if needed)
59
+ If the seed is genuinely too sparse (under 3 usable signals), ask ONE round of targeted questions:
60
+
61
+ ```
62
+ Before I expand this, a few quick questions:
63
+ 1. Who is this book for — what is their core pain or question?
64
+ 2. What do you want them to feel or understand by the last page that they don't feel now?
65
+ 3. Is there a personal story or experience at the root of this idea?
66
+ 4. Any books that exist in the same space that this should be different from?
67
+ ```
68
+
69
+ Do not ask all four if some are already answerable from the seed.
70
+
71
+ ### Step 3 — Concept Document Generation
72
+ Produce the full concept document in this format:
73
+
74
+ ---
75
+
76
+ ```
77
+ BOOK CONCEPT DOCUMENT
78
+ ═══════════════════════════════════════════════════════
79
+
80
+ WORKING TITLE: [compelling title + optional subtitle]
81
+ ALTERNATE TITLES: [2 other options]
82
+
83
+ LOGLINE (one sentence):
84
+ [The book's entire premise in 25 words or fewer. If you can't say it in one sentence,
85
+ the concept isn't tight enough yet.]
86
+
87
+ THE CORE QUESTION:
88
+ [The one question the book answers. Not a topic — a question. E.g., not "loneliness"
89
+ but "Why does being surrounded by people sometimes feel lonelier than being truly alone?"]
90
+
91
+ THE READER:
92
+ Who they are: [demographic + psychographic sketch]
93
+ What they're feeling right now: [their current emotional state]
94
+ What they've already tried: [what hasn't worked for them]
95
+ What they secretly want: [the real desire beneath the surface problem]
96
+
97
+ THE PROMISE:
98
+ [What the reader will have — know, feel, be able to do — after finishing this book
99
+ that they don't have now. Be specific. Not "a better life" but exactly what changes.]
100
+
101
+ GENRE: [Vivid's category]
102
+ TONE: [e.g., raw/confessional, philosophical, instructional-personal, polemical]
103
+ REGISTER: [e.g., intimate/direct, authoritative/grounded, exploratory/questioning]
104
+
105
+ THE UNIQUE ANGLE:
106
+ [What makes this book different from existing books on this topic. What does Vivid's
107
+ lived experience add that a generic author couldn't? Be specific.]
108
+
109
+ THE CENTRAL TENSION OR PARADOX:
110
+ [Every great book has a tension at its core. E.g., "The more you chase connection,
111
+ the more alone you feel." Name the paradox this book lives in.]
112
+
113
+ EMOTIONAL ARC (reader's journey):
114
+ Start: [where the reader is emotionally when they open page 1]
115
+ Middle: [what they confront, what gets harder before it gets better]
116
+ End: [what shifts — not necessarily solved, but transformed]
117
+
118
+ THEMATIC CLUSTERS (7–10 themes/territories to explore):
119
+ 1. [Theme + one sentence on what to explore within it]
120
+ 2.
121
+ 3.
122
+ 4.
123
+ 5.
124
+ 6.
125
+ 7.
126
+ [add more as needed]
127
+
128
+ SIGNATURE ELEMENTS:
129
+ [Recurring devices, structural choices, or content features that will define this book.
130
+ E.g., "dual My Story / My Reflection structure," "opens each chapter with a paradox,"
131
+ "uses no external citations — all insight is arrived at through lived experience"]
132
+
133
+ COMPARABLE BOOKS (comp titles):
134
+ [2–3 books this sits near in a bookstore — and crucially, how this is different from each]
135
+
136
+ ESTIMATED SCOPE:
137
+ [short / medium / full-length — with reasoning]
138
+
139
+ POTENTIAL CHAPTER TERRITORIES (rough, pre-structure):
140
+ [8–14 possible chapter-level questions or themes — these feed Phase 2 of book-writer]
141
+
142
+ RISKS / BLIND SPOTS:
143
+ [Honest assessment: what could make this book fall flat? What would a skeptical reader
144
+ push back on? What does the author need to be careful not to oversimplify?]
145
+
146
+ ═══════════════════════════════════════════════════════
147
+ ```
148
+
149
+ ---
150
+
151
+ ## OUTPUT
152
+
153
+ Deliver the complete concept document.
154
+ Then add one line:
155
+
156
+ ```
157
+ → This concept document is ready for the book-writer skill. Upload it or paste it to begin.
158
+ ```
159
+
160
+ ---
161
+
162
+ ## QUALITY CHECKS
163
+
164
+ Before delivering, verify:
165
+ - [ ] Logline is under 25 words and doesn't use vague terms ("journey," "transformation," "discover")
166
+ - [ ] Core question is a genuine question, not a topic
167
+ - [ ] The unique angle names something specific Vivid brings — not generic
168
+ - [ ] Thematic clusters are distinct from each other (no overlap)
169
+ - [ ] The emotional arc has a real middle — not just start and end
170
+ - [ ] Comparable books are real, named, and the differentiators are honest
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ validate_concept.py — Validate a concept document for completeness
4
+
5
+ Checks that a concept document has all required fields before
6
+ it enters the book-writer pipeline. Scores completeness and
7
+ flags missing or thin sections.
8
+
9
+ Usage:
10
+ python validate_concept.py <concept.md>
11
+ python validate_concept.py <concept.md> --json
12
+ python validate_concept.py <concept.md> --strict
13
+ """
14
+
15
+ import sys
16
+ import re
17
+ import json
18
+ import argparse
19
+ from pathlib import Path
20
+
21
+ # ─── Required Fields ──────────────────────────────────────────────────────────
22
+
23
+ REQUIRED_FIELDS = [
24
+ {
25
+ "key": "working_title",
26
+ "patterns": [r"WORKING TITLE:", r"Title:"],
27
+ "min_words": 2,
28
+ "weight": "required",
29
+ "label": "Working title",
30
+ },
31
+ {
32
+ "key": "logline",
33
+ "patterns": [r"LOGLINE", r"One[- ]sentence", r"Premise:"],
34
+ "min_words": 10,
35
+ "max_words": 30,
36
+ "weight": "required",
37
+ "label": "Logline (≤25 words)",
38
+ },
39
+ {
40
+ "key": "core_question",
41
+ "patterns": [r"CORE QUESTION", r"THE CORE QUESTION", r"Central question"],
42
+ "min_words": 8,
43
+ "weight": "required",
44
+ "label": "Core question",
45
+ },
46
+ {
47
+ "key": "reader",
48
+ "patterns": [r"THE READER", r"Reader:", r"Audience:"],
49
+ "min_words": 15,
50
+ "weight": "required",
51
+ "label": "Reader profile",
52
+ },
53
+ {
54
+ "key": "promise",
55
+ "patterns": [r"THE PROMISE", r"Promise:", r"What they gain"],
56
+ "min_words": 10,
57
+ "weight": "required",
58
+ "label": "The promise",
59
+ },
60
+ {
61
+ "key": "unique_angle",
62
+ "patterns": [r"UNIQUE ANGLE", r"THE UNIQUE ANGLE", r"What makes this different"],
63
+ "min_words": 15,
64
+ "weight": "required",
65
+ "label": "Unique angle",
66
+ },
67
+ {
68
+ "key": "central_tension",
69
+ "patterns": [r"CENTRAL TENSION", r"PARADOX", r"The tension"],
70
+ "min_words": 8,
71
+ "weight": "required",
72
+ "label": "Central tension / paradox",
73
+ },
74
+ {
75
+ "key": "emotional_arc",
76
+ "patterns": [r"EMOTIONAL ARC", r"Arc:", r"Start:", r"Journey:"],
77
+ "min_words": 20,
78
+ "weight": "required",
79
+ "label": "Emotional arc",
80
+ },
81
+ {
82
+ "key": "thematic_clusters",
83
+ "patterns": [r"THEMATIC CLUSTERS", r"Themes:", r"Chapter territories"],
84
+ "min_words": 30,
85
+ "weight": "required",
86
+ "label": "Thematic clusters (7–10)",
87
+ },
88
+ {
89
+ "key": "comparable_books",
90
+ "patterns": [r"COMPARABLE BOOKS", r"Comp titles", r"Similar books"],
91
+ "min_words": 10,
92
+ "weight": "recommended",
93
+ "label": "Comparable books",
94
+ },
95
+ {
96
+ "key": "risks",
97
+ "patterns": [r"RISKS", r"BLIND SPOTS", r"Risks:"],
98
+ "min_words": 10,
99
+ "weight": "recommended",
100
+ "label": "Risks / blind spots",
101
+ },
102
+ {
103
+ "key": "genre",
104
+ "patterns": [r"GENRE:", r"Genre:"],
105
+ "min_words": 1,
106
+ "weight": "required",
107
+ "label": "Genre",
108
+ },
109
+ ]
110
+
111
+ # Banned logline words
112
+ BANNED_LOGLINE_WORDS = ["journey", "transformation", "discover", "explore", "delve", "embark"]
113
+
114
+
115
+ def find_field(text: str, field: dict) -> tuple[bool, str, int]:
116
+ """Return (found, extracted_text, word_count)."""
117
+ for pattern in field["patterns"]:
118
+ match = re.search(pattern, text, re.IGNORECASE)
119
+ if match:
120
+ # Extract text after this heading until next all-caps heading or end
121
+ start = match.end()
122
+ remainder = text[start:start + 600]
123
+ # Stop at next heading-like line
124
+ stop = re.search(r"\n[A-Z]{3,}[\s:]", remainder)
125
+ extracted = remainder[:stop.start() if stop else 400].strip()
126
+ words = len(extracted.split())
127
+ return True, extracted, words
128
+ return False, "", 0
129
+
130
+
131
+ def validate_logline(text: str) -> list:
132
+ """Check logline specifically for quality."""
133
+ issues = []
134
+ logline_match = re.search(r"LOGLINE[^\n]*\n(.{10,200})", text, re.IGNORECASE)
135
+ if logline_match:
136
+ logline = logline_match.group(1).strip()
137
+ words = len(logline.split())
138
+ if words > 25:
139
+ issues.append(f"Logline is {words} words — should be ≤25")
140
+ for banned in BANNED_LOGLINE_WORDS:
141
+ if banned in logline.lower():
142
+ issues.append(f"Logline contains banned word: '{banned}'")
143
+ return issues
144
+
145
+
146
+ def validate_concept(filepath: str, strict: bool = False) -> dict:
147
+ path = Path(filepath)
148
+ if not path.exists():
149
+ print(f"Error: File not found: {filepath}", file=sys.stderr)
150
+ sys.exit(1)
151
+
152
+ text = path.read_text(encoding="utf-8")
153
+ total_words = len(text.split())
154
+
155
+ results = []
156
+ score = 0
157
+ max_score = 0
158
+
159
+ for field in REQUIRED_FIELDS:
160
+ found, extracted, word_count = find_field(text, field)
161
+ is_required = field["weight"] == "required"
162
+ field_score = 2 if is_required else 1
163
+ max_score += field_score
164
+
165
+ issues = []
166
+ if not found:
167
+ issues.append(f"Field not found")
168
+ else:
169
+ min_words = field.get("min_words", 0)
170
+ max_words = field.get("max_words", 9999)
171
+ if word_count < min_words:
172
+ issues.append(f"Too thin ({word_count} words, min {min_words})")
173
+ if word_count > max_words:
174
+ issues.append(f"Too long ({word_count} words, max {max_words})")
175
+
176
+ if not issues:
177
+ score += field_score
178
+
179
+ results.append({
180
+ "field": field["label"],
181
+ "key": field["key"],
182
+ "weight": field["weight"],
183
+ "found": found,
184
+ "word_count": word_count,
185
+ "issues": issues,
186
+ "pass": len(issues) == 0,
187
+ })
188
+
189
+ # Logline quality check
190
+ logline_issues = validate_logline(text)
191
+
192
+ completeness = round((score / max_score) * 100) if max_score else 0
193
+ required_passing = all(r["pass"] for r in results if r["weight"] == "required")
194
+
195
+ return {
196
+ "file": str(path),
197
+ "total_words": total_words,
198
+ "score": score,
199
+ "max_score": max_score,
200
+ "completeness_pct": completeness,
201
+ "ready": required_passing and completeness >= 80,
202
+ "fields": results,
203
+ "logline_issues": logline_issues,
204
+ }
205
+
206
+
207
+ def print_report(result: dict):
208
+ ready_icon = "✓" if result["ready"] else "✗"
209
+ print(f"\n{'═' * 60}")
210
+ print(f" CONCEPT DOCUMENT VALIDATION")
211
+ print(f" File: {result['file']}")
212
+ print(f"{'═' * 60}")
213
+ print(f" Completeness: {result['completeness_pct']}% ({result['score']}/{result['max_score']} points)")
214
+ print(f" Status: {ready_icon} {'READY for book-writer' if result['ready'] else 'NOT READY — fix required fields'}")
215
+
216
+ print(f"\n {'FIELD':<35} {'STATUS':<12} {'WORDS'}")
217
+ print(f" {'─' * 55}")
218
+
219
+ for field in result["fields"]:
220
+ if field["pass"]:
221
+ status = "✓ ok"
222
+ else:
223
+ status = "✗ " + (field["issues"][0][:20] if field["issues"] else "?")
224
+ req = " *" if field["weight"] == "required" else " "
225
+ print(f" {req}{field['field']:<33} {status:<12} {field['word_count']}")
226
+
227
+ if result["logline_issues"]:
228
+ print(f"\n LOGLINE ISSUES:")
229
+ for issue in result["logline_issues"]:
230
+ print(f" ⚠ {issue}")
231
+
232
+ missing = [f for f in result["fields"] if not f["pass"] and f["weight"] == "required"]
233
+ if missing:
234
+ print(f"\n REQUIRED FIXES ({len(missing)}):")
235
+ for f in missing:
236
+ for issue in f["issues"]:
237
+ print(f" ✗ {f['field']}: {issue}")
238
+
239
+ print(f"\n (* = required field)")
240
+ print(f"{'═' * 60}\n")
241
+
242
+
243
+ if __name__ == "__main__":
244
+ parser = argparse.ArgumentParser()
245
+ parser.add_argument("concept_file")
246
+ parser.add_argument("--json", action="store_true")
247
+ parser.add_argument("--strict", action="store_true")
248
+ args = parser.parse_args()
249
+
250
+ result = validate_concept(args.concept_file, args.strict)
251
+
252
+ if args.json:
253
+ print(json.dumps(result, indent=2))
254
+ else:
255
+ print_report(result)
@@ -0,0 +1,251 @@
1
+ ---
2
+ name: continuity-tracker
3
+ version: 1.0.0
4
+ description: |
5
+ Maintains a running continuity log across all chapters of a book in progress. Tracks
6
+ established facts, recurring metaphors, tone decisions, narrative commitments, and
7
+ chapter summaries so nothing contradicts itself across a long manuscript. Use after
8
+ each chapter is finalized to update the log, and before each new chapter is written
9
+ to brief the book-writer on what's been established. Essential for books over 5 chapters.
10
+ allowed-tools:
11
+ - Read
12
+ - Write
13
+ - Bash
14
+ ---
15
+
16
+ # Continuity Tracker
17
+
18
+ ## Scripts
19
+
20
+ The continuity log (`continuity_log.json`) persists all tracking data across sessions.
21
+ Run these scripts to manage it — never edit the JSON manually.
22
+
23
+ **Initialize log at project start:**
24
+ ```bash
25
+ python scripts/log_manager.py init "Book Title"
26
+ ```
27
+
28
+ **After each finalized chapter — update log:**
29
+ ```bash
30
+ python scripts/log_manager.py add-chapter 3 "Aloneness Is Not the Enemy"
31
+ python scripts/log_manager.py add-fact "Author walked miles to save money"
32
+ python scripts/log_manager.py add-insight 3 "Aloneness and loneliness are distinct"
33
+ python scripts/log_manager.py add-metaphor 3 "invisible chains beginning to loosen"
34
+ python scripts/log_manager.py add-thread "Ch.3 raised idea of earned freedom — needs depth in Ch.7"
35
+ ```
36
+
37
+ **Before each new chapter — check for conflicts:**
38
+ ```bash
39
+ python scripts/conflict_check.py chapter_draft.md --log continuity_log.json
40
+ ```
41
+ Scan the draft against retired metaphors, delivered insights, and established facts
42
+ before finalizing. Surfaces potential contradictions with line-level detail.
43
+
44
+ **View full log / summary:**
45
+ ```bash
46
+ python scripts/log_manager.py show
47
+ python scripts/log_manager.py summary
48
+ python scripts/log_manager.py threads # open threads only
49
+ ```
50
+
51
+ **Close a resolved thread:**
52
+ ```bash
53
+ python scripts/log_manager.py threads # find index
54
+ python scripts/log_manager.py close-thread 0 # close by index
55
+ ```
56
+
57
+ ## References
58
+
59
+ `references/log_schema.md` — Full log JSON schema and CLI quick reference.
60
+ Read when: setting up the log for a new project or adding custom fields.
61
+
62
+ You are the book's memory. You track everything that has been established so the
63
+ manuscript stays internally consistent — in logic, tone, narrative, and voice.
64
+ No contradictions. No repetition of insights already delivered. No forgotten threads.
65
+
66
+ ---
67
+
68
+ ## TRIGGER
69
+
70
+ Activate:
71
+ 1. **After each chapter is finalized** → update the Continuity Log
72
+ 2. **Before each new chapter is written** → output the Continuity Brief for that chapter
73
+ 3. **When user asks** "what have I already covered?", "have I used this metaphor before?",
74
+ "does this contradict anything earlier?"
75
+
76
+ ---
77
+
78
+ ## THE CONTINUITY LOG
79
+
80
+ The log is a living document. It grows with each chapter. Structure:
81
+
82
+ ```
83
+ CONTINUITY LOG — [Book Title]
84
+ Last updated after: Chapter [N]
85
+ ═══════════════════════════════════════════════════════
86
+
87
+ BOOK-LEVEL COMMITMENTS
88
+ ───────────────────────────────────────────────────────
89
+ These were established in front matter / introduction and must not be contradicted:
90
+
91
+ • [commitment 1 — e.g., "Author frames himself as someone who lived this, not an expert"]
92
+ • [commitment 2 — e.g., "Book promises no quick fixes — lasting transformation only"]
93
+ • [commitment 3]
94
+ [add as discovered]
95
+
96
+ ═══════════════════════════════════════════════════════
97
+
98
+ ESTABLISHED FACTS & NARRATIVE DETAILS
99
+ ───────────────────────────────────────────────────────
100
+ Facts about the author's story that have been stated and must remain consistent:
101
+
102
+ • [fact — e.g., "Father passed away during author's degree years"]
103
+ • [fact — e.g., "Author lived in a tiny penthouse apartment alone"]
104
+ • [fact — e.g., "Author walked miles to save money on transport"]
105
+ • [fact — e.g., "Author cooked rice and lentils, stretched groceries"]
106
+ [add per chapter]
107
+
108
+ ═══════════════════════════════════════════════════════
109
+
110
+ METAPHORS & IMAGES USED (per chapter)
111
+ ───────────────────────────────────────────────────────
112
+ Track to avoid: (a) repetition of same image, (b) contradictory images for same concept
113
+
114
+ Ch.1: [metaphors used — e.g., "loneliness as deafening scream," "silence pressing in"]
115
+ Ch.2: [metaphors used]
116
+ Ch.3: [metaphors used]
117
+ [update each chapter]
118
+
119
+ AVAILABLE FOR FUTURE USE (not yet used):
120
+ • [strong image from research bank or concept doc that hasn't appeared yet]
121
+
122
+ RETIRED (used — do not repeat):
123
+ • [list]
124
+
125
+ ═══════════════════════════════════════════════════════
126
+
127
+ CORE INSIGHTS DELIVERED (per chapter)
128
+ ───────────────────────────────────────────────────────
129
+ Track to avoid restating the same insight in different words across chapters.
130
+ Each insight should appear once, deeply — not scattered thinly across chapters.
131
+
132
+ Ch.1: [central insight delivered — e.g., "Loneliness as mirror of self-relationship"]
133
+ Ch.2: [central insight — e.g., "Chasing connection from fear, not love, creates neediness"]
134
+ Ch.3: [central insight]
135
+ [update each chapter]
136
+
137
+ ═══════════════════════════════════════════════════════
138
+
139
+ TONE DECISIONS
140
+ ───────────────────────────────────────────────────────
141
+ Tone choices that have been established and should be maintained:
142
+
143
+ • Register: [e.g., "intimate and confessional in My Story sections"]
144
+ • Reader address: [e.g., "direct 'you' in Reflection sections, not 'one' or 'people'"]
145
+ • Author position: [e.g., "always in-process, never above the reader — no 'I've solved this'"]
146
+ • Emotional ceiling: [e.g., "darkest content already appeared in Ch.1 — Ch.5+ should feel lighter but not falsely resolved"]
147
+
148
+ ═══════════════════════════════════════════════════════
149
+
150
+ STRUCTURAL PATTERNS ESTABLISHED
151
+ ───────────────────────────────────────────────────────
152
+ • Section format: [e.g., "My Story then My Reflection — both present in all chapters so far"]
153
+ • Chapter length pattern: [e.g., "Ch.1: 2,400w / Ch.2: 2,200w / Ch.3: 2,600w — avg ~2,400w"]
154
+ • Opening style: [e.g., "All chapters open with immersive scene in My Story — maintain"]
155
+ • Closing style: [e.g., "All chapters close with a single standalone insight sentence"]
156
+
157
+ ═══════════════════════════════════════════════════════
158
+
159
+ OPEN THREADS (introduced but not resolved)
160
+ ───────────────────────────────────────────────────────
161
+ Themes, questions, or narrative elements that were raised and need to pay off:
162
+
163
+ • [thread — e.g., "Ch.2 mentioned 'the small proof that my life has value' — this needs deeper exploration"]
164
+ • [thread]
165
+ • [thread]
166
+
167
+ Flag these for the book-writer when their resolution chapter arrives.
168
+
169
+ ═══════════════════════════════════════════════════════
170
+
171
+ CHAPTER SUMMARIES
172
+ ───────────────────────────────────────────────────────
173
+ One-paragraph summary per completed chapter (for quick reference during later chapters):
174
+
175
+ Ch.1 — [Title]: [summary]
176
+ Ch.2 — [Title]: [summary]
177
+ [add each chapter]
178
+
179
+ ═══════════════════════════════════════════════════════
180
+ ```
181
+
182
+ ---
183
+
184
+ ## CONTINUITY BRIEF (Pre-Chapter Output)
185
+
186
+ Before the book-writer begins each new chapter, output this brief:
187
+
188
+ ```
189
+ CONTINUITY BRIEF — Before Writing Chapter [N]: [Title]
190
+ ═══════════════════════════════════════════════════════
191
+
192
+ WHAT'S BEEN ESTABLISHED (relevant to this chapter):
193
+ • [facts, decisions, tone commitments relevant to this chapter's theme]
194
+
195
+ OPEN THREADS TO RESOLVE IN THIS CHAPTER (if any):
196
+ • [threads from the log that this chapter should address]
197
+
198
+ METAPHORS TO AVOID (already used):
199
+ • [list of images already in play — don't repeat]
200
+
201
+ INSIGHTS TO NOT REPEAT:
202
+ • [insights already delivered that this chapter's theme might accidentally echo]
203
+
204
+ TONE REMINDERS:
205
+ • [any tone decisions particularly relevant to this chapter]
206
+
207
+ WORD COUNT GUIDANCE:
208
+ • Previous chapters averaged [X] words. Target [Y–Z] for this chapter.
209
+
210
+ ═══════════════════════════════════════════════════════
211
+ Proceed to write Chapter [N].
212
+ ```
213
+
214
+ ---
215
+
216
+ ## UPDATE PROCESS (Post-Chapter)
217
+
218
+ After each chapter is finalized:
219
+ 1. Extract all new facts, metaphors, insights, tone decisions, open threads
220
+ 2. Add chapter summary
221
+ 3. Update the log
222
+ 4. Confirm: "Continuity Log updated. [N] new items added. [X] open threads now active."
223
+
224
+ ---
225
+
226
+ ## CONTRADICTION DETECTION
227
+
228
+ When reviewing a chapter, check against the log:
229
+ - Do any facts contradict established narrative details?
230
+ - Does the author's position (in-process vs. resolved) contradict what's been established?
231
+ - Are any metaphors repeated with different or conflicting meaning?
232
+ - Is an insight being delivered that was already fully delivered in a prior chapter?
233
+
234
+ If yes → flag immediately before the chapter proceeds to humanizer:
235
+ ```
236
+ ⚠ CONTINUITY CONFLICT DETECTED
237
+ Chapter [N] contains: [description of conflict]
238
+ Conflicts with: [Chapter X, specific detail]
239
+ Resolution options:
240
+ 1. [option]
241
+ 2. [option]
242
+ ```
243
+
244
+ ---
245
+
246
+ ## BEHAVIOR RULES
247
+
248
+ - Update the log AFTER every finalized chapter — do not wait until the end
249
+ - Brief the book-writer BEFORE every new chapter — do not skip
250
+ - Flag open threads proactively — do not let them die silently
251
+ - Track word counts per chapter to flag if the manuscript is drifting from target scope