Reviewer lease acquisition rejects canonical preflight order #763
Closed
opened 2026-07-19 15:13:11 -05:00 by jcwalker3
·
3 comments
No Branch/Tag Specified
master
feat/issue-626-self-propagating-handoffs
fix/issue-772-unpublished-claim-recovery
archive/role-poisoning-dfb5ebd
archive/capability-role-invariants-bc9366c
docs/mcp-stable-control-runtime-policy
fix/issue-695-native-quarantine-v2
chore/issue-681-preserve-review-session-wip
fix/issue-673-remediate-regressions-part2
feat/issue-610-live-remote-parity
feat/issue-503-reviewer-active-worktree
feat/issue-470-preflight-contract
feat/issue-440-lock-recovery
feat/issue-440-branch-recovery
feat/issue-458-queue-fail-closed-copy
feat/issue-400-early-duplicate-work-gate
feat/issue-308-reconcile-inventory-pagination
feat/issue-308-reconcile-pagination-proof
docs/issue-261-agent-temp-artifact-cleanup
feat/issue-262-map-commit-files
fix/infra-stop-conflict-marker-false-positive
feat/issue-139-role-aware-task-routing
feat/issue-188-continuation-selection-wall
feat/issue-189-continuation-mode-proofs
feat/issue-232-refresh-wiki-proof-heads
feat/issue-210-block-workspace-edits
feat/issue-204-exact-issue-lock
docs/issue-80-label-taxonomy
docs/issue-79-safety-boundary-updates
v1.1.0
Labels
Clear labels
allocator
anti-stomp
architecture
bug
chore
codex
concurrency
contamination
control-plane
dashboard
database
design
documentation
enhancement
gitea
glitchtip
important
incident
incident-bridge
integration
jenkins
labels
leases
mcp
mcp-health
mcp-menu
multi-project
mutating
nice-to-have
observability
portability
preflight
protected-branch
queue
read-only
reconnect
recovery
refactor
release
reliability
resumable-review
reviewer
roadmap
safety
security
self-hosted
sentry
stale-runtime
status:blocked
status:in-progress
status:pr-open
status:ready
terminal-lock
testing
tracker
type:bug
type:feature
type:feature
type:guardrail
visibility
workflow
workflow-hardening
workflow-hardening
Controller-owned work allocator
Prevent concurrent LLM session stomping
Architecture / structural design
OpenAI Codex client / workflow session surface
Concurrent session safety
Workflow or session contamination incident
MCP control-plane coordination and allocation authority
MCP operational dashboard/queue view
Internal coordination storage (SQLite/Postgres)
Design / investigation, no implementation
Docs / runbooks
New feature or improvement
Gitea MCP workflow
GlitchTip integration
Operational or process incident requiring durable audit trail
Sentry-to-Gitea incident bridging
Integration testing
Jenkins integration
Label taxonomy management
Lease adopt/release/expire lifecycle
MCP server / tooling
MCP namespace and runtime health
MCP menu surface
Work spanning multiple monitoring projects or Gitea repos
Mutating action; requires gating
Observability, metrics, traces, error reporting
Cross-platform / portability
Shared preflight gates before mutation
Protected branch / stable-branch policy concern
Work queue visibility and allocation
Read-only, no mutation
MCP client reconnect/reload recovery path
Recovery paths for stale/foreign leases
Code refactor / restructure
Release / versioning
Reliability / failure handling
Persist and resume prepared review verdicts across sessions
Reviewer workflow tooling
Roadmap / umbrella issue
Safety rails and fail-closed mutation guards
Security / trust boundary
Self-hosted infrastructure integration
Sentry error monitoring integration
Stale backend daemon / runtime-vs-master parity failures
Issue is blocked
Issue is being worked on
Issue has an open pull request
Issue is ready for work
Terminal review lock (#332) path
Tests / test coverage
Issue tracker hygiene / meta
Bug or defect
Feature or enhancement
Feature or enhancement
Safety gate or guardrail
Workflow state visibility for LLMs/operators
Cross-tool workflow
LLM workflow coordination hardening
LLM workflow coordination hardening
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Scaled-Tech-Consulting/Gitea-Tools#763
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
gitea_acquire_reviewer_pr_leasefails closed with a deterministic, non-retryablepreflight_order_violationeven when the documented reviewer preflight sequence is green end-to-end.This is a workflow tooling defect discovered while attempting formal review of PR #762 (issue #605). It is not implementation work for #605.
Affected review
7f2b9f36de4fa958e43fcee36e07b36e4cb53759prgs-reviewer/sysadminreview-merge-pr.md263d0a6cb8a68a851eb87e63fc236d8897ed67f67cbe295bc3aeObserved behavior
The following canonical sequence fails deterministically:
gitea_whoami(remote=prgs)returnsidentity_match=true.gitea_resolve_task_capability(task=review_pr)returns:allowed_in_current_session=trueexact_safe_next_action="None; ready for operations."gitea_acquire_reviewer_pr_lease(...)refuses with:reason_code=preflight_order_violationerror_class=preconditionretryable=falseThe failure reproduced after repeating the complete identity-to-capability sequence with no intervening call.
Additional schema inconsistency
gitea_acquire_reviewer_pr_leaseacceptsworktree.worktree_path.worktree_pathwas rejected before API mutation.Proven green conditions
sysadminprgs-reviewerrevieweridentity_match=trueScaled-Tech-Consulting/Gitea-Tools8a851eb87e63fc236d8897ed67f67cbe295bc3aein_parity=truerestart_required=falseide_namespace_proven=true263d0a6cb8a67f2b9f36de4fa958e43fcee36e07b36e4cb53759)Exact recorded reproduction signature
Expected behavior
A valid documented reviewer preflight sequence should allow reviewer-lease acquisition. If another immediately preceding call is required, the capability resolver and refusal payload must identify it precisely.
Acceptance criteria
whoami → workflow proof → resolve review capability → acquire leasesequence succeeds.exact_safe_next_actionagrees with the lease tool’s actual requirement.worktree/worktree_pathnaming or provide an explicit compatibility/validation contract.Duplicate search (this recording session)
Searched complete live issue inventory (
state=all, limit=500, 415 issues returned — inventory complete under limit).gitea_adopt_merger_pr_leasereturnedinternal_errorafter expired reviewer lease. Different tool, role, and error class.gitea_resolve_task_capabilityinternal_errorfor unknown task nameacquire_reviewer_pr_lease. Here capability resolve forreview_pris green; failure is on the lease tool’s order gate.verify_preflight_purityclearing capability. Not reviewer acquire.gitea_submit_pr_review. Different stage; here acquire itself fails.gitea_submit_pr_reviewattributing foreign workspace edits. Different tool and root cause family.Conclusion: no existing issue covers this exact signature. New
type:bugrequired.Impact / blocker relationship
Non-goals
Recording provenance
prgs-author/jcwalker3Canonical Issue State
STATE: operator_authorized_blocker_remediation
WHO_IS_NEXT: author
NEXT_ACTION: Fresh prgs-author/jcwalker3 session claims exactly #763 under this one-time WIP exception, implements only #763, publishes one PR with Closes #763, posts author handoff, and stops for independent review
NEXT_PROMPT:
WHAT_HAPPENED: Human operator authorized a one-time blocker-remediation WIP exception so #763 can be implemented while PR #762 remains open; posted by prgs-reconciler/sysadmin via native MCP.
WHY: #763 repairs the tooling defect blocking independent review of PR #762; without that review PR #762 cannot become terminal; ordinary WIP and allocator rules cannot break the cycle; this is not #557.
RELATED_PRS: PR #762 (blocked product PR; do not modify); future single #763 remediation PR when published
BLOCKERS: none for authorized #763 author work under this record; PR #762 remains blocked until #763 is fixed and verified such that whoami → resolve_task_capability(review_pr) → gitea_acquire_reviewer_pr_lease succeeds
VALIDATION: Pre-post pins verified on prgs-reconciler/sysadmin: PR #762 head 7f2b9f36de4fa958e43fcee36e07b36e4cb53759; #763 unclaimed unimplemented no PR; open inventory only #762; master/runtime
8a851eb87ein_parity=true; comment_issue allowedLAST_UPDATED_BY: sysadmin / prgs-reconciler (operator authorization record only; no implementation)
OPERATOR BLOCKER-REMEDIATION AUTHORIZATION
STATUS: APPROVED
AUTHORITY: human operator
AUTHORIZATION_KIND: one-time blocker-remediation WIP exception
REPOSITORY: Scaled-Tech-Consulting/Gitea-Tools
BLOCKED_PR: #762
BLOCKED_PR_HEAD:
7f2b9f36deBLOCKED_ISSUE: #605
BLOCKER_HANDOFF: comment #12977
AUTHORIZED_ISSUE: #763
AUTHORIZED_PROFILE: prgs-author
AUTHORIZED_IDENTITY: jcwalker3
AUTHORIZED_BASE:
8a851eb87eALLOCATOR_EXCEPTION: controller candidates_json override permitted for exactly issue #763
WIP_EXCEPTION: one additional blocker-remediation PR permitted while PR #762 remains open
MAXIMUM_NEW_PRS: 1
REQUIRED_PR_LINKAGE: Closes #763
REQUIRED_NEXT_PHASE: independent reviewer
AUTHORIZATION_TERMINATION: expires immediately when the #763 PR is published and its author handoff is posted
REAUTHORIZATION_REQUIRED_IF: PR #762 head changes, live master changes before assignment, issue #763 gains competing ownership, or any pin differs
Justification
Issue #763 repairs the tooling defect (gitea_acquire_reviewer_pr_lease / reviewer_lease_preflight_order_violation_v1) that prevents independent review of PR #762. Without that review, PR #762 cannot become terminal. The supervised-pilot WIP rule refuses a second authored PR while #762 remains open, and the ordinary allocator selects other work instead of #763. Canonical Bootstrap Review Path (#557) is inapplicable because no #763 fix PR exists yet. This one-time exception exists only to restore the normal author → independent reviewer → merger workflow.
This record is not a Bootstrap Review Authorization (#557) and must not be treated as one.
Explicitly authorized (subsequent fresh prgs-author / jcwalker3 session only)
8a851eb87e(or re-verified live master if reauthorization is obtained after a master change).Explicitly prohibited
Canonical Issue State
STATE: operator_authorized_blocker_remediation_amended
WHO_IS_NEXT: author
NEXT_ACTION: Fresh prgs-author/jcwalker3 session claims exactly #763 via the sanctioned native issue-lock/claim path under this amendment, implements only #763, publishes one PR with Closes #763, posts author handoff, and stops for independent review
NEXT_PROMPT:
WHAT_HAPPENED: Human operator amended authorization comment #12981, replacing its candidates_json allocator-override requirement with a narrowly scoped native direct-claim path for exactly issue #763. Posted by prgs-reconciler/sysadmin via native MCP. No implementation, claim, review, merge, or cleanup performed.
WHY: The candidates_json allocator override required by #12981 is unreachable through every available MCP client, so the original authorization cannot be consumed as written. The amendment restores a reachable path to the normal author to independent reviewer to merger workflow.
RELATED_PRS: PR #762 (blocked product PR; unchanged and unreviewed); future single #763 remediation PR when published
BLOCKERS: none for authorized #763 author work under this amended record; PR #762 remains held until #763 is fixed and verified such that whoami then resolve_task_capability(review_pr) then gitea_acquire_reviewer_pr_lease succeeds
VALIDATION: Pre-post pins verified on prgs-reconciler/sysadmin, non-root OS uid 502 jasonwalker: identity_match=true; profile prgs-reconciler; role reconciler; runtime startup head = runtime current head = local master = live prgs/master = 8a851eb87e63fc236d8897ed67f67cbe295bc3ae; in_parity=true; restart_required=false; control checkout clean on master; #763 open, unassigned, no lease, no lock, no branch, no worktree, no PR; PR #762 open at
7f2b9f36dewith zero reviews (approval_visible=false); #605 lease-1dfc4167c6bc490d present and unchanged; authorization #12981 unconsumed; no competing ownershipLAST_UPDATED_BY: sysadmin / prgs-reconciler (operator authorization amendment only; no implementation)
OPERATOR BLOCKER-REMEDIATION AUTHORIZATION — AMENDMENT
STATUS: APPROVED
AUTHORITY: human operator
AUTHORIZATION_KIND: one-time blocker-remediation direct-claim exception
REPOSITORY: Scaled-Tech-Consulting/Gitea-Tools
ORIGINAL_AUTHORIZATION: issue #763 comment #12981
AMENDMENT_SCOPE: allocation path only
SUPERSEDES: the candidates_json allocator-exception requirement in comment #12981
BLOCKED_PR: #762
BLOCKED_PR_HEAD:
7f2b9f36deBLOCKED_ISSUE: #605
BLOCKER_HANDOFF: PR #762 comment #12977
AUTHORIZED_ISSUE: #763
AUTHORIZED_PROFILE: prgs-author
AUTHORIZED_IDENTITY: jcwalker3
AUTHORIZED_BASE:
8a851eb87eCANDIDATES_JSON_STATUS: unreachable through Claude, Grok, and Codex MCP clients
CANDIDATES_JSON_RETRY: prohibited
ALLOCATOR_BYPASS: permitted for exactly issue #763
DIRECT_CLAIM_ALLOWED: true
CONTROL_PLANE_ASSIGNMENT_EXCEPTION: issue #763 may proceed without a gitea_allocate_next_work assignment when no native exact-target assignment tool is available
AUTHORIZED_CLAIM_PATH: after all live pins and duplicate-ownership gates pass, prgs-author may use the sanctioned native author issue-lock/claim tools to claim exactly #763 without ranking or selecting another issue
AUTHORIZED_WORK: implement only issue #763
MAXIMUM_NEW_PRS: 1
REQUIRED_PR_LINKAGE: Closes #763
REQUIRED_NEXT_PHASE: independent reviewer
PROTECTED_WORK: issue #605, its lease/lock/branch/worktree, and PR #762 must remain unchanged
AUTHORIZATION_TERMINATION: expires immediately when the #763 PR is published and its author handoff is posted
REAUTHORIZATION_REQUIRED_IF: PR #762 head changes, master changes before the #763 claim, #763 gains competing ownership, or any authorization pin differs
Why this amendment exists
Comment #12981 required the author to override ordinary allocator selection using the documented controller
candidates_jsonoverride. That path has now been proven unreachable through all three available MCP clients.The server declares the parameter as:
but every client decodes a JSON-looking string into a list before tool validation, so the server receives a list where it requires a string.
Most recent recorded result (Codex CLI 0.144.6):
No mutation occurred in any attempt, and authorization #12981 remains unconsumed.
Scope of this amendment
This amendment preserves comment #12981 in full except that it replaces the unreachable allocation method. Specifically:
ALLOCATOR_EXCEPTION: controller candidates_json overriderequirement in #12981 is superseded.MAXIMUM_NEW_PRS: 1, theCloses #763linkage requirement, the independent-reviewer next phase, and the termination and reauthorization conditions.Explicit limits
prgs-authorMCP claim/lock operations.candidates_jsonimplementation as part of #763.candidates_jsonmust not be retried.Mandatory stop condition
If the native issue claim/lock tooling independently requires an allocator assignment and supplies no exact-target path, the author must stop and report that new blocker. The author must not improvise an allocation, must not fall back to
candidates_json, and must not select a different issue in order to proceed.Tooling defect note
The
candidates_jsontransport incompatibility (server declaresstring | null; clients deliver a decoded list) should be recorded later as a separate tooling defect. It is explicitly not added to issue #763's implementation scope, and #763's acceptance criteria are unchanged by this amendment.Issue claim heartbeat