Skip to content

Remove rank-based authority and share the rule reader - #3824

Closed
trissim wants to merge 15 commits into
mainfrom
pi-commander-shared-authority
Closed

trissim wants to merge 15 commits into
mainfrom
pi-commander-shared-authority

Conversation

@trissim

@trissim trissim commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Shared responsibility without commander rank

Fifteen implementation checkpoints on this issue: 95 files, +1429/-1163, current headcadee96386813c9f1a05548f46d3d61ec33ea115, based on main38ecc24619de368a995e1e67963cc6b8cdbbf7e3. The existing3748 board repair is salvaged here, not reimplemented in a competing PR. The RuleAudience family and 22 audience frontmatters are deleted. Role-selected readers become one DeckReader, with four material selections composed through existing inheritance (DeckReader, RulesOnly, IndictmentFree, LightReader).

NOT MERGE-READY; no auto-merge. The prior reply/participation selection was 13 collected,13passed,7.98s,exit0 under the host TestLease; it is not a rerun of this complete head. The two demonstrated skill controls now pass at their recorded checkpoints below. It covers CLI direct/human replies, channel and diagnostic policy, completion idempotence, equal lead/peer reply behavior, inherited channels and independent participation. Actual copied-native/CLI acceptance remains open. Earlier verification exposed inherited global scratch defaults. The independent StorageRule/CheckRoot repairs3834 and3836 are now merged and installed, with their own scoped evidence; this PR does not touch those files or inherit broader native/containment acceptance. No new native run or installation of3824 occurred.

Tristan51486 removes enforced commander/unit authority. Independent colleagues share judgment, implementation, verification and accountability under their own identities. Explicit storage ownership and genuinely in-turn delegation remain requirements. The owner-authority wording decision is settled by51705/51713; its approved wording stays.

Rule declaration and rendering

Before: RuleFile.audience -> FleetAudience | CommanderAudience, role-selected source lists, headings and footers.
After: RuleFile owns shared packaged rendering and the order footer. Every independent colleague receives the same rules. Prime variants select materials, not privilege. Audience declarations/frontmatters and their consumers are removed, without aliases or a compatibility decoder.

Actor, participation and storage

Before: command-channel membership selected acting identity, tool permission and participation.
After: independent sessions act through their own recorded peer incarnation. RegisteredCommanderProject derives participation through execution-owned independent_threads, not tags or fork ancestry. Genuine in-turn SubagentExecution remains covered by its parent; independent native sessions remain peers. Lead selection and explicit as_thread storage binding survive. Aliases come from RegistryProvenance.named_members, replacing per-peer rescans.

Binding means initial channels, not authority

BindingCommander/CommandedBy/Uncommanded become BindingChannels/ChannelsFrom/NoChannelSource. Registration.register_bound_thread owns declaration of an independent external endpoint with inherited channels. The sole forwarding Thread.commanded_child is deleted. Existing declarations/rebinding are preserved rather than rewritten.

The external commander field and --commander flag remain unchanged. Baseline and changed FieldCodec output match exactly: {"commander":null} and {"commander":"peer"}; old records decode through the new family. Actual argument declaration/parser decoding of both absent and supplied flags passed. Binding controls verify rename/rebind, no parent ancestry and the endpoint's own acting identity.

Genuine SDK children

The seat/commanded-arm hook system is removed. SubagentActivity uses the existing real SDK-child execution/caller binding, activity, stop and session retirement. Explicit CLI slots remain: channel-delivered slots and parent-context SDK children have different delivery/lifetime contracts. Titles do not erase that distinction.

Reply behavior: correction to the earlier checkpoint

My earlier checkpoint deleted ReplyingThreadOutput and changed tests to assert explicit-only replies. That changed the response requirement rather than merely removing rank. Native OwnedTurn.reply_targets at owned_turn.py:108 still derives original-recipient routes. Those earlier explicit-only output assertions and the claim that their passing proved safe deletion are withdrawn (paper1 Corollary4.10; paper4 §1).

The existing reply capability is restored. Only ReplyingThreadOutput.for_comms's by_role selector is deleted: every live CLI endpoint follows the delivered message's existing reply policy. Message-kind/source/target policy, original opening references, transcript staging and sent-once handling remain. Both lead and peer answer under that policy; native routing is unchanged. This is the stated provisional product default: the owner has been asked whether all CLI colleagues should instead require explicit comms_send. Work continues without waiting, but the rank decision alone does not settle that output choice. This does not claim identical output policy across transports or final native acceptance.

One shared board and held-work owner

The existing3748 substantive commit8afac2b1e6 is retained through cherry-pickdae37350fef1446314f405322e78daddf200e25d. Before, TodoStore creator-filtered reads hid or revealed work when the selected lead changed (original observation21→138 unjudged without edits). After, board, board_history and board_units read the shared work and recorded holder identities;15 original files' consumers migrate together. Historical creator/actor data is not rewritten.

The salvage exposed identical open_orders/board queries and overlapping board_held/held_orders queries. Delete the two duplicate entrypoints, not another wrapper. TodoState still owns declared state selection: shared held reads include all open states; physical preparing_edits explicitly retains its earlier OpenTodoState restriction. No allocator behavior is silently widened.

HeldOrders remains the owner of one live/orphaned split against one registry cut. Its now-unused commander parameter is deleted from read and of, with18 direct Core/test calls migrated; no compatibility alias. Fleet-story uses the existing ReadTool, ToolRequest capabilities rather than inheriting an ignored thread selector. IncomingWork.idle no longer excludes the requesting colleague merely for being the assigner. This removes a rank-shaped hint, not the remaining assignment/holder permissions.

Source-only checkpoint evidence:48 changed Python files compiled; NRA indexed18 direct HeldOrders calls with the new arity; separate Core import/signature/MRO check passed with exact owned source origins and source hashes, including the fleet-story capability composition. Both successful processes returned0. The first combined process failed before Core import because the current NRA checkout no longer supplies Core's installed audit API; it is retained as a failed run. NRA analysis and Core imports now use separate processes and their existing read-only dependencies. No pytest or application run is claimed for this checkpoint.

