R77.F1 Contract — colibri-hero.js Greek URLs

Behavioral contract

  1. Every hero-ring anchor href resolves to a live GitHub Pages URL under BASEURL=/AMS. All 15 letters (α β γ δ ε ζ η θ ι κ λ μ ν ξ π) return HTTP 200 on Pages after redeploy.
  2. Single source of truth — URL paths live in a new CONCEPT_PATHS const keyed by Greek letter. Adding or moving a concept doc requires editing exactly one line in this file.
  3. String /concepts/ does not appear anywhere in docs/assets/js/colibri-hero.js (not in code, not in comments). Grep-enforceable.
  4. All other hero behavior is preserved: 15 entries in the CONCEPTS array, axis labels, tooltip markup, polar placement math, keyboard nav (Arrow/Home/End/Escape), per-letter enter/float animation delays, aria-label format, role="tooltip", encodeURIComponent not needed (paths are plain ASCII segments).
  5. BASEURL resolution unchanged — still reads document.querySelector('meta[name="cb-baseurl"]')?.content || ''.
  6. Index-dir URLs end with trailing slash — α → 2-plugin/, ν → 4-additions/ (directory indexes). Jekyll serves these via index.html. Other letters end with .html.
  7. No external dependencies added. File stays a self-contained IIFE with zero imports.
  8. No change to docs/index.md, _config.yml, CSS, other JS, or any concept doc.

Test plan

  • Post-edit grep grep -n "/concepts/" docs/assets/js/colibri-hero.js returns zero hits.
  • Post-edit grep for CONCEPT_PATHS shows 15 keys (α β γ δ ε ζ η θ ι κ λ μ ν ξ π).
  • npm run build && npm run lint && npm test — all three green (1084/1085 expected; known startup — subprocess smoke flake tolerated).
  • Manual post-merge curl of 3 sample URLs by Sigma (out of this task’s scope).

Back to top

Colibri — documentation-first MCP runtime. Apache 2.0 + Commons Clause.

This site uses Just the Docs, a documentation theme for Jekyll.