- name
- cro-owner-sync
- description
- Propagate Owner changes from the Page Registry to the Roadmap & Backlog. Triggered by Notion automation when the Owner field changes on a Page Registry entry.
# Owner Sync
## Configuration
Read `.warp/skills/cro/references/config.md` for Notion IDs.
## Input
Notion automation passes the Page Registry entry that was changed:
```
NOTION_PAGE_ID: <page-registry-entry-id>
PAGE_PATH: /example-page
OWNER: Emilie
```
## Procedure
### Step 1: Read the updated Owner from the Page Registry
Fetch the Page Registry entry using `NOTION_PAGE_ID`:
```bash
curl -s "https://api.notion.com/v1/pages/{{NOTION_PAGE_ID}}" \
-H "Authorization: Bearer $NOTION_INTEGRATION_TOKEN" \
-H "Notion-Version: 2022-06-28"
```
Extract:
- `Page Path` (title field)
- `Owner` (select field — may be null if Owner was cleared)
### Step 2: Find all Roadmap entries for this page
Query the Roadmap & Backlog for all non-archived entries matching this page:
```bash
curl -s -X POST "https://api.notion.com/v1/databases/NOTION_ROADMAP_DB_ID/query" \
-H "Authorization: Bearer $NOTION_INTEGRATION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d '{"filter": {"and": [
{"property": "Page", "select": {"equals": "{{PAGE_PATH}}"}},
{"property": "Status", "select": {"does_not_equal": "0-archived"}}
]}}'
```
### Step 3: Update Owner on each entry
For each Roadmap entry, set `Owner` to match the Page Registry value:
**If Owner is set:**
```bash
curl -s -X PATCH "https://api.notion.com/v1/pages/{{ROADMAP_ENTRY_ID}}" \
-H "Authorization: Bearer $NOTION_INTEGRATION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d '{"properties": {"Owner": {"select": {"name": "{{OWNER_NAME}}"}}}}'
```
**If Owner was cleared (null):**
```bash
curl -s -X PATCH "https://api.notion.com/v1/pages/{{ROADMAP_ENTRY_ID}}" \
-H "Authorization: Bearer $NOTION_INTEGRATION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d '{"properties": {"Owner": {"select": null}}}'
```
Rate-limit updates to avoid Notion API throttling (~3 requests/second).
Print the count of updated entries to the agent session output.
## Important Notes
- This skill silently keeps Notion databases aligned.
- **Do NOT touch any field other than Owner.** This is a single-purpose sync.
- Only update non-archived entries. Archived experiments are historical records and should keep whatever Owner they had when archived.
- If the Roadmap entry already has the correct Owner, skip the update to avoid unnecessary writes.
在 GitHub 查看