# Projection Operations This repo is projected into AFFiNE manually for now. Canonical Gitea repo: ```text http://100.64.0.1:30087/virgil-admin/rta-mock-docs.git ``` Projected AFFiNE path: ```text Agent Workspace / projected-markdown / mock-rta-docs ``` ## What A Collaborator Does ```sh cd ~/Developer/Section0/rta-mock-docs git pull --ff-only # edit Markdown git add . git commit -m "Update docs" git push ``` ## What The Projection Operator Does The operator keeps a separate checkout so projection never depends on a collaborator's dirty working tree. Nice wrapper: ```sh /Users/virgil/Developer/rta/tmp/markdown-projection-gitea/collaborator-checkout/rta-mock-docs/scripts/project-rta-mock-docs.sh ``` It pulls the projector checkout, checks it is clean, and runs the AFFiNE projection command. Manual equivalent: ```sh git -C /Users/virgil/Developer/rta/tmp/markdown-projection-gitea/projector-checkout/rta-mock-docs pull --ff-only ``` Then from `home-lab-v7`: ```sh cd /Users/virgil/Developer/Virgil-Info/home-lab-v7 nix develop --command bash -lc 'scripts/ops/sync-obsidian-affine.rb \ --name rta-mock-docs \ --source /Users/virgil/Developer/rta/tmp/markdown-projection-gitea/projector-checkout/rta-mock-docs \ --username projection-bot \ --authentik-sub rta-projection-bot \ --affine-workspace "Agent Workspace" \ --affine-workspace-id 53ea0a0b-eca7-4887-8e31-f5b2a8ab7744 \ --affine-user-id ce42f50a-5367-4466-920b-7422c4e27de0 \ --affine-namespace projected-markdown/mock-rta-docs \ --include "**/*.md" \ --apply' ``` Expected healthy result currently includes five docs: ```text docs: 5 mark stale: 0 mode: one-way read-only AFFiNE docs ``` ## Push-To-Projection Automation Pushing to `main` can trigger sync, but it should be implemented as a small projection worker, not as a Gitea container hook. Preferred shape: ```text Gitea push webhook -> RTA projection worker endpoint -> pull projector checkout -> validate clean source -> run projection -> emit logs/receipt ``` This keeps Gitea as Git infrastructure and keeps projection policy in RTA. A server-side Git hook inside the Gitea container would be harder to observe, harder to recover, and too tightly coupled to the packaged app internals. ## Rule Of Thumb If the source repo changes, pull the projector checkout and run projection. If AFFiNE changes, treat it as a comment or sketch. Move durable edits back to Markdown before projecting again.