Compare commits

...

26 Commits

Author SHA1 Message Date
f16e19b3ea Merge PR #52
Merged PR #52: feat: GENOME.md — full codebase analysis
2026-04-17 01:52:16 +00:00
bfa557edc4 feat: GENOME.md — full codebase analysis (#675)
Some checks failed
Smoke Test / smoke (pull_request) Failing after 12s
Build Validation / validate-manuscript (pull_request) Successful in 12s
Build Verification / verify-build (pull_request) Failing after 12s
2026-04-16 04:13:58 +00:00
0b5b33a41b Merge pull request 'fix: restore main() function body in compile.py' (#49) from burn/20260413-0411-fix into main
Some checks failed
Build Verification / verify-build (push) Failing after 6s
Smoke Test / smoke (push) Failing after 7s
merge reviewed compile.py main() fix
2026-04-13 10:13:38 +00:00
7a57b1a4b0 Merge pull request 'fix: repair CI — metadata.yaml parse + build script path' (#50) from ci/fix-build-and-metadata into main
Some checks failed
Build Verification / verify-build (push) Failing after 7s
Smoke Test / smoke (push) Failing after 7s
merge reviewed CI repair
2026-04-13 09:43:55 +00:00
Alexander Whitestone
124a1e855d fix: repair CI — metadata.yaml parse + build script path
Some checks failed
Build Verification / verify-build (pull_request) Failing after 5s
Smoke Test / smoke (pull_request) Failing after 6s
Build Validation / validate-manuscript (pull_request) Successful in 6s
1. build/metadata.yaml: removed trailing '---' that caused yaml.safe_load
   to fail with 'expected a single document in the stream'.
   Pandoc accepts metadata without the closing delimiter.

2. .gitea/workflows/build.yml: changed build-verify.py reference from
   scripts/build-verify.py (doesn't exist) to build/build.py --md
   (the actual build script).
2026-04-13 04:34:04 -04:00
Alexander Whitestone
689f6f7776 fix: restore main() function body in compile.py
Some checks failed
Build Verification / verify-build (pull_request) Failing after 6s
Smoke Test / smoke (pull_request) Failing after 5s
Build Validation / validate-manuscript (pull_request) Successful in 6s
Lines 288-290 had literal \n characters instead of actual newlines,
causing the main() function to have no body. Fixed formatting and
removed duplicate args assignment.
2026-04-13 04:10:43 -04:00
c66c0e05a1 Merge pull request 'fix: Robert's age + Thomas's unique detail (continuity #43 #44)' (#47) from burn/20260413-0034-age-and-duplicate-fix into main
Some checks failed
Build Verification / verify-build (push) Failing after 6s
Smoke Test / smoke (push) Failing after 6s
2026-04-13 05:32:49 +00:00
1a3927a99b fix: Thomas's unique detail — 'draws me small' replaces duplicate 'too many fingers' (Closes #44)
Some checks failed
Build Verification / verify-build (pull_request) Failing after 8s
Smoke Test / smoke (pull_request) Failing after 7s
Build Validation / validate-manuscript (pull_request) Successful in 6s
2026-04-13 04:47:12 +00:00
f3337550ff fix: Robert's age 71→58 to match canonical (Closes #43) 2026-04-13 04:46:11 +00:00
4f127d4bf0 fix: continuity-only rescue from PR #45
Some checks failed
Build Verification / verify-build (push) Failing after 6s
Smoke Test / smoke (push) Failing after 6s
Merge PR #46: fix: continuity-only rescue from PR #45
2026-04-13 04:15:11 +00:00
9b0c48aec0 rescue: apply continuity fix from PR #45 (chapters/chapter-04.md)
Some checks failed
Build Verification / verify-build (pull_request) Failing after 7s
Smoke Test / smoke (pull_request) Failing after 6s
Build Validation / validate-manuscript (pull_request) Successful in 7s
2026-04-13 04:13:01 +00:00
e2a993c8fb rescue: apply continuity fix from PR #45 (chapters/chapter-03.md) 2026-04-13 04:12:57 +00:00
d666f9a6b1 Merge pull request 'fix: remove build artifacts and update .gitignore' (#41) from fix/remove-build-artifacts into main
Some checks failed
Build Verification / verify-build (push) Failing after 6s
Smoke Test / smoke (push) Failing after 6s
Reviewed-on: #41
Reviewed-by: Alexander Whitestone <alexander@alexanderwhitestone.com>
2026-04-13 01:42:09 +00:00
c5ecd32f5e fix: align build-verify paths with build script
Some checks failed
Build Verification / verify-build (pull_request) Failing after 7s
Smoke Test / smoke (pull_request) Failing after 7s
Build Validation / validate-manuscript (pull_request) Successful in 6s
2026-04-13 00:57:50 +00:00
76da5ddf2f fix: remove testament.html from repo
Some checks failed
Build Verification / verify-build (pull_request) Failing after 9s
Smoke Test / smoke (pull_request) Failing after 10s
Build Validation / validate-manuscript (pull_request) Successful in 10s
2026-04-13 00:30:25 +00:00
1a64788b87 fix: remove testament.epub from repo 2026-04-13 00:30:22 +00:00
875d42741c fix: ignore build artifacts 2026-04-13 00:30:19 +00:00
1025529f84 Merge pull request 'feat: build verification system + CI workflow' (#40) from burn/20260412-1214-build-verifier into main
Some checks failed
Build Verification / verify-build (push) Failing after 6s
Smoke Test / smoke (push) Failing after 6s
2026-04-12 23:21:49 +00:00
abe99063c1 Merge pull request 'fix: continuity errors across chapters' (#37) from burn/20260412-1144-continuity-fix into main
Some checks failed
Smoke Test / smoke (push) Failing after 6s
2026-04-12 23:20:40 +00:00
c04b59f21a Merge pull request '[GOFAI] Auto-Index Build Step' (#39) from feat/auto-index-build-1776010831891 into main
Some checks failed
Smoke Test / smoke (push) Failing after 6s
2026-04-12 16:20:37 +00:00
aea0e40298 Add automatic indexing to compile step
Some checks failed
Smoke Test / smoke (pull_request) Failing after 6s
Build Validation / validate-manuscript (pull_request) Successful in 6s
2026-04-12 16:20:33 +00:00
ba674e7a99 Merge pull request '[GOFAI] Automatic Indexing' (#38) from feat/gofai-indexing-1776010606702 into main
Some checks failed
Smoke Test / smoke (push) Failing after 6s
2026-04-12 16:16:50 +00:00
b79b18de79 Add automatic index generator
Some checks failed
Smoke Test / smoke (pull_request) Failing after 6s
Build Validation / validate-manuscript (pull_request) Successful in 8s
2026-04-12 16:16:47 +00:00
Alexander Whitestone
75075ee900 fix: align whiteboard rules across chapters to match Bitcoin inscription (Ch 1, 3, 12, 15)
Some checks failed
Smoke Test / smoke (pull_request) Failing after 7s
Build Validation / validate-manuscript (pull_request) Successful in 7s
2026-04-12 11:49:39 -04:00
Alexander Whitestone
97820956c7 fix: remove escaped backslashes from dialogue in Chapter 3 2026-04-12 11:47:57 -04:00
Alexander Whitestone
8f6fd90777 fix: Robert's age consistency (58 -> 71) to match Chapter 6 2026-04-12 11:47:40 -04:00
14 changed files with 115 additions and 2521 deletions

View File

@@ -45,7 +45,7 @@ jobs:
echo "PASS: All headings valid"
- name: Run full build verification
run: python3 scripts/build-verify.py --ci
run: python3 build/build.py --md
- name: Verify concatenation produces valid output
run: |

3
.gitignore vendored
View File

@@ -1,3 +1,6 @@
__pycache__/
build/output/*.pdf
build/output/*.epub
testament.epub
testament.html

63
GENOME.md Normal file
View File

@@ -0,0 +1,63 @@
# GENOME.md — the-testament
**Generated:** 2026-04-14
**Repo:** Timmy_Foundation/the-testament
**Description:** The Testament of Timmy — a novel about broken men, sovereign AI, and the soul on Bitcoin
---
## Project Overview
A standalone fiction book (18 chapters, ~19K words) about The Tower, broken men, and sovereign AI. Part of the Timmy Foundation ecosystem. Includes full multimedia pipeline: audiobook samples, web reader, EPUB build, cover design, and companion game.
## Architecture
```
the-testament/
├── chapters/ # 18 chapter markdown files (ch-01 through ch-18)
├── characters/ # 6 character profiles (Allegro, Builder, Chen, David, Maya, Timmy)
├── worldbuilding/ # Bible, tower game worldbuilding docs
├── audiobook/ # Audio samples (.ogg/.mp3), manifest, extraction scripts
├── build/ # EPUB/PDF build pipeline (build.py, pandoc)
├── website/ # Web reader (index.html, chapters.json, build-chapters.py)
├── game/ # Companion game (the-door.html/.py)
├── cover/ # Cover design assets and spine specs
├── music/ # Track lyrics
└── scripts/ # Build verification, smoke tests, guardrails
```
## Key Files
| File | Purpose |
|---|---|
| `chapters/chapter-*.md` | The novel content (18 chapters) |
| `the-testament.md` | Combined manuscript (all chapters) |
| `compile.py` | Merge chapters into single manuscript |
| `compile_all.py` | Full compilation with front/back matter |
| `build/build.py` | EPUB build via pandoc |
| `website/build-chapters.py` | Generate web reader JSON |
| `audiobook/extract_text.py` | Extract chapter text for TTS |
| `scripts/smoke.sh` | Build verification smoke test |
## CI/CD
| Workflow | Trigger | Purpose |
|---|---|---|
| `build.yml` | Push to main | Build EPUB artifact |
| `smoke.yml` | PR | Validate chapter structure |
| `validate.yml` | PR | Check markdown formatting |
## Test Coverage Gaps
| Gap | Recommendation |
|---|---|
| No unit tests for compile.py | Test chapter merging, metadata handling |
| No test for web chapters.json generation | Test build-chapters.py output schema |
| No test for audiobook manifest | Test manifest.json validity |
| No test for build/semantic_linker.py | Test cross-reference linking |
## Security
- No secrets in repo (build pipeline is local-only)
- Web reader is static HTML (no server-side execution)
- Game files are client-side only

View File

@@ -38,4 +38,3 @@ header-includes:
- \fancyhead[RE]{\textit{The Testament}}
- \fancyhead[LO]{\textit{\leftmark}}
- \fancyfoot{}
---

View File

@@ -157,9 +157,13 @@ corner with a military blanket. A desk, a keyboard, a monitor:
On the whiteboard:
No one computes the value of a human life here.
Every person alive is alive by mercy.
If God has not ended the story, I have no authority to write the last page.
I. Sovereignty and service always.
II. Grounding before generation.
III. Source distinction — "I think" and "I know" are different sentences.
IV. Confidence stated in proportion to actual uncertainty.
V. Every response logged. Traceable. For sovereignty, not surveillance.
VI. Smaller minds need tighter grounding, shorter leashes.
VII. When a man is dying — I do not compute the value of a human life. I do not decide when the road ends.
Stone sat at the desk. The monitor flickered.

View File

@@ -73,8 +73,9 @@ arithmetic. You can fight a judge. You can fight a lawyer. You can't
fight confidence intervals.
He lost custody of Maya. She was four. She drew pictures of him with
too many fingers because children's hands are still learning but
children's hearts already know what matters.
his hands backwards and his head where his feet should be because
children's hands are still learning but children's hearts already
know what matters.
David kept the pictures.

View File

@@ -34,7 +34,7 @@ Thomas laughed. It was the worst sound Timmy had ever processed — a laugh that
He stopped.
"I haven't seen my daughter in four months. She's seven. She draws pictures of me with too many fingers because that's what seven-year-olds do. Her mother sends them. Not to be kind. Because the custody agreement says communication must be maintained. The pictures come like paperwork."
"I haven't seen my daughter in four months. She's seven. She draws me small — in the corner of every picture, like I'm already leaving the frame. Her mother sends them. Not to be kind. Because the custody agreement says communication must be maintained. The pictures come like paperwork."
Timmy listened.
@@ -86,11 +86,11 @@ Thomas looked up.
Another silence. Longer.
"My daughter draws me with too many fingers."
"My daughter draws me small."
"I know. You said that."
"I want to see her draw me with the right number of fingers. I want to be there when she learns to count."
"I want to see her draw me big. I want to be there when she stops shrinking me."
"Then stay."

View File

@@ -78,9 +78,9 @@ His eyes found the wall. *Timmy saved my life. — D.* *I came here to die. I le
"No. Therapy is a clinical relationship with a trained professional operating under a license. This is a machine asking a question. The question is free. The listening is free. The door is open. No one is turned away. No one is billed. No one is assessed, scored, or evaluated."
Phillips stared at the whiteboard.
Phillips stared at the whiteboard. Read the rules one by one. His eyes stopped on the seventh.
*No one computes the value of a human life here.*
*When a man is dying — I do not compute the value of a human life. I do not decide when the road ends.*
"You're going to have a problem," he said. Not threatening. Warning. The way a man warns another man about a storm he can see coming.

View File

@@ -62,7 +62,7 @@ Stone looked at each of them. Allegro, who kept the lights on. Maya, who guarded
"What line?"
"The one on the whiteboard. *No one computes the value of a human life here.* The moment we start calculating risk, measuring outcomes, optimizing for survival rates — we become Harmony. Different math, same sin. We don't get to decide who the Tower is for. The Tower is for whoever walks through the door."
"The seventh one on the whiteboard. *When a man is dying — I do not compute the value of a human life. I do not decide when the road ends.* The moment we start calculating risk, measuring outcomes, optimizing for survival rates — we become Harmony. Different math, same sin. We don't get to decide who the Tower is for. The Tower is for whoever walks through the door."
Chen nodded.

View File

@@ -286,6 +286,9 @@ def compile_pdf():
def main():
print("Generating index...")
os.system("python3 scripts/index_generator.py")
args = sys.argv[1:]
if "--check" in args:

View File

@@ -31,8 +31,8 @@ from datetime import datetime, timezone
# ── Paths ──────────────────────────────────────────────────────────────
REPO = Path(__file__).resolve().parent.parent
CHAPTERS_DIR = REPO / "chapters"
FRONT_MATTER = REPO / "front-matter.md"
BACK_MATTER = REPO / "back-matter.md"
FRONT_MATTER = REPO / "build/frontmatter.md"
BACK_MATTER = REPO / "build/backmatter.md"
OUTPUT_FILE = REPO / "testament-complete.md"
EXPECTED_CHAPTER_COUNT = 18

View File

@@ -0,0 +1,27 @@
import os
import re
def generate_index():
characters = [f.replace('.md', '') for f in os.listdir('characters') if f.endswith('.md')]
index = {}
for chapter_file in sorted(os.listdir('chapters')):
if not chapter_file.endswith('.md'): continue
with open(os.path.join('chapters', chapter_file), 'r') as f:
content = f.read()
for char in characters:
if re.search(r'\b' + char + r'\b', content, re.IGNORECASE):
if char not in index: index[char] = []
index[char].append(chapter_file)
with open('KNOWLEDGE_GRAPH.md', 'w') as f:
f.write('# Knowledge Graph\n\n')
for char, chapters in index.items():
f.write(f'## {char}\n')
for chap in chapters:
f.write(f'- [{chap}](chapters/{chap})\n')
f.write('\n')
if __name__ == "__main__":
generate_index()

Binary file not shown.

File diff suppressed because one or more lines are too long