Manor is a fork of elie222/rakazo. Upstream keeps moving; Manor keeps its own
features and skin. The rule that keeps them from colliding: upstream flows into Manor
through merges — Manor never rebases on top of it, and deployed history is never rewritten.
Condensed to the milestones — each Manor node may cover several commits.
%%{init: {
"theme": "base",
"gitGraph": { "mainBranchName": "upstream/main", "showCommitLabel": true, "parallelCommits": false },
"themeVariables": {
"darkMode": true,
"background": "#1a1a1d",
"primaryColor": "#232327",
"primaryTextColor": "#ececee",
"lineColor": "#4a4a52",
"commitLabelColor": "#ececee",
"commitLabelBackground": "#131315",
"commitLabelFontSize": "12px",
"tagLabelColor": "#0d0d0e",
"tagLabelBackground": "#e65707",
"tagLabelBorder": "#e65707",
"git0": "#4a4a52",
"git1": "#e65707",
"git2": "#a855f7",
"gitBranchLabel0": "#ececee",
"gitBranchLabel1": "#0d0d0e",
"gitBranchLabel2": "#0d0d0e"
}
}}%%
gitGraph
commit id: "#101 narration fix (fork point)"
branch main
checkout main
commit id: "Manor skin & branding"
commit id: "Claude Pro/Max OAuth ← our contribution"
commit id: "Mobile app: Manor skin, TestFlight"
checkout "upstream/main"
commit id: "group chats"
checkout main
merge "upstream/main" id: "sync: adopt group chats" tag: "sync #1"
commit id: "CRM: data + API"
commit id: "CRM: home, pipeline, contacts"
checkout "upstream/main"
commit id: "#102 Supermemory · #144 connectors"
commit id: "#137 charts · #95 thinking · #106 OAuth (ours, landed)"
checkout main
merge "upstream/main" id: "sync: approvals, charts, memory" tag: "sync #2"
commit id: "Voice & call UX"
commit id: "Mobile: CRM, keyboard, stream fixes"
commit id: "4 Team Computer control fixes"
checkout "upstream/main"
commit id: "#147 conversational onboarding + MCP"
commit id: "#150 CRLF · #152 reasoning · #156 E2E"
checkout main
merge "upstream/main" id: "sync: onboarding, MCP, connectors" tag: "sync #3 · today"
commit id: "CRM agent tools: chat & voice work the board" type: HIGHLIGHT
The repeatable loop — the full playbook lives in docs/upstream-sync.md.
%%{init: { "theme": "base", "themeVariables": {
"darkMode": true,
"background": "#1a1a1d",
"primaryColor": "#232327",
"primaryTextColor": "#ececee",
"primaryBorderColor": "#34343b",
"lineColor": "#6e6975",
"secondaryColor": "#1f1b29",
"tertiaryColor": "#161619",
"fontSize": "14px"
}}}%%
flowchart LR
A["git fetch upstream"] --> B["What's new?
git log HEAD..upstream/main
git cherry spots backports"]
B --> C["Preview conflicts
git merge-tree --write-tree
(touches nothing)"]
C --> D["Branch
sync/upstream-<date>"]
D --> E["Merge, never rebase
resolve by policy table"]
E --> F["Verify locally
fix-signature greps · tests
typecheck · prisma validate"]
F --> G["Land on main"]
G --> H["Checkpoint with Aki,
then deploy to VPS"]
style A fill:#232327,stroke:#34343b
style H fill:#2a1608,stroke:#e65707,color:#ececee
Rebasing rewrites deployed history and re-fights every conflict. Merging keeps both stories true and lets rerere remember each resolution.
New features get their own modules (like crm.ts, crm-tools.ts) with one-line touchpoints in upstream files — so the next sync conflicts on a line, not a feature.
Main only advances after local verification passes. Prod only advances after a checkpoint. Rollback is redeploying the previous commit.
Our contributions returning home → ours is canonical. Backport duplicates → take upstream. Manor identity (README, skin, onboarding look) → keep Manor, weave in upstream's logic. High-care files (router, schema) → hand-union.