Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
223b0ff
Replace copied table trigger hooks with mutation capabilities
trissim Oct 21, 2026
3679e02
Merge remote-tracking branch 'origin/main' into unit-mi-1d/table-muta…
trissim Oct 21, 2026
7dfbfbd
Declare one-way revisions and monotone column rules
trissim Oct 21, 2026
e925495
Merge remote-tracking branch 'origin/main' into unit-mi-1d/table-muta…
trissim Oct 21, 2026
5d5b82c
Derive lifecycle and generation guards from their declarations
trissim Oct 21, 2026
91d17a6
Merge remote-tracking branch 'origin/main' into unit-mi-1d/table-muta…
trissim Oct 21, 2026
3781d75
Declare native proof lifetime and cursor mutation rules
trissim Oct 21, 2026
89693f6
Merge remote-tracking branch 'origin/main' into unit-mi-1d/table-muta…
trissim Oct 21, 2026
f251e02
Merge current main and finish trigger capability cleanup
trissim Oct 21, 2026
e9d3b37
Merge current main into table mutation rules
trissim Oct 21, 2026
49618f2
Derive attempt prediction and SQL transitions from one ordinal increment
trissim Oct 21, 2026
580ff2c
Keep ordinal-family typing out of runtime imports
trissim Oct 21, 2026
a36f3f1
Merge current main into the clean table-rule rebuild
trissim Oct 21, 2026
f277a26
Refresh native schema pin for declared table rules
trissim Oct 21, 2026
05b01d9
Derive native schema drift check from the declared guards
trissim Oct 21, 2026
15a34aa
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
dfd2fbf
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
85db618
Keep execution references and replay rows with their execution owner
trissim Oct 21, 2026
2a93e4f
Name sealed deliveries and clarify their constraint declarations
trissim Oct 21, 2026
e28bfe2
Merge main lifecycle capabilities into table mutation rules
trissim Oct 21, 2026
f01ecab
Declare immutable SQL columns on their owning fields
trissim Oct 21, 2026
d477e32
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
821f336
Refresh native schema pin after table and lifecycle integration
trissim Oct 21, 2026
e7c6cd8
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
16b0e82
Merge current main before replay-state ownership change
trissim Oct 21, 2026
d3869c1
Let replay states own missing and recorded assessments
trissim Oct 21, 2026
085a655
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
6d76526
Use existing replay union encoding and current turn checks
trissim Oct 21, 2026
4e422d8
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
9ea77a3
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
2026ffa
Open coordinator schemas through their declared owner
trissim Oct 21, 2026
5ed7eca
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
c92b99f
Wait for recovery owner announcements and reject unexplained columns
trissim Oct 21, 2026
c5d125b
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 21, 2026
234e380
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 22, 2026
fe4b7e9
Derive corruption-test guards from table declarations
trissim Oct 22, 2026
38a5c8c
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 22, 2026
d5921a7
Finish declaration consumers and preserve fixture lifetimes
trissim Oct 22, 2026
f81cf01
Merge remote-tracking branch 'origin/main' into unit-ownerexit/p429-t…
trissim Oct 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/agent_comms/attempt_recovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
)
from agent_comms.coordination_results import Applied
from agent_comms.coordination_snapshot import RecoverySnapshot
from agent_comms.coordination_tables.attempts import AttemptRecord, ReplayAssessments, ReplayFact
from agent_comms.coordination_tables.attempts import AttemptRecord, ReplayFact
from agent_comms.coordination_tables.executions import ReplayAssessments
from agent_comms.coordination_tables.executions import CurrentExecutions
from agent_comms.coordination_tables.recovery import (
RecoveryAudit,
Expand Down Expand Up @@ -79,14 +80,14 @@ def observe_native_release(
input still settles UNKNOWN, never unsent or safe to replay.
"""
from agent_comms.comms import Comms
from agent_comms.coordinated_runtime_schema import assert_native_runtime_schema
from agent_comms.native_runtime_input import NativeRuntimeTable

if store.session.path.name != CoordinationStore.filename:
raise RecoveryBlocked("native recovery requires the canonical coordination store")
comms = Comms(store.session.path.parent)
with store.session.boundary(comms.bus) as boundary:
registry = boundary.registry
assert_native_runtime_schema(store.session._connection)
NativeRuntimeTable.require_installed(store.session._connection)
snapshot = store.snapshots.get(execution_id)
attempt = snapshot.attempt
if attempt is None or not snapshot.is_current:
Expand Down
4 changes: 2 additions & 2 deletions src/agent_comms/attempt_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ def validate(self, snapshot: RecoverySnapshot, participant: ParticipantSnapshot)
execution = snapshot.execution
ordinal = execution.lifecycle.next_attempt_ordinal
if not participant.committed or (
participant.owner_thread,
participant.participant_generation,
participant.owner_identity.owner_thread,
participant.owner_identity.generation,
) != (self.owner_thread, self.owner_generation):
raise StaleFence("owner generation or thread changed")
if (execution.revision, participant.pointer.pointer_revision) != (
Expand Down
21 changes: 8 additions & 13 deletions src/agent_comms/attempt_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from agent_comms.coordination_session import CoordinationSession, NativeBoundary
from agent_comms.coordination_snapshot import RecoverySnapshot
from agent_comms.coordination_tables.assignments import WakeAssignment
from agent_comms.coordination_tables.attempts import AttemptRecord, ReplayAssessments, ReplayFact
from agent_comms.coordination_tables.attempts import AttemptRecord, ReplayFact
from agent_comms.coordination_tables.recovery import (
ACPClientConnectivity,
ConnectivityFacet,
Expand Down Expand Up @@ -57,7 +57,7 @@ def require_fence(self, fence: OwnerFence) -> tuple[RecoverySnapshot, AttemptRec
attempt = snapshot.require_current_attempt()
if (
attempt.authority != fence.authority
or self.participants.get(attempt.owner_lookup).participant_generation
or self.participants.get(attempt.owner_lookup).owner_identity.generation
!= attempt.owner_generation
):
raise StaleFence("attempt fence is not current")
Expand Down Expand Up @@ -179,18 +179,13 @@ def observe_replay(
if snapshot.pointer_revision != expected_pointer_revision:
raise StaleRevision("pointer revision changed")
before = snapshot.replay
if (before.revision if before else None) != expected_replay_revision:
raise StaleRevision("replay assessment revision changed")
after = ReplayAssessments(
fence.execution_id,
facts,
replay_safe,
side_effects_possible,
1 if before is None else before.revision + 1,
)
if not after.record(self.session._connection, snapshot.replay):
before.require_revision(expected_replay_revision)
if not before.observe(
self.session._connection, fence.execution_id, facts=facts,
replay_safe=replay_safe, side_effects_possible=side_effects_possible,
):
return AlreadyApplied(snapshot)
return Applied(self.snapshots.get(after.execution_id))
return Applied(self.snapshots.get(fence.execution_id))

def fail_unknown(
self,
Expand Down
6 changes: 3 additions & 3 deletions src/agent_comms/cohort_foreground.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from agent_comms.coordination_errors import IdentityConflict
from agent_comms.coordinator import Coordination

from .cohort_schema import CohortDeliveryReceipts, assert_cohort_schema
from .cohort_schema import CohortDeliveries, CohortTable
from .coordination_cohort import accept_delivery_cohort
from .errors import RelationViolationError
from .message_bus import MessageBus
Expand Down Expand Up @@ -39,8 +39,8 @@ def accept(resource: Coordination) -> int:
raise IdentityConflict("private initial wire root changed")
authorized_after = max(after_seq, marker.claimed_after_seq)
with resource.session.read():
assert_cohort_schema(resource.session._connection)
sealed = CohortDeliveryReceipts.sealed_sequences_after(
CohortTable.require_installed(resource.session._connection)
sealed = CohortDeliveries.sealed_sequences_after(
resource.session._connection,
wire_root_id=root_id,
recipient_lookup=lookup,
Expand Down
Loading
Loading