The targeted retained map covers113 modules/1,241 original classes/41,558 sites, zero parse omissions and19 unprojected OPEN declarations. This supplements the earlier map, not a whole-program closure claim. Exact signature/caller patches are authored: the inspected ProjectFunctionParameterOperation rewrites reads, not unused-signature deletion; no native migration certificate is claimed. Whole Core/Toad src/tests/tools retrieval has no retired query-name callers; dynamic/alias resolution stays OPEN.3825 adds four known callers on its separate branch (one production, three fixtures); they will migrate when the two sources combine.

Independent Shell review of231b corrected an earlier diagnosis: independent review admission already existed through execution-owned membership. It identified root-only orderless-source eligibility, promotion/capture and director actor substitution. Those review paths are repaired below; work-taking/strike closure remains open. The stale worker-rejection oracle is replaced by shared independent-participant controls. Original3748's52passed/3failed/timeout evidence remains historical and red, not borrowed green checks.

Shared review, source eligibility and promotion

Before: NoHeadOrder separately checked project membership; DirectorCaller bypassed it and OrderHeadReview substituted creator authority. Stored source eligibility, promotion and capture independently compared a reviewer with the root. Linked-order currency and permission were interleaved.

After: existing CommanderProject owns require_actor and require_scope (registry_document.py:578,590). RegisteredCommanderProject derives participants through each execution's independent_threads; storage lead and channel tags confer no membership. Actor checks inspect the actual birth and its already-bound caller principal, not a whole-registry roster scan. NoCommanderProject retains an explicit intentional refusal. Ordinary native and director callers share ThreadCaller's inherited review boundary; both director_identity implementations and DirectorCaller's bypass are deleted. The record keeps the actual author name/birth.

HeadReviewOrder's concrete scope check (head_review.py:769) is inherited by NoHeadOrder; OrderHeadReview adds its currency check; refused relationships still refuse. OrderLink keeps previous assignment and exact problem/order identity. RecordOrderHeadVerdict still checks exact revision in the existing transaction and rechecks the link when preparing/changing; no second review ledger or manufactured actor.

accepted_orderless_sources is owned by the existing HeadReviewRelation/NoHeadOrder family and StoredHeadReview's newest exact-head snapshot. The root-actor comparison and commander arguments are deleted from both consumers. Promotion and capture use the same project scope, retaining source review status, carrier/main/tree/ancestry checks and unique current Todo-or-orderless ownership. Capture revalidates current repository scope before attaching its existing payload. Stored record shapes are unchanged; no carry, aliases or historical rewrite.

ReviewedMerge now validates the target repository before an empty admin obligation can return. The raw gh target becomes one PullRequestHead; the existing owes_verdict[T] capability carries that typed value. Pinned admin still owes no saved OK, while API merge still requires the exact recorded OK. Missing/malformed pins and foreign repositories refuse. No shell parser/classifier exception or second codec.

Formal receipt: IMPL-5/IDEN-1, fact=review permission versus actor/creator/storage provenance, at=d248 NoHeadOrder:4547, DirectorCaller:71, promotion/capture root comparisons; derive=base-method/declaration, by=CommanderProject:578/590 and HeadReviewOrder:769. BOUND-1, fact=merge target repository/head, at=ReviewedMerge's external gh envelope; derive=nominal-key/declaration, by=PullRequestHead plus generic QueueBypass.owes_verdict. Paper1 Theorems4.6–4.8 apply to the duplicated supplied facts and the distinct required actor/scope/currency answers. Independent-colleague permission is Tristan's explicit policy change; Corollary4.19 distinguishes that change of requirement from answer-preserving refactoring.

Source reproof:10 changed modules,320 original classes before/after,9,398→9,478 indexed declaration/write/decision/call/import sites, zero selected parse omissions/unprojected classes. This supplements—not replaces—the113-module/19-OPEN and1885-module maps; foreign/dynamic binding stays OPEN. Separate Core-process import checks assert all seven production origins, shared native/director and NoHeadOrder inherited methods, and the linked-order signature. No source NRA checkout was mixed into Core's dependency imports.

Executed selection at712913284: 35 passed,35.93s,rc0, background timeout -s INT300, existing pytest-session TestLease, exact src/tools/tests PYTHONPATH, no xdist, fresh .shared-review-basetemp-1. It covers native/external peer admission, actual birth refusal, genuine in-turn binding versus raw child admission, native/director author identity and foreign-repo refusal, linked revision rollback, original quote/holder fences, peer capture and promotion, exact/latest/contained orderless source cases, actual resident admin/API hook contracts, configured scope and valid pins. The forge response process is controlled; Core stores, goal writes and resident IPC are real. No configured-provider/native model, frontend, live merge or installation was run. Logs/rc: shared-review-combined-1; source artifact: shared-review-reproof-d248.json. Completed one-shot source retired after borrower checks. Independent final-head source review requested from Shell.

Correction: refuse before foreign reads; derive board actions

Shell's independent review found a real missing boundary at712913284: HeadVerdictTool collected the actor/scope refusal as an argument error and still called current_head before reporting it. My original helper-only foreign-repository control never invoked that path. No verdict write followed, but the foreign PR read was still attempted by source. This was not accepted or installed.

The shared tool now calls caller.head_review_actor before collecting/preparing anything. It uses the existing relation's admission behavior; the actor list, suppressing collector and later actor unpack are deleted. RefusedHeadOrder raises the existing TodoProblems refusal with its collected local diagnostics; its now-unreachable prepared override is deleted. Native and director controls now call CommsHeadVerdictTool.invoke and require unchanged forge calls and empty review records. Unresolved linked selection gets the same no-preparation control. No new scope rule is copied into the tool.

The enlarged selection also exposed a competing manual verb list in UnreviewedHead.line. It now uses the existing clearing_commands owner for both linked and orderless rows. StandingRule.clearing_actions owns the existing MRO/declaration membership and eligibility walk; compact rendering consumes it. Controls consume those same actions intersected with the actual HeadVerdictVerb family, not parsed compact display text or a four-verb roster. Authored prose is supplied by argument and filtered through FieldCodec's fields for that action, so Superseded's by value cannot accidentally select SlopBack's different by meaning. A remaining deleted-helper caller is migrated to OkVerb's own declared command encoder. Existing renderer compaction stays intact.

