Cross-repository MCP workspace binding fails because canonical repo root is derived from script location #706
Open
opened 2026-07-13 21:01:07 -05:00 by jcwalker3
·
1 comment
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
No labels
type:bug
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#706
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
The Gitea-Tools MCP server blocks cross-repository namespaces (like
eagenda-author) because it derives thecanonical_repo_rootfrom the MCP script's execution path rather than the configured workspace binding.When validating author mutations in a cross-repository namespace, the mutation guards (
assess_workspace_repo_membershipandassess_author_mutation_worktree) assume the task workspace must belong to the same.gitdirectory as the Gitea-Tools installation (PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))). This permanently blocks mutations for external repositories.Reproduction
eagenda-author) inmcp_config.jsonrunning the Gitea-Tools server script, but withcwdand target repository set to an external project (e.g.eAgenda).branches/path assertions because they are evaluated against the Gitea-Tools root instead of the eAgenda root.Acceptance Criteria
PROJECT_ROOT) and namespace-specific repository workspace root (process_project_root/ canonical repo root).cwdor environment variables) so that the MCP server correctly identifies the target repository.prgsandmdcps(or other remote) namespaces.Downstream Blocker
This defect currently blocks the eAgenda document-management reconciliation task, which depends on a functioning
eagenda-authornamespace.Related Context
Canonical Issue State
STATE: Blocked
WHO_IS_NEXT: user
NEXT_ACTION: Fix cross-repository workspace binding logic in
namespace_workspace_binding.pyorgitea_mcp_server.py.NEXT_PROMPT:
WHAT_HAPPENED: The eAgenda umbrella and eight child issues remain blocked. Downstream eAgenda validation showed that the native
eagenda-authordaemon restarted correctly on current master with identity913443/mdcps-authorand required read/create/comment capabilities. The MCPcwdpoints to the clean eAgenda author worktree. However,runtime_contextstill reports bothcanonical_repository_rootandactive_task_workspace_rootas/Users/jasonwalker/Development/Gitea-Tools.WHY: The hardcoded workspace binding logic persists on the current deployed master, proving this is not stale-process or client-configuration residue.
RELATED_PRS: N/A
BLOCKERS: Gitea-Tools MCP server is resolving the workspace root based on the script directory rather than the passed
cwd. Unblock condition: The server must successfully parse the MCP client's cwd and bind active_task_workspace_root to it.VALIDATION:
gitea_whoamiandgitea_get_runtime_contextwere called natively on theeagenda-authorserver; no direct API, CLI bypass, process kill, or cross-project patch was attempted.LAST_UPDATED_BY: Antigravity AI