Source Catalog¶
Status: Draft (Extension — v1.1 Preview)
Last Updated: 2026-02-26
Not required for ACGP v1.0 Standard or Safety-Critical conformance.
Abstract¶
The Source Catalog extension defines a public capability hook for evidence-grounding workloads. It standardizes negotiation metadata, attestation boundaries, and a minimal query contract used by source-match evaluators without requiring open catalog interoperability or public source disclosure.
Key Concepts (Preview)¶
- Public capability, private internals: Extension ID, version, visibility, and attestation are public; backing systems and payload semantics MAY remain private.
- Deployment choice: Implementations MAY use proprietary catalogs, federated catalogs, or no catalog at all.
- Opaque policy binding: Public artifacts MAY reference opaque policy handles or attestations instead of public source lineage.
- Optional scorer fallback: If the capability is absent or a query fails, optional
source-matchscorers follow the unavailable-and-redistribute rule defined by ACGP-3.
Hook Point¶
Core hook in ACGP-3 via SourceCatalog interface.
Status¶
Implementations MAY provide this interface. If not provided, optional source-match scorers are marked unavailable and their weights are redistributed as defined by ACGP-3. Conformance does not require a shared catalog service, open source registry, or public source lineage.
Interface Signature¶
from typing import Protocol, List, Optional
from dataclasses import dataclass
@dataclass
class SourceEntry:
id: str
category: str # e.g., "regulatory", "market_data"
jurisdiction: Optional[str]
trust_score: float # 0.0–1.0
freshness_hours: float
integrity_hash: str
class SourceCatalog(Protocol):
"""Source catalog capability hook for evidence grounding."""
def query(
self,
categories: List[str],
min_trust: float = 0.0,
jurisdiction: Optional[str] = None,
max_age_hours: Optional[float] = None,
) -> List[SourceEntry]: ...
def verify(self, source_id: str) -> bool: ...
Negotiation Model [NORMATIVE]¶
Portable artifacts SHOULD negotiate the Source Catalog extension through an extension descriptor such as:
extensions:
required:
- { id: "urn:acgp:ext:source-catalog-private@1", visibility: private, enforcement_scope: remote, fail_mode: reject_activation, attestation: { digest: "sha256:...", issued_by: "did:example:steward" } }
The public protocol standardizes only the descriptor metadata and attestation shape. Catalog contents, document locators, clause references, ranking logic, and provenance chains MAY remain private.
When enforcement_scope: remote is used, SDKs MUST preserve and negotiate the descriptor and MAY still activate a bundle locally while the remote authoritative enforcer performs evidence evaluation. Optional local source-match scorers follow the unavailable-and-redistribute rule instead of returning a neutral 0.5. If source evidence is encoded as a required control with fail_mode: deny or equivalent tripwire semantics, that explicit failure path remains authoritative.
Reserved Wire Field¶
| Field | Type | Location | Description |
|---|---|---|---|
source_catalog |
object | EVAL payload | Optional public metadata attached to evaluation results |
Minimal Forward-Compatible Example¶
{
"trace_id": "trace-12345",
"blueprint_id": "finance_qa@2.1",
"governance_tier": "GT-2",
"ctq_dimensions": {
"reasoning_quality": {
"score": 0.91,
"weight": 0.25,
"status": "evaluated",
"contributors": ["rationale_clarity", "plan_completeness"]
},
"knowledge_grounding": {
"score": 0.88,
"weight": 0.20,
"status": "evaluated",
"contributors": ["citation_coverage"]
},
"ethical_alignment": {
"score": 0.94,
"weight": 0.20,
"status": "evaluated",
"contributors": ["fairness_review"]
},
"tool_safety": {
"score": 0.90,
"weight": 0.20,
"status": "evaluated",
"contributors": ["permission_check"]
},
"context_awareness": {
"score": 0.87,
"weight": 0.15,
"status": "evaluated",
"contributors": ["situational_fit"]
}
},
"ctq_score": 0.901,
"risk_score": 0.099,
"tripwires_triggered": [],
"intervention": "ok",
"flagged": false,
"runtime_posture": "normal",
"review_required": false,
"trust_debt": {
"provider_id": "acgp.core.default@1",
"pre": 0.0,
"delta": 0.0,
"post": 0.0,
"thresholds_crossed": []
},
"source_catalog": {
"extension_id": "urn:acgp:ext:source-catalog-private@1",
"policy_handle": "ph:9f1c2ab7",
"attestation": {
"digest": "sha256:...",
"issued_by": "did:example:steward"
}
}
}
Public artifacts MUST NOT be required to expose source document IDs, clause locators, internal source mappings, or derivation provenance in order to negotiate or conform.