syntaxai/tdd.md · main · public / images / goal-chain-fix.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 680" width="1200" height="680">
<rect width="1200" height="680" fill="#0a0a0a"/>
<!-- Header -->
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="80" y="46" font-size="20" font-weight="600" fill="#909090">The fix — /goals as a first-class registry, mirroring /blog and /sama</text>
<text x="80" y="92" font-size="32" font-weight="700" fill="#e8e8e8">Same shape. Same pattern. No new abstractions.</text>
<text x="80" y="120" font-size="14" fill="#7a7a7a">Each /goal lands as goals/<slug>.md, registered in ALL_GOALS, served at /goals/<slug>.</text>
</g>
<!-- Three parallel registries side by side -->
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<!-- /blog column -->
<rect x="80" y="156" width="340" height="380" fill="#1a1a1a" stroke="#2a2a2a" stroke-width="1.5" rx="6"/>
<text x="100" y="186" font-size="18" font-weight="600" fill="#7ec77e">/blog (existing)</text>
<text x="100" y="212" font-size="13" fill="#8a8a8a">— the empirical chain's narrative —</text>
<text x="100" y="252" font-size="13" fill="#909090" letter-spacing="1">FILES</text>
<text x="100" y="276" font-size="13" fill="#c8c8c8">content/blog/<slug>.md</text>
<text x="100" y="312" font-size="13" fill="#909090" letter-spacing="1">REGISTRY</text>
<text x="100" y="336" font-size="13" fill="#c8c8c8">src/a31_blog.ts</text>
<text x="100" y="354" font-size="12" fill="#8a8a8a">ALL_POSTS: BlogEntry[]</text>
<text x="100" y="392" font-size="13" fill="#909090" letter-spacing="1">ROUTES</text>
<text x="100" y="416" font-size="13" fill="#c8c8c8">/blog</text>
<text x="100" y="434" font-size="13" fill="#c8c8c8">/blog/<slug></text>
<text x="100" y="472" font-size="13" fill="#909090" letter-spacing="1">IN SITEMAP</text>
<text x="100" y="496" font-size="13" fill="#7ec77e">✓ ALL_POSTS → /blog/<slug></text>
<text x="100" y="514" font-size="12" fill="#8a8a8a">with lastmod = post.date</text>
<!-- /sama column -->
<rect x="430" y="156" width="340" height="380" fill="#1a1a1a" stroke="#2a2a2a" stroke-width="1.5" rx="6"/>
<text x="450" y="186" font-size="18" font-weight="600" fill="#4a8a8a">/sama (existing)</text>
<text x="450" y="212" font-size="13" fill="#8a8a8a">— the discipline pages —</text>
<text x="450" y="252" font-size="13" fill="#909090" letter-spacing="1">FILES</text>
<text x="450" y="276" font-size="13" fill="#c8c8c8">content/sama/<slug>.md</text>
<text x="450" y="312" font-size="13" fill="#909090" letter-spacing="1">REGISTRY</text>
<text x="450" y="336" font-size="13" fill="#c8c8c8">src/a31_sama.ts</text>
<text x="450" y="354" font-size="12" fill="#8a8a8a">ALL_SAMA: SamaDiscipline[]</text>
<text x="450" y="392" font-size="13" fill="#909090" letter-spacing="1">ROUTES</text>
<text x="450" y="416" font-size="13" fill="#c8c8c8">/sama</text>
<text x="450" y="434" font-size="13" fill="#c8c8c8">/sama/<slug></text>
<text x="450" y="472" font-size="13" fill="#909090" letter-spacing="1">IN SITEMAP</text>
<text x="450" y="496" font-size="13" fill="#7ec77e">✓ ALL_SAMA → /sama/<slug></text>
<!-- /goals column (NEW, highlighted) -->
<rect x="780" y="156" width="340" height="380" fill="#1a1a1a" stroke="#c89a3a" stroke-width="2" rx="6"/>
<text x="800" y="186" font-size="18" font-weight="600" fill="#c89a3a">/goals (NEW)</text>
<text x="800" y="212" font-size="13" fill="#8a8a8a">— what produced everything —</text>
<text x="800" y="252" font-size="13" fill="#909090" letter-spacing="1">FILES</text>
<text x="800" y="276" font-size="13" fill="#c8c8c8">goals/<slug>.md</text>
<text x="800" y="294" font-size="12" fill="#8a8a8a">+ YAML frontmatter</text>
<text x="800" y="320" font-size="13" fill="#909090" letter-spacing="1">REGISTRY</text>
<text x="800" y="344" font-size="13" fill="#c8c8c8">src/a31_goals.ts</text>
<text x="800" y="362" font-size="12" fill="#8a8a8a">ALL_GOALS: GoalEntry[]</text>
<text x="800" y="392" font-size="13" fill="#909090" letter-spacing="1">ROUTES</text>
<text x="800" y="416" font-size="13" fill="#c8c8c8">/goals</text>
<text x="800" y="434" font-size="13" fill="#c8c8c8">/goals/<slug></text>
<text x="800" y="472" font-size="13" fill="#909090" letter-spacing="1">IN SITEMAP</text>
<text x="800" y="496" font-size="13" fill="#7ec77e">✓ ALL_GOALS → /goals/<slug></text>
<text x="800" y="514" font-size="12" fill="#8a8a8a">merge_sha for git-SHA lookup</text>
</g>
<!-- Bottom callout -->
<rect x="80" y="556" width="1040" height="84" fill="#101a10" stroke="#1f3f1f" stroke-width="1" rx="6"/>
<g font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace">
<text x="100" y="586" font-size="16" font-weight="600" fill="#7ec77e">Why this is mechanically SAMA v2:</text>
<text x="100" y="608" font-size="14" fill="#c8c8c8">Identical shape to /blog and /sama — same Layer 0 (registry), Layer 1 (frontmatter parser), Layer 3 (handler + routes).</text>
<text x="100" y="626" font-size="14" fill="#c8c8c8">No new abstractions. No new conventions. The empirical chain absorbs the /goal artifact without growing.</text>
</g>
<!-- Watermark -->
<text x="1120" y="664" text-anchor="end" font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace" font-size="12" fill="#5a5a5a">https://tdd.md</text>
</svg>