refactor: hard-fork GSD -> MSD (Make Software Done)
Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD across contents and paths, upstream package/repo coordinates -> @golem15/msd-core and golem15com/msd-core. Deep links into upstream history, sibling upstream packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is. Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line, package/plugin identity, regenerated lockfile, install-tree fixtures, derived registries and benchmark baseline; migration checksum baseline re-locked (MSD keeps its own install state, so no install had applied the old sums); sort-order and regex-escaped expectations in tests adjusted.
This commit is contained in:
@@ -431,10 +431,10 @@ const isSentinelPhase = (num: string, bracketId?: string): boolean => {
|
||||
|
||||
// #2761 M1: missing-detail identity is milestone-qualified under bracket.
|
||||
// Prefer the canonical qualified-key owner, which case-folds accepted ids, so
|
||||
// `[gsd.02] 01` and `[GSD.02] 01` are one occurrence. It is intentionally not
|
||||
// `[msd.02] 01` and `[MSD.02] 01` are one occurrence. It is intentionally not
|
||||
// padding-tolerant: the milestone grammar has one canonical spelling (pad2
|
||||
// below 100, no leading zero above), so `[GSD.2]` is malformed rather than an
|
||||
// alternate spelling of `[GSD.02]`. Hyphenated tokens and other shapes the
|
||||
// below 100, no leading zero above), so `[MSD.2]` is malformed rather than an
|
||||
// alternate spelling of `[MSD.02]`. Hyphenated tokens and other shapes the
|
||||
// qualified-key owner refuses retain a folded composite, keeping distinct
|
||||
// bracket/token pairs from collapsing onto one missing-detail verdict.
|
||||
const occurrenceKey = (num: string, bracketId?: string): string => {
|
||||
@@ -546,7 +546,7 @@ function collectAnalyzePhases(
|
||||
// heading/checklist patterns above already thread. Left two-argument, this
|
||||
// one call reported EVERY canonical `{CODE}.{MM}-{PP}-slug` directory as
|
||||
// `disk_status: "no_directory"` with `plan_count`/`summary_count` 0 —
|
||||
// `extractPhaseToken('GSD.02-01-one')` with no convention returns the whole
|
||||
// `extractPhaseToken('MSD.02-01-one')` with no convention returns the whole
|
||||
// dir name — while the same build resolved those same directories correctly
|
||||
// in three other places on the same repo (W006/W007 through their shared
|
||||
// directory matcher, `state json` via the milestone filter, and the W026
|
||||
@@ -766,7 +766,7 @@ function cmdRoadmapAnalyze(cwd: string, raw: boolean): void {
|
||||
// IDs (e.g. `1-01`) match the detail-heading scanner above; otherwise they truncate
|
||||
// at the dash (`1-01` -> `1`) and every such phase reports a phantom missing detail.
|
||||
// #612: CAPTURING label-only intro — the bracket id rides along so the
|
||||
// sentinel filter below is not blind to `- [ ] **[GSD.999] 01: Icebox**`.
|
||||
// sentinel filter below is not blind to `- [ ] **[MSD.999] 01: Icebox**`.
|
||||
// phase-id-owner: uses the [.-] (dot-or-dash) separator variant, not the canonical dot-only token; a swap to PHASE_NUMBER_TOKEN_SOURCE would drop hyphenated phase-id matches.
|
||||
// #3036: widen to accept non-numeric-leading ids (same widening as the detail-heading pattern above).
|
||||
// phase-id-owner: uses the [.-] (dot-or-dash) separator variant, not the canonical dot-only token; a swap to PHASE_NUMBER_TOKEN_SOURCE would drop hyphenated phase-id matches.
|
||||
@@ -774,7 +774,7 @@ function cmdRoadmapAnalyze(cwd: string, raw: boolean): void {
|
||||
// #2761 M1: an OCCURRENCE list keyed by `occurrenceKey`, not a token->bracket
|
||||
// map. The map was first-wins on the bare token, so of two checklist entries
|
||||
// sharing a token across brackets the FIRST one's bracket id classified BOTH:
|
||||
// `- [ ] **[GSD.999] 01: Icebox**` written above `- [ ] **[GSD.02] 01: …**`
|
||||
// `- [ ] **[MSD.999] 01: Icebox**` written above `- [ ] **[MSD.02] 01: …**`
|
||||
// made the real phase inherit the icebox's sentinel verdict and vanish from
|
||||
// `missing_phase_details`; written below it, the same document reported it.
|
||||
// Dedupe still happens — it is now per PHASE rather than per token, which is
|
||||
@@ -1005,7 +1005,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
// Verification gate (#2022): do NOT check the phase checkbox or stamp a
|
||||
// completion date until the phase's verification status is 'passed', matching
|
||||
// cmdPhaseComplete's gate (phase.cts:1436). Previously the checkbox fired the
|
||||
// moment the last plan summary landed — before gsd-verifier had verified.
|
||||
// moment the last plan summary landed — before msd-verifier had verified.
|
||||
//
|
||||
// ADR-3180 §7.4 (issue #3186, disk-strict): routed through the canonical
|
||||
// owner (`isPhaseComplete`) instead of hand-rolling `summaryCount >=
|
||||
@@ -1160,7 +1160,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
|
||||
// Update plan count in phase detail section.
|
||||
// Three recognised forms (all tolerated; canonical template uses the first):
|
||||
// `**Plans**: N plans` — bold word + outer colon (gsd-core/templates/roadmap.md)
|
||||
// `**Plans**: N plans` — bold word + outer colon (msd-core/templates/roadmap.md)
|
||||
// `**Plans:** N plans` — bold "Plans:" (colon inside bold)
|
||||
// `Plans: N plans` — plain text header
|
||||
//
|
||||
@@ -1169,7 +1169,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
// `Plans:` label + trailing whitespace (unchanged). Group $2 = the existing
|
||||
// count token to replace: matches `N/N plans complete`, `N/N plans executed`,
|
||||
// or the bare template `N plan(s)` form — singular is part of the tool's OWN
|
||||
// grammar (gsd-core/templates/roadmap.md:62 ships `**Plans**: 1 plan` as the
|
||||
// grammar (msd-core/templates/roadmap.md:62 ships `**Plans**: 1 plan` as the
|
||||
// documented one-plan-phase shape), so the `s` is optional there (bug #3584
|
||||
// Finding B; pre-fix a bare `1 plan` fell into the drop-everything path and
|
||||
// was accidentally overwritten with the correct count — post-fix it must be
|
||||
@@ -1182,7 +1182,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
// 1. $2 present (a real count token) → rewrite the token, preserve $3
|
||||
// verbatim (an annotation a human wrote after a real count; #2853).
|
||||
// 2. $2 absent AND $3, trimmed, is the fresh-template PLACEHOLDER shipped
|
||||
// by gsd-core/templates/roadmap.md — either
|
||||
// by msd-core/templates/roadmap.md — either
|
||||
// `[Number of plans, e.g., "3 plans" or "TBD"]` (line 37) or
|
||||
// `[Number of plans]` (lines 51/75/88) → replace it with the computed
|
||||
// count. Detected POSITIVELY on the distinctive `Number of plans`
|
||||
@@ -1212,7 +1212,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
: `${summaryCount}/${planCount} plans executed`;
|
||||
// Positive detector for the fresh-template placeholder ONLY (bug #3584
|
||||
// Finding A). Anchored to the distinctive `Number of plans` wording that
|
||||
// gsd-core/templates/roadmap.md actually ships, not to "anything in
|
||||
// msd-core/templates/roadmap.md actually ships, not to "anything in
|
||||
// brackets" — a bracketed human annotation like `[Deferred pending
|
||||
// re-scope]` is structurally bracketed too but carries none of this
|
||||
// wording, so it correctly falls through to arm 3 untouched. Kept as a
|
||||
@@ -1225,7 +1225,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
// Positive detectors for the two "real count token" shapes (#2853 /
|
||||
// #3584 Finding B): a fraction count (`N/M plans complete|executed`) or a
|
||||
// bare singular/plural count (`N plan`/`N plans`, the fresh single-plan
|
||||
// template shape at gsd-core/templates/roadmap.md:62). Either one is an
|
||||
// template shape at msd-core/templates/roadmap.md:62). Either one is an
|
||||
// existing count token to overwrite (arm 1), never template placeholder
|
||||
// (arm 2) or freeform prose (arm 3).
|
||||
// #4906 regression fix: PREFIX match (not full-string) — a real count
|
||||
@@ -1252,7 +1252,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
}
|
||||
const fieldId = findField(parsed.value, 'Plans');
|
||||
if (!fieldId) {
|
||||
// #4906 regression (#1163, caught by gsd-test): a hand-edited or
|
||||
// #4906 regression (#1163, caught by msd-test): a hand-edited or
|
||||
// pre-template ROADMAP.md may carry a PLAIN (non-bold) `Plans:` line
|
||||
// rather than the canonical `**Plans**:`/`**Plans:**` bold field.
|
||||
// BOLD_FIELD_RE is deliberately bold-only (widening it to any bare
|
||||
@@ -1399,7 +1399,7 @@ function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string | null | und
|
||||
// where a single alternation would stop at the first matching alternative
|
||||
// (the bold summary) before reaching the checklist header.
|
||||
//
|
||||
// Canonical template (gsd-core/templates/roadmap.md) uses BOTH lines:
|
||||
// Canonical template (msd-core/templates/roadmap.md) uses BOTH lines:
|
||||
// **Plans**: N plans ← summary (colon outside bold)
|
||||
// Plans: ← checklist header (PREFERRED insertion anchor)
|
||||
// Rows must land after `Plans:`, not between the summary and the header.
|
||||
|
||||
Reference in New Issue
Block a user