A separate old fixture had already merged its PR before asking for OK. The control now asserts the correct late-review refusal with no saved review, then proves the released work can still be delivered. The preceding open-PR released-work control still proves a valid review keeps the original link and does not overwrite the former holder's new goal. The open-head check is unchanged, not weakened for the fixture.

Final affected combined selection at03a1e566: 15passed,36.73s,rc0, fresh .shared-review-boundary-basetemp-5, existing TestLease, background INT300, exact owned Core origins, no xdist. Real caller/tool/store and CLI paths; controlled forge, not production/native/provider/frontend acceptance. Earlier runs remain 9passed/2failed,7.90s;0passed/4failed,4.99s;0passed/4failed;13passed/2failed,35.87s. They exposed the manual renderer and stale test assumptions, and are not counted green. My intermediate test-helper rewrites caused avoidable reruns; all failed roots/logs are retained unchanged.

Final targeted source reproof:5 modules,317 original/317 projected classes,7,488→7,497 indexed sites,zero selected parse omissions; foreign/dynamic resolution OPEN. shared-review-boundary-final4-712.json and shared-review-boundary-5.log/.rc retain the proof. Completed one-shot source removed after0 exact-argv borrowers. Whole Core/Toad retrieval caught and migrated the retired author_arguments caller; no compatibility helper left. No ac-private workers were present at the post-run check. Independent replacement-head source review requested.

Formal receipt: BOUND-1, fact=admitted caller/repository before external preparation, at=712913284 order_tools.py:225–238; derive=base-method, by=ThreadCaller.head_review_actor and HeadReviewOrder.require_reviewer. MEMB-1/IMPL-1, fact=available actions and per-verb required argument shape, at=the former UnreviewedHead literal list and test_board_verbs.author_arguments; derive=declaration/delete-copy, by=StandingRule.clearing_actions, HeadVerdictVerb's family and FieldCodec.argument_fields. These are source/behavior corrections on the same issue, not completion of holder-consent or strike work.

Correction: source-review suggestions are not carrier promotion

Shell source-accepted the03a fail-fast boundary and returned a second defect: the new declaration-derived hint included PromoteVerb because it inherits OkVerb's recorded ReviewedHeadVerdict. That shared record does not make their full action contracts equal. An ordinary source PR has no captured IntegrationInput; actual promotion correctly refuses it. My15-case helper stopped at verdict preparation and therefore missed that extra precondition. No authority bypass or installed behavior is claimed.

ClearingVerb now owns a concrete source_review_hint() default; PromoteVerb overrides it to False. HeadReviewRule consumes that generic applicability for every source-review rule, including orderless rows. OrderHeadReviewCommands composes the inherited applicability check with its existing order-verdict permission. No manual action roster, consumer type/string filter, metadata probe on the display path or weakened promotion guard. Explicit promotion still uses its real captured-carrier requirement.

Executed affected selection at85b9c5f12: 7passed,38.16s,rc0, fresh .promotion-hint-basetemp-1, existing TestLease, background INT300, no xdist and exact owned Core imports. It covers linked pending/delivered menus, orderless menus, shared-head order separation, actual CLI individual-source promotion refusal/no enqueue, and successful captured-carrier promotion by both lead and independent worker. These are controlled-forge/private Core/CLI/store paths, not configured-native/frontend/live installation acceptance. Earlier15/15 and35/35 remain distinct epochs, not a sum.

Targeted source supplement uses existing NRA SourceModule, module_syntax_index and build_class_family_index:4 modules,77 original/77 projected classes before and after,3,457→3,465 sites,zero selected parse omissions. promotion-hint-beforeafter-03a.json, promotion-hint-controls-1.log/.rc and publication log retain the evidence. Dynamic/foreign bindings and wider maps remain OPEN. Formal correction: IMPL-4, fact=generic source-review applicability versus the recorded verdict; at=03a HeadReviewRule/PromoteVerb inherited eligibility; derive=base-method/subclass; by=ClearingVerb.source_review_hint, PromoteVerb override and HeadReviewRule/OrderHeadReviewCommands composition. Paper1 Theorem4.8 supplies the distinction; sharing implementation is not merging full meanings.

Current-holder consent and honest caller identity

Before: IncomingWork used creator/previous-parent SQL as a replacement privilege; a peer identity inherited parent authority from its selected record owner. Release/drop/fold/link/withdraw could therefore mistake shared maintenance for permission to remove someone's hold. Core reissues reconstructed the historical assigner as acting for the creator. Holder queries and automatic idle selection still carried creator/issuer exclusions.

After: CommanderPeerIdentity is a sibling of the genuine CommanderForkIdentity, not its child, and carries only its own recorded identity. Its factory takes no storage owner. CommanderPeerAuthority retains explicit record selection but no longer inherits ActsForCommander or manufactures that record owner's representation. ThreadIncarnation.represents defaults to the actual incarnation; the genuine bound-child override follows its already-bound parent. Nested commanding_identity derives the actual independent parent. Shared maintenance/retired-request receipt eligibility remains a separate commands capability; Core's birthless actor receives no receipts and represents no holder.

ThreadRole.independent_threads composes the existing executor and execution-independence declarations once. Both actual Thread acting identity and project participation consume it. Provenance-only records and raw in-turn children no longer manufacture independent peer authority. A bound child keeps its real parent capability; ordinary SenderReceipts and explicitly scoped retired-predecessor CommanderReceipts keep their different contracts.

Assignment.require_release verifies the exact current Assignment, including birth/generation, and requires its actual holder or genuine bound caller. The existing Todo command revision/assignment fences remain. AssignTodo checks the same holder-consent condition before physical preparation and again in the write; changing the order also requires consent even when the Assignment fields happen to stay identical. Proposed history is normalized through the existing owner so idempotent writes do not invent a second history authority. Todo.assigned carries the actual actor. Release, drop, fold, link and withdrawal use the same holder behavior; fold/link check both affected holds before mutation. No approval ledger, prose-as-consent, creator exception or ClaimOrder reinterpretation. Delivery ClaimOrder retains its exact actor/generation restriction.

