Commit Graph
533 Commits
Author SHA1 Message Date
winewill af66022ace fix(desktop): default Windows packaging to signed 2026-10-15 17:52:13 +08:00
winewill 5e23825f15 fix(desktop): reject debug publications early and harden runner supervision 2026-10-15 17:40:38 +08:00
winewill 29221675a2 fix(desktop): clarify source rejection and isolate Git fixtures 2026-10-15 14:03:50 +08:00
winewill 61059baf61 feat(desktop): allow repository branches for test packaging 2026-10-15 13:39:28 +08:00
winewill ce64289dbd fix(desktop): validate publication dispatch and package job identity 2026-10-14 12:22:27 +08:00
winewill 60084a5b59 feat(desktop): publish retained packages through manual dispatch 2026-10-14 12:10:00 +08:00
winewill fdbe2bce47 feat(desktop): separate update channels and confirm releases before approval 2026-10-13 16:14:41 +08:00
winewill 6e629a5ef0 fix(desktop): preserve publish diagnostics and interrupted recovery 2026-10-13 14:20:45 +08:00
winewill 04d46c1912 fix(desktop): use native shells for cross-platform publication 2026-10-13 14:01:39 +08:00
winewill d156ee31a0 feat(desktop): publish retained packages through approved COS workflow 2026-10-13 13:59:01 +08:00
winewill a98c6aae78 build: manage macOS runner service and optional notarization 2026-10-12 18:01:44 +08:00
winewill ff3dfc9be6 build(macos): add self-hosted signed packaging workflow 2026-10-12 13:08:09 +08:00
winewill b35ef84914 Merge pull request #5952 from deepseek-harness/build/windows-ci-presets-signing
build(windows): add machine presets and EV-signed Actions packaging
2026-10-12 10:48:21 +08:00
imccyu f6b0c5af59 build: rename build:src and build:test to build:artifacts and build:check
build:artifacts produces every artifact, including the tsdown bundles,
the Desktop bundle, and Web, so naming it after sources undersold it;
build:check checks scripts, benchmarks, and website code besides tests.
The build.ts scopes, aggregate step ids, the Python builder flag
(--build-artifacts), workflows, callers, docs, and the build-split Agent
Note follow the new names. The note also records the naming
alternatives.

Refs #5852
2026-10-11 22:16:47 +08:00
imccyu 129c915498 build: split build:src and build:test, and schedule build in parallel
pnpm run build ran every step in one serial chain, including the two
noEmit aggregate programs (tests, scripts, benchmarks, website) that no
artifact step consumes, so the Host aggregate check alone delayed tsdown by
about 66 s.

- build:src (scripts/build.ts --scope src) builds every artifact in the
  existing order and writes the client build record; it replaces the
  removed --artifacts-only flag and the libraries CLI mode.
- build:test (--scope test) type-checks only the Host and Client aggregate
  programs with tsc -p, concurrently, without compiling references or
  checking prerequisites.
- build runs both as one dependency graph through run-gates' new
  runAggregate: each aggregate check starts once its face's packages are
  compiled, and Client compilation stays after the Host bundle that writes
  the Typert /remote declarations. DSH_GATE_CONCURRENCY=1 serializes it;
  DSH_GATE_FAIL_FAST=1 stops the remaining steps at the first failure.
  Passing steps print one PASS line (DSH_GATE_VERBOSE=1 shows their output).
- PR artifact builds (e2e, release, preview, Node 22 compatibility) and the
  Python builder (--build-src) use build:src; dev:web and dev:desktop use
  build:src. test:*, bench, typecheck and the required consumer/Windows
  lanes keep the complete build.
- lint, lint:fix, doc-typecheck and the Typert contracts gate prepare with
  host-libraries (Host package compilation + Host bundle) instead of
  build:lib:host; their own checks never read the aggregate root or the
  Desktop bundle.

Parallel and serial build produce byte-identical lib/, Web dist and client
build record; a test-only type error fails build and build:test while
build:src passes.

