dsh-plugin-upgrade 0.1.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +146 -47
- package/CHANGELOG.md +92 -32
- package/README-es.md +241 -0
- package/README-hi.md +241 -0
- package/README-pt.md +241 -0
- package/README-zh.md +241 -0
- package/README.md +115 -46
- package/SECURITY.md +1 -1
- package/THIRD_PARTY_NOTICES.md +3 -3
- package/cordis.patch.yml +6 -6
- package/docs/EVIDENCE.md +354 -0
- package/index.mjs +21 -17
- package/lib/route.mjs +112 -0
- package/lib/scan-0.1.6.mjs +310 -0
- package/lib/scan.mjs +264 -31
- package/package.json +55 -10
- package/scripts/changelog-section.mjs +1 -0
- package/scripts/check-readme-sync.mjs +4 -1
- package/scripts/scan-0.1.5.mjs +20 -6
- package/scripts/sweep-all.mjs +6 -2
- package/scripts/verify-artifacts.mjs +44 -14
- package/scripts/verify-self-contained.mjs +13 -3
- package/skills/plugin-upgrade/SKILL.md +88 -0
- package/skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md +421 -0
- package/skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md +75 -0
- package/skills/plugin-upgrade/scripts/scan-0.1.5.mjs +29 -0
- package/types.d.ts +39 -7
- package/README.es.md +0 -172
- package/README.hi.md +0 -172
- package/README.pt.md +0 -172
- package/README.zh.md +0 -172
- package/skills/plugin-upgrade-015/SKILL.md +0 -38
- package/skills/plugin-upgrade-015/references/v0.1.3-alpha.1-to-v0.1.5-alpha.1.md +0 -90
- package/skills/plugin-upgrade-015/scripts/scan-0.1.5.mjs +0 -14
package/AGENTS.md
CHANGED
|
@@ -1,37 +1,95 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
2
|
|
|
3
|
-
Standalone DeepSeek Harness plugin repository (`dsh-plugin-upgrade`). Development
|
|
4
|
-
the dsh-plugin-guide skill and the official plugin contract; this file records
|
|
5
|
-
decisions. Read `README.md` (external contract) and the packaged
|
|
6
|
-
(`skills/plugin-upgrade
|
|
7
|
-
|
|
3
|
+
Standalone DeepSeek Harness plugin repository (`dsh-plugin-upgrade`). Development
|
|
4
|
+
follows the dsh-plugin-guide skill and the official plugin contract; this file records
|
|
5
|
+
repo-local decisions. Read `README.md` (external contract) and the packaged merged corridor
|
|
6
|
+
card (`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md`) before changing
|
|
7
|
+
behavior.
|
|
8
|
+
|
|
9
|
+
## A corridor never widens (and one package may carry several closed corridors)
|
|
10
|
+
|
|
11
|
+
- **A corridor never widens.** This package upgrades plugins across `0.1.3-alpha.1 →
|
|
12
|
+
0.1.5-rc.1` and nothing else. Do not widen the peer band or the card to "all versions":
|
|
13
|
+
a drifting card is worse than no card. A hop that adds a seam is a new package.
|
|
14
|
+
- **One package may carry several *closed* corridors.** That is what this repository is: one
|
|
15
|
+
npm package holding leg A (`0.1.3-alpha.1 → 0.1.5-alpha.1`) and leg B (`0.1.5-alpha.1 →
|
|
16
|
+
0.1.5-rc.1`) as **two closed corridors of one span**, each keeping its own evidence, card
|
|
17
|
+
section, fixtures and rollback path. Neither leg may absorb a third hop.
|
|
18
|
+
- **This supersedes the family's earlier rule.** The retired `dsh-plugin-upgrade` and
|
|
19
|
+
`dsh-plugin-upgrade-rc1` each carried a "**The corridor is locked** … a new corridor is a
|
|
20
|
+
new package" section plus "**zero code dependency on the sibling corridor**: no `import`,
|
|
21
|
+
no vendoring, no shared `SEAMS`". The owner deliberately superseded the second half of that
|
|
22
|
+
pair: the merged package **does** share one `SEAMS` (one scanner, one catalog, one
|
|
23
|
+
id-parity gate) because the two legs are contiguous hops of one span. What survives
|
|
24
|
+
unchanged is the numbering discipline — a corridor is *closed*, not open-ended — and the
|
|
25
|
+
per-leg ownership below.
|
|
26
|
+
|
|
27
|
+
Consequences accepted by this repository:
|
|
28
|
+
|
|
29
|
+
- The merged catalog (20 seams: `S3`, `S8`, `S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`,
|
|
30
|
+
`S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`, `H2`, `H4`, `H3`) is evidence-bound to the two
|
|
31
|
+
tag ranges it was measured on — leg A `dsh-v0.1.5-alpha.1` (2026-09-09 wave over 40 plugin
|
|
32
|
+
repos) and leg B `dsh-v0.1.5-alpha.1..dsh-v0.1.5-rc.1` (2026-09-10). A hop after
|
|
33
|
+
`0.1.5-rc.1` (rc.2, the final release, anything later) is a **new package**, not a wider
|
|
34
|
+
card. The harness hop `0.1.5-rc.1 → 0.1.5-rc.2` added no plugin-facing seam, which is why
|
|
35
|
+
the span ends at rc.1 while the dev/test pin and the CI probe run on `0.1.5-rc.2`.
|
|
36
|
+
- **Leg A owns the session-format seams** (`assistant/message.stream`, `S3`;
|
|
37
|
+
`SessionHandleReadResult`, `S8`; `EpochHeader.system`, `S2`; `ctx.agent`, `S5`; `Inbox`,
|
|
38
|
+
`S6`; `SystemPrompt.persona`, `S9`; the V3 log generation, `S1`) and **leg B does not
|
|
39
|
+
restate them** — measured: the whole `packages/core/session/src` diff inside leg B's range
|
|
40
|
+
is two added event-type literals and one comment line. Each leg's card section keeps its own
|
|
41
|
+
scope statement; restating across legs is drift.
|
|
42
|
+
- **`C3` is retired.** Leg B's card spelled the stale-type-line false green `C3`; it is the
|
|
43
|
+
same defect as leg A's `M1` and is folded into it, so `M1` carries both causes (an
|
|
44
|
+
unresolvable `tsconfig` `paths` alias and dev/test types pinned at `0.1.5-alpha.*`). The
|
|
45
|
+
card records the old spelling in the fold notes, but `C3` is not a seam id: `--seams C3`
|
|
46
|
+
matches nothing and `types.d.ts` does not accept it.
|
|
47
|
+
- The peer band is **unchanged** by both legs. `>=0.1.2-rc.1 <0.2.0` alone rejects
|
|
48
|
+
`0.1.5-rc.1` under npm semver's prerelease-tuple rule (measured `false` on semver 7.8.5);
|
|
49
|
+
the `|| >=0.1.5-alpha.1 <0.2.0` segment is what admits it. `P1` forbids dropping it, and
|
|
50
|
+
this package's own `peerDependencies` keeps both segments.
|
|
51
|
+
- The `C1` ruling (the bare `conversation` slot removal is a **public extension-point
|
|
52
|
+
break**, kept at `error`, with a rewrite recipe and a real-browser exit criterion) is
|
|
53
|
+
recorded in card §2 §3.3. Do not downgrade it to an advisory without new upstream
|
|
54
|
+
evidence (an alias, a shim, or an official migration note).
|
|
8
55
|
|
|
9
56
|
## Layout (JS form, pure host, no browser half)
|
|
10
57
|
|
|
11
58
|
```
|
|
12
59
|
index.mjs single host face: Config schema + skill bundle reader + apply()
|
|
13
|
-
types.d.ts Config, SeamHit, ScanReport and the public function surface
|
|
14
|
-
lib/scan.mjs zero-dependency seam catalog + scanner + CLI main()
|
|
60
|
+
types.d.ts Config, SeamId, SeamHit, ScanReport and the public function surface
|
|
61
|
+
lib/scan.mjs zero-dependency merged seam catalog (both legs) + scanner + CLI main()
|
|
15
62
|
scripts/scan-0.1.5.mjs thin bin wrapper (npx dsh-plugin-upgrade-scan)
|
|
16
|
-
skills/plugin-upgrade
|
|
17
|
-
so the skill body's `./scripts/...` resolves against its
|
|
63
|
+
skills/plugin-upgrade/scripts/scan-0.1.5.mjs the same wrapper inside the skill
|
|
64
|
+
directory, so the skill body's `./scripts/...` resolves against its
|
|
65
|
+
resourceBase
|
|
18
66
|
scripts/sweep-all.mjs maintainer tool: sweep a workspace of plugin repos into a table
|
|
19
67
|
scripts/changelog-section.mjs print one CHANGELOG section for GitHub Release notes
|
|
20
68
|
scripts/verify-self-contained.mjs every import resolves inside the package
|
|
21
|
-
scripts/verify-artifacts.mjs pack + inspect the published tarball
|
|
69
|
+
scripts/verify-artifacts.mjs pack + inspect the published tarball (also asserts that
|
|
70
|
+
test/, fixtures/ and .github/ do NOT ship, and that a
|
|
71
|
+
leg-A seam fails the packaged CLI)
|
|
22
72
|
scripts/check-readme-sync.mjs five-language README consistency
|
|
23
|
-
skills/plugin-upgrade
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
73
|
+
skills/plugin-upgrade/SKILL.md the bundled skill body (frontmatter name is the skill id;
|
|
74
|
+
it routes the caller to the leg matching its peer band)
|
|
75
|
+
skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md the merged card:
|
|
76
|
+
§1 Leg A, §2 Leg B, §3 the 20-seam index
|
|
77
|
+
test/scan.test.mjs synthetic bad/good fixtures for BOTH legs + --seams + a live negative
|
|
78
|
+
test/plugin.test.mjs real Cordis Context + real SkillRegistry: register, dispose, negatives
|
|
79
|
+
test/card.test.mjs the card↔catalog id/severity parity gate
|
|
80
|
+
fixtures/ scanner fixtures — never published:
|
|
81
|
+
bad-repo / good-repo leg B (client-slot oriented)
|
|
82
|
+
leg-a-bad-repo / leg-a-good-repo leg A (TypeScript/session oriented)
|
|
83
|
+
docs/EVIDENCE.md the command→output record every card claim traces to
|
|
84
|
+
(§A = leg A's provenance, §1–§10 = leg B's records)
|
|
85
|
+
cordis.patch.yml bundle declaration (insert dsh-plugin-upgrade); every
|
|
86
|
+
Config key inline
|
|
29
87
|
pnpm-workspace.yaml nearest-workspace root (isolates this repo from a surrounding harness checkout)
|
|
30
88
|
package.json npm metadata; files whitelist = published content
|
|
31
|
-
.github/workflows/ CI (3 OS × 2 Node), monthly compat probe, v* npm release
|
|
32
|
-
plugin-doctor static R/K gate, OpenSSF Scorecard
|
|
89
|
+
.github/workflows/ CI (3 OS × 2 Node), monthly compat probe, v* npm release + GitHub
|
|
90
|
+
Release, plugin-doctor static R/K gate, OpenSSF Scorecard
|
|
33
91
|
README.md English primary (GitHub default page; source of truth)
|
|
34
|
-
README
|
|
92
|
+
README-{zh,es,pt,hi}.md translations, top switcher, updated in the same commit
|
|
35
93
|
CHANGELOG.md Keep a Changelog, [Unreleased] at the top
|
|
36
94
|
SECURITY.md private vulnerability reporting + scope
|
|
37
95
|
THIRD_PARTY_NOTICES.md install-time dependencies (none bundled)
|
|
@@ -40,38 +98,52 @@ LICENSE Apache-2.0
|
|
|
40
98
|
|
|
41
99
|
## Hard rules applied here
|
|
42
100
|
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
|
|
101
|
+
- **`C1` is an error, never a warning.** The deletion has no alias and the injection callback
|
|
102
|
+
never runs, so the only honest level is error. Only promote `C4`/`C5`/`H1`/`H2`/`H4` from
|
|
103
|
+
advisory to error with evidence and a fixture that proves the false positive is gone.
|
|
104
|
+
- **`M1` and `P1` are blockers, never warnings.** If the local type line is stale (either
|
|
105
|
+
cause), or the peer band lost its second segment, every other local signal is fake. `M1`
|
|
106
|
+
and `P1` are **structured** checks, so their catalog `test` is `null` without being
|
|
107
|
+
card-only.
|
|
108
|
+
- **The leg-A error seams stay errors.** `S3`, `S8`, `S9`, `S4`, `S5` and `S6` each make a
|
|
109
|
+
repo that looks green fail on the target host; only demote one with new upstream evidence.
|
|
110
|
+
- **Advisory seams stay advisory.** `S7`/`S2`/`S1`/`S10` and `C4`/`C5`/`H1`/`H2`/`H4` have
|
|
111
|
+
legitimate matches; they are leads for manual review. Only promote one to `error` with
|
|
112
|
+
evidence and a fixture that proves the false positive is gone.
|
|
113
|
+
- **`H3` is card-only.** It is documented, id-parity checked, and deliberately has no
|
|
114
|
+
detector; `CARD_ONLY` is exactly `['H3']` and the test suite asserts it stays that way.
|
|
48
115
|
- **The scanner is read-only and dependency-free.** No network, no child process, no write
|
|
49
116
|
inside `--repo`; `lib/scan.mjs` imports only `node:fs` and `node:path`. Keep it that way.
|
|
50
|
-
- **Advisory seams stay advisory.** `S7`/`S1`/`S2`/`S10` have legitimate matches; they are
|
|
51
|
-
leads for manual review. Only promote one to `error` with evidence and a fixture that
|
|
52
|
-
proves the false positive is gone.
|
|
53
117
|
- **A clean scan is necessary, not sufficient.** Never describe a scan as proof of
|
|
54
|
-
adaptation
|
|
118
|
+
adaptation: this span's breakage is silent from both ends, so a session-log writer needs a
|
|
119
|
+
resume round-trip (`S3`), a client half needs a real browser assertion, and the card's exit
|
|
120
|
+
criterion is a real-host smoke on a temp `DSH_HOME`.
|
|
121
|
+
- **The card and the catalog are one catalog.** `test/card.test.mjs` fails when their ids or
|
|
122
|
+
severities disagree, and when the card mints an id outside the merged 20. Change the card
|
|
123
|
+
first, then the catalog, in the same commit.
|
|
55
124
|
- **Mount loud.** A missing `SKILL.md`, an empty body, or a frontmatter without `name` must
|
|
56
125
|
abort the mount. Never register a placeholder skill.
|
|
57
126
|
- **The skill id is the frontmatter name.** `skillName` selects the directory; the registered
|
|
58
|
-
name comes from the file. Keep the
|
|
127
|
+
name comes from the file. Keep the four in sync (`plugin-upgrade`: directory,
|
|
128
|
+
frontmatter `name`, `package.json` Config default, `cordis.patch.yml`).
|
|
59
129
|
- **Registration is an effect.** `ctx.skills.register()` runs inside `ctx.effect()` so the
|
|
60
130
|
disposer removes the contribution on unload; the test asserts that.
|
|
61
131
|
- **No build step.** Pure ESM: `index.mjs` + `lib/` are the shipped artifacts. There is no
|
|
62
132
|
`build`/`prepare` script — keep it that way.
|
|
63
133
|
- **Optional seams fail closed.** `skills` is a hard `inject`; if the service is absent the
|
|
64
134
|
plugin waits rather than registering into a void.
|
|
135
|
+
- **License headers.** `// SPDX-License-Identifier: Apache-2.0` is the first line of every
|
|
136
|
+
source file; `# SPDX-License-Identifier: Apache-2.0` heads `cordis.patch.yml`.
|
|
65
137
|
|
|
66
138
|
## Checks
|
|
67
139
|
|
|
68
140
|
```sh
|
|
69
|
-
pnpm install
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
141
|
+
npm install # or: pnpm install (pnpm-lock.yaml is committed)
|
|
142
|
+
npm test # node --test: scanner (both legs) + card parity + real-registry mount
|
|
143
|
+
npm run verify:self-contained # every import resolves inside the package
|
|
144
|
+
npm run verify:artifacts # tarball contents + entry import + dev-only content excluded
|
|
145
|
+
npm run check:readmes # five-language README consistency
|
|
146
|
+
npm pack # the published tarball
|
|
75
147
|
```
|
|
76
148
|
|
|
77
149
|
`pnpm-workspace.yaml` keeps `minimumReleaseAge: 0`: pnpm 11 enables a 1440-minute age gate by
|
|
@@ -81,23 +153,50 @@ after every harness release.
|
|
|
81
153
|
|
|
82
154
|
## Release
|
|
83
155
|
|
|
84
|
-
Version is currently `0.1.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
156
|
+
Version is currently `0.1.0`. The npm name `dsh-plugin-upgrade` is brand new, so
|
|
157
|
+
this package starts its own version line at `0.1.0`; the two retired packages' histories live
|
|
158
|
+
in `CHANGELOG.md` under `[Unreleased]` and below. For a new version: bump
|
|
159
|
+
`package.json#version`, stamp the CHANGELOG `[Unreleased]` section into `## [<x.y.z>] - <UTC
|
|
160
|
+
date>`, re-run the full gate, commit `chore(release): <x.y.z>`, and `git tag -a v<x.y.z>`.
|
|
161
|
+
`git push origin main --follow-tags` triggers `.github/workflows/release.yml`, which re-runs
|
|
162
|
+
the gate, publishes to npm with provenance (skipped without the `NPM_TOKEN` secret) and
|
|
163
|
+
creates the GitHub Release from the stamped CHANGELOG section behind an idempotent
|
|
164
|
+
`gh release view` guard. Never push a tag for a version already on the registry.
|
|
165
|
+
**Publish incident (2026-09-10, the first tag of the retired `dsh-plugin-upgrade-rc1`).**
|
|
166
|
+
`v0.1.0`'s first run failed in `Publish to npm` with `*** is not a legal HTTP header value`,
|
|
167
|
+
after the provenance statement had already been signed and published to the transparency log.
|
|
168
|
+
The step read the token through setup-node's `${NODE_AUTH_TOKEN}` expansion at the time; it
|
|
169
|
+
now normalises line breaks and writes `//registry.npmjs.org/:_authToken=…` into
|
|
170
|
+
`NPM_CONFIG_USERCONFIG` itself. The rewritten step reports whether the secret carried line
|
|
171
|
+
breaks, and it reported **no** — so the trailing-newline hypothesis is disproven and the
|
|
172
|
+
mechanism of the env-expanded failure is NOT established. What is established: that path
|
|
173
|
+
failed, the directly written userconfig publishes. `v0.1.0` was re-tagged onto the fix
|
|
174
|
+
(allowed: the version was not on the registry yet). The rewritten step is inherited by this
|
|
175
|
+
package unchanged; do not reintroduce `${NODE_AUTH_TOKEN}` without re-testing it.
|
|
90
176
|
|
|
91
177
|
The scanner catalog is evidence-bound: a version bump that changes a seam must update the
|
|
92
|
-
card, the fixtures and `CHANGELOG.md` in the
|
|
178
|
+
card, `docs/EVIDENCE.md`, the fixtures **of the leg it belongs to** and `CHANGELOG.md` in the
|
|
179
|
+
same commit.
|
|
180
|
+
|
|
181
|
+
**Post-publish integration (not done in this repository's history yet).** The README badge
|
|
182
|
+
row expects `PerryLink/dsh-plugin-doctor` to carry a
|
|
183
|
+
`PerryLink__dsh-plugin-upgrade.svg` badge, and the family also enrols each package
|
|
184
|
+
in the Gitee mirror, the `dsh-catalog` directory and the omdsh workshop list. Those are
|
|
185
|
+
release-side steps performed from the family workspace after the first tag. The two retired
|
|
186
|
+
package names stay on the registry (unpublished content is not removed by publishing a new
|
|
187
|
+
name); their README/card wording is now historical.
|
|
93
188
|
|
|
94
189
|
## Docs
|
|
95
190
|
|
|
96
|
-
- Five-language READMEs (`README.md` is the source; `README
|
|
97
|
-
`README
|
|
98
|
-
commit; `check:readmes` enforces the shared
|
|
191
|
+
- Five-language READMEs (`README.md` is the source; `README-zh.md`, `README-es.md`,
|
|
192
|
+
`README-pt.md`, `README-hi.md` follow). Every behavior change updates all five in the same
|
|
193
|
+
commit; `check:readmes` enforces the shared section count and the install line in CI.
|
|
99
194
|
- GitHub topics `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`,
|
|
100
|
-
`plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner` (mirror
|
|
101
|
-
keywords; the ecosystem's visibility channel is the `dsh-plugin` topic).
|
|
195
|
+
`plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner`, `client-slots` (mirror
|
|
196
|
+
`package.json` keywords; the ecosystem's visibility channel is the `dsh-plugin` topic).
|
|
102
197
|
- License is Apache-2.0 (`LICENSE` + the package.json `license` field).
|
|
103
198
|
`THIRD_PARTY_NOTICES.md` documents install-time dependencies; nothing is bundled.
|
|
199
|
+
- Every factual claim in the card or the scanner traces to a command recorded in
|
|
200
|
+
`docs/EVIDENCE.md` — §A for leg A's provenance (via the retired `dsh-plugin-upgrade` card,
|
|
201
|
+
now merged in as Leg A) and §1–§10 for leg B's records. Where a claim could not be verified
|
|
202
|
+
it is marked **unverified** and kept out of the card.
|
package/CHANGELOG.md
CHANGED
|
@@ -5,52 +5,112 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
9
|
-
|
|
10
|
-
## [0.1.3] - 2026-09-10
|
|
8
|
+
## [2.0.0] - 2026-09-19
|
|
11
9
|
|
|
12
10
|
### Changed
|
|
13
11
|
|
|
14
|
-
-
|
|
12
|
+
- The retired name returns as the new-generation single package: one package, one corridor index. It absorbs the merged corridor 0.1.3-alpha.1 -> 0.1.5-rc.1 that lived in dsh-plugin-upgrade-015 (legs A+B, 20 seams) and it is the package the later corridor 0.1.5-rc.2 -> 0.1.6-alpha.2 (E1-E5, from dsh-plugin-upgrade-016) is folded into.
|
|
13
|
+
- The skill and the CLI are one entry point: the scanner detects the caller peer band and routes to the matching corridor; the corridor index is the growth point (a new corridor adds a card and an index row, not a new package).
|
|
14
|
+
- Names: the skill id is plugin-upgrade and the CLI is dsh-plugin-upgrade-scan.
|
|
15
15
|
|
|
16
|
-
###
|
|
16
|
+
### Supersedes
|
|
17
17
|
|
|
18
|
-
-
|
|
18
|
+
- dsh-plugin-upgrade-015 (npm 0.1.1) - its corridors are carried here.
|
|
19
|
+
- dsh-plugin-upgrade-rc1 and the old 0.1.x line of this name.
|
|
19
20
|
|
|
21
|
+
## [0.1.1] - 2026-09-12
|
|
20
22
|
|
|
21
|
-
## [0.1.
|
|
23
|
+
## [0.1.0] - 2026-09-11
|
|
22
24
|
|
|
23
|
-
###
|
|
25
|
+
### Added
|
|
24
26
|
|
|
25
|
-
- **
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
- **Merged corridor: one package for `0.1.3-alpha.1 → 0.1.5-rc.1`.** This package supersedes
|
|
28
|
+
the two version-locked npm names `dsh-plugin-upgrade` (leg A, `0.1.3-alpha.1 →
|
|
29
|
+
0.1.5-alpha.1`, seams `S1`–`S10` + `M1`) and `dsh-plugin-upgrade-rc1` (leg B,
|
|
30
|
+
`0.1.5-alpha.1 → 0.1.5-rc.1`, seams `C1`, `C2`, `C4`, `C5`, `H1`–`H4`, `P1`). The npm name
|
|
31
|
+
is new, so the version line restarts at `0.1.0`; the two retired names stay on the registry
|
|
32
|
+
and their content is now historical.
|
|
33
|
+
- **One 20-seam catalog** — `lib/scan.mjs` carries both legs in catalog order (`S3`, `S8`,
|
|
34
|
+
`S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`, `S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`,
|
|
35
|
+
`H2`, `H4`, `H3`) behind one CLI, one skill and one id-parity gate.
|
|
36
|
+
- **Seam `C3` was folded into `M1`.** Leg B's `C3` was the same defect as leg A's `M1` (a
|
|
37
|
+
local gate compiling a stale type line), so the merged catalog has one seam carrying both
|
|
38
|
+
causes: an unresolvable `tsconfig` `paths` alias and dev/test types pinned at
|
|
39
|
+
`0.1.5-alpha.*`. `C3` is no longer a seam id — `--seams C3` matches nothing, `types.d.ts`
|
|
40
|
+
does not accept it, and the merged card records the old spelling only in its fold notes.
|
|
41
|
+
- **Merged card with two labelled legs** —
|
|
42
|
+
`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md`: a preamble (the
|
|
43
|
+
span, why it ends at rc.1, how to read it), **§1 Leg A** and **§2 Leg B** each carrying the
|
|
44
|
+
retired card's full text, evidence and `path:line` citations, and **§3 the merged 20-seam
|
|
45
|
+
index**.
|
|
46
|
+
- **Leg-routing skill body** — the skill is now `plugin-upgrade` (renamed directory,
|
|
47
|
+
frontmatter, Config default and bundle row). Its body routes the caller to the leg that
|
|
48
|
+
matches the peer band, and both legs' original frontmatter routing hints are preserved in
|
|
49
|
+
the body.
|
|
50
|
+
- **Fixtures for both legs** — leg A's TypeScript/session-oriented pair is vendored as
|
|
51
|
+
`fixtures/leg-a-bad-repo` / `fixtures/leg-a-good-repo`; the client-slot pair stays at
|
|
52
|
+
`fixtures/bad-repo` / `fixtures/good-repo`. Each leg therefore has a bad fixture that trips
|
|
53
|
+
its error-severity seams and a good fixture that stays clean.
|
|
29
54
|
|
|
30
55
|
### Changed
|
|
31
56
|
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
`dsh-plugin-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
57
|
+
- The scanner CLI is now `dsh-plugin-upgrade-scan` (`scripts/scan-0.1.5.mjs`, plus the
|
|
58
|
+
skill-local `skills/plugin-upgrade/scripts/scan-0.1.5.mjs`); the cordis row is
|
|
59
|
+
`dsh-plugin-upgrade`.
|
|
60
|
+
- The dev/test pin and the monthly compat probe move to the published `0.1.5-rc.2` line (the
|
|
61
|
+
newest published types verify the same seam catalog), while `dshWorkshop.compatibility.dshVersions`
|
|
62
|
+
lists `0.1.2-rc.1` and `0.1.5-rc.2`. The peer band still keeps both segments
|
|
63
|
+
(`>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0`) — `P1` forbids collapsing it.
|
|
64
|
+
- Rename the four translated READMEs to `README-<lang>.md`. npm selects the package-page readme as the first markdown file matching its `{README,README.*}` glob (`@npmcli/package-json`, publish path), and that glob order puts `README.<lang>.md` ahead of `README.md` — so npm was serving the Simplified-Chinese file for this package too (measured on 15/15 sampled packages of the family). The new names sit outside the glob, so the English source is served again. No content changed apart from the language-switcher link each translation holds to its siblings, and the repo readme gate still passes. Takes effect with the next release; an already-published version cannot gain a corrected readme retroactively.
|
|
39
65
|
|
|
40
|
-
|
|
41
|
-
delimiter, so a Windows checkout (`core.autocrlf=true`) mounted the skill with the
|
|
42
|
-
frontmatter leaked into the body and no description/`whenToUse`. Line endings are now
|
|
43
|
-
normalized before parsing, `.gitattributes` pins every text file to LF, and the suite
|
|
44
|
-
covers both a CRLF string and a CRLF-converted bundle on disk. Caught by the Windows
|
|
45
|
-
CI leg of v0.1.0.
|
|
66
|
+
## [0.1.0] - 2026-09-10 · retired package `dsh-plugin-upgrade-rc1` (leg B)
|
|
46
67
|
|
|
47
|
-
|
|
68
|
+
> *Historical entry, kept as published: every package name, CLI name and skill id below is as
|
|
69
|
+
> it was in the retired leg-B package (`dsh-plugin-upgrade-rc1`, skill
|
|
70
|
+
> `plugin-upgraderc1`, CLI `dsh-plugin-upgrade-rc1-scan`). Their merged equivalents are in
|
|
71
|
+
> `[Unreleased]`. Leg B's seam `C3` below is the merged `M1`, and this entry is retained
|
|
72
|
+
> verbatim apart from that fold.*
|
|
48
73
|
|
|
49
74
|
### Added
|
|
50
75
|
|
|
51
|
-
- **Bundled agent skill `plugin-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
- **
|
|
55
|
-
-
|
|
56
|
-
|
|
76
|
+
- **Bundled agent skill `plugin-upgraderc1`** — the version-locked `0.1.5-alpha.1 →
|
|
77
|
+
0.1.5-rc.1` corridor: a 6-step fix-and-verify loop plus the corridor card with the
|
|
78
|
+
from→to mapping, the seam catalog and the rewrite recipes.
|
|
79
|
+
- **Zero-dependency seam scanner** (`dsh-plugin-upgrade-rc1-scan`, also
|
|
80
|
+
`dsh-plugin-upgrade-rc1/scan`) — reports `file:line` facts for ten seams re-read from the
|
|
81
|
+
harness tag range on 2026-09-10; exit `1` on any error-severity hit.
|
|
82
|
+
- **Ten-seam catalog** — `C1` the bare client slot `conversation` deleted with no alias
|
|
83
|
+
(silent unmount), `C2` the `dsh-client-ui-sidebar-textpreview` →
|
|
84
|
+
`…-sidebar-documentpreview` package rename, `M1` the client-side false green from a stale
|
|
85
|
+
type line or an unresolvable `tsconfig` `paths` alias (leg B's card spelled this seam `C3`;
|
|
86
|
+
it is now one seam with leg A's `M1`), `C4` the new global main-panel model
|
|
87
|
+
and the `usePanelInfo` standard prop, `C5` the `sidebar.right.tab.document` document
|
|
88
|
+
preview slot and the `rightbar` → `rightbar.session` parent change, `H1` the two new
|
|
89
|
+
fail-closed session event types, `H2` the `present` tool taking the `'present'` tool-view
|
|
90
|
+
key, `H3` the additive capabilities (card-only, no detector), `H4` the DeepSeek adapter's
|
|
91
|
+
default advisory catalog now led by `deepseek-flash`, and `P1` the peer-range trap where
|
|
92
|
+
`>=0.1.2-rc.1 <0.2.0` alone rejects `0.1.5-rc.1`.
|
|
93
|
+
- **`C1` ruling and rewrite recipe** — the removal is documented as a **public
|
|
94
|
+
extension-point break** (no alias, no shim, no upstream deprecation note, and
|
|
95
|
+
`ctx.slots.inject()` never fires without the declaration), with the
|
|
96
|
+
`conversation` → `main.conversation` / `main` recipe and a real-browser exit criterion.
|
|
97
|
+
- **Honest blast-radius record** — the card states that the family's own client halves use
|
|
98
|
+
eight slot keys, all of which survive in rc.1, so this hop is latent breakage for them and
|
|
99
|
+
actual breakage only for third-party halves that targeted the bare key.
|
|
100
|
+
- **`M1` (leg B's `C3`) and `P1` as structured checks** — they resolve `tsconfig` `paths` and
|
|
101
|
+
the declared peer band instead of matching text, mirroring leg A's `M1` treatment.
|
|
102
|
+
- **Card↔catalog parity gate** — `test/card.test.mjs` asserts that the card and
|
|
103
|
+
`lib/scan.mjs` name exactly the same seam ids with the same severities, turning the
|
|
104
|
+
evidence-binding rule into a machine gate.
|
|
105
|
+
- **Plugin surface** — `enabled`, `skillName`, `skillsRoot`, `userInvocable` config keys; the
|
|
106
|
+
skill registers through the injected `skills` service and unregisters with its effect
|
|
107
|
+
disposer. A missing bundle, an empty body or a nameless frontmatter fails the mount loud.
|
|
108
|
+
- **Evidence seal** — `docs/EVIDENCE.md` records the command and the observed output behind
|
|
109
|
+
every card claim, and marks what could not be verified.
|
|
110
|
+
- **Gates** — `node --test` against a real Cordis `Context` and the real `SkillRegistry`,
|
|
111
|
+
five-language README consistency, self-contained import resolution, and a packed-tarball
|
|
112
|
+
artifact check that also proves `test/`, `fixtures/` and `.github/` never ship.
|
|
113
|
+
- **Family-standard CI** — 3 OS × 2 Node `ci.yml`, a monthly `compat.yml` probe against the
|
|
114
|
+
published `0.1.5-rc.1` line, OpenSSF `scorecard.yml`, the `plugin-doctor.yml` static R/K
|
|
115
|
+
gate, and a tag-triggered `release.yml` that gates, publishes to npm with provenance and
|
|
116
|
+
creates the GitHub Release behind an idempotent guard.
|