IncomingWork now answers occupancy only: unrelated occupying work still refuses any actor, while the work group no longer confers creator/parent rank. Prepared physical ownership, exact birth/generation, shared-worktree refusal, succession/history, group transaction rollback and install-only availability remain. Core reissue records CoreWatcherIncarnation itself instead of reconstructing a departed fork's authority. The old acting_assigner property and peer_for entrypoint are deleted without aliases. require_maintainer/NotWorkMaintainer replace commander-exclusive API wording across Todo, request and hunt callers; original creator/actor records and request receipt scope are not rewritten.

TodoStore.held_by is now a one-argument shared-holder query. Its Core lifecycle/HUD/goal/CLI/test consumers migrate together; owner restart announcements no longer loop the same shared query once per historical board owner. resolve_order reads shared work and checks the actual maintainer. fire reads all of the holder's work and applies the holder-owned release guard transactionally. Automatic idle candidates include the requesting colleague, without dropping ready/parked, genuine-child, recent-turn or retained-holder protection. Modern release fixtures now use their holder; the explicit historical legacy-wire control remains intact.

Source evidence: before supplement116 modules/1355 original classes/24unprojected OPEN/41,464 sites; expanded after supplement123 modules/1408 original classes/24unprojected OPEN/43,196 sites; zero parse omissions in each. The corpus expanded to all changed modules plus the new control, so these are not like-for-like debt totals. Existing NRA SourceModule/ModuleSyntaxIndex/class-family owners were reused; original coordinates/hashes and dynamic/foreign OPEN cases remain. Separate exact-origin imports of13 production modules,25-file in-memory compilation, MRO/signature and receipt-contract assertions passed. Signature/behavior edits are authored patches, not a claimed executable NRA migration certificate.

Executed affected selection: 34passed,33.63s,rc0, background INT300/nice/no-xdist, existing host TestLease, exact src/tools/tests origins, fresh .holder-consent-basetemp-2. Coverage includes holder/bound-child positive release, peer/storage-binding/raw-child/birth/generation refusal, original-issuer order replacement refusal, actual owner handoff and recorded actor, Core reissue identity, real CLI fork send, grouped owner approval/rollback, unrelated occupancy, concurrent allocation, all five physical-allocation controls, ordinary-reply refusal, retired-successor replies and actual untagged/scope review paths. It is private Core/backend/CLI/store behavior with controlled external inputs, not configured-provider/native/frontend or installation acceptance. The first launch stopped at resource warning before pytest (rc2;6.7GiB RAM available,0% stalls,433.9GiB home free); no tests ran. The serial bounded selection fit that measured headroom. Logs/rc and fresh roots are retained, and the earlier7/15/35 epochs are not summed into this result.

Formal receipts: IDEN-1, fact=selected storage owner versus genuine parent representation, at=85 CommanderPeerIdentity/CommanderPeerAuthority; derive=declaration/subclass, by=RecordedThreadIncarnation/CommanderForkIdentity.represents. IMPL-5/MEMB-2, fact=current holder approval versus creator/issuer rank and independent-participant membership; at=85 IncomingWork.require_free and unconditional Thread acting identity; derive=base-method/delete-copy, by=Assignment.require_release and ThreadRole.independent_threads. Paper1 Theorem4.8 forbids merging these full meanings; Theorems4.6/4.7 justify deriving shared capability rather than copying its decisions.

Open at the preceding holder checkpoint: receiving active-goal admission was not established merely by a fresh GoalPrecondition (the next section repairs it); orphan rescue still needs a supported path that does not infer consent from a missing name. The remaining strike/release-actor classification, role vocabulary and full native/installed acceptance still belong to this PR. This checkpoint is not whole-PR completion.

Receiving goals also own their consent

Before: GoalPrecondition checked freshness, but a fresh observation of an unheld recipient's independent goal let ProblemOrderGoalAction replace it. Direct AssignTodo and TodoStore.create could also attach new work behind the goal. Both automatic idle selection and its refusal hint admitted a ready executor without asking whether its goal slot was occupied. Those are separate permission and observation questions, not interchangeable evidence (paper1 Theorem4.8; paper4 Theorem2.6).

After: the existing GoalDeclaration/NoGoal/Goal and GoalState family own require_work and work_candidates. NoGoal has a free slot; open states require the actual owner or genuine bound representation; CompletedGoal frees the slot while existing held-work/parked checks still apply. PausedGoal additionally preserves its source-owned resume restriction. No state strings, type switches, approval mirror, new stored field or wire change. ProblemOrderGoalAction checks the actual current goal before wording/reference work, reservation or child allocation. Assignment resolves the exact recipient birth through RegistrySnapshot and delegates to that declaration. AssignTodo checks before physical preparation and again inside the write; TodoStore.create also checks the fresh registry before preparation and in its transaction, rather than trusting a supplied stale Thread. AssignTodo owns the one changes_work predicate so exact no-op maintenance remains legal. RestoreHolderTodo stays the separate unchanged accepted-work restoration path; its orphan/collision semantics remain open work, not a new reissue exception.

ThreadExecution.order_candidates now consumes goal-owned availability after executor/ready-work selection. The real UnownedWheelSpin dispatcher and IncomingWork hint already consume that method, so both lose automatic access to active/blocked/paused independent goals. A fresh checkpoint, shared maintainer identity, storage selection, raw child or CoreWatcher does not approve a new goal. Exact accepted unheld reissue to a free slot still succeeds and records Core; continuing a blocked problem goal requires the actual receiving owner's explicit action. HeldTodo/birth/generation/physical/group rollback and ClaimOrder restrictions remain. Fixtures now record the worker's genuine acceptance; the prerequisite-link correction uses an explicit old-holder release and receiving-owner action.

