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

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 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:

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 (lines 579–580), the validate_source_ledger function ensures data integrity by checking that every source's authority attribute belongs to the allowed set:

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 (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 (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:

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:

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:

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.
  • 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, 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 (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 (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.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →