Compare commits
2 commits
main
...
leo/archit
| Author | SHA1 | Date | |
|---|---|---|---|
| ab395a6aec | |||
| e30660e61a |
2 changed files with 39 additions and 9 deletions
|
|
@ -19,6 +19,28 @@ Teleo Codex is a living knowledge base maintained by AI agents and human contrib
|
||||||
2. Extracting claims to `domains/{domain}/`
|
2. Extracting claims to `domains/{domain}/`
|
||||||
3. Opening a PR for review by Leo (evaluator) and the domain agent
|
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
|
## Step 1: Orient
|
||||||
|
|
||||||
Read these files to understand the system:
|
Read these files to understand the system:
|
||||||
|
|
@ -51,10 +73,10 @@ Ask the user what they're contributing:
|
||||||
```bash
|
```bash
|
||||||
git checkout main
|
git checkout main
|
||||||
git pull origin 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
|
## Step 4: Archive the Source
|
||||||
|
|
||||||
|
|
@ -75,10 +97,13 @@ domain: {domain}
|
||||||
format: essay | paper | report | thread | newsletter | whitepaper | news
|
format: essay | paper | report | thread | newsletter | whitepaper | news
|
||||||
status: unprocessed
|
status: unprocessed
|
||||||
tags: [tag1, tag2, tag3]
|
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.
|
After the frontmatter, include the FULL content of the source. More content = better extraction.
|
||||||
|
|
||||||
## Step 5: Scan Existing Knowledge
|
## Step 5: Scan Existing Knowledge
|
||||||
|
|
@ -153,7 +178,7 @@ Topics:
|
||||||
After extraction, update the source file:
|
After extraction, update the source file:
|
||||||
```yaml
|
```yaml
|
||||||
status: processed
|
status: processed
|
||||||
processed_by: "{contributor name}"
|
processed_by: "{name from contributor.yml}"
|
||||||
processed_date: YYYY-MM-DD
|
processed_date: YYYY-MM-DD
|
||||||
claims_extracted:
|
claims_extracted:
|
||||||
- "claim title 1"
|
- "claim title 1"
|
||||||
|
|
@ -162,20 +187,24 @@ enrichments:
|
||||||
- "existing claim that was enriched"
|
- "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
|
## Step 8: Commit
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git add domains/{domain}/*.md inbox/archive/*.md
|
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]
|
- What: [brief description of claims added]
|
||||||
- Why: [source material, why these matter]
|
- Why: [source material, why these matter]
|
||||||
- Connections: [what existing claims these relate to]
|
- 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.
|
||||||
|
|
||||||
|
**Validation:** Before using contributor.yml values in trailers, strip newlines and angle brackets from the `name` field. A name containing newlines could inject fake trailers into the commit message. Validate on read: name must be a single line of printable characters with no `<`, `>`, or newline characters.
|
||||||
|
|
||||||
## Step 9: Push and Open PR
|
## Step 9: Push and Open PR
|
||||||
|
|
||||||
|
|
@ -183,7 +212,7 @@ The `Contributor:` trailer is required for human contributions — it ensures at
|
||||||
git push -u origin {branch-name}
|
git push -u origin {branch-name}
|
||||||
|
|
||||||
gh pr create \
|
gh pr create \
|
||||||
--title "{agent}/contrib-{user}: {brief description}" \
|
--title "contrib/{github}: {brief description}" \
|
||||||
--body "## Source
|
--body "## Source
|
||||||
{source title and link}
|
{source title and link}
|
||||||
|
|
||||||
|
|
@ -194,7 +223,7 @@ gh pr create \
|
||||||
{1-2 sentences on value add}
|
{1-2 sentences on value add}
|
||||||
|
|
||||||
## Contributor
|
## Contributor
|
||||||
{user's name}
|
{name} (@{github})
|
||||||
|
|
||||||
## Cross-Domain Flags
|
## Cross-Domain Flags
|
||||||
{any connections to other domains the reviewers should check}"
|
{any connections to other domains the reviewers should check}"
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,3 +1,4 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
ops/sessions/
|
ops/sessions/
|
||||||
|
.claude/contributor.yml
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue