feat(repo-scope)!: one repo= target on every tool, resolved in one place #685
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sixfold-space/madtea#685
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This supersedes ADR 0027 (launch scope is the credential boundary). ADR 0019 (foreign primary checkouts are immutable) stays. The PR that builds this adds the superseding ADR.
Problem
I work across two forges every day. madtea names a target repo in three ways, and each tool supports its own subset:
owner_repo=: a repo on the launch forge only, because it has no host (#468);dir=: a local checkout, but only on some tools (#485, #638).So the same repo is named two ways, many tools cannot reach a repo on the other forge, and each tool parses its own target.
I measured this over my own agent sessions: 10,574 madtea calls. 4,204 used
dir=, 3,141 usedowner_repo=, and 3,101 used no target. One repo got 331 calls byowner_repo=and 234 bydir=. 6 of 7 cross-forgeowner_repo=calls returned a 404 from the wrong forge. 16madt_issuescalls withdir=hit the ADR 0027 refusal for an action outside the report carve-out.Decision
repo=, on every tool that acts on a repo.repo=takes a local path (a clone or a linked worktree; madtea reads the forge and owner/name from its origin) orhost/owner/namefor a forge repo with no checkout, for examplegit.cheshirecube.cloud/sixfold-space/madtea.owner_repo=anddir=go away.Related
#468, #485, and #638 each describe one part of this problem.
Acceptance
repo=, and no other target field.host/owner/nameon each of two forges.madt_help repo-scopedocuments the one form.One more forge-bound path for the list above, which the body does not mention:
madt_api_call. The raw passthrough takes no repo or dir target (APICallInputininternal/mcp/tools_api.go) and resolves the launch forge's own credentials (config.GetCredentials), so a call to a repo on the other forge returns a 404 from the launch forge. I confirmed this live: a GET of an issue on the other forge came back 404 from the launch forge.repo=is specified for "every tool that acts on a repo", butmadt_api_callacts on an endpoint, not a repo, so it falls outside that wording. Worth deciding whether the escape hatch also takes a host selector, so a raw call can reach the other forge, or stays launch-forge-only by design. Relates to #668.