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:
Jakub Zych
2026-10-06 01:47:40 +02:00
parent fe069b2a56
commit a9a7a328e6
2763 changed files with 78465 additions and 78434 deletions

View File

@@ -8,7 +8,7 @@
## Context
Twelve open `confirmed-bug` issues are one defect: **GSD's durable state lives in prose markdown,
Twelve open `confirmed-bug` issues are one defect: **MSD's durable state lives in prose markdown,
and every verb brings its own regex to it.**
Two seams already exist for this and both are correct. `markdown-sectionizer` ([ADR-1372](1372-markdown-sectionizer-seam.md)) owns
@@ -29,7 +29,7 @@ own doc comment describes a *caller-must-re-escape contract*, i.e. an obligation
simply not discharge — and is applied per column at `:852-862` on the *generated* path, not this
one. A task description containing a
Jinja filter permanently ragged the table, and `quick-tasks-migrate` cannot help because the next
`/gsd-quick` re-corrupts it ([#4736](https://github.com/open-gsd/gsd-core/issues/4736)). A project
`/msd-quick` re-corrupts it ([#4736](https://github.com/open-gsd/gsd-core/issues/4736)). A project
that migrates is not out of the state. Symmetrically, `parseDecisions` rejects a second colon in a
plain-prose bold lead-in — text `discuss-phase` itself emits — forcing
`outcome: "could-not-parse"` and hard-blocking `check.decision-coverage-plan`
@@ -86,7 +86,7 @@ landed in `roadmap-parser.cjs`; `init.cjs:2229`, `:2401`, `:3044` and `milestone
unanchored `gi` copies, while `init.cjs:116` — in the same file as three of them — is anchored
correctly ([#4865](https://github.com/open-gsd/gsd-core/issues/4865)). The codebase disagrees with
itself inside one file. Same shape in
[#4661](https://github.com/open-gsd/gsd-core/issues/4661) (`/gsd:undo`'s unanchored ERE over
[#4661](https://github.com/open-gsd/gsd-core/issues/4661) (`/msd:undo`'s unanchored ERE over
`git log`), [#4605](https://github.com/open-gsd/gsd-core/issues/4605) /
[#4606](https://github.com/open-gsd/gsd-core/issues/4606) (`pr-branch`'s `STRUCTURAL_RE`), and
[#4499](https://github.com/open-gsd/gsd-core/issues/4499) (`frontmatter.set` reformatting block
@@ -180,7 +180,7 @@ which is the defect. A parity test per field kind asserts the pair.
A value that cannot be represented in the grammar is **refused** by the writer, with a report. A
writer never emits a document its own reader must reject.
Prose-interpolated table rows in shipped workflow markdown are replaced by a `gsd_run` verb that
Prose-interpolated table rows in shipped workflow markdown are replaced by a `msd_run` verb that
appends through the seam, so the escaping is executed once rather than restated in prose.
#### 4a. `accepted ⊇ emittable` — the accept-but-never-emit rule
@@ -190,7 +190,7 @@ writer may produce it). `emittable ⊆ accepted`, asserted. A grammar may be acc
This is **Postel's Law applied at the right level**, and it is worth stating why, because the naive
reading argues the opposite. Postel's own guidance splits by level: *internal system-to-system —
stricter on both ends; user-facing input — more liberal.* GSD's planning artifacts are **both**.
stricter on both ends; user-facing input — more liberal.* MSD's planning artifacts are **both**.
They are written by the tool and hand-edited by humans — the epic's stated constraint is that they
*"stay human-readable and hand-editable; that is the constraint, not the problem."* So the reader is
liberal toward a human's variation (#4793 is a reader being wrong to reject prose a human, or
@@ -272,7 +272,7 @@ So enforcement is two mechanisms with stated scopes:
> untouched. Extending it would have meant teaching a registry checker about regex shapes.
**Stated coverage limit.** A lint over `src/*.cts` cannot see #4736's writer, which is prose in
`gsd-core/workflows/quick.md`. Decision 4's `gsd_run` verb is what brings that surface inside the
`msd-core/workflows/quick.md`. Decision 4's `msd_run` verb is what brings that surface inside the
fence; the lint does not, and this ADR does not pretend otherwise.
### 7. Every parser ships a positive control per accepted grammar
@@ -293,7 +293,7 @@ discipline, because the accept-only grammars are by definition ones the writer c
### 8. Exactly one implementation of a shared pattern, proven by a drift guard
The phase-heading pattern has one owner. Five copies (#4865) collapse to one, proven by the
existing drift-guard idiom rather than by review attention. Same rule for `/gsd:undo`'s scope
existing drift-guard idiom rather than by review attention. Same rule for `/msd:undo`'s scope
selector (#4661) and `pr-branch`'s `STRUCTURAL_RE` (#4605, #4606): the pattern is a property of the
seam's grammar, not a literal each call site owns.
@@ -332,7 +332,7 @@ are fixed" is not a passing census.
## Phases
Each phase is one `chore(#4906): … — Phase N` sub-issue + PR, gated on `gsd-test`, and each carries
Each phase is one `chore(#4906): … — Phase N` sub-issue + PR, gated on `msd-test`, and each carries
the three criteria above.
- **Phase 0 — this ADR.** Design lock. Docs-only. Closes [#4910](https://github.com/open-gsd/gsd-core/issues/4910) only; #4906 stays open.
@@ -361,7 +361,7 @@ the three criteria above.
- *Census:* every typed field kind in the registry; each must resolve to exactly one
escape-or-refuse function, exported by the reader's module.
- *Deletion:* `quick.md` Step 7c's prose interpolation is **removed**, not corrected in place —
replaced by a `gsd_run` verb that appends through the seam. This is the arm no lint over
replaced by a `msd_run` verb that appends through the seam. This is the arm no lint over
`src/*.cts` can reach, so deleting the prose is the only mechanism available.
- *Unrepresentable:* `emittable ⊆ accepted` asserted **over the registry**, so a new field kind
inherits the check instead of needing one written for it.
@@ -456,7 +456,7 @@ Two consequences for the phases:
- **Risk — the honest one.** Behaviour-preserving migrations regress subtle formatting, and this
seam's whole value proposition is formatting fidelity. Mitigated by §3's byte-stability property
test, the fail-first regression per absorbed issue, §7's positive controls, and the per-phase
`gsd-test` gate. [ADR-2143](2143-markdown-table-and-mutation-consolidation.md)'s own Phase 5 exists because a coverage re-check found a seam its
`msd-test` gate. [ADR-2143](2143-markdown-table-and-mutation-consolidation.md)'s own Phase 5 exists because a coverage re-check found a seam its
Phase 0 had left unowned; `/adr-phase-coverage` runs again at epic closeout for that reason.
- **Risk — naming.** `planning-document` beside `plan-document` (§1). Live until absorption lands.
- **Non-goals.** Repairing the twelve at their existing call sites (the pattern that produced them