diff --git a/src/agent_comms/acp_extension.py b/src/agent_comms/acp_extension.py index 0d69abdcc5..05f446084d 100644 --- a/src/agent_comms/acp_extension.py +++ b/src/agent_comms/acp_extension.py @@ -301,7 +301,7 @@ class NoCursorScope(CursorScope): class LiveCursorScope(CursorScope, LiveAttachmentScope): session_id: str wire_root_id: str - claim_scope: Annotated[ClaimedIdentity, WireName("admission")] + claim_scope: ClaimedIdentity owner_pid: int def __post_init__(self): @@ -446,7 +446,7 @@ class NoQueueScope(QueueScope): @dataclass(frozen=True) class LiveQueueScope(QueueScope, LiveAttachmentScope): session_id: str - claim_scope: Annotated[ClaimedIdentity, WireName("admission")] + claim_scope: ClaimedIdentity owner_pid: int @property diff --git a/src/agent_comms/envelope_claim_transitions.py b/src/agent_comms/envelope_claim_transitions.py index 87ffd2d288..42d4c4e497 100644 --- a/src/agent_comms/envelope_claim_transitions.py +++ b/src/agent_comms/envelope_claim_transitions.py @@ -169,9 +169,7 @@ def held_at(self, claimed_generation: int) -> bool: class RecordedScope(ClaimScope, declared_name=None): """Every acquisition published today records the input generation and operation it serves.""" - owner_claimed_generation: Annotated[ - int, WireName("owner_admission_generation") - ] + owner_claimed_generation: int operation_id: Annotated[str, Id128Text] turn_id: str @@ -274,7 +272,7 @@ class ClaimIdentity: @dataclass(frozen=True) class AcquiringClaim(ClaimIdentity): generation: Annotated[str, Id128Text] - claim_scope: Annotated[ClaimScope, WireName("admission")] + claim_scope: ClaimScope @dataclass(frozen=True) @@ -390,7 +388,7 @@ def project(self, previous: ClaimProjection) -> ClaimProjection: class WakeClaims(RecordMember, Acquisition, AcquiringClaim): """An acquisition published today; its row records the scope it serves.""" - claim_scope: Annotated[RecordedScope, WireName("admission")] + claim_scope: RecordedScope @dataclass(frozen=True) diff --git a/src/agent_comms/goal_failure_observation.py b/src/agent_comms/goal_failure_observation.py index 035bd0bdcc..be457805af 100644 --- a/src/agent_comms/goal_failure_observation.py +++ b/src/agent_comms/goal_failure_observation.py @@ -13,7 +13,7 @@ from typing import TYPE_CHECKING, Annotated from .diagnostics import FailureReason -from .field_codec import Id128Text, WireName +from .field_codec import Id128Text from .goal_attempt_identity import GoalAttemptIdentity from .thread_identity import ( ClaimedIdentity, @@ -56,9 +56,7 @@ class FailedTurnEvidence(GoalLedgerTable, TypedTable, GoalFailureEvidence): owner: str owner_created_at: float worktree: str - claim_scope: Annotated[ - int, WireName("admission"), Column(record_key=True, check="{claim_scope}>0") - ] + claim_scope: Annotated[int, Column(record_key=True, check="{claim_scope}>0")] turn_generation: Annotated[int, Column(check="turn_generation>0")] goal_revision: Annotated[int, Column(check="goal_revision>=0")] turn_id: Annotated[str, Column(unique=True, check="length(turn_id)=32")] diff --git a/src/agent_comms/input_attempt.py b/src/agent_comms/input_attempt.py index 67e8a859dc..9d950521cc 100644 --- a/src/agent_comms/input_attempt.py +++ b/src/agent_comms/input_attempt.py @@ -248,7 +248,7 @@ def require_original_provenance(self, source: InputProvenance): key: str sequence: int | None owner: str - claim_scope: Annotated[int, WireName("admission")] + claim_scope: int target: str source_text: str origin: Annotated[InputOrigin, WireOmitDefault()] = field( diff --git a/src/agent_comms/input_origin.py b/src/agent_comms/input_origin.py index b392102bf8..c18791c139 100644 --- a/src/agent_comms/input_origin.py +++ b/src/agent_comms/input_origin.py @@ -10,7 +10,7 @@ from .bus_publication import HumanOrigin from .declared_family import DeclaredFamily from .errors import RelationViolationError -from .field_codec import Id128Text, WireName +from .field_codec import Id128Text from .goals import GoalCheckpoint from .message_reference import MessageReference from .thread_identity import ClaimedIdentity @@ -120,7 +120,7 @@ class HumanInputOrigin(InputOrigin): root_id: Annotated[str, Id128Text] author: HumanOrigin - claim_scope: Annotated[ClaimedIdentity, WireName("admission")] + claim_scope: ClaimedIdentity project: str goal: GoalCheckpoint diff --git a/src/agent_comms/native_runtime_input.py b/src/agent_comms/native_runtime_input.py index 33d696970e..ab59fdf783 100644 --- a/src/agent_comms/native_runtime_input.py +++ b/src/agent_comms/native_runtime_input.py @@ -16,7 +16,7 @@ from agent_comms.private_runtime_schema import PrivateCoordinatorTable from .coordination_errors import IdentityConflict, PublicationActivationBlocked, StaleFence -from .field_codec import FieldCodec, MalformedRecord, NativeContext, WireName +from .field_codec import FieldCodec, MalformedRecord, NativeContext from .native_claim_epoch import NativeClaimEpoch, UnrecordedNativeClaim from .native_input_record import ( NativeColumn, @@ -264,7 +264,6 @@ def published_replies(self, db, user, owner_lookup): owner_token_digest: Annotated[str, FrozenColumn(check="length(owner_token_digest)=64")] sent_owner_claimed_generation: Annotated[ NativeClaimEpoch, - WireName("sent_owner_admission_generation"), Column( record_key=True, check="{sent_owner_claimed_generation}>0", @@ -366,7 +365,6 @@ def context_anchor(self) -> NativeColumn: owner_generation: Annotated[int, FrozenColumn(primary_key=True, check="owner_generation>0")] owner_claimed_generation: Annotated[ int, - WireName("owner_admission_generation"), FrozenColumn(record_key=True, primary_key=True, check="{owner_claimed_generation}>0"), ] diff --git a/src/agent_comms/owner_lifecycle.py b/src/agent_comms/owner_lifecycle.py index 9ed17c6dc2..0a9769365e 100644 --- a/src/agent_comms/owner_lifecycle.py +++ b/src/agent_comms/owner_lifecycle.py @@ -13,7 +13,6 @@ from typing import TYPE_CHECKING, Annotated from uuid import uuid4 -from agent_comms import field_codec from .active_route import resolve_comms_route from agent_comms.attempt_recovery import RecoveryMonitorCapability @@ -95,7 +94,7 @@ def record_first_input(self, record) -> None: class OwnerRestartSelection: identity: OwnerIdentity process: ProcessIdentity - claimed_generation: Annotated[int, field_codec.WireName("admission_generation")] + claimed_generation: int interpreter: str @classmethod diff --git a/src/agent_comms/queued_input.py b/src/agent_comms/queued_input.py index d0a0ca67a8..65ab12a760 100644 --- a/src/agent_comms/queued_input.py +++ b/src/agent_comms/queued_input.py @@ -11,7 +11,7 @@ from contextlib import AsyncExitStack, ExitStack, asynccontextmanager from dataclasses import dataclass, field, replace from functools import partial -from typing import TYPE_CHECKING, Any, Generic, Self, TypeVar, Annotated +from typing import TYPE_CHECKING, Any, Generic, Self, TypeVar from acp import RequestError @@ -24,7 +24,7 @@ from .coordination_session import ReadNativeCoordinationSession from .coordinator import Coordination from .errors import RelationViolationError -from .field_codec import Id128Text, WireName +from .field_codec import Id128Text from .goals import GoalDeclaration, NoGoal from .image_inputs import ImageInput from .input_attempt import InputAttempt, ReservedInput @@ -55,7 +55,7 @@ class InputHandoffRefused(RelationViolationError): @dataclass(frozen=True, slots=True) class QueuedInputContext: - claim_scope: Annotated[ClaimedIdentity, WireName("admission")] + claim_scope: ClaimedIdentity goal: GoalDeclaration = field(default_factory=NoGoal) @classmethod diff --git a/src/agent_comms/registry_document.py b/src/agent_comms/registry_document.py index 2b3fb606db..8284616747 100644 --- a/src/agent_comms/registry_document.py +++ b/src/agent_comms/registry_document.py @@ -19,7 +19,6 @@ MalformedRecord, FieldPlan, SlicePolicy, - WireName, WireRequired, ) from .registration_change import ( @@ -322,9 +321,9 @@ class RegistryDocument(RegistryPresence[dict[str, ThreadStatus]]): owners: Annotated[GenerationCounter, SlicePolicy(GenerationOf)] = field( default_factory=GenerationCounter ) - claims: Annotated[ - GenerationCounter, WireName("admissions"), SlicePolicy(GenerationOf) - ] = field(default_factory=GenerationCounter) + claims: Annotated[GenerationCounter, SlicePolicy(GenerationOf)] = field( + default_factory=GenerationCounter + ) _human: UserThreadLookup[str] = field(init=False, repr=False, compare=False) diff --git a/src/agent_comms/selected_write_plan.py b/src/agent_comms/selected_write_plan.py index 5e6d2ee2b3..b9dea69f03 100644 --- a/src/agent_comms/selected_write_plan.py +++ b/src/agent_comms/selected_write_plan.py @@ -16,7 +16,7 @@ from contextlib import suppress from dataclasses import dataclass, fields from pathlib import Path -from typing import TYPE_CHECKING, Literal, Annotated +from typing import TYPE_CHECKING, Literal from .coordination_database import CoordinationStore from .locked_store import DurableFile, PatternFile @@ -32,7 +32,7 @@ from .coordination_cohort import sealed_cohort_assignments from .declared_family import DeclaredFamily from .envelope_claim_transitions import ExistingFileClaim -from .field_codec import FieldCodec, Id128Text, MalformedRecord, WireName +from .field_codec import FieldCodec, Id128Text, MalformedRecord from .message_reference import MessageReference from .private_path import PrivateDirectoryRole, PrivateFileRole, fsync_directory from .thread_identity import ClaimedIdentity, RecordedThreadIncarnation @@ -53,7 +53,7 @@ class SelectedWriteBinding: root_id: str source: MessageReference assignment_id: str - claim_scope: Annotated[ClaimedIdentity, WireName("admission")] + claim_scope: ClaimedIdentity @dataclass(frozen=True, kw_only=True) @@ -68,7 +68,7 @@ class SelectedWriteIntent(DeclaredFamily, affix="WriteIntent"): claim_id: str owner: str incarnation: float - claim_epoch: Annotated[int, WireName("admission_epoch")] + claim_epoch: int expected_attempt_ordinal: Literal[1] operation_id: str resource: str diff --git a/src/agent_comms/thread_identity.py b/src/agent_comms/thread_identity.py index d6b96dfe14..35484efc26 100644 --- a/src/agent_comms/thread_identity.py +++ b/src/agent_comms/thread_identity.py @@ -12,7 +12,7 @@ from collections.abc import Iterable from dataclasses import dataclass, field, replace from functools import cached_property -from typing import TYPE_CHECKING, Callable, ClassVar, Self, TypeVar, Annotated +from typing import TYPE_CHECKING, Callable, ClassVar, Self, TypeVar from metaclass_registry import AutoRegisterMeta, RegistryConfig @@ -23,7 +23,6 @@ from .field_codec import ( FieldCodec, WireValue, - WireName, ) from .response_policy import CollectivePolicy, InformationalPolicy, ResponsePolicy @@ -350,7 +349,7 @@ class ClaimedIdentity: """A registry-allocated input generation, never an owner lease.""" incarnation: ThreadIncarnation - claimed_generation: Annotated[int, WireName("admission_generation")] + claimed_generation: int def includes(self, previous: ClaimedIdentity) -> bool: """Compare order only within this registry's input-generation counter.""" @@ -381,7 +380,7 @@ class TurnFence: identity: TurnIdentity turn_id: str - claimed_generation: Annotated[int, WireName("admission_generation")] + claimed_generation: int def renamed(self, name: str) -> Self: """Registry alias resolution changes the name, never incarnation or epochs.""" diff --git a/src/agent_comms/turn_lease.py b/src/agent_comms/turn_lease.py index bd9b8cdb4d..baae919372 100644 --- a/src/agent_comms/turn_lease.py +++ b/src/agent_comms/turn_lease.py @@ -16,7 +16,6 @@ RecordMember, SingleFieldValue, SubclassUnion, - WireName, WireTransient, boundary_decoder, ) @@ -212,9 +211,7 @@ class ActiveTurn(Executing, RecordMember, TurnDeclaration): owner_pid: int started_at: float = field(default_factory=time.time) routing: TurnRouting | None = None - claimed_generation: Annotated[ - TurnGeneration, WireName("admission_generation") - ] = UnrecordedGeneration() + claimed_generation: TurnGeneration = UnrecordedGeneration() turn_generation: TurnGeneration = UnrecordedGeneration() phase: TurnPhase = field(default_factory=PreparingPhase) def execution(self, source: GoalExecutionSource) -> GoalExecution: diff --git a/tests/test_envelope_claim_transitions.py b/tests/test_envelope_claim_transitions.py index 2380007d9e..b7bb154e8e 100644 --- a/tests/test_envelope_claim_transitions.py +++ b/tests/test_envelope_claim_transitions.py @@ -73,12 +73,12 @@ def test_selected_wake_binding_survives_claim_projection(tmp_path): message = Message("owner", "owner", "Claim file", ClaimNoticeKind, seq=8, timestamp=1.0) bound = ClaimMessage.of(message, replace(claimed, message_id=message.message_id)) assert Message.from_wire(bound.to_wire()) == bound - admission_key = FieldCodec.record_key(WakeClaims, "claim_scope") - invalid = {**raw, admission_key: {**raw[admission_key], "version": 99}} + scope_key = FieldCodec.record_key(WakeClaims, "claim_scope") + invalid = {**raw, scope_key: {**raw[scope_key], "version": 99}} with pytest.raises(ValueError): FieldCodec.decode(ClaimTransition, invalid) null_claim = raw.copy() - null_claim[admission_key] = None + null_claim[scope_key] = None with pytest.raises(ValueError): FieldCodec.decode(ClaimTransition, null_claim) diff --git a/tests/test_registry_current_format.py b/tests/test_registry_current_format.py index d7d6225e76..8fbc1e7a72 100644 --- a/tests/test_registry_current_format.py +++ b/tests/test_registry_current_format.py @@ -58,7 +58,7 @@ def test_incomplete_saved_identity_cannot_authorize_an_owner(tmp_path): registry = Registration(path) registry.register(registry.new_thread('owner', frozenset(), str(tmp_path), process_identity=ProcessIdentity.capture(os.getpid()))) raw = json.loads(path.read_text()) - for field in ("owners", "admissions"): + for field in ("owners", "claims"): incomplete = dict(raw) incomplete.pop(field) path.write_text(json.dumps(incomplete)) diff --git a/tests/test_unscoped_claim_history.py b/tests/test_unscoped_claim_history.py index 727e2dc03f..a0d63893ba 100644 --- a/tests/test_unscoped_claim_history.py +++ b/tests/test_unscoped_claim_history.py @@ -49,6 +49,6 @@ def test_unscoped_history_row_decodes_projects_never_live_and_releases(tmp_path) # A row published today records its scope; history rows carry none. with pytest.raises(MalformedRecord): - FieldCodec.decode(ClaimTransition, {**stored, "admission": None}) + FieldCodec.decode(ClaimTransition, {**stored, "claim_scope": None}) scoped = FieldCodec.encode(taken[resource]) - assert scoped["admission"]["operation_id"] == "c" * 32 + assert scoped["claim_scope"]["operation_id"] == "c" * 32