Conversation
There was a problem hiding this comment.
Pull request overview
Adds a “brownfield change continuity” lane centered on .planning/brownfield-change/CHANGE.md (plus HANDOFF.md / VERIFICATION.md), including deterministic precedence rules between checkpoints vs. the brownfield anchor and explicit widen-only escalation into milestone workflows.
Changes:
- Introduces brownfield continuity parsing + mismatch detection and exposes it via provenance/lifecycle helpers.
- Updates core workflow surfaces (resume/progress/quick/map-codebase/new-project/new-milestone/plan) to treat
CHANGE.mdas the operational anchor, gate on material mismatches, and keep/gsdd-new-projectas widen-only when continuity is already concrete. - Expands guard/scenario/unit tests and updates distilled design/evidence indices to lock the new contracts.
Reviewed changes
Copilot reviewed 17 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/phase.test.cjs | Adds unit coverage for brownfield precedence + brownfield mismatch acknowledgement gating. |
| tests/gsdd.scenarios.test.cjs | Extends scenario assertions to ensure generated skills preserve brownfield continuity/widen-only messaging. |
| tests/gsdd.guards.test.cjs | Adds new guard suites for brownfield artifact/continuity/growth contracts and plan anti-drift gates. |
| post-draft.md | Present in PR file list; currently empty. |
| package.json | Removes a keyword entry. |
| docs/RUNTIME-SUPPORT.md | Refines runtime support wording. |
| distilled/workflows/resume.md | Adds brownfield-change detection, strict-match checkpoint precedence, and acknowledgement gating for material mismatches. |
| distilled/workflows/quick.md | Reads brownfield continuity first when present; reframes /gsdd-new-project as widen-only when continuity is concrete. |
| distilled/workflows/progress.md | Reports active brownfield continuity read-only; applies strict-match rule before checkpoint routing. |
| distilled/workflows/plan.md | Adds roadmap phase contract gate + expanded anti-drift plan schema/checker dimensions. |
| distilled/workflows/new-project.md | Treats existing CHANGE.md continuity as widen-only; reuses brownfield artifacts as widening inputs. |
| distilled/workflows/new-milestone.md | Adds explicit brownfield widening inputs + context-preserving guidance for phase design. |
| distilled/workflows/map-codebase.md | Makes /gsdd-new-project recommendation explicitly widen-only. |
| distilled/README.md | Updates “Current Status” header/date label. |
| distilled/EVIDENCE-INDEX.md | Indexes new design decisions and associated evidence locations. |
| distilled/DESIGN.md | Adds D53–D57 decision sections and updates TOC. |
| bin/lib/provenance.mjs | Implements brownfield mismatch classification and strict-match checkpoint precedence; extends provenance snapshot. |
| bin/lib/lifecycle-state.mjs | Adds brownfield-change state extraction + non-phase lifecycle classification. |
| bin/lib/init-runtime.mjs | Updates help text positioning. |
| README.md | Refines qualified-support wording. |
| CHANGELOG.md | Adjusts a milestone “framework state” line wording. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| 1. **No `.planning/` directory** — route user to run `gsdd init`. Stop. | ||
| 2. **No `.planning/SPEC.md` or no `.planning/ROADMAP.md`** — `.planning/` exists but the project is not fully initialized (partial init). Route user to run the `/gsdd-new-project` workflow. Stop. | ||
| 3. **Both exist** — proceed to load state. | ||
| 2. **If `.planning/brownfield-change/CHANGE.md` exists** — this repo has an active medium-scope brownfield change. Proceed to load brownfield continuity state even if there is no active roadmap. | ||
| 3. **No `.planning/SPEC.md` or no `.planning/ROADMAP.md`** — `.planning/` exists but the project is not fully initialized (partial init). Route user to run the `/gsdd-new-project` workflow. Stop. | ||
| 4. **Both exist** — proceed to load state. |
| }); | ||
| }); | ||
|
|
||
| describe('G47 - Brownfield Growth And Milestone Handoff', () => { |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a708627dc2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| 53. [Fail-Closed Milestone And Phase Contracts](#d53---fail-closed-milestone-and-phase-contracts) | ||
| 54. [Bounded Brownfield Change Folder Contract](#d54---bounded-brownfield-change-folder-contract) | ||
| 55. [Brownfield Continuity Anchor And Mismatch Split](#d55---brownfield-continuity-anchor-and-mismatch-split) | ||
| 56. [Executable Brownfield Routing And Widen-Only Escalation](#d56---executable-brownfield-routing-and-widen-only-escalation) | ||
| 57. [Bounded Brownfield Growth And Context-Preserving Milestone Handoff](#d57---bounded-brownfield-growth-and-context-preserving-milestone-handoff) |
There was a problem hiding this comment.
Keep public decision counts in sync with DESIGN registry
This commit adds decisions 53–57 to the DESIGN registry, which increases the documented total to 57, but the public docs still claim 52 decisions (e.g., README.md and distilled/README.md), so the documentation invariants now fail and release-facing metadata is inconsistent. Please update the published decision-count claims in the README surfaces whenever new decision sections are added here.
Useful? React with 👍 / 👎.
| : status.files | ||
| .map((file) => file.path) | ||
| .filter((filePath) => !ownedPaths.some((ownedPath) => matchesOwnedPath(filePath, ownedPath))); |
There was a problem hiding this comment.
Normalize rename paths before brownfield scope checks
The scope mismatch check compares raw status.files[].path values directly against owned-path hints, but for renames git status --short emits paths like old.txt -> new.txt; that combined string will not match exact owned entries (such as new.txt), so in-scope renames are incorrectly flagged as brownfield_scope_mismatch and escalated to acknowledgement-required. Parse rename entries into the destination path (or both sides) before this filter so rename-only changes in owned files don’t trigger false material mismatches.
Useful? React with 👍 / 👎.
No description provided.