Evidence: retained NRA map expanded123→171 modules before editing; before171modules/1834original classes/25unprojected OPEN/64633sites, after171/1835/25/64958; zero parse omissions. One added class is the transient GoalConsentRequired refusal, not another state or serialized authority. Dynamic/foreign/alias resolution remains OPEN; this is source evidence, not an executable migration certificate. Separate exact-origin import/MRO and in-memory compile passed. At9fb, the seven changed blobs were byte-identical after the conflict-free rebase onto71; all earlier feature files remained separate from the inherited retry-diagnostic hotfix. The receiving-boundary correction below changes todos.py and its holder-consent controls after that rebase.

Executed Core controls: first selection 35passed/2failed,34.55s,rc1. Both failures were my fixture mistakes: a nonexistent PausedGoalAction source parameter and missing ReleaseTodo/StrikeReason imports. They are fixed without changing production behavior or weakening assertions. The final affected selection is 8passed/3.79s/rc0, including both corrections, the newly added exact accepted free-slot Core reissue and the five expanded state-family checks. The added/expanded checks postdate the first import and are not credited to it; results are not summed into a synthetic whole-head suite. Fresh .goal-admission-basetemp-1 and -2, full logs/rc and source hashes remain. Both selections used the normal host lease, owned src/tools/tests, INT300/nice/no-xdist and no configured provider/native/frontend. Resource admission was a measured warning (6.4GiB available,0% stalls), not an unbounded parallel run.

Controls exercise the actual CommsOrderTool, CommsTodoCreateTool and CommsChangeProblemTool entrypoints against private backend/store state; no caller or production method is replaced. They cover fresh-checkpoint refusal, peer storage selection, raw/bound child distinction, receiving-owner positives, direct-assignment and stale-Thread creation refusal, no-op maintenance, protected pause, state-owned dispatch, group rollback, goal-generation transfer and accepted reissue. Whole-PR source acceptance, configured-native/physical and installation remain open.

Correction: normalize before validation; a free goal is not an unparked thread

Shell's exact9fb source review found two real gaps. My exact-no-op control returned before validation and missed the new regression: after a real handoff, preflight/apply preserved previous_owners while transactional validation consumed raw self.proposed. A review_at-only update therefore looked like new work and demanded receiving consent again. Separately, the fresh receiver lookup asked only its goal; direct AssignTodo and creation through a retained ready Thread could bypass the existing live parked prohibition. That lifecycle gap predates this checkpoint. The earlier claim of end-to-end preserved parked admission was not established at9fb.

Now AssignTodo.validate uses Todo.proposed_assignment for both the changes_work question and physical availability, exactly as preflight/apply do. The existing Assignment receiver method becomes require_receiving_work: one fresh birth lookup composes ThreadWorkState.require_assignment with GoalDeclaration.require_work. AssignTodo and TodoStore.create consume it before physical preparation and during transactional validation. Goal-slot availability and parked work-state remain distinct answers; metadata/no-op maintenance does not newly assign work and remains legal even while the unchanged receiver is parked. No empty-history exception, history deletion, type/string switch, new approval store, wire change or compatibility method.

Formal receipts: BOUND-2, fact=effective assignment including retained history, at=9fb todos.py:4019, derive=declaration, by=Todo.proposed_assignment/holder_state.proposed_assignment; IDEN-2, fact=goal-slot consent and thread work readiness are distinct, at=9fb todos.py:3704-3706, derive=base-method/declaration, by=ThreadWorkState.require_assignment and GoalDeclaration.require_work. Paper1 Theorems4.7/4.8 explain the drifting copied interpretation and the distinct same-goal/different-work-state answers.

Executed on the corrected source: 40passed/10.29s/rc0, the sole complete tests/test_holder_consent.py selection, normal host TestLease, exact owned Core origin printed, actual installed6e Python, existing test dependencies read-only, fresh .receiving-work-basetemp-1, background INT300/nice/ionice/no-xdist. New controls cover a real handoff with nonempty previous_owners followed by a changed review timer, including parked metadata maintenance; direct assignment and retained-ready creation for absent/completed goals in both ready and parked states; refusal preserves Todo/goal and Git worktree listing. Existing holder/receiver/bound-child/owner-pause/order-change controls run in the same selection. No production methods are patched. This replaces no earlier failed log and is not a whole-PR/native/installed claim.

NRA targeted reproof reuses the retained171-module landscape:9 modules/339original classes/339projections/zero parse omissions before and after, only todos.py and test_holder_consent.py changed. Full AST/source hashes are retained in receiving-work-before/after.json; dynamic/foreign/rebinding/runtime bindings remain OPEN. The owner composition and closed retrieved call migration are authored patches, not an executable NRA migration certificate. Both changed files compile; whole Core src/tests/tools and owned Toad source retrieval finds no retired require_goal_consent calls. The completed one-shot source driver was removed after zero exact borrowers. Full resource-launcher failure and successful maintained-source check are retained; the bounded serial run admitted a warning6.6GiB available/12.5GiB swap/0% stalls, not an unbounded fan-out. Increment:2files,+97/-9. Source review of replacement742577cf5 is requested; no whole3824 acceptance or installation.

Shared instructions and the November1 corrections

Shared responsibility replaces model/rank-exclusive diagnosis, judgment and testing. Native delivery is not a Claude bridge watch. Explicit heartbeat-publication off is respected; retained observations remain readable. No new reminder, timer or writable status copy is introduced.

The latest checkpoint changes9files,+36/-42. It deletes the contradictory commander-only diagnosis story and supersedes Failure19's rank restriction without changing the family's identity or other historical entries. Skill prose no longer assigns judgment by provider or labels every fork a Claude child. Actual in-turn delegation remains distinct from an independent Pi session. Goal progress/standby instructions now name the real missing collaborator result, not a superior who must redelegate. The remaining review-mark restriction is removed too: the actual reviewer records its own caller identity; a genuine in-turn child keeps its bound parent rather than inventing an actor. These are text/description changes; goal_attempts.py READY grants, reservation/recovery, super(), Python delegation, process leases and permission fences are untouched.

The canonical tests rule now requires tracing an assertion to its declaration, admitted inputs and intended workflow. It explicitly rejects restoring the deleted footer label for a stale helper and counting a user's echo as an assistant reply; valid behavioral contracts are not weakened. Paper1 Corollary4.10 and paper4 §1 bound what successful runs establish. The canonical plain-reporting rule owns channel-origin replies, including tagged messages and reposting a privately sent conclusion. Coordination and skill refer to that owner; successful answers are not duplicated as acknowledgement traffic.

