Skip to content
This repository was archived by the owner on Nov 3, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1571 commits
Select commit Hold shift + click to select a range
42b498b
test(certbot): pin that a wildcard authorization keeps the bare recor…
kvinwang Aug 25, 2026
6dc9f34
fix(certbot): name the challenge being set ready in the debug log
kvinwang Aug 25, 2026
ddafae0
fix(certbot): report why the order error lookup gave up
kvinwang Aug 25, 2026
50f3e6a
fix(certbot): propagate authorization lookup failures
kvinwang Aug 25, 2026
95064d2
Merge pull request #1134 from Dstack-TEE/docs/rc-testing-runbook
kvinwang Aug 25, 2026
55021ed
Merge pull request #1133 from Dstack-TEE/fix/certbot-acme-followups
kvinwang Aug 25, 2026
afbafb9
fix(certbot): enable the rustls ring provider (#1139)
kvinwang Aug 25, 2026
1a90888
docs: cover gateway clustering and the proxy modes left untested (#1135)
kvinwang Aug 26, 2026
92ea2ed
fix(certbot): clear stale dns-01 records once per challenge name (#1136)
kvinwang Aug 26, 2026
96e84f3
fix(certbot): reissue when the configured domains change
kvinwang Aug 25, 2026
da36db8
fix(certbot-cli): attach the config template's comments to the right …
kvinwang Aug 26, 2026
a896a25
docs(certbot-cli): describe the CLI as a testing tool
kvinwang Aug 26, 2026
4cab90a
docs(deployment): the gateway issues its own certificates
kvinwang Aug 26, 2026
5fe4903
docs(gateway): the host-mode gateway issues its own certificates too
kvinwang Aug 26, 2026
d5307bc
ci(mkosi): title guest OS releases after the product, not the backend…
kvinwang Aug 26, 2026
27a6a5c
build(deps): bump @fastify/static and @fastify/swagger-ui
dependabot[bot] Aug 26, 2026
96de058
Merge pull request #1137 from Dstack-TEE/fix/certbot-san-config
kvinwang Aug 26, 2026
3c18501
Merge pull request #1143 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Aug 26, 2026
37eda20
fix(gateway): register the shared ACME account under the rotation lock
kvinwang Aug 25, 2026
b0b73f2
fix(gateway): one lock for every operation on the shared ACME account
kvinwang Aug 26, 2026
981a3ca
test(gateway): cover the ACME lock in unit tests and the full-stack E2E
kvinwang Aug 26, 2026
0fedbb8
test(gateway): split the full-stack E2E into phases, add a certbot phase
kvinwang Aug 26, 2026
e7532be
test(gateway): make the certbot phase survive the locks it races
kvinwang Aug 26, 2026
027c62b
Merge pull request #1138 from Dstack-TEE/fix/gateway-acme-register-race
kvinwang Aug 26, 2026
a752055
feat(certbot): add the dns-persist-01 validation method
kvinwang Aug 25, 2026
72bbcae
feat(certbot): print the one-time dns-persist-01 records from the CLI
kvinwang Aug 25, 2026
b6834d4
feat(gateway): let a ZT domain validate with dns-persist-01
kvinwang Aug 25, 2026
c883548
docs: document dns-persist-01 certificate issuance
kvinwang Aug 25, 2026
23f2fe3
docs: quote the real dns-persist-01 rejection from staging
kvinwang Aug 25, 2026
8748630
fix(certbot): read a dns-persist-01 record the way the CA reads it
kvinwang Aug 25, 2026
108f500
fix(certbot): name the configured CA in dns-01 CAA records too
kvinwang Aug 25, 2026
e49b1ba
fix(gateway): fit the dns-persist-01 dns wait inside the order timeout
kvinwang Aug 25, 2026
da71eb2
feat(gateway): make the issuer domain name settable
kvinwang Aug 25, 2026
45cd81b
fix(gateway): keep a ZT domain's challenge across a dashboard edit
kvinwang Aug 25, 2026
1ce6567
docs: spell out the gateway dns-persist-01 setup order
kvinwang Aug 25, 2026
a2747b0
feat(gateway): register an ACME account before any ZT domain exists
kvinwang Aug 25, 2026
3fb2a48
fix(certbot): check the configured issuer domain name before it reach…
kvinwang Aug 25, 2026
0664f8f
fix(certbot): keep the advisory DNS wait inside the order timeout
kvinwang Aug 25, 2026
0e59643
fix(gateway): stop the dashboard hiding dns-persist-01 setup
kvinwang Aug 25, 2026
db74dfa
docs: restore the issuer-name guidance and record the new rules
kvinwang Aug 25, 2026
98f93d8
fix(certbot): keep the account a failed client build would have dropped
kvinwang Aug 25, 2026
2c0ab2a
fix(certbot): stop the DNS wait overshooting the budget it was clampe…
kvinwang Aug 25, 2026
a0ae4f9
fix(certbot): hold the issuer domain name to the RFC 8659 label grammar
kvinwang Aug 25, 2026
fb85f27
fix(gateway): show the records dialog only where it applies
kvinwang Aug 25, 2026
e82a578
fix(gateway): report a partial ACME rotation instead of raising it
kvinwang Aug 25, 2026
1e9571f
fix(certbot): say which character an issuer name was rejected for
kvinwang Aug 25, 2026
5c337e2
refactor(certbot): log the DNS budget at debug, not on every issuance
kvinwang Aug 25, 2026
1ddcb3b
fix(certbot): name the character an issuer name was rejected for, not…
kvinwang Aug 26, 2026
1ed5644
fix(gateway): count a rotation's re-pin failures out of the domains i…
kvinwang Aug 26, 2026
3a7f40c
fix(gateway): keep a partial rotation on the page instead of in a toast
kvinwang Aug 26, 2026
8eb783f
fix(gateway): let an update leave a ZT domain's challenge alone
kvinwang Aug 26, 2026
e31ebf6
fix(certbot): name the missing setting when dns-01 has no cf_api_token
kvinwang Aug 26, 2026
5ebd99a
fix(certbot): adopt stale CAA guards so a rerun can recover
kvinwang Aug 26, 2026
4467792
test(certbot): hold every config key to its own doc comment
kvinwang Aug 26, 2026
4ec8980
test(gateway): cover dns-persist-01 up to the CA in the e2e suite
kvinwang Aug 26, 2026
63294d2
test(gateway): issue a real dns-persist-01 certificate in the e2e suite
kvinwang Aug 26, 2026
102f896
test: answer DNS over TCP in the mock, which is all Pebble asks
kvinwang Aug 26, 2026
9fa8421
test(gateway): validate the dns-persist-01 record against the CA, not…
kvinwang Aug 26, 2026
94da8fd
test: keep one mock Cloudflare DNS API, in tools/
kvinwang Aug 26, 2026
4c53736
test: let the mock's bind address be narrowed
kvinwang Aug 26, 2026
5ed087c
test(gateway): pin what the CA refuses, not only what it accepts
kvinwang Aug 26, 2026
919a3ec
test: resolve challenge records through the mock, and check that it h…
kvinwang Aug 27, 2026
4918cf4
fix(gateway): count only the domains SetCaa attempted
kvinwang Aug 27, 2026
5476b2e
fix(gateway): say why a new dns-persist-01 domain has no records yet
kvinwang Aug 27, 2026
d7a77a6
test(gateway): stop the harness reporting passing tests as failures
kvinwang Aug 27, 2026
5e7fc94
test(gateway): create a DNS credential the API will accept
kvinwang Aug 27, 2026
05f76c1
test(gateway): note that no CAA record here can permit or forbid
kvinwang Aug 27, 2026
50443e2
test: resolve the challenge through the authoritative nameservers
kvinwang Aug 27, 2026
8b6f811
style: format the mock DNS server with ruff
kvinwang Aug 27, 2026
4fcd3d2
docs(certbot): state the DNS-wait clamp where the setting is
kvinwang Aug 27, 2026
a9db617
Merge pull request #1132 from Dstack-TEE/feat/certbot-dns-persist-01
kvinwang Aug 27, 2026
c4e746b
feat(vmm): run virtio-net on vhost-net with configurable queue pairs
kvinwang Aug 27, 2026
1aa1d35
docs: document virtio-net data plane tuning
kvinwang Aug 27, 2026
d5171bd
fix(cert-client): stamp the app id on locally issued certificates
kvinwang Aug 27, 2026
9d88248
refactor(gateway): split the wavekv sync handlers from their routes
kvinwang Aug 27, 2026
850fdc5
test(gateway): share one attestation fixture and gateway image
kvinwang Aug 27, 2026
900fd67
test(gateway): run the cluster suite under docker compose
kvinwang Aug 27, 2026
007d478
test(gateway): delete the certbot suite the e2e run covers
kvinwang Aug 27, 2026
6b8dda4
test(gateway): run the proxy suite in a container
kvinwang Aug 27, 2026
0ecfe54
test(gateway): verify peer quotes in the e2e suite
kvinwang Aug 27, 2026
c6163ed
ci: run the three gateway suites
kvinwang Aug 27, 2026
d722e60
docs(gateway): rewrite the test-run guide for the compose suites
kvinwang Aug 27, 2026
57b281a
test(ra-tls): add a shared test PKI instead of hand-rolling certs per…
kvinwang Aug 27, 2026
a166fd2
test(gateway): make a cluster rerun start from nothing
kvinwang Aug 27, 2026
0403ee2
test(gateway): bound the cluster waits on wall clock, not iteration c…
kvinwang Aug 27, 2026
a937d8b
test(gateway): fail closed where the cluster suite failed open
kvinwang Aug 27, 2026
4f20138
test(gateway): probe the shared fixture before arming teardown
kvinwang Aug 27, 2026
25ed336
test(gateway): run the no-TLS-ULP arm even when the main one fails
kvinwang Aug 27, 2026
098f640
ci: serialise the gateway suites and widen their path filters
kvinwang Aug 27, 2026
49fe0c0
test(gateway): build the e2e gateway image through the shared builder
kvinwang Aug 27, 2026
a6e1e9b
test(cert-client): cover the app id stamped on locally issued certifi…
kvinwang Aug 27, 2026
5e63ce2
docs(gateway): correct the test-run guide and the fixture cross-refer…
kvinwang Aug 27, 2026
b580a9d
test: audit for the external-trust-anchor flag too
kvinwang Aug 27, 2026
dbcf28a
fix(gateway): accept only the app-id extension from a sync peer
kvinwang Aug 27, 2026
385d444
test(certbot): cover the DNS wait budget
kvinwang Aug 27, 2026
2126215
test(gateway): wait on conditions instead of sleeping
kvinwang Aug 27, 2026
cee4fa5
build(gateway): stop reinstalling the toolchain on every fixture build
kvinwang Aug 27, 2026
046c066
ci: run shellcheck the way the scripts are written
kvinwang Aug 27, 2026
83322be
test(gateway): give each suite its own attestation fixture
kvinwang Aug 27, 2026
b144cbf
ci: stop the shared concurrency group from dropping a suite
kvinwang Aug 27, 2026
ae375c0
Merge pull request #1147 from Dstack-TEE/feat/gateway-e2e-compose
kvinwang Aug 27, 2026
a3aac09
chore(gateway)!: remove insecure_skip_attestation (#1148)
kvinwang Aug 27, 2026
8c6064b
docs: say which filesystem detects a modified block (#1153)
h4x3rotab Aug 28, 2026
e2d70a3
ci: stop rebuilding what has not changed (#1150)
kvinwang Aug 28, 2026
f785a0f
fix(os/image): enable MMCONFIG so Blackwell GPUs can be probed
kvinwang Sep 2, 2026
338c68f
feat(os/nvidia): derive NVIDIA module options from the GPU topology
kvinwang Sep 2, 2026
4556180
test(os/nvidia): cover the module-option topology matrix
kvinwang Sep 2, 2026
98757fd
fix(os/nvidia): run the option generator before udev coldplug
kvinwang Sep 2, 2026
3fe8404
fix(os/nvidia): share the payload between backends and block udev aut…
kvinwang Sep 2, 2026
dcc3c2c
fix(os/mkosi): ship the fabric manager drop-in as vendor config
kvinwang Sep 2, 2026
0e44958
fix(os): ship systemd drop-ins as vendor config, not into /etc
kvinwang Sep 2, 2026
c31aa2c
Merge pull request #1158 from Dstack-TEE/fix/dropins-vendor-dir
kvinwang Sep 2, 2026
122f608
Merge pull request #1156 from Dstack-TEE/fix/guest-cmdline-enable-mmc…
kvinwang Sep 2, 2026
ac52920
fix(os/nvidia): restore lint coverage lost by leaving os/yocto
kvinwang Sep 2, 2026
e27fe06
test(os): move the NVIDIA payload test out of the yocto backend
kvinwang Sep 2, 2026
768cbd6
Merge pull request #1157 from Dstack-TEE/feat/guest-nvidia-adaptive-m…
kvinwang Sep 2, 2026
a2c1568
docs(verifier): correct the acpi_tables_verified contract
kvinwang Sep 2, 2026
544e2c4
Merge pull request #1159 from Dstack-TEE/docs/verifier-acpi-flag-comment
kvinwang Sep 2, 2026
5dfd796
fix(os): drop guest kernel drivers no CVM can reach
kvinwang Sep 2, 2026
6ae2fff
Merge pull request #1160 from Dstack-TEE/fix/guest-kernel-drop-unreac…
kvinwang Sep 2, 2026
7e9b7ca
feat(vmm): list the Hopper and Blackwell GPUs dstack runs on
kvinwang Sep 2, 2026
209957a
Fix install script
WimYedema Sep 2, 2026
370cf7c
Improve echo-ing
WimYedema Sep 2, 2026
c88f556
Potential fix for pull request finding
kvinwang Sep 2, 2026
bbda7de
Merge pull request #1161 from Dstack-TEE/feat/vmm-list-hopper-blackwe…
kvinwang Sep 2, 2026
824e52c
feat(size-parser): accept petabytes and the multi-letter unit spellings
kvinwang Sep 2, 2026
4d5b088
Potential fix for pull request finding
kvinwang Sep 2, 2026
2347bfd
docs(vmm): recommend 8T for GPU hosts, and say why the default stays 0
kvinwang Sep 2, 2026
b959d1b
fix(os/yocto): gate dstack.cfg on the built kernel config
kvinwang Sep 2, 2026
091e51f
docs(os/yocto): name the actual cause for each dropped assertion
kvinwang Sep 2, 2026
9826215
Merge pull request #1163 from Dstack-TEE/feat/size-parser-petabyte
kvinwang Sep 2, 2026
677dbd3
build(deps): bump fastify from 5.8.5 to 5.12.1 in /dstack/kms/auth-eth
dependabot[bot] Sep 2, 2026
fae8fcd
build(deps): bump fast-uri from 3.1.5 to 3.1.7 in /dstack/kms/auth-eth
dependabot[bot] Sep 3, 2026
73c4c3f
Merge pull request #1166 from Dstack-TEE/fix/yocto-gate-dstack-kernel…
kvinwang Sep 3, 2026
d51c648
Merge pull request #1169 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 3, 2026
d931ec9
Merge pull request #1168 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 3, 2026
e1f6c8e
build(deps-dev): bump browserslist in /dstack/kms/auth-eth
dependabot[bot] Sep 3, 2026
97bddcd
Merge pull request #1172 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 3, 2026
f24954a
fix(os/mkosi): ship the xmlsec1 OpenSSL runtime that nvattest links a…
Leechael Sep 3, 2026
ebba9a9
fix: reclaim unused encrypted data disk blocks
kvinwang Sep 4, 2026
a21d2ff
fix: address discard review feedback
kvinwang Sep 4, 2026
265f06f
Merge pull request #1173 from Leechael/fix/mkosi-nvattest-xmlsec-runtime
kvinwang Sep 4, 2026
fb5310a
fix(install): keep git output off resolve_source stdout
kvinwang Sep 4, 2026
72cb20e
Merge branch 'next' into fix/install-script-resolve-source
kvinwang Sep 4, 2026
e7703dd
Merge pull request #1162 from WimYedema/fix/install-script-resolve-so…
kvinwang Sep 4, 2026
4fd93de
Merge pull request #1175 from Dstack-TEE/fix/data-disk-discard
kvinwang Sep 4, 2026
920e8c7
fix(vmm/cli): look where a VMM registers, not only where it usually does
kvinwang Sep 5, 2026
49b9bbd
fix(os/mkosi): ship libnvidia-container-go.so with the container stac…
Leechael Sep 6, 2026
b119d00
chore(os): update NVIDIA driver to 595.91.07 (#1177)
Leechael Sep 6, 2026
5a1b942
feat(os): give both guest kernels the tc and checkpoint/restore capab…
kvinwang Sep 6, 2026
be475bb
Merge pull request #1179 from Dstack-TEE/fix/vmm-cli-discovery-xdg
kvinwang Sep 6, 2026
a2dd3c8
feat(guest-api): add GpuInfo RPC
Leechael Sep 6, 2026
7ef6c27
feat(guest-agent): collect GPU telemetry via process-wide NVML
Leechael Sep 6, 2026
f7b9e64
feat(vmm): proxy GpuInfo to the guest agent
Leechael Sep 6, 2026
7894bb5
feat(guest-agent): render GPU metrics and dashboard table
Leechael Sep 6, 2026
93f430f
fix(guest-agent): isolate GPU metric sampling
kvinwang Sep 6, 2026
38b39be
refactor(lspci): share the sysfs GPU inventory
kvinwang Sep 6, 2026
85cc6be
fix(guest-api): correct the CC fields and make errors countable
kvinwang Sep 6, 2026
c8805e8
feat(dstack-util): add the gpu-info collector subcommand
kvinwang Sep 6, 2026
d17573c
fix(guest-agent): gate GPU sampling on presence and serve stale samples
kvinwang Sep 6, 2026
477c2ea
fix(guest-agent): back off after a failed GPU sample
kvinwang Sep 6, 2026
847ac8e
docs(guest-agent): record why the GPU sample is cached
kvinwang Sep 7, 2026
5db165b
test(guest-agent): serialize the GPU tests over their shared statics
kvinwang Sep 7, 2026
b6efabe
fix(guest-agent): make the dashboard GPU section readable
kvinwang Sep 7, 2026
955add3
fix(guest-agent): tighten the dashboard layout
kvinwang Sep 7, 2026
9f299d3
fix(guest-agent): correct the uptime and load-average rendering
kvinwang Sep 7, 2026
cd486eb
build(deps): bump js-yaml from 3.14.1 to 3.15.2 in /dstack/kms/auth-eth
dependabot[bot] Sep 7, 2026
5a5d779
feat(os): normalize the Linux setup header so new images measure the …
kvinwang Sep 7, 2026
275b075
test(os): keep the two setup-header normalizations in sync
kvinwang Sep 7, 2026
92cf57a
fix(vm-runner): run current images and report the QEMU version
kvinwang Sep 7, 2026
3ff6a57
test(verifier): pin the normalized kernel header on both QEMU generat…
kvinwang Sep 7, 2026
2bc0792
Merge pull request #1189 from Dstack-TEE/fix/normalize-kernel-setup-h…
kvinwang Sep 7, 2026
df9d5bf
fix(os): refresh dynamic linker cache after staging libraries
Leechael Sep 8, 2026
91170c8
Merge pull request #1191 from Dstack-TEE/fix/mkosi-refresh-ldconfig-c…
kvinwang Sep 8, 2026
70b4ec3
chore(release): bump version to 0.6.0-rc2
kvinwang Sep 8, 2026
45c541e
Revert "chore(release): bump version to 0.6.0-rc2"
kvinwang Sep 8, 2026
b44816f
fix(os): let the SWIOTLB bounce buffer grow at runtime (#1192)
kvinwang Sep 8, 2026
e829665
feat(images): add OCI source metadata
kvinwang Sep 7, 2026
13900e1
Fix DSTACK_SRC_URL formatting in gateway-release.yml
kvinwang Sep 7, 2026
c8b7f73
ci(images): build release images through the component build scripts
kvinwang Sep 8, 2026
a81350a
docs(images): document reproducing a released image
kvinwang Sep 8, 2026
c429030
fix(images): validate builds before publishing OCI manifests
kvinwang Sep 8, 2026
6e21ba1
Merge branch 'next' into feat/image-oci-metadata
kvinwang Sep 8, 2026
1544d33
Merge pull request #1190 from Dstack-TEE/feat/image-oci-metadata
kvinwang Sep 8, 2026
752ec10
fix(os): backport dma-direct atomic pool address fixes
kvinwang Sep 9, 2026
ef63deb
fix(os): backport swiotlb dynamic pool fixes
kvinwang Sep 9, 2026
f0eead7
build(deps): bump hono in /dstack/kms/auth-eth-bun
dependabot[bot] Sep 9, 2026
03a2e04
build(deps): bump hono from 4.12.34 to 4.13.5 in /dstack/kms/auth-mock
dependabot[bot] Sep 9, 2026
a4fd3d3
build(deps): bump hono from 4.12.34 to 4.13.5 in /dstack/kms/auth-simple
dependabot[bot] Sep 9, 2026
68b9f88
fix(certbot): install shutdown handler before build_bot, drop unreach…
techreign Sep 10, 2026
e73985d
Merge pull request #1194 from Dstack-TEE/fix/os-dma-coco-backports
kvinwang Sep 10, 2026
44ad7fe
refactor(dstack-mr): consolidate the measured kernel command line
kvinwang Sep 10, 2026
44dd0fc
feat(dstack-mr)!: carry the kernel command line in the TDX measurement
kvinwang Sep 10, 2026
c176dcb
test(verifier): recapture the pre-normalization TDX lite fixtures
kvinwang Sep 10, 2026
05aad40
fix(vmm): let auto TDX attestation follow the image, not guest RAM
kvinwang Sep 10, 2026
6922a09
Merge pull request #1200 from Dstack-TEE/fix/tdx-lite-auto-any-memory
kvinwang Sep 10, 2026
bbf42e5
test(verifier): reject a self-consistent forged kernel command line
kvinwang Sep 10, 2026
a9ecffd
Fix typo in error message for unsupported version
kvinwang Sep 10, 2026
5612961
fix(dstack-types): bound the kernel command line the document carries
kvinwang Sep 10, 2026
b20c00f
Merge pull request #1199 from Dstack-TEE/refactor/kernel-cmdline-suffix
kvinwang Sep 10, 2026
72cd84a
build(deps-dev): bump vitest in /dstack/kms/auth-mock
dependabot[bot] Sep 10, 2026
d83fcca
build(deps-dev): bump vitest in /dstack/kms/auth-eth-bun
dependabot[bot] Sep 10, 2026
7703537
fix(vmm): detect qemu version before each vm start
Leechael Sep 12, 2026
179d386
style(vmm): log qemu version detection error with debug format
Leechael Sep 12, 2026
a77434f
test(vmm): assert make_vm_config declares the given qemu version
Leechael Sep 12, 2026
4da4d5d
fix(certbot): race shutdown against the whole daemon lifetime
kvinwang Sep 12, 2026
d20d66f
refactor(vmm): resolve the qemu version where vm_config is built
kvinwang Sep 14, 2026
e974c56
fix(vmm): read the qemu version past a wrapper's banner
kvinwang Sep 14, 2026
8346868
Merge pull request #1204 from Dstack-TEE/fix/vmm-detect-qemu-version-…
kvinwang Sep 14, 2026
87f2e2e
ci(gateway): set FIXTURE_NS when collecting suite logs on failure
kvinwang Sep 14, 2026
29fa38a
feat(guest-agent)!: always encode v1 attestations as msgpack
kvinwang Sep 14, 2026
f142423
docs: specify the msgpack wire form of v1 Attest and IssueCert
kvinwang Sep 14, 2026
f3b4ace
test(verifier): verify msgpack re-encoded fixtures identically to scale
kvinwang Sep 14, 2026
ea66970
Merge pull request #1206 from Dstack-TEE/ci/gateway-e2e-log-collection
kvinwang Sep 14, 2026
5b83ee1
Merge pull request #1198 from techreign/fix/issue-1014
kvinwang Sep 14, 2026
452d04e
test(guest-agent): verify the v1 Attest output end to end
kvinwang Sep 14, 2026
e5df116
docs(os): make mkosi the default guest-OS backend and deprecate Yocto
kvinwang Sep 14, 2026
8f9040c
Merge pull request #1208 from Dstack-TEE/docs/mkosi-default-os-backend
kvinwang Sep 14, 2026
da60192
docs(os): address self-review of the mkosi default switch
kvinwang Sep 14, 2026
4cbf9ef
docs: tidy the v1 attestation wire-form notes
kvinwang Sep 14, 2026
dabbb77
test(verifier): add real TDX fixtures for v1 Attest and IssueCert
kvinwang Sep 14, 2026
4d98963
docs(os): keep os/yocto until mkosi stops reading from it
kvinwang Sep 14, 2026
1fe141f
docs(os): drop contradictory 'stop maintaining' wording
kvinwang Sep 14, 2026
9534f2b
Merge pull request #1195 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
8cf1f0a
Merge pull request #1196 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
beaa615
Merge pull request #1197 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
fd28fa5
Merge pull request #1201 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
f51db4c
Merge pull request #1207 from Dstack-TEE/feat/v1-attest-msgpack
kvinwang Sep 14, 2026
5494f27
Merge pull request #1209 from Dstack-TEE/docs/mkosi-default-os-backend
kvinwang Sep 14, 2026
6ef1d0a
build(deps-dev): bump @babel/core in /dstack/kms/auth-eth
dependabot[bot] Sep 14, 2026
880698c
build: fail apt-get update on any fetch error in builder images
kvinwang Sep 14, 2026
ce6f7c9
Merge pull request #1202 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
4fbfc0c
build(deps): bump minimatch in /dstack/kms/auth-eth
dependabot[bot] Sep 14, 2026
a63decb
Merge pull request #1210 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
f37b657
Merge pull request #1211 from Dstack-TEE/ci/apt-update-error-mode
kvinwang Sep 14, 2026
2b4ca71
refactor(vmm): let netd own every bridge and macvtap host interface
kvinwang Sep 14, 2026
73645ff
fix(os): stop pinning dockerd to CPU 0 in yocto images
kvinwang Sep 14, 2026
d6c3240
Merge pull request #1215 from Dstack-TEE/fix/docker-unpin-cpu
kvinwang Sep 14, 2026
0a7977f
feat(vmm): let a port mapping name the NIC it enters through
kvinwang Sep 14, 2026
516e0a0
Merge pull request #1145 from Dstack-TEE/feat/vmm-vhost-multiqueue
kvinwang Sep 14, 2026
97a2c85
Merge branch 'next' into feat/vmm-port-mapping-nic
kvinwang Sep 14, 2026
e314a3c
Merge pull request #1212 from Dstack-TEE/dependabot/npm_and_yarn/dsta…
kvinwang Sep 14, 2026
89a65a6
ci: drop the BuildKit layer cache and cache the simulator build
kvinwang Sep 14, 2026
d2122bd
ci: build check images with the docker driver; save the SDK cache fro…
kvinwang Sep 14, 2026
488b765
Merge pull request #1216 from Dstack-TEE/ci/drop-gha-layer-cache
kvinwang Sep 14, 2026
b73d5c3
Merge pull request #1213 from Dstack-TEE/feat/vmm-port-mapping-nic
kvinwang Sep 14, 2026
55a5ff1
refactor(vmm): serve netd as a pRPC service with one method per opera…
kvinwang Sep 14, 2026
0a2f04c
Merge pull request #1217 from Dstack-TEE/refactor/netd-prpc
kvinwang Sep 14, 2026
0d77758
Merge upstream next into alpha, preserving fork secret and publishing…
lalalune Sep 14, 2026
0937e30
chore: resolve test-target clippy warnings after upstream merge
lalalune Sep 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 6 additions & 1 deletion .agent/CODING_TASTE.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ quantified and bounded.
parallel paths (a separate `GetAppKeyAmd` was rejected on these grounds, #630). When an
existing API is the wrong shape, add a purpose-built one rather than overloading a return
value (`is_app_allowed` returning policy → add `auth_api.get_app_policy` instead, #538).
- **Names must say what the thing does.** `GetQuote` for an app key → `GetAttestationForAppKey`
- **Names must say what the thing does.** `GetQuote` for an app key → `AttestAppKey`
(#360). An RPC named `ComposeHash` that returns an `app_id` is wrong (#181).
- **Avoid enums in protobuf APIs** that surface as JSON — proto has no way to express
snake_case serde renaming, so use strings (#241).
Expand Down Expand Up @@ -257,6 +257,11 @@ not just the symptom:

## Readability and idioms

- **Import for readability, not minimum path length.** Import specific types and
frequently repeated operations when their short names remain unambiguous
(`TcpListener::bind`, `timeout`, `Command::new`). Keep qualifiers that carry useful
semantic context (`serde_json::from_slice`, `tokio::spawn`, `anyhow::bail!`). Follow
the surrounding module when either form is equally clear.
- **Errors**: `anyhow` everywhere in services — `thiserror` only in library crates whose
callers match on error variants. `bail!` inside an `if` is the guard idiom; **`ensure!`
is never used in this codebase** (0 occurrences) and reads as foreign. `let ... else
Expand Down
8 changes: 4 additions & 4 deletions .claude/agents/sdk-sync-checker.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,10 @@ Details:

## Locations
- Protos: `dstack/guest-agent/rpc/proto/*.proto`
- Python: `sdk/python/src/dstack_sdk/dstack_client.py`
- Go: `sdk/go/dstack/client.go`
- Rust: `sdk/rust/types/src/dstack.rs`
- JS: `sdk/js/src/index.ts`
- Python: `sdk/python/src/dstack_sdk/dstack_client_v0.py`, `dstack_client_v1.py`
- Go: `sdk/go/dstack/client_v0.go`, `client_v1.go`
- Rust: `sdk/rust/types/src/dstack_v0.rs`, `dstack_v1.rs`
- JS: `sdk/js/src/client-v0.ts`, `client-v1.ts`
- Docs: `sdk/curl/api.md`, `sdk/curl/api-tappd.md`

Focus on API surface differences. Provide specific file paths and line numbers.
72 changes: 50 additions & 22 deletions .github/workflows/docker-build-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,66 @@

name: Docker Build Check

# Not a required status check, so a workflow-level filter is safe here: a pull
# request that skips it is not left waiting on a check that never arrives. What
# it verifies -- that the builder images still build and that their pinned
# package lists still match -- cannot change unless something under `dstack/`
# does.
on:
push:
branches: [ master, next, dev-* ]
branches: [ next, 'release/**' ]
paths:
- 'dstack/**'
- 'rust-toolchain.toml'
- '.github/workflows/docker-build-check.yml'
- '.github/workflows/kms-release.yml'
- '.github/workflows/gateway-release.yml'
- '.github/workflows/verifier-release.yml'
pull_request:
branches: [ master, next, dev-* ]
branches: [ next, 'release/**' ]
paths:
- 'dstack/**'
- 'rust-toolchain.toml'
- '.github/workflows/docker-build-check.yml'
- '.github/workflows/kms-release.yml'
- '.github/workflows/gateway-release.yml'
- '.github/workflows/verifier-release.yml'

env:
DSTACK_REV: ${{ github.event.pull_request.head.sha || github.sha }}
DSTACK_SRC_URL: ${{ github.event.pull_request.head.repo.clone_url || format('{0}/{1}', github.server_url, github.repository) }}

# Builds go through the `docker` driver, i.e. the daemon's own BuildKit, rather
# than the `docker-container` builder setup-buildx creates by default. With a
# container builder every `--load` compresses the result into a tarball and
# imports it into the daemon; for the `*-builder` targets, which carry the Rust
# toolchain and the cargo target directory, that alone was two to three
# minutes. With the daemon's builder the image lands in the store directly, and
# the second build of the `*-builder` target is a cache hit on the first.
#
# No BuildKit layer cache (`cache-to: type=gha`). The source is cloned at
# DSTACK_REV inside the build, so the cargo layer misses on every commit, and
# `mode=max` still exported the whole builder stage to the Actions cache: about
# two and a half minutes per job, and most of the repository's 10 GB cache
# quota, which evicted the cargo caches the other workflows depend on. What it
# could have saved was the pinned-package install, roughly fifteen seconds.
jobs:
build-script-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Test release build orchestration
run: python3 -m unittest discover -s dstack/build/shared/tests -v

gateway:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker

- name: Build Gateway Docker image
uses: docker/build-push-action@v5
Expand Down Expand Up @@ -73,6 +115,8 @@ jobs:

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker

- name: Build KMS Docker image
uses: docker/build-push-action@v5
Expand All @@ -88,10 +132,10 @@ jobs:
DSTACK_REV=${{ env.DSTACK_REV }}
DSTACK_SRC_URL=${{ env.DSTACK_SRC_URL }}

- name: Verify pinned packages (qemu stage)
- name: Verify pinned packages
run: |
dstack/build/shared/verify-pinned-packages.sh dstack-kms-check:latest \
dstack/kms/dstack-app/builder/shared/qemu-pinned-packages.txt
dstack/kms/dstack-app/builder/shared/pinned-packages.txt

- name: Build kms-builder target
run: |
Expand Down Expand Up @@ -125,6 +169,8 @@ jobs:

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker

- name: Build Verifier Docker image
uses: docker/build-push-action@v5
Expand Down Expand Up @@ -163,21 +209,3 @@ jobs:
run: |
dstack/build/shared/verify-pinned-packages.sh verifier-builder-check:latest \
dstack/verifier/builder/shared/builder-pinned-packages.txt

- name: Build acpi-builder target
run: |
docker buildx build \
--load \
--target acpi-builder \
--tag verifier-acpi-check:latest \
--provenance=false \
--file dstack/verifier/builder/Dockerfile \
--build-context build-shared=dstack/build/shared \
--build-arg "DSTACK_REV=${DSTACK_REV}" \
--build-arg "DSTACK_SRC_URL=${DSTACK_SRC_URL}" \
dstack/verifier

- name: Verify qemu pinned packages
run: |
dstack/build/shared/verify-pinned-packages.sh verifier-acpi-check:latest \
dstack/verifier/builder/shared/qemu-pinned-packages.txt
3 changes: 3 additions & 0 deletions .github/workflows/foundry-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ jobs:
forge build --sizes
id: build

- name: Install OpenZeppelin upgrades validator
run: npm install --no-save --package-lock=false @openzeppelin/upgrades-core@^1.37.0

- name: Run Forge tests
run: |
forge test --ffi -vvv
Expand Down
142 changes: 142 additions & 0 deletions .github/workflows/gateway-cluster-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network>
#
# SPDX-License-Identifier: Apache-2.0

name: Gateway cluster tests

# WaveKV replication between gateway nodes: push and periodic sync, anti-entropy
# repair, bootstrap after losing a store, partition recovery, node identity, and
# the admin RPCs that gate registration. Unit tests cover the store; this runs
# three real gateways and stops, wipes and restarts them.
#
# The nodes authenticate each other for real, so the cluster mTLS path is
# exercised rather than switched off -- which is what the process-based suite
# this replaces could not do.
on:
push:
branches: [ next, 'release/**' ]
paths:
- 'dstack/gateway/**'
- 'dstack/cert-client/**'
- 'dstack/ra-tls/**'
- 'dstack/guest-agent-simulator/**'
- 'sdk/simulator/**'
- 'dstack/crates/mock-attestation/**'
- '.github/workflows/gateway-cluster-tests.yml'
pull_request:
branches: [ next, 'release/**' ]
paths:
- 'dstack/gateway/**'
- 'dstack/cert-client/**'
- 'dstack/ra-tls/**'
- 'dstack/guest-agent-simulator/**'
- 'sdk/simulator/**'
- 'dstack/crates/mock-attestation/**'
- '.github/workflows/gateway-cluster-tests.yml'

# Per workflow, not shared with the other two gateway suites.
#
# A group shared across all three does not serialise them, it drops one: a
# concurrency group holds a single *pending* run, so when the third workflow
# queued behind the first two, the one already waiting was cancelled --
# silently, and reported as a cancelled run rather than a failure. The suites
# no longer need serialising anyway; each brings up its own attestation fixture
# under its own `FIXTURE_NS`, so there is nothing left to collide over.
#
# `cancel-in-progress` is the ordinary meaning here: a new push supersedes the
# run for the commit it replaced.
concurrency:
group: gateway-cluster-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
CARGO_TERM_COLOR: always

jobs:
gateway-cluster:
runs-on: ${{ vars.CI_RUNNER || 'ubuntu-latest' }}
# 28 tests, most of which restart nodes and then wait out a 5s sync interval.
timeout-minutes: 60
steps:
- uses: actions/checkout@v5

- name: Install Rust
uses: dtolnay/rust-toolchain@1.92.0
with:
targets: x86_64-unknown-linux-musl

- name: Install musl toolchain
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends musl-tools

# The gateways create real WireGuard interfaces inside their containers.
- name: Record kernel capabilities
run: |
echo "kernel: $(uname -r)"
sudo modprobe wireguard 2>&1 || echo "no wireguard module available"
echo "wireguard loaded: $(lsmod | grep -c '^wireguard ' || true)"

- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
dstack/target
key: gateway-cluster-${{ runner.os }}-${{ hashFiles('dstack/Cargo.lock') }}
restore-keys: gateway-cluster-${{ runner.os }}-

- name: Cluster suite
working-directory: dstack/gateway/test-run/cluster
run: ./run-cluster-tests.sh

# The suite only materialises node logs for the two tests that assert on
# them, so the mounted directory is close to empty for any other failure.
# Pull them from the daemon instead, by compose service so the shared
# fixture's project-scoped names do not have to be guessed.
- name: Collect node logs on failure
if: failure()
working-directory: dstack/gateway/test-run/cluster
# The compose files require `${FIXTURE_NS:?}`, and the suite script
# exports it only to itself. Unset here, every `docker compose` call in
# this step -- not just the fixture one -- fails at interpolation, and
# the step still passes, so the artifact carries no container logs.
env:
FIXTURE_NS: dstack-fixture-cluster
run: |
mkdir -p run/logs
# By project, discovered from the daemon. A bare `docker compose` here
# addresses the project named after this directory (`cluster`), which
# no test ever uses -- every test runs under `cluster-<testname>`, so
# the loop that used `compose config --services` collected nothing.
docker ps -a --filter 'label=com.docker.compose.project' \
--format '{{.Label "com.docker.compose.project"}}' \
| grep -E '^cluster-' | sort -u | while read -r project; do
docker compose -p "$project" -f docker-compose.yml logs --no-color \
> "run/logs/project-$project.log" 2>&1 || true
done
# The suite's own per-test dumps are root-owned inside the bind mount.
docker run --rm -v "$PWD/run:/r" alpine:latest chmod -R a+rX /r || true
# The attestation fixture is a project of its own now, so it is not in
# this suite's service list and its logs have to be asked for
# separately -- they are where a quote-verification failure explains
# itself.
docker compose -p "$FIXTURE_NS" -f ../attestation/fixture.yml logs \
--no-color > "run/logs/fixture.log" 2>&1 || true
docker compose ps -a > run/logs/compose-ps.txt 2>&1 || true

- name: Upload node logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: gateway-cluster-logs
path: dstack/gateway/test-run/cluster/run/logs/
if-no-files-found: ignore
retention-days: 7

- name: Tear down
if: always()
working-directory: dstack/gateway/test-run/cluster
run: ./run-cluster-tests.sh down
Loading