Refs #5852
2026-10-11 18:19:23 +08:00
Yichen Jiang 1d0ede8c3a ci: trial larger GitHub macOS runners for Python releases 2026-10-11 14:00:17 +08:00
winewill 5801fae7dc fix(windows): recreate empty runner checkout before actions start 2026-10-09 16:01:20 +08:00
winewill 370a272bb1 fix(windows): reset runner checkout without traversing dependency junctions 2026-10-09 15:57:20 +08:00
winewill 373aec3d30 build(windows): add machine presets and signed CI packaging 2026-10-09 15:18:56 +08:00
winewill d16abc2745 Merge pull request #5898 from deepseek-harness/build/windows-ci
build(windows): add manual installer CI and harden Desktop runtime patches
2026-10-09 14:06:31 +08:00
winewill f10cfbad34 docs(desktop): clarify Windows runner routing and pending builds 2026-10-09 13:00:41 +08:00
winewill 9ae9df9976 build(windows): route manual packaging to dedicated self-hosted runner 2026-10-09 11:47:29 +08:00
winewill 8ce963bd29 fix(desktop): address Windows packaging review findings 2026-10-08 19:26:40 +08:00
winewill d7f7fc6095 Merge origin/master into build/windows-ci 2026-10-08 18:57:37 +08:00
winewill 2f4dbc0fa9 build(windows): add manual installer CI and scope desktop runtime patches 2026-10-08 18:54:47 +08:00
Yichen Jiang facdc69808 Merge remote-tracking branch 'origin/master' into worktree/ssh-helper-binaries
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/subsystems/ssh.i18n.yaml
#	package.json
#	packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml
#	packages/ssh/README.i18n.yaml
#	packages/ssh/ssh/README.i18n.yaml
#	packages/ssh/ssh/package.json
#	pnpm-lock.yaml
#	scripts/build-exe-for-python-sdk.ts
#	scripts/verify-package-readme-model-experience.ts
2026-10-08 15:06:19 +08:00
turtle1999 0e7e2ceb19 ci(bench): warn on a missing benchmark report and document the artifact
The upload warns instead of silently ignoring missing files, and the spec
pins the upload after the benchmark step. benchmarks/AGENTS.md and the
report Agent Note now name the artifact CI publishes.

Refs #5840
2026-10-08 11:55:08 +08:00
turtle1999 a646dabbe9 ci(bench): publish the scaled benchmark report as an artifact
The node-24-bench job uploads benchmarks/.dsh-report after the benchmark
step, including when a budget assertion fails, so the report the Vitest
globalSetup renders survives the runner. #5838 deferred this step because
the authoring token had no workflow scope.

Refs #5838
2026-10-08 11:32:17 +08:00
Tianyi Cui cdbb78d39d fix(ci): use the compatible pnpm setup action on Intel macOS 2026-10-07 23:17:10 +08:00
Tianyi Cui 59bd530aaf chore(deps): update GitHub Actions to mature release tags 2026-10-07 22:28:27 +08:00
Tianyi Cui 9203a58677 chore(deps): update Python build and validation dependencies 2026-10-07 16:42:04 +08:00
Tianyi Cui 5529a5014a fix(ci): skip the verification install when rebuilding Linux node-pty
pnpm 11.28.5 runs verifyDepsBeforeRun before a script, so `pnpm run install`
inside the installed node-pty directory first installed node-pty's own
dependencies into the package and ran its `prepare` build. Both reached the
packaged payload: the SEA blob then carried a node-gyp tree and tripled pkg's
file records, and postject aborted while injecting it. The step now runs the
package's install script alone, as it did with pnpm 11.7.0.
2026-10-07 13:10:09 +08:00
Tianyi Cui b48384223a refactor(experimental)!: classify optional packages and move prototypes 2026-10-06 16:41:04 +08:00
Tianyi Cui 9e9a95f8dc perf(ci): start runtime checks within the existing job ceiling 2026-10-05 18:21:54 +08:00
Tianyi Cui bbbe372f53 fix(ci): validate Python closure before artifact builds 2026-10-05 15:12:53 +08:00
Tianyi Cui 4df4a46ec3 docs(ci): clarify artifact and scheduler dependencies 2026-10-05 14:33:03 +08:00
Tianyi Cui fc072c7a5d perf(ci): bound worker job overlap without extending the critical path 2026-10-05 13:24:31 +08:00
Tianyi Cui 536aaef0b3 fix(ci): preserve workflow concurrency and portable artifact checks 2026-10-05 12:53:52 +08:00
Tianyi Cui 853ad0bb9f perf(ci): remove repeated aggregate compilation and gate work 2026-10-05 12:07:57 +08:00
Tianyi Cui 185b9c59e7 feat(release): support isolated npm channels 2026-10-03 09:20:13 +08:00
Tianyi Cui c7f66d13a6 docs(notes): prune redundant active decision records 2026-09-30 23:20:22 +08:00
Turtle e5a010be64 Merge pull request #5403 from deepseek-harness/perf/session-corpus-benchmarks
test(bench): measure Session list, search, and fork over large corpora
2026-09-30 11:13:47 +08:00
turtle1999 bfcd447963 test(bench): fit Session corpus benchmark within five minutes
Keep each case at its hardest setting that fits five minutes of hosted CI:
search and fork stay at 1,000 Sessions with the longest fork sampled once,
the list runs 3 samples over 3,000 Sessions, and seeding validates authored
bodies in memory instead of a separate verification pass. The file's last
case asserts the limit; the benchmark job timeout becomes 20 minutes.
2026-09-28 23:08:19 +08:00
turtle1999 e806d9cb97 test(bench): calibrate Session corpus budgets on hosted CI
Standard two-CPU hosted runs are 2.4-3.4 times the reference machine, above
the shared reference scale, so the budgets use rounded hosted medians with
the shared 1.25 headroom. The benchmark job took 14.4 minutes with these
cases; its timeout becomes 25 minutes.
2026-09-28 22:18:58 +08:00
turtle1999 d70efffb63 test(bench): measure Session list, search, and fork over large corpora
Add a required benchmark over synthetic corpora whose per-Session length
distribution is at least a measured local DSH corpus: list at 1,000 and
5,000 Sessions, cold and built content search and stratified forks at
1,000 Sessions, all through the real SessionController on built plain-Node
workers. Raise the benchmark job timeout to 30 minutes for the added cases.
2026-09-28 21:08:18 +08:00
Tianyi Cui 9ab3f2c990 ci(sandbox): grant the darwin unit parity job the coverage lanes' test budget
The unit-darwin job ran the whole unit inventory at Vitest's 5000 ms default
on a shared 3-vCPU macos-latest runner; the first two master runs after #5292
each timed out a different set of cases that pass in under a second on a quiet
host. Every other whole-inventory lane raises the budget through
DSH_COVERAGE_TEST_TIMEOUT_MS=90000.

