Repository navigation
P286: objective strikes - #2074
Merged
Merged
Conversation
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
trissim
marked this pull request as draft
October 20, 2026 02:03
trissim
force-pushed
the
fix/p286-objective-strikes
branch
3 times, most recently
from
October 20, 2026 02:36
a1cd33c to
471cd3e
Compare
trissim
marked this pull request as ready for review
October 20, 2026 02:40
Contributor
Author
trissim
marked this pull request as draft
October 20, 2026 03:14
trissim
force-pushed
the
fix/p286-objective-strikes
branch
from
October 20, 2026 03:31
471cd3e to
2b3414b
Compare
trissim
marked this pull request as ready for review
October 20, 2026 03:38
This was referenced Oct 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
P286: automatic objective strikes, with working replacement dispatch
Head:
c24cca65982ae2b3c4d7be03cbb5408fe89a5328, rebased onto batch45 mainef4cc72da8d52548b2a594a78200749f0fc878bf.Merger's held failure is fixed
The real Connector worker first recorded the two objective failures and released the worker, then asked a held-only query for stalled work. The newly unowned order disappeared from that query, so the available spare never received it. This was a lifecycle ownership defect, not a baseline failure or merely an outdated assertion.
The original objective-strike family remains: original first-tool timestamps, typed failed-check source attribution, existing strike history for deduplication (including voided attempts), existing ReleaseTodo for the second live strike and existing post-record publication. Only NoCommitProgress owns deadline absence-of-work behavior. Pushed/open-PR/committed/merged/unread progress does not get an absence-of-work strike. Delivery-time deadline punishment remains deleted. The P271 reconciliation type filter and P301 timing/unit-deadline visibility work are untouched.
Source and ownership evidence
Reused ChangedSource/AST across443 production/tool modules, no parse omissions. Evidence enumerates the existing Todo/GoalAction/actor/dispatch owners and all selected consumers. TodoStore.stalled is deleted; the unrelated progress and watchdog stalled methods remain. Dynamic codec, declaration dispatch and external transcript/native custody are behavior boundaries, not claimed as AST proof.
Actual ownership searches:
rg -n 'def deadline_strikes|MissedDeadlineStrike.late' src/agent_comms/todos.py: base no-action behavior plus the single NoCommitProgress policy.rg -n 'def reassignable|todos.reassignable|todos.stalled' src: one candidate-query owner and one consumer; no old TodoStore consumer.rg -n 'def assigned|def reassigned' src/agent_comms/thread_identity.py src/agent_comms/todos.py: actor-owned Core replacement policy and the existing held-owner transition.Verification at this exact head
Background timeout300 + faulthandler, using existing shared dependencies and the already initialized exact audit pin:
tests/test_stall_watcher_strike.py tests/test_objective_strikes.py tests/test_deadline_progress_strikes.py tests/test_commander_problem_orders.py tests/test_standing_rules.py116 passed, 1 failed in101.22s. The sole failure is the existing withdrawn-order closure defect, reproduced separately on exact main ef4cc72 in1.71s:
test_a_withdrawn_order_is_neither_open_nor_overdue_and_strikes_no_one->Closing requires recorded installed application evidence.That fix is independently owned in ready #2073; land #2073 before/with this PR. No branch-only failure remains in this selected set. This is not a full-suite claim.
The merger's
test_three_connector_passes_allow_real_store_maintenance_between_passesnow passes. It uses a real Connector and real copied bus/store/native records, runs three worker passes and obtains maintenance locks between each; the original root remains unchanged. It now requires exactly the two typed automatic failures on the original worker and one release, rather than the old single manual takeover strike. Repeated passes do not punish the replacement for the inherited expired deadline.Added real-store coverage verifies Core-released work remains pending when no spare exists, is assigned when a spare appears, and is unchanged on the next observer/dispatcher pass. The manual-release test now supplies a genuinely eligible spare and still verifies no automatic reassignment.
Separate final ratchets against ef4cc72, head c24cca6:
{}, introduced{}.{}, introduced{}.Initial checkpoint2b3414b78's source ratchet correctly reported one new NoneAbsence. The coherent correction moved the assignment-vs-displacement decision into the existing watcher incarnation instead of making Todo.reassigned silently accept an unowned row; no exemption, alias or suppressed check was added. The first broader run also had three missing-catalog failures in the uninitialized P304 checkout. Final verification reused the already initialized P286 checkout; no clone, sync, install or new dependency tree was created.
Receipts under owned scratch: p286-release-ast-{before,after}.txt, p286-replacement-deadline-before.txt, p286-replacement-final-{tools,src}.log/.exit, p286-replacement-final-tests.log/.exit, p286-main45-withdraw.log/.exit. Owned scratch/checkouts measured about1.03GiB total against the3GiB cap. The prescribed resource helper is absent on this host; direct checks showed13GiB free disk and6.8GiB available memory before the bounded checks.
Assumed:
Agent-Comms-Order: 4b67fff60615