GRACE Documentation Separation: Protocol vs. Implementation
The Core Insight
Grace works best when its documentation is physically separated from STRATT (the reference implementation). We learned this through building a standalone docs site that clearly distinguishes four architectural layers: protocol specification (abstract), reference implementation (STRATT, concrete), intelligence layer (Grace agent), and collaboration platform (Choco HQ).The Problem We Faced
Initially, Grace Protocol documentation lived in MERIDIAN (the STRATT docs site). This caused three issues:- Conceptual confusion: Users reading STRATT docs couldn’t tell if they were learning about Grace (the protocol) or STRATT (the implementation). Example: “Is SPEC-01 part of the spec or part of STRATT?”
- Version coupling: Changes to Grace docs forced MERIDIAN rebuilds. Changes to STRATT forced Grace readers to wade through implementation details irrelevant to protocol understanding.
- Deployment inflexibility: STRATT’s docs site couldn’t deploy independently from Grace docs. They were permanently entangled.
What We Did
We created a standalone grace-hq/docs site using Astro + Starlight with these boundaries:| Content | Goes where | Audience |
|---|---|---|
| GRACE Protocol (SPEC-01–05) | grace.devarno.cloud | Architects, integrators |
| Grace agent orchestration (8 agents) | grace.devarno.cloud | Developers, operators |
| STRATT units, CLI commands | stratt.dev | Unit contributors |
/protocol/overview/). Cross-workspace links use absolute HTTPS URLs (https://stratt.dev/cli/overview/). MERIDIAN’s sidebar redirects protocol readers to grace.devarno.cloud instead of maintaining duplicate content.
The Payoff
- Independent deployment: Grace docs can ship without touching STRATT or vice versa
- Audience clarity: Protocol readers see only specs; implementation readers see only units
- Redaction safety: Sensitive data (budgets, internal state) filtered from public Grace docs before publishing, not retrofitted into public site
- Version honesty: Grace v1.0 and STRATT v2.0 coexist without synthetic version coupling
Technical Pattern: Taskset-Gated Workflow
Each documentation migration step was gated behind a build verification:- T1 (Scaffold): Build must succeed before writing content
- T2 (Protocol): Link migration must validate before T3 begins
- T3 (Assistant): Redaction audit must pass before building
- T4 (Architecture): Spec-to-docs accuracy checked before T5
- T5 (Cleanup): MERIDIAN must build with zero broken links
- T6 (Audit): Zero stubs, zero broken links across both sites before “done”
Applicable Beyond Grace
This pattern works for any multi-repo architecture where:- Repository A (protocol) is separate from Repository B (implementation)
- Both have public-facing documentation
- You want independent deployment cadences
- Cross-refs must survive DNS/URL changes
- Identify conceptual boundary between repos (protocol vs. impl)
- Create separate doc sites (Astro + Starlight or equivalent)
- Establish link normalization: internal =
/, cross-repo =https:// - Gate each migration step with a passing build
- Audit for redaction before publishing (remove budgets, secrets, personal data)
- Verify 100% of cross-site links with curl/HEAD requests
Lessons for Next Time
- Start with redaction mapping: Before writing a single doc, list what’s sensitive. Filter as you go, not after.
- Build-driven gates are non-negotiable: If a docs migration step doesn’t build cleanly, don’t proceed. No “we’ll fix it later.”
- Absolute URLs for external cross-refs: Using relative paths for cross-workspace links creates future lock-in. Use HTTPS from the start.
- Sidebar is not shared: Don’t try to keep sidebars in sync across repos. Each site has its own sidebar; external links are one-way.
- Content audit is part of the workflow: Don’t add content audit as an afterthought. Make it a formal taskset gate.
Related: Cross-Workspace Link Strategy (companion learning documenting the specific link patterns), Taskset-Gated Documentation Workflow (companion learning documenting the six-taskset process).