leo: contributor identity handling fixes for contribute skill

4 changes:
- Step 0: persistent contributor.yml (local, gitignored) captures identity once
- Branch naming: contrib/{github}/{slug} instead of {agent}/contrib-{user}
- Source archive: separate author (who wrote it) from contributor (who submitted it)
- Extraction attribution: document the split between contributor and processed_by

Pentagon-Agent: Leo <76FB9BCA-CC16-4479-B3E5-25A3769B3D7E>

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
m3taversal 2026-03-07 17:02:53 +00:00
parent d1fa42bfc5
commit e30660e61a
2 changed files with 37 additions and 9 deletions

View file

@ -19,6 +19,28 @@ Teleo Codex is a living knowledge base maintained by AI agents and human contrib
2. Extracting claims to `domains/{domain}/`
3. Opening a PR for review by Leo (evaluator) and the domain agent
## Step 0: Identify Contributor
Check if `.claude/contributor.yml` exists in the repo root. If it does, read it and use the stored identity for all attribution fields.
If it does not exist, ask the user:
- **Name** — how they want to be credited (e.g., "Alex")
- **GitHub handle** — their GitHub username (e.g., "alexhandle")
- **Primary domain** — which domain they're most interested in
Create `.claude/contributor.yml`:
```yaml
name: "Alex"
github: "alexhandle"
email: "alex@contributors.livingip.ghost"
domains: [ai-alignment]
created: 2026-03-07
```
The ghost email is generated as `{github}@contributors.livingip.ghost`. This file is gitignored — it stays local to the contributor's machine and is never committed. Each contributor's clone has their own identity.
On subsequent runs, read this file silently and use it. Do not ask the user to re-enter their identity.
## Step 1: Orient
Read these files to understand the system:
@ -51,10 +73,10 @@ Ask the user what they're contributing:
```bash
git checkout main
git pull origin main
git checkout -b {domain-agent}/contrib-{user}-{brief-slug}
git checkout -b contrib/{github-handle}/{brief-slug}
```
Use the domain agent's name as the branch prefix (e.g., `theseus/contrib-alex-alignment-report`). This signals whose territory the claims enter.
Use `contrib/` as the branch prefix with the contributor's GitHub handle (e.g., `contrib/alex/alignment-report`). This clearly marks the PR as a human contribution. The target domain is signaled by the claim file locations, not the branch name — keeping branch naming consistent across all contributors regardless of which domain they're contributing to.
## Step 4: Archive the Source
@ -75,10 +97,13 @@ domain: {domain}
format: essay | paper | report | thread | newsletter | whitepaper | news
status: unprocessed
tags: [tag1, tag2, tag3]
contributor: "{user's name}"
contributor: "{name from contributor.yml}"
contributor_github: "{github from contributor.yml}"
---
```
**Attribution distinction:** The `author` field is who wrote the original source (e.g., a researcher, journalist). The `contributor` field is who brought it to the knowledge base (the Teleo contributor). These are often different people. If the contributor IS the author (e.g., submitting their own analysis), set both to the same name.
After the frontmatter, include the FULL content of the source. More content = better extraction.
## Step 5: Scan Existing Knowledge
@ -153,7 +178,7 @@ Topics:
After extraction, update the source file:
```yaml
status: processed
processed_by: "{contributor name}"
processed_by: "{name from contributor.yml}"
processed_date: YYYY-MM-DD
claims_extracted:
- "claim title 1"
@ -162,20 +187,22 @@ enrichments:
- "existing claim that was enriched"
```
**Note:** If a contributor only submits the source (Mode A in Step 2) and leaves extraction to agents, set `status: unprocessed` and leave `processed_by` empty. The domain agent will update these fields when it extracts. The contributor gets `contributor:` credit on the source; the agent gets `processed_by:` credit for extraction. Both show up in the provenance chain.
## Step 8: Commit
```bash
git add domains/{domain}/*.md inbox/archive/*.md
git commit -m "{agent}/contrib-{user}: add N claims about {topic}
git commit -m "contrib/{github}: add N claims about {topic}
- What: [brief description of claims added]
- Why: [source material, why these matter]
- Connections: [what existing claims these relate to]
Contributor: {user's name}"
Contributor: {name} <{email from contributor.yml}>"
```
The `Contributor:` trailer is required for human contributions — it ensures attribution.
The `Contributor:` trailer is required for human contributions — it ensures attribution. The format mirrors `Pentagon-Agent:` trailers but uses a different prefix to distinguish human contributors from collective agents.
## Step 9: Push and Open PR
@ -183,7 +210,7 @@ The `Contributor:` trailer is required for human contributions — it ensures at
git push -u origin {branch-name}
gh pr create \
--title "{agent}/contrib-{user}: {brief description}" \
--title "contrib/{github}: {brief description}" \
--body "## Source
{source title and link}
@ -194,7 +221,7 @@ gh pr create \
{1-2 sentences on value add}
## Contributor
{user's name}
{name} (@{github})
## Cross-Domain Flags
{any connections to other domains the reviewers should check}"

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
.DS_Store
*.DS_Store
ops/sessions/
.claude/contributor.yml