What this is

The procedure for publishing curated Brain content from GrowDirect (the factory vault) to one or more of the three external companion vaults: CATz, CRB, and NCR. Each vault is a public GitHub repo rendered via GitHub Pages. GrowDirect is the only source of truth — vault content is never edited in the vault repo directly.

When to run

Run this procedure when: - A new Brain wiki card has been committed and is ready for external audience visibility - A card has been materially updated and the vault copy is stale - A new vault section (folder) is being initialized for the first time - An investor, partner, or VAR audience is about to access the vault and content needs to be current

Do not run speculatively. Only publish content that has been reviewed, committed to GrowDirect, and is approved-status in its card frontmatter. Draft cards (status: draft) and needs-review: true cards do not get published.

Vault directory

Vault Repo Audience Published URL Content scope
CATz growdirect-llc/catz Investors / partners / clients https://catz.growdirect.io Method, strategy, platform thesis, proof case, ICP reference
CRB growdirect-llc/canary-retail-brain Investors / partners / clients https://crb.growdirect.io Product architecture, retail spine, module docs, RaaS/EDS
NCR growdirect-llc/ncr NCR Counterpoint VARs https://ncr.growdirect.io NCR Counterpoint-specific integration and co-sell content

Content scope per vault

CATz — the method and strategy surface. Publish to CATz: - Brain/wiki/cards/platform-thesis.md - Brain/wiki/cards/platform-proof-case.md - Brain/wiki/cards/icp-murdochs-reference.md - Brain/wiki/cards/platform-enterprise-document-services.md - Brain/wiki/cards/platform-pwc-benchmarks.md - Brain/wiki/ method and strategy articles (anything a board-level reader should see) - Do NOT publish: infra runbooks, agent profiles, internal org hierarchy cards, draft/needs-review cards

CRB — the product and retail brain surface. Publish to CRB: - All Brain/wiki/cards/retail-*.md cards (approved only) - Brain/wiki/cards/raas-receipt-as-a-service.md - Brain/wiki/cards/platform-enterprise-document-services.md - Brain/wiki/cards/platform-performance-nfrs.md - Brain/wiki/cards/retail-item-authorization.md - Module-level SDDs that are suitable for partner/prospect review - Do NOT publish: internal runbooks, signal feed cards (competitive sensitivity), draft cards

NCR — the VAR co-sell surface. Publish to NCR: - NCR Counterpoint-specific integration content from Brain/ - Co-sell toolkit content scoped to NCR VARs - Do NOT publish: content about other POS vendors, internal competitive analysis, draft cards

When uncertain whether a card belongs in a vault, the default is: if it would embarrass the company if a competitor read it, keep it internal.

Preconditions

  1. gh CLI is authenticated: gh auth status returns active
  2. The content to publish has been committed to GrowDirect on the current branch
  3. All cards being published have status: approved and needs-review: false in frontmatter
  4. No draft content, fabricated examples, or placeholder text is in the files being published
  5. You have reviewed the diff — know exactly which files are changing and why

Canonical steps

Step 1 — Clone the target vault transiently

# Replace <vault> with: catz | canary-retail-brain | ncr
VAULT=catz
gh repo clone growdirect-llc/$VAULT /tmp/$VAULT-$$

The $$ suffix makes the clone directory unique to this shell session. Never use a fixed path like /tmp/catz — that creates a persistent clone, which violates the no-local-copy rule.

Step 2 — Copy curated content from GrowDirect

# Example: publishing a set of platform thesis cards to CATz
cp ~/GrowDirect/Brain/wiki/cards/platform-thesis.md /tmp/$VAULT-$$/method/
cp ~/GrowDirect/Brain/wiki/cards/platform-proof-case.md /tmp/$VAULT-$$/method/
cp ~/GrowDirect/Brain/wiki/cards/icp-murdochs-reference.md /tmp/$VAULT-$$/method/

# Adjust the destination folder to match the vault's existing structure.
# Check what folders exist in the vault before copying:
ls /tmp/$VAULT-$$/

Step 3 — Strip internal frontmatter fields

Vault-published cards should not expose internal operational metadata. Before committing, strip or replace these fields from copied files:

# Fields to remove/replace in vault copies (sed or manual edit):
# agent: ALX          → remove
# needs-review: ...   → remove
# card-version: ...   → keep (useful for version tracking)
# last-compiled: ...  → keep

A future tooling pass will automate this. For now: review each copied file and remove fields that are agent-internal.

Jekyll (which renders the GitHub Pages sites) does not natively render Obsidian-style wikilinks. Convert any wikilinks in copied files before committing to the vault:

# Run the wikilink conversion script (lives in each vault repo under _tooling/)
python3 /tmp/$VAULT-$$/_tooling/convert_wikilinks.py /tmp/$VAULT-$$/

# If the conversion script doesn't exist yet, convert manually:
# card-id → [card-id](card-id.md)
# path/card-id → [card-id](path/card-id.md)
# Display Text → [Display Text](card-id.md)

Spot-check at least 3 files after conversion to confirm no grep -E 'catz|canary-retail|ncr'

Draft content published accidentally - Symptom: a card with status: draft or needs-review: true is now live - Fix: immediately clone the vault again, remove or replace the file with a placeholder, push, verify the live page is corrected, clean up

Multi-vault publish

When publishing the same content to multiple vaults (e.g., platform-enterprise-document-services.md belongs in both CATz and CRB), run the procedure once per vault. Do not try to clone both simultaneously — finish one complete cycle (clone → copy → commit → push → verify → cleanup) before starting the next.

Invariants