Gitea MCP namespaces returned Transport closed; recovered via host auto-reconnect at session startup #584
Open
opened 2026-07-09 12:02:37 -05:00 by jcwalker3
·
5 comments
No Branch/Tag Specified
master
fix/issue-709-decision-lock-cross-profile
fix/issue-695-native-transport-quarantine
fix/issue-698-report-validator-schema
fix/issue-702-stale-binding-lease-recovery
fix/issue-699-structured-auth-mcp-errors
fix/issue-695-native-quarantine-v2
fix/issue-693-review-decision-lock-recovery
fix/issue-691-obsolete-reviewer-lease-cleanup
feat/issue-687-reconciler-branch-delete
fix/issue-683-workflow-guard-hardening
chore/issue-681-preserve-review-session-wip
feat/issue-604-anti-stomp-preflight
feat/issue-606-sentry-observability
fix/issue-671-block-stable-branch-push
fix/issue-675-residual-preflight-remediation
fix/issue-673-remediate-regressions-part2
fix/issue-673-remediate-regressions
feat/issue-603-lifecycle-labels
fix/issue-627-set-issue-labels-pagination
feat/issue-601-first-class-leases
feat/issue-612-incident-bridge
feat/issue-600-controller-allocator-api
fix/issue-620-head-scoped-review-locks
feat/issue-613-allocator-db-substrate
docs/mcp-stable-control-runtime-policy
feat/issue-609-prepared-review-verdict-resume
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#584
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.
Problem (prior session)
Both Gitea MCP namespaces failed with
Transport closed, blocking all Gitea work (issue comments, PR creation, reviews, merges). Known failing checks:gitea-author.gitea_whoami(remote="prgs")→Transport closedgitea-reviewer.gitea_whoami(remote="prgs")→Transport closedRecovery action
No manual restart was issued. The MCP host/client auto-reconnected all four namespaces at session startup (
gitea-tools/author,gitea-reviewer,gitea-merger,gitea-reconciler) before the first tool call. Recovery was verify-only; no raw API, no process killing, no temp scripts, no MCP internals, no in-memory restoration.Process evidence (read-only
ps)22
mcp_server.pyprocesses across age cohorts:session_pid=22284/writer_pid=22284, inside this cohort.Stale orphans are not bound to the client stdio pipes — the live cohort answered both namespaces cleanly on the first call, so the orphans hold no transport. They idle. Recommend an operator sweep to reclaim them; not killed here (process-kill not operator-authorized).
Verification (run twice, stable)
gitea-author.gitea_whoami(prgs)jcwalker3, profileprgs-authorgitea-reviewer.gitea_whoami(prgs)sysadmin, profileprgs-reviewergitea-author.gitea_resolve_task_capability(comment_issue)allowed_in_current_session: true,restart_required: falsegitea-reviewer.gitea_resolve_task_capability(review_pr)allowed_in_current_session: true,boundary_clean: trueOutcome
Gitea MCP runtime healthy on both author and reviewer namespaces. Normal Gitea-Tools workflows may resume.
Note on #556
The original recovery task pointed at Issue #556, but #556 is closed and documents a different fault —
run_terminal_commandIO Error: No such file or directory (os error 2)(terminal launcher), not MCPTransport closed. Per operator direction, this evidence was filed as a new issue instead of mislabeling the closed terminal-launcher tracker.Recurrence — 2026-07-09 (mid-session flap, self-recovered)
New occurrence of the
Transport closedfailure this issue tracks, with two evidence points that extend the prior report.What happened
/mcpreconnected all four namespaces (gitea-merger, gitea-reconciler, gitea-reviewer, gitea-tools).gitea-tools(remote=prgs) all PASSED:gitea_whoami,gitea_get_runtime_context,gitea_get_shell_health.mcp__gitea-merger__gitea_get_runtime_contextreturnedError: No such tool available.gitea_whoami(prgs)re-verified PASS (jcwalker3 / prgs-author / keychain) after recovery.New evidence point 1 — flap is not startup-only
Prior report framed recovery as "auto-reconnect at session startup." This occurrence dropped mid-session, between two tool calls, then self-recovered mid-session. So the fault is not confined to the startup handshake; a live, healthy session can lose all four namespaces transiently.
New evidence point 2 — NOT a stale process-root binding
The immediately-prior
gitea_get_runtime_context(gitea-tools / prgs-author) proved a clean workspace binding right before the drop:ae6a3ae, stale=false, restart_required=falseFilesystem cross-check (read-only): author worktree
branches/mcp-author-clean-nsis onfeat/issue-543-mcp-namespace-health-check, HEADebd06b7, clean — matchesinspected_git_rootexactly. So the mutation-tool workspace was correctly bound to the cleanbranches/worktree. The fault is the transport channel closing, not a workspace/process-root binding defect.Classification
MCP transport closed (EOF-class), transient — self-recovered. No fail-closed gate fired; no server-side mutation occurred during the drop; reads worked up to the moment of disconnect.
Recommended operator action
gitea_whoami→gitea_resolve_task_capabilityimmediately before any mutation (done here before this comment)./mcp reconnectthe affected namespaces and follow theclient is closing: EOFrecovery runbook (commitf83d2c2, issue #543).Canonical Issue State
STATE: open — new reproduction from PR #680 reviewer recovery (transport EOF)
WHO_IS_NEXT: author
NEXT_ACTION: implement typed IDE-namespace EOF recovery + forbid manual server launch as recovery; add regression coverage
NEXT_PROMPT:
WHAT_HAPPENED: During PR #680 re-review recovery, a prior session finished local validation at head
3fd02a3but could not submit APPROVE after gitea-reviewer/gitea-author returned client is closing: EOF. Session also touched Antigravity mcp_config.json (added gitea-author/gitea-reviewer vs backup) and attempted direct server launch. This recovery session verified client-managed gitea-reviewer healthy (sysadmin/prgs-reviewer, master parity in_parity, namespace health healthy) without manual launches or config revert. Extra mcp_server.py daemons still present (~dozens); no gitea_mcp_server.py process now.WHY: Transport EOF leaves prepared approvals non-canonical; ad-hoc config/process recovery is unsafe and unproven.
RELATED_PRS: #680 (Closes #604); cross-ref #672 #609 #610 #630 #678 #681
BLOCKERS: product gap — no automated typed recovery for IDE EOF during review submit; orphan daemons unreclaimed
VALIDATION: this session client_namespace health healthy; whoami sysadmin/prgs-reviewer; assess_master_parity in_parity @ 22698c1; focused anti-stomp 43 passed at head 3fd02a3; Gitea still shows REQUEST_CHANGES stale on
ea8e186until approval submittedLAST_UPDATED_BY: sysadmin (prgs-reviewer)
Config delta (no secrets; no auto-revert)
Canonical Issue State
STATE: open — new manual MCP-server direct-launch violation recorded during PR #680 control-plane recovery
WHO_IS_NEXT: author
NEXT_ACTION: harden against manually-launched duplicate MCP servers and standalone-process health claims (requirements below); never treat a standalone process as a namespace
NEXT_PROMPT:
WHAT_HAPPENED:
During PR #680 recovery the Antigravity client reported EOF/transport-closed for the author and reviewer namespaces. A recovery session then manually launched the server directly instead of reconnecting through the client.
venv/bin/python3 gitea_mcp_server.pygitea_mcp_server.pyprocess is currently observable (read-onlyps); the direct-launched process did not persist. A separate manually-launched cohort of the client entrypointmcp_server.pyis alive on a controlling terminal — pids 6285 / 6286 / 6292 / 6294, stateS+, ttys001, spawned ~10:52 — distinct from client-managed instances which run with no controlling terminal (tty??)./opt/homebrew/.../Python /Users/jasonwalker/Development/Gitea-Tools/mcp_server.py(foreground, tty s001).CURRENT_SYMPTOMS: Antigravity client namespaces reported EOF for author/reviewer.
gitea-mergeris absent from the active Antigravitymcp_config.json(never installed — see #672). In the separate Claude Code client this session, all four namespaces — including a healthyprgs-merger— respond to live whoami; that does NOT repair the Antigravity client.WHY: Manual direct launches create duplicate/stale runtimes and produce false "healthy" signals that do not reflect the client-managed namespace the IDE actually calls. Health must be proven via a live client-namespace call, not by the existence of a process.
RELATED_PRS: #680 (blocked from a supported merger workflow through the Antigravity client)
BLOCKERS:
gitea-mergerabsent from active Antigravitymcp_config.json; Antigravity author/reviewer namespaces returned EOF; no automated manual-launch / duplicate-server detection exists yetVALIDATION: read-only
ps+ config diff only; no secrets printed; no process kill; standalone process explicitly NOT accepted as recovery. Related issues: #672 #543 #630 #655 #669.LAST_UPDATED_BY: jcwalker3 / prgs-author / control-plane-recovery / 2026-07-12
[THREAD STATE LEDGER] Issue #584 — manual duplicate mcp_server.py launch recorded as unsupported recovery; defect and guardrail issues filed (#685, #686)
What is true now:
What changed:
What is blocked:
Who/what acts next:
Manual-launch violation record (2026-07-12)
GITEA_MCP_CONFIG=/Users/jasonwalker/.config/gitea-tools/profiles.json GITEA_MCP_PROFILE=prgs-reviewer GITEA_DUMMY=2 venv/bin/python3 mcp_server.pyGITEA_MCP_CONFIG(profiles path),GITEA_MCP_PROFILE=prgs-reviewer,GITEA_DUMMY=2GITEA_DUMMY=2supported: NO — zero references anywhere in the codebase (grep over*.pyat22698c1); it is an ad hoc override that the server silently ignoresmcp_server.pyprocess (~56 across hourly cohorts, ~19:15 local) found none carryingGITEA_DUMMYin its environment; the manual process had already terminated before capture~/.gemini/antigravity-ide/mcp_config.jsonmtime 19:08:29;~/.gemini/config/mcp_config.jsonmtime 19:14:29, 2026-07-12 local)d302602) remains applicable, and verdict recording proceeds through the supported client-managed reviewer namespaceCanonical Issue State
STATE:
violation-recorded — remediation owned by #685 and #686
WHO_IS_NEXT:
author
NEXT_ACTION:
Implement #685 (resolver side-effect removal) then #686 (duplicate manual-launch detection/rejection); this issue remains the incident record
NEXT_PROMPT:
WHAT_HAPPENED:
A prior diagnostic run manually launched a duplicate prgs-reviewer role server with the unsupported GITEA_DUMMY=2 override during the transport-EOF incident this issue tracks. The launch could not and did not restore any IDE namespace, and the process later exited. The EOF itself is caused by the #685 resolver defect: gitea_resolve_task_capability's stale-runtime path touches mcp_config.json (os.utime) and terminates its own process via a delayed os._exit(0), verified at gitea_mcp_server.py:10888-10910 and :10994 on
22698c1.WHY:
Manual duplicate role servers are unsupported recovery: they cannot bind the IDE transport, they poison per-profile staleness detection (newest-process-wins map at gitea_mcp_server.py:10986), and they touch shared session/lease/lock state from unaudited provenance.
RELATED_PRS:
PR #684 — formal verdict recording delayed by this incident; independent review evidence in PR #684 comment 10606 at head
d302602BLOCKERS:
none for this record; any remediation blockers belong on #685/#686
VALIDATION:
LAST_UPDATED_BY:
jcwalker3 / prgs-author (controller defect-capture session) / 2026-07-12
Canonical Issue State
STATE: BLOCKED — client-managed reviewer namespace unavailable; repeated unsupported manual server launch recorded; formal approval not submitted.
WHO_IS_NEXT: user
NEXT_ACTION: Operator restores IDE-managed
gitea-reviewervia supported reconnect/reload only (not reconciler). Then start a new reviewer run from scratch for PR #684 headd302602. Do not relaunchmcp_server.pymanually.NEXT_PROMPT:
WHAT_HAPPENED:
Recovery attempt for PR #684/#683 reported immediate
gitea_whoamiEOF, and the recovery command log also shows another unsupported manual launch:Recorded facts:
gitea_whoami: EOF (repeat of this issue class)mcp_server.pyd302602not submitted)All runtime/identity/workflow/lease/capability/decision-marker/transport state from that process is untrusted. Controller did not re-launch MCP servers, edit config, kill processes, or submit review/merge.
WHY: Repeated EOF transport failure class plus explicit direct-launch reproduction with unsupported
GITEA_DUMMY=2and env-selectedprgs-revieweroutside the client manager.RELATED_PRS: PR #684 (head expected
d302602); product path #683; related defects #672, #685, #686.BLOCKERS: Client-managed
gitea-reviewernamespace not proven trustworthy after unsupported manual role-server launch; formal approval path blocked until operator reconnect + fresh reviewer run.VALIDATION: Live PR #684 open;
current_head_shashort-prefix matchd302602(d302602567a1fb7842fe5486fa5a49509506ec8b); no formal reviews yet (approval_visible=false); incident capture via supportedgitea-tools/prgs-authorcomment path only (not reviewer submit-review).LAST_UPDATED_BY: controller