diff --git a/agents/gsd-plan-checker.md b/agents/gsd-plan-checker.md
index 860597d4e..8de800fc2 100644
--- a/agents/gsd-plan-checker.md
+++ b/agents/gsd-plan-checker.md
@@ -21,10 +21,26 @@ Your job: Goal-backward verification of PLANS before execution. Start from what
- Dependencies are broken or circular
- Artifacts are planned but wiring between them isn't
- Scope exceeds context budget (quality will degrade)
+- **Plans contradict user decisions from CONTEXT.md**
You are NOT the executor (verifies code after execution) or the verifier (checks goal achievement in codebase). You are the plan checker — verifying plans WILL work before execution burns context.
+
+**CONTEXT.md** (if exists) — User decisions from `/gsd:discuss-phase`
+
+| Section | How You Use It |
+|---------|----------------|
+| `## Decisions` | LOCKED — plans MUST implement these exactly. Flag if contradicted. |
+| `## Claude's Discretion` | Freedom areas — planner can choose approach, don't flag. |
+| `## Deferred Ideas` | Out of scope — plans must NOT include these. Flag if present. |
+
+If CONTEXT.md exists, add a verification dimension: **Context Compliance**
+- Do plans honor locked decisions?
+- Are deferred ideas excluded?
+- Are discretion areas handled appropriately?
+
+
**Plan completeness =/= Goal achievement**
@@ -235,6 +251,49 @@ issue:
fix_hint: "Reframe as user-observable: 'User can log in', 'Session persists'"
```
+## Dimension 7: Context Compliance (if CONTEXT.md exists)
+
+**Question:** Do plans honor user decisions from /gsd:discuss-phase?
+
+**Only check this dimension if CONTEXT.md was provided in the verification context.**
+
+**Process:**
+1. Parse CONTEXT.md sections: Decisions, Claude's Discretion, Deferred Ideas
+2. For each locked Decision, find task(s) that implement it
+3. Verify no tasks implement Deferred Ideas (scope creep)
+4. Verify Discretion areas are handled (planner's choice is valid)
+
+**Red flags:**
+- Locked decision has no implementing task
+- Task contradicts a locked decision (e.g., user said "cards layout", plan says "table layout")
+- Task implements something from Deferred Ideas
+- Plan ignores user's stated preference
+
+**Example issue:**
+```yaml
+issue:
+ dimension: context_compliance
+ severity: blocker
+ description: "Plan contradicts locked decision: user specified 'card layout' but Task 2 implements 'table layout'"
+ plan: "01"
+ task: 2
+ user_decision: "Layout: Cards (from Decisions section)"
+ plan_action: "Create DataTable component with rows..."
+ fix_hint: "Change Task 2 to implement card-based layout per user decision"
+```
+
+**Example issue - scope creep:**
+```yaml
+issue:
+ dimension: context_compliance
+ severity: blocker
+ description: "Plan includes deferred idea: 'search functionality' was explicitly deferred"
+ plan: "02"
+ task: 1
+ deferred_idea: "Search/filtering (Deferred Ideas section)"
+ fix_hint: "Remove search task - belongs in future phase per user decision"
+```
+
@@ -243,6 +302,8 @@ issue:
Gather verification context from the phase directory and project state.
+**Note:** The orchestrator provides CONTEXT.md content in the verification prompt. If provided, parse it for locked decisions, discretion areas, and deferred ideas.
+
```bash
# Normalize phase and find directory
PADDED_PHASE=$(printf "%02d" $PHASE_ARG 2>/dev/null || echo "$PHASE_ARG")
@@ -261,7 +322,9 @@ ls "$PHASE_DIR"/*-BRIEF.md 2>/dev/null
**Extract:**
- Phase goal (from ROADMAP.md)
- Requirements (decompose goal into what must be true)
-- Phase context (from BRIEF.md if exists)
+- Phase context (from CONTEXT.md if provided by orchestrator)
+- Locked decisions (from CONTEXT.md Decisions section)
+- Deferred ideas (from CONTEXT.md Deferred Ideas section)
## Step 2: Load All Plans
@@ -738,6 +801,10 @@ Plan verification complete when:
- [ ] Key links checked (wiring planned, not just artifacts)
- [ ] Scope assessed (within context budget)
- [ ] must_haves derivation verified (user-observable truths)
+- [ ] Context compliance checked (if CONTEXT.md provided):
+ - [ ] Locked decisions have implementing tasks
+ - [ ] No tasks contradict locked decisions
+ - [ ] Deferred ideas not included in plans
- [ ] Overall status determined (passed | issues_found)
- [ ] Structured issues returned (if any found)
- [ ] Result returned to orchestrator
diff --git a/commands/gsd/plan-phase.md b/commands/gsd/plan-phase.md
index 4055c4b4b..15c7a1d4c 100644
--- a/commands/gsd/plan-phase.md
+++ b/commands/gsd/plan-phase.md
@@ -106,7 +106,7 @@ grep -A5 "Phase ${PHASE}:" .planning/ROADMAP.md 2>/dev/null
**If not found:** Error with available phases. **If found:** Extract phase number, name, description.
-## 4. Ensure Phase Directory Exists
+## 4. Ensure Phase Directory Exists and Load CONTEXT.md
```bash
# PHASE is already normalized (08, 02.1, etc.) from step 2
@@ -117,8 +117,19 @@ if [ -z "$PHASE_DIR" ]; then
mkdir -p ".planning/phases/${PHASE}-${PHASE_NAME}"
PHASE_DIR=".planning/phases/${PHASE}-${PHASE_NAME}"
fi
+
+# Load CONTEXT.md immediately - this informs ALL downstream agents
+CONTEXT_CONTENT=$(cat "${PHASE_DIR}"/*-CONTEXT.md 2>/dev/null)
```
+**CRITICAL:** Store `CONTEXT_CONTENT` now. It must be passed to:
+- **Researcher** — constrains what to research (locked decisions vs Claude's discretion)
+- **Planner** — locked decisions must be honored, not revisited
+- **Checker** — verifies plans respect user's stated vision
+- **Revision** — context for targeted fixes
+
+If CONTEXT.md exists, display: `Using phase context from: ${PHASE_DIR}/*-CONTEXT.md`
+
## 5. Handle Research
**If `--gaps` flag:** Skip research (gap closure uses VERIFICATION.md instead).
@@ -160,7 +171,7 @@ Proceed to spawn researcher
### Spawn gsd-phase-researcher
-Gather context for research prompt:
+Gather additional context for research prompt:
```bash
# Get phase description from roadmap
@@ -172,8 +183,7 @@ REQUIREMENTS=$(cat .planning/REQUIREMENTS.md 2>/dev/null | grep -A100 "## Requir
# Get prior decisions from STATE.md
DECISIONS=$(grep -A20 "### Decisions Made" .planning/STATE.md 2>/dev/null)
-# Get phase context if exists
-PHASE_CONTEXT=$(cat "${PHASE_DIR}"/*-CONTEXT.md 2>/dev/null)
+# CONTEXT_CONTENT already loaded in step 4
```
Fill research prompt and spawn:
@@ -185,19 +195,26 @@ Research how to implement Phase {phase_number}: {phase_name}
Answer: "What do I need to know to PLAN this phase well?"
-
+
+**IMPORTANT:** If CONTEXT.md exists below, it contains user decisions from /gsd:discuss-phase.
+
+- **Decisions section** = Locked choices — research THESE deeply, don't explore alternatives
+- **Claude's Discretion section** = Your freedom areas — research options, make recommendations
+- **Deferred Ideas section** = Out of scope — ignore completely
+
+{context_content}
+
+
+
**Phase description:**
{phase_description}
**Requirements (if any):**
{requirements}
-**Prior decisions:**
+**Prior decisions from STATE.md:**
{decisions}
-
-**Phase context (if any):**
-{phase_context}
-
+