a-workspace-reaches-the-repository — A vendor workspace reads the repository, and proposes to it only where the owner has decided it may
Read-only connector first; a proposal path only after an ADR amends ADR 0126.
BLOCKED 0 of 2 issues done
- ready
- 0
- blocked
- 2
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
The pull path brings decisions in after the fact; the owner asked twice for ChatGPT to act on the repository directly, and the only legitimate shape (a custom MCP connector) runs into ADR 0126 for any mutation and into a tunnel that makes remote callers look local. Sources: chatgpt-majordomus:c239#7, chatgpt-majordomus:c267#2, chatgpt-majordomus:c239#4.
Outcome
Read-only connector first; a proposal path only after an ADR amends ADR 0126.
Current state
MCP over HTTP on the shared server; ADR 0126 admits only reads and signed-input capabilities beyond loopback; intent.propose is repository_mutation.
Desired state
A vendor caller reads the plan; with the owner's decision, proposes intents carrying their workspace reference.
Scope
- apps/majordomus-cli/src/http
- apps/majordomus-cli/src/mcp
- .ai/repo/adrs
- docs/MCP.md
Out of scope
- Public hosting
- Writes without a person accepting them
Acceptance criteria
- A vendor caller is refused every mutation until the ADR exists
- A tunnel cannot grant loopback authority
- Intent criteria a-vendor-reads-and-never-writes and a-proposal-names-its-source
Validation
- majordomus plan validate
Risks
- Vendor plan limits on write tools are unverified
- Generalising this into a platform before the pull path is proven (lesson)
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I3285 | BLOCKED | 1 | I2123 | A vendor workspace reads the plan through the authenticated remote MCP surface, and a tunnel never makes it look local |
| I3286 | BLOCKED | 2 | I3285, I3281 | A proposal from a workspace arrives as intent.propose carrying the workspace reference it came from |
The graph
flowchart LR
I3285["I3285<br/>A vendor workspace reads the plan through the authenticated remote MCP surface, and a tunnel never makes it look local"]:::blocked
I3286["I3286<br/>A proposal from a workspace arrives as intent.propose carrying the workspace reference it came from"]:::blocked
I3285 --> I3286
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxCanonical record: .ai/repo/project/milestones/a-workspace-reaches-the-repository.yaml. Read it back with majordomus plan show a-workspace-reaches-the-repository.