Multi-Surface Topology
Colibri lives on four surfaces simultaneously. Each serves a different purpose and each has a strict direction of truth. This document defines the contract between surfaces so that no two surfaces drift.
See also: colibri-system.md §5 for the short summary. This document is the long form.
1. The Four Surfaces
| # | Surface | Physical location | Purpose | Editable? |
|---|---|---|---|---|
| 1 | Repository | E:\AMS on disk, github.com/LastEld/AMS on cloud |
The authoritative source for all specs, docs, ADRs, skills, code | Only via worktree PRs |
| 2 | Worktrees | E:\AMS\.worktrees\claude\<task-slug> |
Per-task isolated editing copies, one branch each | Yes — this is where all editing happens |
| 3 | Obsidian Vault | C:\Users\Kamal\Documents\Obsidian Vault\Colibri\ |
Human reading + planning surface (graph, backlinks, daily notes) | Only in _vault/ subtree; never in mirrored areas |
| 4 | GitHub Pages | https://LastEld.github.io/AMS/ |
Public reading surface (Jekyll + just-the-docs remote theme) | Never directly — built from docs/ by CI |
2. Direction of Truth
Truth always flows away from the repository. The repo is authoritative; every other surface is a projection of it with additional write zones.
┌─────────────────┐
│ Repository │
│ (authoritative)│
└───┬──────┬──┬───┘
│ │ │
(build) │ │ │ (sync script)
▼ │ ▼
┌──────────┐ │ ┌────────────────┐
│ Pages │ │ │ Obsidian Vault │
│(read-only)│ │ │ (human reading)│
└──────────┘ │ └────────────────┘
│ ▲
│ │ (mirror, never back)
▼ │
┌──────────────────┐ │
│ Worktrees │───┘
│ (editable) │
└────────┬─────────┘
│ (PR)
▼
┌─────────────────┐
│ Repository │
└─────────────────┘
2.1 Worktrees → Repository
- A worktree is created from
origin/mainon a new branchfeature/<task-slug>. - Every edit, commit, and push happens inside the worktree.
- Merge back is always a PR reviewed and merged by the human.
- The main checkout (
E:\AMS) may never be edited by an agent directly. - When a PR is merged, the worktree becomes stale and should be removed with
git worktree remove.
2.2 Repository → Pages
- GitHub Pages builds every push to
main. - Source: everything under
docs/plusdocs/_config.yml,docs/_includes/, anddocs/assets/. - Theme:
just-the-docsas a remote theme. - Hero block and custom CSS/JS live in
docs/assets/css/custom.cssanddocs/assets/js/colibri-hero.js. - Pages is read-only from the agent’s point of view. Never scrape it for information; read the source under
docs/.
2.3 Repository → Obsidian Vault
- The
colibri-docs-syncskill mirrorsdocs/into the vault atC:\Users\Kamal\Documents\Obsidian Vault\Colibri\docs\. - Mirroring is one-way (repo → vault) and idempotent.
- The sync skill never deletes files the vault created in
_vault/(see §3). - Obsidian users read the mirrored area. Planning happens in the vault-only area.
3. Obsidian Vault Layout
The vault has two zones with different rules:
Obsidian Vault/Colibri/
├── docs/ ← MIRROR ZONE (repo → vault, repo is truth)
│ ├── index.md
│ ├── concepts/
│ ├── spec/
│ └── …
│
└── _vault/ ← PLANNING ZONE (vault-only, never committed to repo)
├── daily/ daily notes
├── rounds/ round planning scratch
├── meeting-notes/ ad hoc
├── sigma/ sigma orchestrator scratch
├── pm/ PM dispatch scratch
└── README.md vault bootstrap guide
Rule for the docs/ mirror zone: never edit a file here. If you want to change something, go to the repo, make the change in a worktree, PR it, let sync propagate.
Rule for the _vault/ planning zone: write whatever you want. This is the human’s scratchpad. It never gets committed to the repo. The sync skill will not touch it.
4. Sync Rules (full matrix)
| From → To | Allowed? | How | Frequency |
|---|---|---|---|
| Repo → Worktree | Yes | git worktree add |
Per task |
| Worktree → Repo | Yes | PR merge | Per task completion |
Repo → Obsidian docs/ |
Yes | colibri-docs-sync |
On demand / per round |
Obsidian docs/ → Repo |
No | — | Never |
| Repo → Pages | Yes | GitHub Actions Jekyll build | Per push to main |
| Pages → Repo | No | — | Never |
Obsidian _vault/ → Repo |
No | — | Never |
Repo → Obsidian _vault/ |
No | — | Never |
| Worktree → Obsidian | No | — | Worktrees are for PR only |
Any row marked No is a conflict-of-truth that would cause drift. Treat accidental violations as bugs.
5. File Placement Rules
When creating a new file, use this decision tree:
- Is it a spec, concept, ADR, guide, or tutorial? →
docs/in the repo. - Is it a skill definition? →
.agents/skills/<skill-name>/SKILL.mdin the repo. - Is it a per-task scratch plan for an agent? →
.agents/spawns/<round>/<task>.mdin the repo. - Is it the human’s daily planning note or meeting note? →
_vault/daily/in the Obsidian vault. - Is it round scratch that may or may not become a real doc? →
_vault/rounds/rNN-<theme>/in the vault. Promote todocs/in the next round if it proves useful. - Is it an asset (image, SVG, font)? →
docs/assets/(if served by Pages) orassets/(top-level, if used in-repo only).
6. What Gets Published to Pages
Every file under docs/ is potentially public. Before committing:
- Never put secrets in
docs/. - Never put personal information in
docs/. - Never put internal-only dispatch notes in
docs/— use_vault/or.agents/spawns/. - Jekyll excludes:
docs/_config.ymlcontrolsexclude:entries. If a file should exist in the repo but not on Pages, add it toexclude:.
Current exclude: patterns (R73 ground state):
exclude:
- vendor/
- node_modules/
- .agents/
- .worktrees/
- '*.tmp'
7. Round Boundaries Across Surfaces
When a round closes, the surfaces must be reconciled:
- Sigma seals the round in the repo (
docs/session-seal-sN.mdupdated). - PR merged by the human.
- Pages rebuilds automatically.
colibri-docs-syncruns to push the sealed state intoObsidian Vault/docs/.- Human updates
_vault/rounds/rNN-<theme>/summary.mdif they want a private round card. - Worktree for the round is removed with
git worktree remove— the branch stays until deleted from GitHub.
A round is not complete until all four surfaces reflect the same state of main.
8. Asset Inventory
| Path | Purpose | Surface |
|---|---|---|
docs/assets/images/colibri-logo.svg |
Custom hummingbird mark (hero) | Pages + repo |
docs/assets/css/custom.css |
Pages theme overrides, hero styles, Greek overlay | Pages |
docs/assets/js/colibri-hero.js |
Greek overlay interaction, pretext-powered tooltips | Pages |
assets/colibriv0.png |
Original hummingbird artwork (v0, untracked) | Repo only (not served) |
_vault/ assets |
Vault-local images, daily note attachments | Vault only |
The assets/colibriv0.png in the repo top-level is currently untracked (per git status at session start). It will be either committed into docs/assets/images/ (if used on Pages) or moved to _vault/ during R74.
9. Common Mistakes to Avoid
- Editing a file in the vault mirror zone — your edit will be silently overwritten on next sync. Always go through a worktree PR.
- Committing
_vault/files — the vault is not part of the repo. If you see_vault/in a git diff, that means the paths are wrong. - Editing
E:\AMS\docs\directly without a worktree — breaks the worktree rule in CLAUDE.md. - Trusting Pages for content — Pages is a projection. If a fact is wrong on Pages, it’s wrong in the repo too; fix the repo, not Pages.
- Syncing Obsidian back to the repo — the sync skill is one-way. Two-way sync is a bug.
10. Future Surfaces (not yet live)
These are mentioned in planning but are not part of R73:
- Linear or Jira mirror — deferred; task store is the repo + AMS.
- Discord or Slack bot — deferred to post-Phase 0.
- Public API documentation site — will live under Pages as a sub-tree when Phase 0 ships.
- Self-hosted runtime dashboard — Phase 2+.
Until they exist, there are four surfaces. Not five. Not six.
Part of the R73 unification corpus. Governed by colibri-system.md.