Repository navigation
bug(review): native status timeout leaves authority inventory unavailable #213
Description
Pre-flight Checks
- I have searched existing issues and this is not a duplicate
- I understand this issue needs status:approved before a PR can be opened
Bug Description
The review controller can become permanently fail-closed when native review status times out during pre_native while graph-v1 has no CURRENT quorum and a legacy v2 transaction lock remains.
The native failure envelope reported mutation_outcome=not_started, retry_safe=false, and next_action=stop. Subsequent controller inspection reports status=blocked, outcome=native-status-unavailable, inventory_complete=false, and next_action=require-complete-native-authority-inventory. Because status explicitly forbids retry and inventory is incomplete, no supported recovery operation can be selected safely.
Related but not duplicate: #142, #149, #170, and #184. Those cover quorum loss, dead lock-owner metadata, invalidated current targets, or released-lock decoding individually; they do not cover this combined timeout plus absent quorum plus retained-lock state.
Steps to Reproduce
- Start from an existing review authority containing graph-v1 and legacy-v2 review-store artifacts.
- Reach a state where
reviews/graph-v1/CURRENT.0,CURRENT.1, andCURRENT.2are all absent whilereview-transactions/v2/LOCKremains. - Invoke native
review statusthrough the supported controller path. - Observe a timeout in
pre_nativewithmutation_outcome=not_started,retry_safe=false, andnext_action=stop. - Invoke controller
inspectonce. - Observe
native-status-unavailable,inventory_complete=false, andrequire-complete-native-authority-inventory.
Expected Behavior
Native status should return a bounded complete read-only authority inventory, or provide a version-matched audited recovery disposition that does not require retrying a command marked non-retryable. The controller should safely distinguish missing quorum pointers, a dead/stale lock owner, and any surviving authoritative lineage.
Actual Behavior
The controller remains blocked because native status cannot complete inventory and explicitly forbids retry. Manual lock deletion, CURRENT reconstruction, reset, recover, or repair cannot be selected safely without inventing authority.
Read-only evidence established:
- all three graph-v1
CURRENT.*pointers are absent; - the legacy v2 lock remains and references a PID absent from the process snapshot;
- no standalone
gentle-aior Git child process remained visible; - no authority mutation was attempted.
Operating System
macOS
Agent / Client
Other
Shell
zsh
Relevant Logs
native review status:
phase=pre_native
mutation_outcome=not_started
retry_safe=false
next_action=stop
controller inspect:
status=blocked
outcome=native-status-unavailable
inventory_complete=false
next_action=require-complete-native-authority-inventory
Additional Context
gentle-pi package: 1.2.0
Bundled Gentle AI directory: v2.1.11
Binary SHA-256: 4e39e520abf116a53ff5e36a0cd65756b6fadfa528489f21e9c722bfa00af620
Requested maintainer decision:
- Which supported read-only diagnostic can complete inventory after this non-retryable timeout?
- Which audited, version-matched operation should reconcile missing graph-v1 quorum with the retained legacy lock?
- Should timed-out native subprocess cancellation or status scan bounds be changed to prevent this dead-end?
Activity
Alan-TheGentleman commentedon Sep 6, 2026
One real contributor to native STATUS timeouts is now fixed on the gentle-ai side: the lens-context budget probe re-rendered the whole candidate once per selected lens on every STATUS poll (gentle-ai #3733 and #3871). The specific scenario here, graph quorum loss plus a stale v2 lock, runs through the authority repair path and needs a typed partial-inventory contract before the host can render anything useful. That is a native design decision, so this stays open as needs-design until that contract exists.
Sechi42 commentedon Oct 2, 2026
Related observation on Windows x64 with gentle-pi 4.0.0 and Pi 1.0.0.
One gentle_review inspect selecting three new files in an isolated sibling worktree returned a typed failure before candidate START:
No START was attempted for this candidate. We stopped without retry, reset, recovery, lock deletion, or configuration changes. Existing work was preserved.
This may be related to the timeout/incomplete-inventory boundary reported here, but equivalence and root cause are unconfirmed. We have NOT established the missing-quorum or retained-legacy-lock conditions described in this issue. There has been no fresh reproduction after the stop.
Could a maintainer confirm whether this belongs here and identify the supported read-only diagnostic or continuation for this failure?
dnlrsls commentedon Oct 8, 2026
Could you update this report in place using the current bug report form, including the problem, steps to reproduce, expected and actual behavior, gentle-pi and Pi versions, operating system, and the search/privacy confirmations? Keeping the missing information here will help distinguish related STATUS failures without opening a duplicate.
One additional observed incident on Windows may be useful while completing the report:
operation_timeout, phasepre_native, andcontext deadline exceeded. It reportedmutation_outcome: not_started,authority_applicability: not_evaluated,retry_safe: false,replayability: manual_action_required, andnext_action: stop. That stop was respected; there were no subsequent lifecycle retries, captures, or acknowledgement.Please include sanitized timing and executable provenance if available, and explicitly mark unknown version details rather than inferring them. The current evidence does not justify attributing this incident to a zombie process or replaying a nonretryable STATUS.
dnlrsls commentedon Oct 8, 2026
Please incorporate this scoped diagnostic design into the report in place, alongside the missing bug-form details requested above. Maintainer approval covers instrumentation only, not a reproduced, explained, or fixed timeout.
Diagnostic scope
Source boundaries
Acceptance criteria
Native stage instrumentation is a separate follow-up only if subsequent authorized evidence localizes the delay there. No code changes or tests have been executed for this design.
dnlrsls commentedon Oct 10, 2026
Investigation update: #1950 merged the opt-in STATUS timing diagnostics and Windows fixture corrections. It did not reproduce or fix the original macOS timeout. This issue remains open, and investigation of the original incident is blocked on missing preserved evidence.
Three isolated inventory-contract checks passed, with independent read-only evidence audits:
The tested completeness condition is already handled in the pinned modern snapshot, so these results do not justify a duplicate production fix. The original timeout cause and a safe, audited, version-matched continuation remain unestablished. Next, we need already-preserved, sanitized original error/controller payloads, invocation timing and executable provenance, and any contemporaneous authority classification or OS-lock evidence. pre_native is a failure classification, not proof of where execution stalled; stale PID metadata is not proof of lock ownership. No additional STATUS retry, real-authority mutation, recovery, or capture was performed for these checks, and none is proposed to obtain this evidence.