syntaxai/tdd.md · main · public / images / goal-chain-fix.svg

goal-chain-fix.svg 85 lines · 5613 bytes raw
<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/&lt;slug&gt;.md, registered in ALL_GOALS, served at /goals/&lt;slug&gt;.</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/&lt;slug&gt;.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/&lt;slug&gt;</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/&lt;slug&gt;</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/&lt;slug&gt;.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/&lt;slug&gt;</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/&lt;slug&gt;</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/&lt;slug&gt;.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/&lt;slug&gt;</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/&lt;slug&gt;</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>