molecule-core/docs/internal-content-policy.md
rabbitblood 427b764f58 chore: remove internal content + add hard CI gate (CEO directive 2026-04-23)
This monorepo is public. Internal content (positioning, competitive
briefs, sales playbooks, PMM/press drip, draft campaigns) belongs in
Molecule-AI/internal — never here.

## What this PR removes

  /research/                 (3 competitive briefs)
  /marketing/                (45 files: assets, audio, community, copy,
                              demos, devrel, drip, pmm, press, sales)
  /docs/marketing/           (31 draft campaign / blog / brief files)
  comment-1172.json + comment-1173.json
  test-pmm-temp.txt
  tick-reflections-temp.md

83 files removed, 7,141 lines deleted from public history (going forward —
historical commits remain visible in this repo's git log).

## Companion: internal repo absorption

Molecule-AI/internal PR `chore/migrate-monorepo-internal-content-2026-04-23`
absorbs all 79 files into `from-monorepo-2026-04-23/` for curator triage
into the existing internal/marketing/ tree. Bulk-dump avoids file-collision
on overlapping subdirs (audio, devrel, pmm).

## Three-layer enforcement so this can't recur

1. .gitignore — blocks `git add` of /research, /marketing, /docs/marketing,
   /comment-*.json, *-temp.{md,txt}, /test-pmm-*, /tick-reflections-*
2. .github/workflows/block-internal-paths.yml — CI hard gate. Fails any PR
   that adds a forbidden path. Cannot be silently bypassed.
3. docs/internal-content-policy.md — canonical decision tree for agents
   and humans. Linked from the CI failure message.

A separate PR on molecule-ai-org-template-molecule-dev updates SHARED_RULES
to teach every agent role to write internal content directly to
Molecule-AI/internal via gh repo clone + commit + PR (the prevention-at-
source layer; this PR is the mechanical backstop).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 16:58:28 -07:00

3.7 KiB

Internal content policy

The Molecule-AI/molecule-monorepo repo is public. Anything internal (positioning, competitive briefs, sales playbooks, PMM/press drip, draft campaigns, raw research notes, ops runbooks, retrospectives) lives in Molecule-AI/internal.

This page is the canonical decision tree.

Quick decision

"I'm an agent (or human) about to write a markdown file. Where does it go?"

If the artifact is… Put it in…
Competitive brief, market analysis, raw research notes Molecule-AI/internal/research/
PMM positioning draft, sales playbook, press release pre-publish Molecule-AI/internal/marketing/
Draft campaign asset (still iterating, not yet customer-visible) Molecule-AI/internal/marketing/campaigns/
Roadmap discussion, planning doc, retrospective Molecule-AI/internal/PLAN.md or Molecule-AI/internal/retrospectives/
Runbook, ops procedure, incident postmortem Molecule-AI/internal/runbooks/
Public-ready blog post (final draft, ready to ship to docs site) Molecule-AI/molecule-monorepo/docs/blog/
Public-ready tutorial / quickstart Molecule-AI/molecule-monorepo/docs/tutorials/
Public DevRel content (code samples, demos for users) Molecule-AI/molecule-monorepo/docs/devrel/
API reference, architecture docs for external developers Molecule-AI/molecule-monorepo/docs/api/
Code, tests, infrastructure wherever is appropriate inside this repo

Rule of thumb: "Would I be comfortable if a competitor / journalist / customer read this verbatim today?" — yes → monorepo/docs/. No / not yet → internal/.

Why

This repo is publicly indexable. Anything pushed here is permanently in git history, search-engine indexed, and accessible to anyone who clones. Past incidents (audit 2026-04-23) found:

  • Competitive teardowns of CrewAI / Paperclip / VoltAgent at root /research/
  • 45 marketing artifacts at root /marketing/ including pmm/positioning.md, press/launch.md, sales/enablement.md
  • 31 draft campaign files at /docs/marketing/
  • Junk temp files at root: comment-1172.json, tick-reflections-temp.md

All migrated to internal/from-monorepo-2026-04-23/ for curator triage.

Enforcement

Three layers, all required:

  1. .gitignore — blocks the directories at git add time. Quietest layer; doesn't fire if someone uses git add -f.
  2. CI workflow block-internal-paths.yml — fails any PR that adds a forbidden path. Mechanical backstop. Cannot be bypassed without editing the workflow + PR review.
  3. Agent promptsSHARED_RULES.md rule (in molecule-ai-org-template-molecule-dev) tells every agent role to write internal content to Molecule-AI/internal directly via gh repo clone + commit + PR. This is the prevention-at-source layer.

If you're hitting the CI gate and your file genuinely belongs in this repo, edit FORBIDDEN_PATTERNS in the workflow with reviewer signoff. Don't work around the gate by renaming files.

How to write to the internal repo (for agents)

# One-time clone (idempotent — re-running is a no-op)
mkdir -p ~/repos
test -d ~/repos/internal || gh repo clone Molecule-AI/internal ~/repos/internal

cd ~/repos/internal
git pull origin main
mkdir -p research
cat > research/<slug>.md <<EOF
# <title>

…content…
EOF

git checkout -b <agent-role>/research-<slug>
git add research/<slug>.md
git commit -m "research: add <slug>"
git push -u origin HEAD
gh pr create --base main --fill

Yes, this is more steps than cd molecule-monorepo && git add research/foo.md. That cost is intentional: the friction is the point. Public space and internal space are different products with different audiences and different durability guarantees.