The job now sets that variable and runs `pnpm run check:ci:unit`, a run-gates
aggregate that is `pnpm run test` (native build, then `vitest run`) through the
path that consumes it. ci-unit receives no CI worker settings, so the inventory
inherits the environment `pnpm run test` finds: on a 3-CPU host the defaults
would inject DSH_COVERAGE_PARTITIONS=2, which run-gates.spec.ts reads as a
partitioned coverage lane.

Fixes #5325
2026-09-28 12:58:10 +08:00
Tianyi Cui b0505a0fd8 ci(sandbox): widen the darwin parity ceiling and keep the workflow prose current
Review follow-up: name the parity job in the workflow header, point the unit
comment at ci.yml's Linux jobs instead of a nonexistent `checks` job, state the
budget as a completion ceiling and raise it to 60 minutes so the slowest observed
runner keeps headroom, and let the owning Agent Note describe the budget and the
workflow's statuses without restating numbers the workflow owns.
2026-09-27 23:41:16 +08:00
Tianyi Cui c9c2ced4df ci(sandbox): run the darwin unit parity suite as its own macOS job
The seatbelt leg of the sandbox-e2e matrix also ran `pnpm run test`, and the
complete unit suite takes 16 to well over 20 minutes on macos-latest, so the
shared 20-minute job budget cancelled the leg on most master pushes — before
the Seatbelt confinement e2e ever ran. Move the parity run into a `unit-darwin`
job with a 45-minute budget; the four e2e legs keep 20 minutes.
2026-09-27 23:11:07 +08:00
Yichen Jiang 7e5a4d1e4b fix(docs): align publication runner and scoped-event heap budgets 2026-09-24 23:56:45 +08:00
Turtle e7def469e1 feat(i18n): key translation pairing records by heading section (#5036)
* feat(i18n): key translation pairing records by heading section

Replace the whole-file blob hashes in *.i18n.yaml with one entry per
heading section that still holds language-specific content, keyed by the
English heading-slug path. Blocks identical across the pair (generated
table rows, code blocks, shared regions) stay out of the hash, so edits to
different sections and identical regenerations merge with Git's default
text merge, including on GitHub.

Remove the dsh-translation-pairing merge driver, its resolver command and
installer wiring; gen-translation-brief recovers last-confirmed text from
commit history. Migrate all active records, archive the superseded Agent
Note, and record the replayed conflict reduction in the new one.

* test(i18n): refresh translation prompt snapshot for the terminology note

* feat(i18n): exclude only code blocks and generated regions from pairing records

Replace byte-equality masking with an explicit rule: a record hash skips
fenced code blocks and BEGIN/END GENERATED regions, the two kinds of
content the pairing gate already requires to be identical on both sides.

Move generated data into regions written into both pages:
gen-config-catalog renders both languages and the record with per-package
regions labelled by code identifiers; gen-module-graph keeps its table in a
region; gen-doc-graphs splices the event matrix regions into the Chinese
page. Add a generic region splice beside the region grammar.
2026-09-23 22:32:06 +08:00