Concept-ID coordination¶
There are two deliberately different paths:
- the existing
concept_allocatoris a same-host compatibility path. Its shared Git-common-dir lock protects linked worktrees of one checkout, but it is not a cross-host authority; governance.concept_reservation.NativeConceptReservationAuthorityis the cross-host path. It uses the authoritative graph's existingCreateNodeIfAbsent/CompareAndSetNodeFieldsprimitives and fails closed when those are unavailable or no authority-owned policy is configured. A local ledger, JSON file, process lock, or read-then-write graph sequence must never be presented as a global uniqueness guarantee.
The native contract and migration boundary are documented in
architecture/concept-reservation-authority.md.
Parallel sessions coordinate semantic concept IDs through the committed,
line-oriented docs/concept_reservations.yaml ledger.
Reserve an exact canonical ID:
agent-utilities concept reserve \
--id AU-KG.ingest.entropy-dedup \
--session build-session \
--design-doc design-reference
The compatibility allocator validates the OKF-CIS grammar and closed domain
vocabulary, then checks source markers, docs/concepts.yaml, and live ledger
claims while holding the per-repository lock. Duplicate claims fail atomically
within the same host/repository arbitration scope. Session and design values
are persisted only as non-reversible references. It must not be used when
separate clones or hosts need one global winner.
For a central reservation, build a privacy-safe request and inject the native authority into the lifecycle service:
from agent_utilities.governance.concept_reservation import (
ConceptReservationService,
ConceptNamespacePolicy,
NativeConceptReservationAuthority,
reservation_request,
)
request = reservation_request(
"AU-KG.ingest.example",
tenant_id="tenant",
repository="agent-utilities",
lane="lane-1",
owner="agent-1",
request_key="stable-request-id",
purpose="why this concept exists",
)
service = ConceptReservationService(
NativeConceptReservationAuthority(
engine,
policies=(ConceptNamespacePolicy("AU-KG.ingest", policy_version="policy-1"),),
)
)
record = service.reserve(request)
If graph-os does not expose the native create/CAS primitives or the authority
policy is unavailable, this raises AuthorityUnavailable; defer and retry
rather than calling the compatibility allocator.
Native request-key idempotency is scoped to the complete concept ID's canonical node. Reusing a key for the same concept replays that node; the same key for a different concept is a separate claim. No global request-key index is claimed by this adapter.
Other operations:
agent-utilities concept list --status reserved
agent-utilities concept release --id AU-KG.ingest.entropy-dedup
agent-utilities concept reconcile
agent-utilities concept resolve --id AU-KG.ingest.entropy-dedup
reconcile marks a claim landed once its exact marker is present in source,
and expires abandoned claims after their configured TTL.