Main38ecc removed the duplicated instruction stores. Rebase retained its host-only AGENTS unchanged and kept APPEND_SYSTEM deleted; native_package.py and test_native_package.py are byte-identical to that main. The only conflicts were the deleted APPEND_SYSTEM and the plain-reporting channel/session paragraph; the latter retains main's answer-only-what-you-own condition and replaces the old session-only instruction with53336's originating-conversation rule. No old prompt was resurrected. unnecessary.md now requires an actual live reader, and refers to storage-and-cleanup's retention owner before migration/backup/lock machinery. Exactly-six question retirement remains3820's explicit domain change, not permission to delete unrelated history or replay uncertain inputs.

Verification:3changed Python files compiled before commit; after rebase all72changed Python files compiled in memory, git diff --check returned0, tracked source is clean, and Git's remote branch equalscadee96386. The final amendment changes only review-mark prose; all Python blobs are byte-identical to the compiled8c9 checkpoint. No imports, pytest, local NRA gate, model, frontend or installation ran for this text checkpoint. The three Python changes are instruction/evidence string literals, not declaration or control-flow refactors. Existing structural maps and40/10.29s controls remain scoped to their recorded older checkpoint, not relabeled as this head. The new main's test_native_package.py belongs in the next necessary combined selection, not a separate reassurance job. Earlier full structural/behavior/native obligations below remain open.

The inline packing width is a ClassFact derived from the actual whole rule wakeups (2781 in this source), not the stale separately maintained2500. Wakeups remain whole; paragraph packing consumes that one width. The old board fixture also confused publication with observation: its four .send(comms,time,hud) calls are removed, and the actual CommanderUpdateStore receives its retained packets. The real bridge/socket/delivery-journal control explicitly mutes only its own private lead; live settings and production defaults do not change.

Source evidence and executed checks

  • Existing NRA syntax/family owners, not another scanner: 1,885 context modules; 67/67 selected modules parsed; zero selected omissions; 872 original classes; 7 unprojected OPEN classes; 50,583 declaration/write/import/call/decision/attribute sites. Per-module hashes and original lexical positions are retained in shared-authority-reply-preservation-ast-corrected.json. External/dynamic/ambiguous cases remain OPEN; this is not a global completeness or behavioral certificate.
  • Whole Core and Toad src/tests/tools retrieval finds no retired reader/audience/binding/registration/role-selector symbols. ReplyingThreadOutput is deliberately retained as behavior, not a compatibility alias.
  • Earlier whole-tree compilation: 631 production, 577 test and 36 tool Python files. Runtime module origin is the allocated checkout. Actual Watch CLI parsing and unchanged wire encode/decode passed.
  • shared-authority-controls-3.log: 9 collected, 7 passed, 2 failed,14.84s. The two setup defects incorrectly used register's None return and instantiated abstract RecordedWatch. Corrected through registry.require and actual WatchClaim.enrol/state, without product workarounds.
  • shared-authority-controls-4.log/.rc: 13/13 passed,7.98s,exit0. This is an earlier scoped reply/participation selection, not a full suite or installed run.
  • The two shared skill cases first ran at e109b38: 1passed/1failed,11.98s. The whole-reminder/deck control passed with derived width2781. The board control exposed its obsolete publication-as-observation setup. My first correction then assumed the fixture was muted; that narrow run failed on Thread's actual On default (rc1,2.82s). The corrected explicit private mute and canonical-store setup passed the real retained-board/socket control 1/1,2.92s,rc0 at231b77b564. Both failed logs remain; no187-case rerun or live/native claim.
  • Targeted NRA before-map covers four modules' declarations, writes, calls, decisions, checks and imports, with zero parse omissions; join it to the retained full map rather than interpreting it as complete dynamic binding proof.
  • Earlier reader/material/audit/exact-head-review and genuine SDK-child controls remain prior scoped evidence. The former explicit-only output tests are superseded, not added to a grand total.
  • Earlier source-check failures remain retained: missing classmethod, direct old-file metadata probe, installed interpreter without pytest, missing fixture imports, and an NRA proof driver using nonexistent ModuleSyntaxIndex.nodes. The corrected driver uses NRA's actual indexed-node API and returns0; no failed check is counted as passing.
  • Existing DealtSource maps older package-relative rule paths to the current declaration; no speculative audience decoder was added. git diff --check passes.

Remaining done list

  1. Unfinished source work: review the corrected receiving-boundary742577cf5 checkpoint, then finish orphan/retained-holder collision handling, strike/release-actor classification, independent registration/standby and remaining role vocabulary. Current-holder and receiving-goal consent are separate from shared maintenance; this is still not complete workflow acceptance. Thecade text checkpoint preserves the742 source correction but is not a fresh behavioral rerun. Preserve explicit storage ownership and real parent-turn delegation.
  2. Independent final-head review of the complete actor/storage/SDK-child relationships and reply preservation.
  3. Integrate the shared reader/PiRedeal APIs with Integrate authored Pi question and five-rule batch patch #3820's continuing request/framing/settlement work; preserve its owner and dirty work.
  4. Qualified default/future-child private storage allocation, then actual native/CLI acceptance on fresh safe copies. Do not reuse potentially affected fork deal state or replay original inputs.
  5. Merge only the accepted exact head, install, and verify affected communication. Source, targeted execution, merge, installation and live acceptance remain separate states.

Assumed:51486 changes rank policy, not the need to receive a source-routed answer. Independent CLI leads now use the same pre-existing message-owned reply policy as peers; native output policy is unchanged. Historical storage lead and genuine in-turn delegation remain required. No live store, installed package, original input or colleague's source was edited by this checkpoint.

remove the badge check
do not delete the answer

Copilot AI balanced review requested due to automatic review settings November 1, 2026 03:47

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

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.

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

debt-src at dbbfdfe, every finding:

