24 Commits
Author SHA1 Message Date
zhu1090093659 64beab4ad5 chore(desktop): remove the repository's Electron desktop app and its packaging lane 2026-09-24 21:48:46 +08:00
zhu1090093659 67d55c96f9 test(ci): record the liangshen baseline CI actually measures
The dispatched nightly came back with one regression: dsh-liangshen functions
80.64 here against 80.07 on the runner, 0.57 over the gate's half-point
tolerance. The gap is not noise. benchmark-live-run.test.ts guards two cases
with it.runIf(harnessInstallAvailable()), so a machine that has the harness
installed covers functions a Linux runner never runs, and recording from here
puts the baseline above what CI can reach.

Record the four liangshen metrics at the runner's values, which is what the
ratchet has to hold on, and say so where the test rules live: when the two
sides disagree, the CI value is the one to record.
2026-09-24 10:04:56 +08:00
zhu1090093659 75df3c088f docs(development): route a package's test setup through the shared one
The shared setup now carries the storage repair Node 25 needs, so a package
whose own setup skips it runs its DOM tests on the degraded path and measures
lower coverage than the same tree does on Node 22. Name the three ways to pick
it up where the test rules live.
2026-09-24 09:56:28 +08:00
zhu1090093659 9a13a2c9bd chore(scripts): drop the e2e wording the skin review lane left behind
The reviewer's only e2e step was the skin preview lane, so the header, the --workdir help and the worktree-root comment no longer promise e2e artifacts beside the worktrees; docs/development.md loses the same phrase. The workspace keeps its ~/remote-e2e name.
2026-09-24 09:46:46 +08:00
zhu1090093659 eee7de29a6 docs(scripts): read the submodule tree when previews are not pinned yet
capture-previews writes previews into the dsh-skins working tree, so market:fetch --force does not pick them up: --force only re-materializes an input whose worktree already sits on the pinned commit, and a worktree elsewhere is ignored in favour of the pinned tarball. The header now names the local-content mode for looking at fresh previews before the commit is pinned (and that the resulting market/dist must not be committed), and the pinned flow for the copy that ships. docs/development.md's skin section carried the same --force step.
2026-09-24 09:45:20 +08:00
zhu1090093659 066820d968 docs: point the skin / pet / community flows at their repositories
The three developer skills described the pre-split layout: asset
directories under `packages/skins/skin-center`, `packages/dsh-pet` and
`packages/dsh-community-plugins`, plus commands such as
`pnpm skin-center:check` that exist only in the satellite repositories.
Each skill now names the owning repository, the commands that exist
there, and the side that stays here, and links the contracts instead of
restating them.

The same stale references are gone from the release and pre-push skills,
`docs/architecture.md` (which counted a fourth `lib/`-committing package
and listed `skins/skin-center` as a package directory), `docs/development.md`
(a skin-PR review lane for pull requests this repository rejects) and
`docs/plugins.md`; root `AGENTS.md` no longer mentions a skin registry
that lives elsewhere.
2026-09-24 08:58:10 +08:00
zhu1090093659 b71ecbe417 fix(scripts): write skin previews into the dsh-skins submodule
capture-previews still wrote preview/{light,dark}.jpg under packages/skins/skin-center, which the skin collection left when it moved to dsh-skins. The previews now land in the satellite checkout at satellites/dsh-skins/skins/<id>/preview/, the same working tree the pinned market input is copied from, and the script fails with an explicit message when that submodule is missing or sits on another commit. The hook-scene imports use the market layout the static server actually serves (/assets/skins/<id>/) instead of the removed monorepo path.

docs/development.md's 新增皮肤 section documents the new output location, the market:fetch --force step that local edits require (the gitlink is unchanged, so the input cache is not considered stale), and the current skin distribution facts.
2026-09-24 08:44:05 +08:00
zhu1090093659 8b803d5d62 docs: point the contributor docs at the satellite repositories
The extraction moved the skin collection, the pet plugin and the
community plugin index into their own repositories, but the documents
that tell people where to submit those contributions still described
this repository's paths and scripts.

Skin, pet and community-index contributions now name the satellite
repository and its real entry points: skins/<id>/ with
scripts/dsh-skin-new.cjs and the skin-center catalog gate, assets/<id>/
with the pet CLI, and the community index's root community.json with
pnpm community:check. The gate lists in AGENTS.md, CONTRIBUTING.md,
docs/development.md and the architecture diagram no longer mention the
removed pnpm skin-center:check, and the artifact note now names the
three packages that still commit lib/.
2026-09-23 23:53:14 +08:00
zhu1090093659 9004d0ee7d refactor: consume the extracted plugins instead of carrying them
The skin center, pet and community-index plugins now live in their own
repositories and are consumed as published npm packages, so this tree drops
them and everything that only existed to serve them in-repo.

