# Authority Levels for Sources in claude-obsidian: The Complete Provenance Guide

> Understand claude-obsidian source authority levels official primary secondary community synthetic and unknown to categorize trustworthiness in your source ledger.

- Repository: [Agrici.Daniel/claude-obsidian](https://github.com/AgriciDaniel/claude-obsidian)
- Tags: deep-dive
- Published: 2026-08-26

---

**The claude-obsidian project defines six authority levels—`official`, `primary`, `secondary`, `community`, `synthetic`, and `unknown`—to categorize the trustworthiness of source materials stored in the source ledger.**

The **authority levels for sources** in claude-obsidian form the backbone of its provenance tracking system. Each source record carries an `authority` field that determines how the system validates evidence, assesses claims, and handles data migration. These levels are centrally defined as a constrained vocabulary in [`claude_obsidian/ledgers.py`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/claude_obsidian/ledgers.py) and enforced through strict validation rules that maintain data integrity across the vault.

## The Six Authority Levels Defined

The allowed authority strings are stored in the `AUTHORITIES` frozenset at line 38 of [`claude_obsidian/ledgers.py`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/claude_obsidian/ledgers.py):

```python
AUTHORITIES = {"official", "primary", "secondary", "community", "synthetic", "unknown"}

```

### official

Sources marked as **official** originate from organizations or publications recognized as definitive standards. This includes peer-reviewed journals, standards bodies, and authoritative institutional documentation. The system treats these as the highest tier of human-generated evidence.

### primary

**Primary** sources represent direct evidence from original creators or eyewitness accounts. While authoritative, these lack the formal vetting process of "official" designations—examples include raw interview transcripts, original research datasets, or unfiltered field observations.

### secondary

**Secondary** sources encompass derivative works that interpret, analyze, or summarize primary materials. Textbooks, news articles, and review papers fall into this category. The authority level indicates mediation between the original evidence and the current claim.

### community

**Community** sources capture content generated by broad user bases without formal editorial oversight. Forum discussions, community wikis, and crowdsourced documentation receive this classification, signaling the need for additional verification before claim acceptance.

### synthetic

**Synthetic** sources identify machine-generated or programmatically assembled content that does not correspond to a real-world artifact. The system uses this tag to flag AI-generated text, templated outputs, or algorithmically merged datasets that require distinct handling from human-authored sources.

### unknown

The **unknown** level applies when source provenance cannot be determined. Migration logic automatically assigns this authority to legacy manual entries that lack verification metadata, creating a clear audit trail for unvetted historical data.

## How Authority Levels Are Enforced in the Codebase

### Source Ledger Validation

In [`claude_obsidian/ledgers.py`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/claude_obsidian/ledgers.py) (lines 579–580), the `validate_source_ledger` function ensures data integrity by checking that every source's authority attribute belongs to the allowed set:

```python
if source["authority"] not in AUTHORITIES:
    raise ValidationError(f"Invalid authority: {source['authority']}")

```

This validation prevents schema drift and ensures that downstream claim assessment logic receives only recognized provenance classifications.

### Claim Assessment Requirements

When evaluating evidentiary support, the claim engine requires at least one **active**, **fresh**, **non-synthetic** source according to [`WIKI.md`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/WIKI.md) (lines 39–44). This rule prevents synthetic or stale community sources from serving as sole justification for critical claims, enforcing a baseline of human-verified evidence.

### Migration and Legacy Handling

The migration logic documented in [`skills/wiki/references/provenance.md`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/skills/wiki/references/provenance.md) (line 30) treats any unverified manual source as having `authority: "unknown"`. This default assignment ensures that legacy data entering the system receives appropriate skepticism during automated ingestion workflows.

## Working with Authority Levels Programmatically

### Creating Validated Source Records

When generating new sources via Python, always validate against the central `AUTHORITIES` constant:

```python
from claude_obsidian.ledgers import AUTHORITIES

def create_source(source_id, locator, authority):
    if authority not in AUTHORITIES:
        raise ValueError(f"Invalid authority: {authority}")
    
    return {
        "id": source_id,
        "locator": locator,
        "authority": authority,
        "review_state": "unreviewed",
        "independence_key": None
    }

# Create an official source

new_source = create_source(
    source_id="src-2024-001",
    locator="https://www.iso.org/standard/61119.html",
    authority="official"
)

```

### Validating Ledgers via CLI

Run the built-in validation to verify that all sources conform to the authority schema:

```bash
python -m claude_obsidian.validate --vault /path/to/vault

# exits 0 only if every source["authority"] ∈ AUTHORITIES

```

### Filtering Sources by Authority

Implement precise provenance filtering using list comprehensions:

```python
def filter_authority(sources, level):
    """Return sources matching the specified authority level."""
    return [s for s in sources if s.get("authority") == level]

# Extract only community-sourced materials

community_refs = filter_authority(all_sources, "community")

```

## Summary

- **Six authority levels** (`official`, `primary`, `secondary`, `community`, `synthetic`, `unknown`) provide a standardized vocabulary for source trustworthiness in [`claude_obsidian/ledgers.py`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/claude_obsidian/ledgers.py).
- **Strict validation** occurs in `validate_source_ledger` (lines 579–580), rejecting any source with an undefined authority string.
- **Claim assessment** requires at least one active, fresh, non-synthetic source, preventing unverified machine-generated content from standalone evidentiary use.
- **Migration defaults** assign `unknown` authority to legacy manual entries, maintaining clear provenance boundaries during data ingestion.

## Frequently Asked Questions

### What happens if I use an authority level not in the AUTHORITIES set?

The system raises a `ValidationError` during ledger validation. The `validate_source_ledger` function explicitly checks membership against the `AUTHORITIES` frozenset defined at line 38 of [`claude_obsidian/ledgers.py`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/claude_obsidian/ledgers.py), preventing ingestion of sources with non-standard provenance classifications.

### Can synthetic sources ever support a claim alone?

No. According to the provenance rules in [`WIKI.md`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/WIKI.md) (lines 39–44), the claim engine requires at least one source that is active, fresh, and explicitly non-synthetic. Synthetic sources may supplement evidentiary bundles but cannot serve as the sole authority for claim acceptance.

### How does the system handle old manual entries without authority metadata?

During migration, any manual source lacking verification metadata is automatically assigned `authority: "unknown"` as documented in [`skills/wiki/references/provenance.md`](https://github.com/AgriciDaniel/claude-obsidian/blob/main/skills/wiki/references/provenance.md) (line 30). This default ensures legacy data is clearly flagged while preserving the original content for manual review.

### Where should I set the authority level when creating a new source?

Set the `authority` key in the source dictionary passed to ledger creation functions. Always import and check against `claude_obsidian.ledgers.AUTHORITIES` before instantiation to ensure your value matches the schema enforced by the validation layer.