+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-vdj3khyl --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/agent-comms
= 12.770s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-vdj3khyl --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/agent-comms (12.770s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-4edsozz2 --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/formbridge
= 0.664s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-4edsozz2 --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/formbridge (0.664s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-0946ri7r --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/metaclass-registry
= 0.626s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-0946ri7r --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/metaclass-registry (0.626s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-7aq_0x5m --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/textual
= 0.866s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-7aq_0x5m --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/textual (0.866s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-itg417f0 --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/toad
= 1.007s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-itg417f0 --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/toad (1.007s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-rvgc8uaz --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/ui-theme
= 0.669s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-rvgc8uaz --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/base/openhcsdev/ui-theme (0.669s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-h4mqhwoh --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/agent-comms
= 10.163s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-h4mqhwoh --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/agent-comms (10.163s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-qau3d6og --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/formbridge
= 0.536s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-qau3d6og --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/formbridge (0.536s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-b4ymfsau --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/metaclass-registry
= 0.626s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-b4ymfsau --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/metaclass-registry (0.626s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-yrha7701 --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/textual
= 1.080s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-yrha7701 --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/textual (1.080s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-bl1oclty --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/toad
= 0.652s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-bl1oclty --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/toad (0.652s elapsed)
+ CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-vk0vmxqf --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/ui-theme
= 0.706s CommandPhase: /home/runner/work/_temp/checker-venv/bin/uv build --wheel --out-dir /home/runner/work/_temp/paired-sources/metadata/metadata-vk0vmxqf --python /home/runner/work/_temp/checker-venv/bin/python /home/runner/work/_temp/paired-sources/head/openhcsdev/ui-theme (0.706s elapsed)
grew BannedVocabulary:src/agent_comms/registry_document.py +1
grew BannedVocabulary:src/agent_comms/thread_identity.py +1
grew BannedVocabulary:src/agent_comms/todos.py +1
grew BannedVocabulary:src/agent_comms_hooks/skill.py +1
grew FunctionLocalImport:src/agent_comms/goal_states.py +1
::warning file=src/agent_comms/commander/standing.py::LintFindings +1 (warns, never blocks)
::warning file=src/agent_comms/commander_hud.py::LintFindings +1 (warns, never blocks)
::warning file=src/agent_comms/goals.py::LintFindings +1 (warns, never blocks)
::warning file=src/agent_comms/order_tools.py::LintFindings +2 (warns, never blocks)
::warning file=src/agent_comms_hooks/skill.py::LintFindings +2 (warns, never blocks)
grew TypeCheckingImport:src/agent_comms/goal_states.py +2
grew TypeErrors:src/agent_comms/commander_hud.py +1
grew UnannotatedParameter:src/agent_comms/todos.py +1
found BannedVocabulary:src/agent_comms/registry_document.py at src/agent_comms/registry_document.py:571
found BannedVocabulary:src/agent_comms/thread_identity.py at src/agent_comms/thread_identity.py:246 src/agent_comms/thread_identity.py:316 src/agent_comms/thread_identity.py:435
found BannedVocabulary:src/agent_comms/todos.py at src/agent_comms/todos.py:4689
found BannedVocabulary:src/agent_comms_hooks/skill.py at src/agent_comms_hooks/skill.py:285
found FunctionLocalImport:src/agent_comms/goal_states.py at src/agent_comms/goal_states.py:35 src/agent_comms/goal_states.py:72 src/agent_comms/goal_states.py:146 src/agent_comms/goal_states.py:181 src/agent_comms/goal_states.py:231
found LintFindings:src/agent_comms/commander/standing.py at src/agent_comms/commander/standing.py:578 (E501 Line too long (102 > 100)) src/agent_comms/commander/standing.py:782 (F841 Local variable `actor` is assigned to but never used)
found LintFindings:src/agent_comms/commander_hud.py at src/agent_comms/commander_hud.py:144 (F821 Undefined name `commander`)
found LintFindings:src/agent_comms/goals.py at src/agent_comms/goals.py:268 (N818 Exception name `GoalConsentRequired` should be named with an Error suffix)
found LintFindings:src/agent_comms/order_tools.py at src/agent_comms/order_tools.py:322 (F841 Local variable `actor` is assigned to but never used) src/agent_comms/order_tools.py:345 (F841 Local variable `actor` is assigned to but never used)
found LintFindings:src/agent_comms_hooks/skill.py at src/agent_comms_hooks/skill.py:51 (N805 First argument of a method should be named `self`) src/agent_comms_hooks/skill.py:383 (E501 Line too long (106 > 100))
found TypeCheckingImport:src/agent_comms/goal_states.py at src/agent_comms/goal_states.py:14 src/agent_comms/goal_states.py:14 src/agent_comms/goal_states.py:15 src/agent_comms/goal_states.py:15 src/agent_comms/goal_states.py:16 src/agent_comms/goal_states.py:17 src/agent_comms/goal_states.py:18
found TypeErrors:src/agent_comms/commander_hud.py at src/agent_comms/commander_hud.py:144 (Name "commander" is not defined  [name-defined])
found UnannotatedParameter:src/agent_comms/todos.py at src/agent_comms/todos.py:438 src/agent_comms/todos.py:614 src/agent_comms/todos.py:2484 src/agent_comms/todos.py:2815 src/agent_comms/todos.py:2868 src/agent_comms/todos.py:3298 src/agent_comms/todos.py:3806 src/agent_comms/todos.py:3806 src/agent_comms/todos.py:3830 src/agent_comms/todos.py:3830 src/agent_comms/todos.py:3830 src/agent_comms/todos.py:3830 src/agent_comms/todos.py:3846 src/agent_comms/todos.py:3846 src/agent_comms/todos.py:3850 src/agent_comms/todos.py:3850 src/agent_comms/todos.py:3854 src/agent_comms/todos.py:3854 src/agent_comms/todos.py:4916 src/agent_comms/todos.py:4916 src/agent_comms/todos.py:4939 src/agent_comms/todos.py:4939 src/agent_comms/todos.py:5451 src/agent_comms/todos.py:5451 src/agent_comms/todos.py:5461 src/agent_comms/todos.py:5478 src/agent_comms/todos.py:5519 src/agent_comms/todos.py:5519 src/agent_comms/todos.py:5523
introduced BannedVocabulary:src/agent_comms/registry_document.py at lines [571]
introduced BannedVocabulary:src/agent_comms/thread_identity.py at lines [435]
introduced BannedVocabulary:src/agent_comms/todos.py at lines [4689]
introduced BannedVocabulary:src/agent_comms_hooks/skill.py at lines [285]

trissim and others added 14 commits November 1, 2026 15:09
Moving the lead jumped unjudged from 21 to 138 with no new edits, because the store
answered whose board it is by creator while the service already reads one board.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbFMSpSd8zQxyozgEV2Re7
(cherry picked from commit 8afac2b)
Normalize transaction validation through Todo.proposed_assignment; compose ThreadWorkState and GoalDeclaration on the exact fresh receiver before preparation and at write. Metadata-only review updates preserve accepted ownership history without fresh consent. No legacy method or wire change.

40 holder-consent controls passed in10.29s under the existing host lease, INT300 and exact owned Core imports. Targeted NRA reproof:9modules,339/339classes,zero parse omissions; dynamic/foreign binding remains OPEN. Authored owner composition/call migration, not an executable NRA migration certificate.
@trissim
trissim force-pushed the pi-commander-shared-authority branch from 742577c to 8c9dc45 Compare November 1, 2026 20:13
@trissim
trissim force-pushed the pi-commander-shared-authority branch from 8c9dc45 to cadee96 Compare November 1, 2026 20:18
trissim pushed a commit that referenced this pull request Nov 2, 2026
Squashes pi-commander's #3824 (head cadee96, 15 checkpoints) onto
current main. Independent colleagues share judgment, review, board and
holder consent; rank-selected readers, audience frontmatter, the
commander-only review bypass and creator privilege are gone. Explicit
storage ownership and genuine in-turn delegation remain.

Resolved against main: main's deal-in-prompt deletion of
unit_instructions stands; main's PiThreadGate/Speaking and fork
registration behaviour stand; independent_threads keeps main's
executable-role rule. The deal header now lists the one shared board
once, instead of once per colleague.

Co-Authored-By: pi-commander <noreply@openhcs.dev>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
…k test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
…phaned

#3824 made releasing or replacing a held order require its holder's
consent, but checked it in the pure apply step with no registry in reach.
An archived holder can never consent, so its orders were stuck, although
REHOME tells teammates to withdraw exactly those.

The check moves into each operation's transactional validate (and the
store's drop/fold/link writes) with a registry snapshot. A registered
holder's status decides: a live thread must consent; ArchivedThreadStatus
has retired, so its holds are orphaned and any teammate may clear them.
A holder no longer registered under its birth leaves an orphaned hold.
Todo.assigned's pure copy of the check is gone; AssignTodo checks it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
Squashes pi-commander's #3824 (head cadee96, 15 checkpoints) onto
current main. Independent colleagues share judgment, review, board and
holder consent; rank-selected readers, audience frontmatter, the
commander-only review bypass and creator privilege are gone. Explicit
storage ownership and genuine in-turn delegation remain.

Resolved against main: main's deal-in-prompt deletion of
unit_instructions stands; main's PiThreadGate/Speaking and fork
registration behaviour stand; independent_threads keeps main's
executable-role rule. The deal header now lists the one shared board
once, instead of once per colleague.

Co-Authored-By: pi-commander <noreply@openhcs.dev>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
…k test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
…phaned

#3824 made releasing or replacing a held order require its holder's
consent, but checked it in the pure apply step with no registry in reach.
An archived holder can never consent, so its orders were stuck, although
REHOME tells teammates to withdraw exactly those.

The check moves into each operation's transactional validate (and the
store's drop/fold/link writes) with a registry snapshot. A registered
holder's status decides: a live thread must consent; ArchivedThreadStatus
has retired, so its holds are orphaned and any teammate may clear them.
A holder no longer registered under its birth leaves an orphaned hold.
Todo.assigned's pure copy of the check is gone; AssignTodo checks it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh

trissim commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Landed on main as 618efd3: this PR's shared responsibility squashed onto current main (907efa1), followed by these commits:

  • holder consent decided in the write transaction, with archived holds orphaned
  • one ReleasesHold base owning that check, with drop/fold/link inheriting it
  • the rank-era tests rewritten so the holder or receiving owner acts
  • the vibe-check chokehold pausing only the teammate who ignored the check

Closing as landed.


Generated by Claude Code

@trissim trissim closed this Nov 2, 2026
trissim pushed a commit that referenced this pull request Nov 2, 2026
New rule finish-line, dealt after no-blocking: a run, rebase or side quest
started at the finish must name the failure it alone catches, or the change
lands now. The risk being dodged is looking wrong, which a reversible landing
makes cheap; the cost is the owner's time and every live bug the landing
fixes. Written from 2026-11-02, when a fixed and read #3824 waited behind a
projected 50-minute run and three side quests while main kept pausing the team.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
StandingInstall.prepare and due called RecordedBuildIdentity.installed()
directly, a second copy of InstalledBuild.read() without its nothing-installed
case, so a home with no installed runtime crashed (home/.local missing).
InstalledBuild.recorded_in pairs each carried repository with its commit;
NoInstalledBuild carries none. test_storage_violations profiles
TodoStore.held_orders, the held read that replaced held_for_team in #3824.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
Under #3824 the first order gives worker its goal; another fork assigning
worker work is not that goal's owner, so GoalState.require_work
(goal_states.py:78-81, checked in goal_actions.py:628 before reserve and
require_free) refuses it with GoalConsentRequired. The race, the sequential
send (renamed to say so) and the registered-fork re-send now build the
expected refusal from GoalConsentRequired instead of the retired busy-holder
and release wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
trissim pushed a commit that referenced this pull request Nov 2, 2026
#3824 (907efa1) derives colleagues from execution: "storage lead, tags and
fork provenance grant none" (registry_document.py:696). The test still
expected a live independent thread without the teammates tag to get no
packet; it now gets its own, and the colleague's fork still gets none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gZLdttfQjtizEYZGek9Gh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants