100 lines
2.4 KiB
Markdown
100 lines
2.4 KiB
Markdown
# 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.
|