proposal.md is the change-request document a brownfield workflow writes before any requirements: why the change is needed, what observably changes, the technical solution or the capabilities affected, and the impact on existing code, data, APIs, and users. Every claim is grounded in files the AI actually read, and it defines the scope the delta requirements and tasks must stay inside.
Nobody re-draws a finished house to move one wall. The contractor walks the site, writes a change order - what moves, why, which pipes and wires are in the way, what it costs - and the client signs it before anyone picks up a hammer. A greenfield bundle starts from a blank plot; a brownfield change starts from what is already standing, and the proposal is the walk-through.
Why brownfield work starts with a proposal
The failure mode of AI on an existing codebase is confident fiction: modules that do not exist, a dependency that was replaced last year, an API "improvement" that breaks three callers. The proposal forces the model to read first and to write down, with file references, what it found - so the requirements delta and the tasks that follow are anchored in the real repository, and a reviewer can check them against it.
The hard rule: read real files first
Both brownfield workflows refuse to advance past their entry stage until a local-workspace tool has actually returned file contents. The agent prefers packing the whole repository once (local_pack_codebase) and then grepping and reading specific files as your answers point at new areas. You provide the code one of two ways:
# The interview / explore stage will not advance until real files were read:
npx -y @myspec/mcp-server login # once
npx -y @myspec/mcp-server reverse --root . # from your project root, keep it running
# …or click "Mount folder" in the chat's Local Workspace panel (Chrome / Edge) Nothing outside the granted root is reachable, access is read-only, and secret files are excluded. Details on the MCP server page.
The MySpec proposal
Written by the MySpec brownfield workflow to specs/<change>/proposal.md (the bundle name is a kebab-case verb phrase such as add-oauth-login). Four sections, in order; the title distinguishes a wide-scope Change Proposal from a single-module Change Request.
# Change Proposal: [Project Name]
<!-- or "# Change Request:" for a small change isolated in one module -->
## Why
2–5 sentences: the problem, the current behaviour, the modules / files involved.
Brownfield: describe what is changing and why now - not a greenfield build.
## What Changes
- One observable change per bullet (new behaviour, modified behaviour, removals)
## Technical Solution
### Library/Framework Changes new dependency, bump, or replacement - and why
### Core Flow Changes Mermaid sequence / flow: before → after
### Data Model / DB Schema Changes Mermaid erDiagram of the affected entities
### API Breaking Changes or "No breaking API changes."
## Impact
Affected code, data, APIs, users, migrations; backward-incompatible changes; risks. - Technical Solution is the engineering core: a subsection is omitted only with an explicit "No library changes." - never silently.
- Two diagrams are expected - a Mermaid sequence or flow diagram for the changed core flow, and an
erDiagramfor schema changes. - Not in this file: the full requirement text (that is the requirements delta) or a task breakdown.
The OpenSpec proposal
Written by the OpenSpec workflow to openspec/changes/<change-id>/proposal.md. Instead of a technical solution it names the capabilities the change touches - and that list is a contract: the specs stage must write exactly one delta spec.md per capability, no more, no fewer.
# Add session rename
## Why
Users cannot rename a chat session after the AI titles it; the summary lives in
context.sessionSummary (platform/internal/modules/project/domain/session.go) and only
the agent writes it.
## What Changes
- A rename action on the session list and chat header
- PATCH /project/v1/sessions/:id accepts { sessionSummary } (≤ 500 chars)
## Capabilities
### Modified Capabilities
- `webapp`: session list menu and chat header gain a rename dialog
- `platform`: session service validates and persists a user-supplied summary
## Impact
No schema change; realtime clients receive session.renamed; no breaking API changes.
A capability is the domain, module, or component being changed - webapp, user-auth, onboarding - never the change itself. Short (a single domain noun is ideal; at most three words or 25 characters), stable, kebab-case, and reused across changes, because on apply each delta accrues into the long-lived openspec/specs/<capability>/spec.md baseline. add-session-rename is a change id; webapp is the capability it modifies.
Authoring and review rules
- Every claim - especially in Technical Solution - traces to a file the agent read; module and file names are real.
- Each "What Changes" bullet is a single observable change.
- Mermaid diagrams are syntactically valid; OpenSpec capability names are valid domain nouns.
- Output is raw Markdown with no document footer and no code-fence wrapper.
- A greenfield-style description of the whole product instead of the change.
- Invented files, modules, or dependencies; a Technical Solution subsection quietly missing.
- Requirement text or implementation steps that belong in later files.
What the proposal unlocks
- MySpec: a Requirements Delta grouped by the same module names, then an optional tasks.md traced to its AR-/BR-/CR- codes.
- OpenSpec: one delta spec.md per capability, an optional design.md, and a
tasks.mdwith one group per capability - all under the change folder the OpenSpec CLI reads. - Either way: the proposal is the document to share with the team for sign-off before the delta is written - a public share link or the MCP server's
read_spec_fileputs it in front of them.
Related spec files
Project vision, core principles, and the MUST / MUST NOT constraints every later file has to obey.
User roles, FR-/NFR- requirements with EARS+ acceptance criteria; a coded AR-/BR-/CR- delta for brownfield changes.
Architecture, modules, data model, and API design with Mermaid flowchart, ER and sequence diagrams - plus C4 diagrams when your organisation enables them.
Ordered, sized implementation tasks grouped into milestones, traced back to requirement IDs.
Why a brownfield change is needed, what changes, the technical solution, and its impact on existing code.
Spec Kit's prioritised user stories and success criteria, or OpenSpec's ADDED / MODIFIED / REMOVED / RENAMED requirement deltas.
Spec Kit's technical plan: technical context, constitution gates, architecture, data model, and key decisions.
OpenSpec's optional context, goals / non-goals, decisions, and risks for a change.
Workflows that write it
The default four-file bundle: interview → constitution → requirements → solution → tasks.
GitHub Spec Kit's feature-scoped flow: interview → constitution → specify → plan → tasks.
OpenSpec's change-proposal flow: explore → proposal → delta specs → design → tasks.
Let the AI Architect write it for you
MySpec interviews you, then drafts every spec file with collect → generate → review gates. Free during Open Beta.