Removed: packages/dsh-pet, packages/dsh-community-plugins and
packages/skins/skin-center (history stays in this repository), plus the root
scripts that moved with them (skin center catalog check, the reviewed-hooks
registry, the skin and pet authoring CLIs and their tests, community-index).
scripts/skins-montage.mjs stays: it renders the root README collage from
market/dist, which is this repository's tooling.

Decoupled:
- scripts/sync-shared.mjs no longer mirrors the settings trio, host helpers or
  http/mount-once copies into the three packages (114 copies -> 99);
- lib-artifact-fingerprints.json tracks three committed lib/ packages now that
  skin-center left;
- packages/dsh-usage drops an unused @linxin666/dsh-pet devDependency;
- the skin/pet/community gates leave ci.yml and the root scripts (they run in
  the satellite repositories' own CI);
- scripts/i18n-audit.mjs no longer reads pet's client locale file, and the
  test-standards and emoji audits skip .market-inputs (fetched content is not
  ours to audit);
- the market build pins the community index in market-inputs.lock.json like the
  skin and pet content, so the plugin list the site serves is reproducible from
  a commit instead of following whatever npm resolves, and the catalog's skin
  repo URLs point at dsh-skins;
- docs (root AGENTS.md, architecture, plugins, development, publish-prep) and
  CONTRIBUTING point at the new repositories.

Gated by: aggregate:check, libs:check, runtime-deps:check, market:check,
sync-shared:check, test:standards, docs:check, i18n:check, emoji:check,
typecheck and 307/307 script tests.

Not yet safe to merge: the aggregate's three dependencies resolve from npm,
and the published 0.3.24 still injects the retired settingsScope service, so
the mount smoke stays red until the satellite repositories publish a build
containing the migration.
2026-09-23 23:19:08 +08:00
zhu1090093659 d9357c8572 test(ci): enforce test discipline and add a coverage ratchet
Turn the repository's test conventions into machine-enforced gates and close
three holes in the CI/CD set.

- scripts/test-standards.mjs: six business test rules (no-arbitrary-sleep,
  no-ad-hoc-mock, bdd-title, given-when-then, call-count-only-assertion,
  tautological-assertion) with a per-file, per-rule baseline in
  scripts/test-standards-baseline.json, so new debt is blocked while the
  existing 367-file backlog ratchets down. Rule scope follows the lane:
  business tests under packages/, tests/ and desktop/ carry the full
  contract, repository tooling under scripts/ only the mechanical rules.
- scripts/emoji-audit.mjs: replaces the inline ci.yml Python emoji step with a
  reviewed, unit-tested gate; same ranges and out-of-scope trees, plus a
  strict-UTF-8 skip and file:line:column reporting.
- scripts/coverage-gate.mjs with scripts/coverage-baseline.json: a per-package
  v8 coverage ratchet (21 packages; repository totals 56.64% lines, 67.74%
  branches) with a half-point tolerance for instrumentation noise. The
  provider is declared per vitest major: the six 3.x packages carry
  @vitest/coverage-v8@^3.2.7 and the root devDependency serves the 4.x fleet.
- ci.yml now runs the previously unenforced pnpm i18n:check, the new
  pnpm test:standards, and pnpm emoji:check; nightly.yml is the Tier-2 lane:
  both its jobs build before they test, exactly as ci.yml does, then run the
  coverage ratchet and three consecutive full-suite runs for flake detection.
- scripts/pr-review.mjs keeps its gate sequence aligned with ci.yml.
- docs/development.md owns the rules, baselines, tiering and the failure-path
  audit checklist. Decision recorded in
  .agents/notes/implemented/testing/2026-09-16-business-test-discipline-gates.md.

Verified: pnpm test:scripts (three new specifications), pnpm test:standards
(clean baseline; a probe spec fails with three groups), emoji:check parity with
the Python step it replaces, coverage:check over the full fleet, pnpm
typecheck, pnpm test, docs:check, i18n:check, libs:check, aggregate:check,
actionlint, and pnpm install --frozen-lockfile.
2026-09-17 16:08:54 +08:00
zhu1090093659 bd0a51be8e docs: update project documentation and archive outdated research 2026-09-16 13:14:34 +08:00
zhu1090093659 c178e9281d refactor(market): retire legacy gallery site, simulator pipeline and 301 redirect 2026-08-26 13:45:41 +08:00
zhu1090093659 cb1ffdf3a5 docs(repo): reposition as aggregate plugin ecosystem, unify skins naming
Skins are one plugin in the family, not a peer pillar: the root README
pair demotes the skins chapter to a subsection of feature plugins, the
tagline and intro describe an aggregate plugin ecosystem distributed
through the Workshop, and the display name is simply skins (皮肤) —
Skin Center survives only in frozen technical identifiers (npm package,
directory, bundle id, wallpapers path). GitHub About and homepage match;
AGENTS.md and docs/development.md state the same hierarchy.

Decision record: .agents/notes/implemented/architecture/2026-08-24-plugin-aggregate-positioning.md
2026-08-24 15:36:19 +08:00
zhu1090093659 76e92e540c chore(repo): rename product from dsh-web-ui to dsh-web
Display and source layers rename to dsh-web: GitHub slug, docs and prose,
aggregate package dir packages/dsh-web-all with npm name
@linxin666/dsh-web-all, settings package dir packages/dsh-web-settings,
private shared package dsh-web-shared, repo-local skill dirs, and the
docs banner asset.

Runtime, wire, and storage identifiers are frozen byte-identical so
installed profiles keep resolving with zero migration: web-ui-* bundle
ids, the dsh-web-ui-market settings section id, /api/dsh-web-ui-settings
and its proxy-token header, and the dsh-web-ui-telemetry-* storage keys.
Frozen history (docs/archive, docs/release-notes, archived notes), the
JAVA-LW fork reference, and local filesystem paths keep the old name.

npm migration: the next tag release dual-publishes @linxin666/dsh-web-all
alongside the final @linxin666/dsh-web-ui-all version, then the old name
is deprecated with a pointer; dual-publish lasts two releases.

Decision record: .agents/notes/implemented/architecture/2026-08-24-product-rename-dsh-web.md
2026-08-24 14:22:14 +08:00
zhu1090093659 a8504c79e4 docs: refresh skin montage for 17 skins and current mobile sessions shot 2026-08-21 23:43:17 +08:00
zhu1090093659 f68c176b2a docs(contrib): visual fix PRs require completion screenshots and multimodal models 2026-08-20 11:09:34 +08:00
zhu1090093659 6ad55d2267 docs(contrib): dev branch flow and mandatory PR test evidence 2026-08-20 11:04:39 +08:00
zhu1090093659 9b1ba0dcf2 docs: retarget skin references to the v2 skin-center asset directories (#506) 2026-08-18 19:05:35 +08:00
Beverly621 f57b766a50 fix(skins): scope managed patch to active profile (#304)
* fix(skins): scope managed patch to active profile

* docs(skins): document profile-scoped patch location
2026-08-17 00:54:12 +08:00
zhu1090093659 6f4fb09188 docs(shared): document the shared runtime module source and its sync copies
Root and package instruction layers now describe shared/ as the single
source of truth for cross-package runtime modules and the sync-shared.mjs
generated copies as no-edit artifacts; development.md gains the edit loop;
the plugins.md budget figure now matches the manifest gate.
2026-08-15 14:08:28 +08:00
zhu1090093659 696bd504c4 feat(scripts): add skin visual verification, copyright reminder and gallery adaptation check to pr-review 2026-08-14 19:20:09 +08:00
zhu1090093659 1916f0e1ad feat(scripts): move pr-review worktree to ~/remote-e2e workspace with reuse and cleanup 2026-08-14 19:10:40 +08:00
zhu1090093659 f2d874d9f1 feat(scripts): add pr-review CLI for batch remote PR review 2026-08-14 19:04:43 +08:00
zhu1090093659 4358ee194d chore(eng): layered AGENTS.md, doc gates and bilingual READMEs
- 分层指令体系:根/packages/docs 各层 AGENTS.md 渐进式上下文披露,关键包补包级 AGENTS.md(ssh/skins/task-board/web-ui-all)

- 文档自动化:scripts/verify-docs.mjs 门禁(README 三件套/i18n 配对/链接/词数预算/层级),CI 接入 docs:check,配 12 个单测

- 双语补齐:20 个包全部中英配对 README(README.md + README.zh.md + README.i18n.yaml),模板与脚手架同步

- 修复:i18n 死链、皮肤计数、发布清单 miku、description 占位符、README 版本号、标题层级、task-handoff 归档
2026-08-14 18:01:31 +08:00