Commit Graph
433 Commits
Author SHA1 Message Date
codingetandClaude a121d03257 fix(drive): answer a runtime unsupported PROPPATCH the way an absent one is
A backend with setProps that rejects unsupported for this path got 501 while a
backend without setProps got 403, for the same inability. 403 is the answer
kept: WebDAV allows it for a property the server will not store, where 501 says
PROPPATCH itself is unimplemented, which is not what the server means.

Refs #179

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:41:41 +00:00
codingetandClaude 0b02dcede0 refactor(drive): copy and move through the shared fallbacks
copyRecursive predated @webnet/vfs/fallback and disagreed with it: it did not
reject an overlapping source and destination, left a partial destination behind
on failure, and tolerated an existing directory mid-tree rather than replacing
the destination.

The policy is on-unsupported, so a native copy or move that rejects unsupported
for this path falls back to the traversal. That code guarantees nothing changed,
and WebDAV has no way to tell the client which of the two it got, so refusing
would only lose it the operation.

The destination is now statted twice per request, once by the handler to answer
201 or 204 and once by the fallback to decide whether to clear it.

Refs #178, #179

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:41:41 +00:00
codingetandClaude 1c75e2de6f fix(sftp,ftp): window an offset read lazily instead of discarding eagerly
The SFTP server drained the prefix inside openReadStream, before the reader was
handed back, holding the SSH_FXP_READ reply open for the whole discard. FTP had
its own skipBytes for the same job. Both use readFileRangeFallback now, which
windows lazily and cancels the source once the window is filled, and skipBytes
goes with its only caller.

Refs #178, #179

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:41:41 +00:00
codingetandClaude 12828c4f39 fix(http-static,drive): serve a Range through the shared fallback
http-static had its own boundedStream for the same job readFileRangeFallback
does. Both servers now use the shared one with the on-unsupported policy: a
Range a backend could serve is not refused, so a native readFileRange that
rejects unsupported for this path falls back like an absent one does.

Refs #178, #179

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:41:41 +00:00
codingetandCodex 802ea449dd fix(tailshare): address initialization failure review
CI / lint (pull_request) Successful in 3m7s
CI / format (pull_request) Successful in 3m20s
CI / install (pull_request) Successful in 7m30s
CI / typetest (pull_request) Successful in 2m39s
CI / node-tests (pull_request) Successful in 2m56s
CI / typecheck (pull_request) Successful in 2m58s
CI / browser-tests (pull_request) Successful in 4m37s
Co-Authored-By: gpt-5.6-terra <noreply@openai.com>
2026-08-05 23:59:16 +00:00
codingetandCodex 9c9db0c17a fix(tailshare): handle insecure and failed initialization
Closes #123

Closes #131

Co-Authored-By: gpt-5.6-terra <noreply@openai.com>
2026-08-05 23:57:30 +00:00
codinget ced0e59fba chore(vfs): statically ensure MemoryVFS implements every method
CI / lint (pull_request) Successful in 3m2s
CI / format (pull_request) Successful in 3m23s
CI / install (pull_request) Successful in 7m34s
CI / typetest (pull_request) Successful in 2m32s
CI / typecheck (pull_request) Successful in 2m50s
CI / node-tests (pull_request) Successful in 2m55s
CI / browser-tests (pull_request) Successful in 4m35s
2026-08-05 22:17:47 +00:00
codingetandClaude 529e83223e test(drive): declare PROPPATCH over a minimal filesystem unsupported
Opting out skipped the test entirely, leaving the path with no coverage. The
tri-state capability with a forbidden alias keeps the assertions that the call
rejects and the properties are unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:29:33 +00:00
codingetandClaude 132c542b3f docs: record the minimal-filesystem conformance work
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:29:33 +00:00
codingetandClaude e83a37da6c test(drive,ftp,sftp): run conformance over a minimal backing filesystem
Each package ran the suite against a server backed by a full MemoryVFS, so
the servers' fallback paths were never entered. A second run reduces the
server's filesystem to the required operations while leaving the client under
test unchanged; it fails on #177 without the previous commit. Where a server
answers rather than shims — WebDAV 403 for PROPPATCH, FTP 502 and SFTP
SSH_FX_OP_UNSUPPORTED for rename — the run declares that instead of opting
out, which is the decision #179 revisits.

Fixes #181

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:29:33 +00:00
codingetandClaude 1458423679 fix(drive): serve the requested window on a Range without readFileRange
The fallback branch discarded range.start and streamed the file from byte
zero while the response advertised the requested window, so a client asking
for bytes 5-9 got bytes 0-4 and stored them at the wrong offset.
readFileRangeFallback windows the stream and calls the native operation when
there is one.

Fixes #177

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:29:33 +00:00
codingetandClaude da7c3d3e21 feat(vfs): share the optional-stripping helpers in conformance
withoutOptional and unsupportedOptional replace the local copies in the
fallback tests; the protocol packages need the same reduction to put their
servers' fallback paths under the suite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:29:33 +00:00
codingetandCodex 6c66acb882 fix(vfs): reject overlapping copies
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-05 21:29:33 +00:00
codingetandClaude abd605a2ab docs: record the statAndReaddir policy and the issues filed
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:29:23 +00:00
codingetandClaude 016e506393 fix(vfs): let the statAndReaddir callsites fall back on unsupported
Every one of these callers needs the listing to answer the request, and the
stat plus readdir it falls back to are required operations, so there is no
reason to stop at an implementation that has the combined call but cannot serve
it for this path. The default policy stops there because for most operations a
fallback is materially different from the native one; for this one it is only
slower.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 01:44:37 +00:00
codingetandClaude b72ee0c9f1 test(vfs): cover the review's untested boundaries
CI / lint (pull_request) Successful in 2m38s
CI / format (pull_request) Successful in 2m43s
CI / install (pull_request) Successful in 8m55s
CI / typetest (pull_request) Successful in 2m40s
CI / typecheck (pull_request) Successful in 2m58s
CI / node-tests (pull_request) Successful in 3m9s
CI / browser-tests (pull_request) Successful in 4m52s
A stream that fails after the native call resolved is deliberately not retried,
and cancelling the fallback's output while a read is in flight must still
release the source. Both were argued from the code rather than demonstrated.
The root path overlaps every other path, so it is rejected at either end of a
copy; that followed from the guard without being stated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 00:34:14 +00:00
codingetandClaude 4387ea9837 docs: record the vfs fallback work
CI / typecheck (pull_request) Canceled after 0s
CI / typetest (pull_request) Canceled after 0s
CI / node-tests (pull_request) Canceled after 0s
CI / browser-tests (pull_request) Canceled after 0s
CI / format (pull_request) Canceled after 1m58s
CI / lint (pull_request) Canceled after 2m4s
CI / install (pull_request) Canceled after 2m10s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 00:13:37 +00:00
codingetandClaude cf485af184 test(vfs): cover shimmed and unsupported conformance variants
An implementation that answers unsupported at runtime was not expressible: the
capability flags only said present or absent, so the suite could not check that
such a rejection carries the right code and leaves the filesystem alone.

The fallbacks are then run against the same suite with the optional operations
first removed and then rejecting, which is what shows they can stand in for
them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 00:12:56 +00:00
codingetandClaude a81437430c fix(vfs): honour empty ranges in the drive and ftp clients
Both clients failed the boundary behaviour the conformance suite now requires.
WebDAV answers a range at or past the end of a file with 416, which RFC 9110
defines as unsatisfiable and the client reported as an unexpected status; at
this level the window is simply empty. FTP carries no end bound on REST, so an
end below the start transferred from the start to the end of the file instead
of nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 00:12:43 +00:00
codingetandClaude c8352a319e test(vfs): pin readFileRange boundary behaviour
Serving a byte range needs an empty window and an unanswerable request to be
distinguishable, so a start at or past the end of a file and an end below the
start return an empty stream rather than failing. The suite did not say so, and
NodeVFS passed both bounds to createReadStream, which rejects an inverted range
with a plain RangeError.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 20:00:38 +00:00
codingetandClaude 1660b1df2e refactor(vfs): share the statAndReaddir fallback
The optional operation arrived with three byte-identical copies of the same
fallback, one per call site.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 19:59:04 +00:00
codingetandClaude 4c17366172 feat(vfs): add fallbacks for optional operations
Callers of an optional AsyncVFS operation each had to decide what to do when
an implementation lacked it, so the same fallbacks were written repeatedly and
diverged. withFallbacks presents every optional operation as available, so a
consumer can call it without branching on method presence, and the operations
that cannot be built from the required ones say so with the unsupported code
rather than appearing absent.

The policy chooses when a fallback may stand in. Only an unsupported rejection
ever triggers one: any other failure means the operation was attempted, and
retrying it another way would hide that.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 19:57:24 +00:00
codingetandClaude 3270e373a0 feat(vfs): map native unsupported statuses onto the vfs code
Each client already had a native response meaning the operation does not exist
here, and each discarded it: SFTP OP_UNSUPPORTED and FTP 502 surfaced as bare
protocol errors, WebDAV 501 hit the unexpected-status branch, and SMB2
STATUS_NOT_SUPPORTED reached callers as forbidden, which claims a permission
problem the server never reported.

Without this a server emits the status and its own client throws the meaning
away, so no caller can act on it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 19:53:37 +00:00
codingetandClaude 9ae97a37ad feat(vfs): add an unsupported error code
Optional AsyncVFS operations could only be declared by method presence, which
is global to an instance and cannot express a backend that performs an
operation for some shares, paths or negotiated protocol versions and not
others. Those cases were forced onto forbidden, which claims the caller lacks
permission when the backend said the operation does not exist here.

The outbound wire mappings are exhaustive over VFSErrorCode, so each one names
its protocol's own unsupported response.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 19:50:48 +00:00
codingetandCodex 394d720aeb docs(vfs): qualify overwrite replacement
CI / lint (pull_request) Successful in 2m0s
CI / format (pull_request) Successful in 2m6s
CI / install (pull_request) Successful in 7m14s
CI / typetest (pull_request) Successful in 2m5s
CI / node-tests (pull_request) Successful in 2m33s
CI / typecheck (pull_request) Successful in 2m35s
CI / browser-tests (pull_request) Successful in 6m52s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 14:39:04 +00:00
codingetandCodex c9ff59bd9a docs(vfs): define overwrite replacement
CI / format (pull_request) Successful in 2m0s
CI / typecheck (pull_request) Canceled after 0s
CI / typetest (pull_request) Canceled after 0s
CI / node-tests (pull_request) Canceled after 0s
CI / browser-tests (pull_request) Canceled after 0s
CI / lint (pull_request) Canceled after 2m12s
CI / install (pull_request) Canceled after 2m28s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 14:36:59 +00:00
codingetandCodex e00d55d2af fix(vfs): preserve overwrite destinations
CI / lint (pull_request) Successful in 2m8s
CI / format (pull_request) Successful in 2m8s
CI / install (pull_request) Successful in 6m52s
CI / typetest (pull_request) Successful in 2m12s
CI / typecheck (pull_request) Successful in 2m43s
CI / node-tests (pull_request) Successful in 2m43s
CI / browser-tests (pull_request) Successful in 4m34s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 13:50:22 +00:00
codingetandCodex a82ddab3a2 fix(drive): preserve overwrite destination
CI / lint (pull_request) Successful in 2m8s
CI / format (pull_request) Successful in 2m11s
CI / typecheck (pull_request) Canceled after 0s
CI / typetest (pull_request) Canceled after 0s
CI / node-tests (pull_request) Canceled after 0s
CI / browser-tests (pull_request) Canceled after 0s
CI / install (pull_request) Canceled after 6m25s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 13:44:07 +00:00
codingetandCodex e1dc165e03 fix(vfs): address combined metadata review
CI / lint (pull_request) Successful in 2m34s
CI / format (pull_request) Successful in 2m37s
CI / typecheck (pull_request) Canceled after 0s
CI / typetest (pull_request) Canceled after 0s
CI / node-tests (pull_request) Canceled after 0s
CI / browser-tests (pull_request) Canceled after 0s
CI / install (pull_request) Canceled after 5m5s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 13:39:10 +00:00
codingetandCodex 93b2dff943 refactor(vfs): reuse combined directory metadata
CI / format (pull_request) Successful in 2m21s
CI / lint (pull_request) Successful in 2m35s
CI / install (pull_request) Successful in 9m0s
CI / typetest (pull_request) Successful in 2m35s
CI / node-tests (pull_request) Successful in 3m4s
CI / typecheck (pull_request) Successful in 3m13s
CI / browser-tests (pull_request) Successful in 4m46s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 00:51:42 +00:00
codingetandCodex e21ad5f24f feat(vfs): combine stat and directory listing
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-04 00:49:30 +00:00
codingetandCodex dc613b5dfe refactor(taildrive): clarify discovery exports
CI / lint (pull_request) Successful in 2m47s
CI / format (pull_request) Successful in 3m0s
CI / install (pull_request) Successful in 9m49s
CI / typetest (pull_request) Successful in 2m41s
CI / typecheck (pull_request) Successful in 2m59s
CI / node-tests (pull_request) Successful in 3m13s
CI / browser-tests (pull_request) Successful in 5m0s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-03 23:08:54 +00:00
codingetandCodex a60f1b626e fix(taildrive): harden peer probes
CI / format (pull_request) Successful in 1m55s
CI / lint (pull_request) Successful in 2m4s
CI / install (pull_request) Successful in 5m52s
CI / typetest (pull_request) Successful in 2m7s
CI / node-tests (pull_request) Successful in 2m18s
CI / typecheck (pull_request) Successful in 2m20s
CI / browser-tests (pull_request) Successful in 3m47s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-03 01:27:54 +00:00
codingetandCodex a0ad4bf17b feat(taildrive): discover peers with shares
CI / lint (pull_request) Successful in 1m49s
CI / format (pull_request) Successful in 2m0s
CI / typecheck (pull_request) Canceled after 0s
CI / typetest (pull_request) Canceled after 0s
CI / node-tests (pull_request) Canceled after 0s
CI / browser-tests (pull_request) Canceled after 0s
CI / install (pull_request) Canceled after 5m12s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-08-03 01:23:10 +00:00
codingetandClaude ab987f50d0 test(tsconnect): assert drive peers are reported online
CI / format (pull_request) Successful in 2m25s
CI / lint (pull_request) Successful in 2m28s
CI / install (pull_request) Successful in 7m35s
CI / typetest (pull_request) Successful in 2m15s
CI / typecheck (pull_request) Successful in 2m31s
CI / node-tests (pull_request) Successful in 2m32s
CI / browser-tests (pull_request) Successful in 3m56s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 01:39:46 +00:00
codingetandClaude a6b71597ca fix(tsconnect): filter offline and unreachable taildrive peers
CI / format (pull_request) Successful in 2m35s
CI / lint (pull_request) Successful in 2m37s
CI / typecheck (pull_request) Canceled after 0s
CI / typetest (pull_request) Canceled after 0s
CI / node-tests (pull_request) Canceled after 0s
CI / browser-tests (pull_request) Canceled after 0s
CI / install (pull_request) Canceled after 5m55s
listDrivePeers returned every peer holding PeerCapabilityTaildriveSharer,
which is an ACL grant usually given to a whole group or tag, so offline
peers and peers with no reachable peerAPI were included. Bump the
tailscale submodule to the fix and correct the TS doc comments, which
claimed the result was peers exposing a share.

The submodule bump also picks up the removal of the obsolete ssh, fetch
and setExitNodeEnabled wasm bridge APIs, already on the fork's webnet
branch and unused here.

Closes #143

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 01:34:07 +00:00
codinget f4131462af build(turbo): fix turbo cache with submodules
CI / format (pull_request) Successful in 2m39s
CI / lint (pull_request) Successful in 2m55s
CI / install (pull_request) Successful in 7m57s
CI / typetest (pull_request) Successful in 2m4s
CI / node-tests (pull_request) Successful in 2m40s
CI / typecheck (pull_request) Successful in 2m44s
CI / browser-tests (pull_request) Successful in 4m13s
2026-08-01 00:19:50 +00:00
webnet-actions f766c853d9 chore(tsconnect): update CA bundle 2026-07-31 21:15:18 +00:00
codingetandCodex 1287baf203 ci: paginate CA updater PR discovery
CI / format (pull_request) Successful in 2m16s
CI / lint (pull_request) Successful in 2m36s
CI / install (pull_request) Successful in 9m51s
CI / typetest (pull_request) Successful in 2m40s
CI / typecheck (pull_request) Successful in 3m5s
CI / node-tests (pull_request) Successful in 3m17s
CI / browser-tests (pull_request) Successful in 4m59s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-07-31 20:52:07 +00:00
codingetandCodex 5ac5f08378 ci: schedule tsconnect CA bundle refresh
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-07-31 20:52:07 +00:00
codingetandCodex d28697eeee fix(tsconnect): publish only used build outputs
CI / lint (pull_request) Successful in 2m49s
CI / format (pull_request) Successful in 2m54s
CI / install (pull_request) Successful in 7m37s
CI / typetest (pull_request) Successful in 2m2s
CI / node-tests (pull_request) Successful in 2m25s
CI / typecheck (pull_request) Successful in 2m35s
CI / browser-tests (pull_request) Successful in 3m55s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-07-31 22:35:18 +02:00
codingetandClaude 962ed20219 docs: drop the duplicated #147 disclosure entry
CI / format (pull_request) Successful in 2m43s
CI / lint (pull_request) Successful in 2m47s
CI / install (pull_request) Successful in 9m49s
CI / typecheck (pull_request) Successful in 2m46s
CI / typetest (pull_request) Successful in 2m43s
CI / node-tests (pull_request) Successful in 2m21s
CI / browser-tests (pull_request) Successful in 4m23s
The union merge driver kept both the pre- and post-rebase versions of the
tsconnect shutdown entry; the older one predates the dead-handle change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 16:49:20 +00:00
codingetandClaude 279733fc01 test: run Go runtime shutdowns in-process again
CI / lint (pull_request) Successful in 3m58s
CI / format (pull_request) Successful in 2m55s
CI / install (pull_request) Successful in 13m11s
CI / typecheck (pull_request) Successful in 3m35s
CI / typetest (pull_request) Successful in 1m30s
CI / node-tests (pull_request) Successful in 1m34s
CI / browser-tests (pull_request) Successful in 3m59s
The child-process probes, the missing shutdown() in the tsconnect
integration teardown, and the *.probe.ts tsconfig excludes all existed
only to keep the late "Go program has already exited" errors away from
node:test. That bug is fixed, so drop the workarounds; the restored
in-process shutdowns are the regression test for it.

Refs #147, #152

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 00:39:07 +00:00
codingetandClaude 342b996828 fix(tsconnect): treat handles from an exited runtime as closed
CI / lint (pull_request) Successful in 2m34s
CI / format (pull_request) Successful in 2m34s
CI / install (pull_request) Successful in 7m2s
CI / typetest (pull_request) Successful in 1m59s
CI / node-tests (pull_request) Successful in 2m24s
CI / typecheck (pull_request) Successful in 2m31s
CI / browser-tests (pull_request) Successful in 3m53s
With _resume no longer throwing after exit, a call into a dead Go handle
resolves with undefined instead of failing — a read loop would spin on it
rather than break out. Conn, PacketConn and TCPListener now report closed
once their runtime has exited, so those calls raise ClosedError and
close() is a no-op.

Refs #147

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 00:38:58 +00:00
codingetandClaude 90f262e301 fix(tsconnect): drop the Go runtime's pending work on exit
CI / format (pull_request) Successful in 3m27s
CI / lint (pull_request) Successful in 3m27s
CI / install (pull_request) Successful in 11m17s
CI / typetest (pull_request) Successful in 2m11s
CI / node-tests (pull_request) Successful in 3m8s
CI / typecheck (pull_request) Successful in 3m24s
CI / browser-tests (pull_request) Successful in 5m56s
wasm_exec.js keeps the Go scheduler's setTimeout armed and every js.FuncOf
callback registered across program exit, and _resume throws "Go program has
already exited" when they fire. After a clean shutdown() that surfaces as
uncaught errors and unhandled rejections seconds later: a scheduler timeout,
DERP WebSocket close listeners, and a fetch continuation.

initIPN now clears the scheduled timeouts from runtime.wasmExit and makes
_resume a no-op once the runtime has exited.

Fixes #147

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 23:51:40 +00:00
codingetandCodex ad0d5259ab test(tsconnect-worker): isolate Go runtime shutdowns
CI / lint (pull_request) Successful in 2m24s
CI / format (pull_request) Successful in 2m32s
CI / install (pull_request) Successful in 7m2s
CI / typetest (pull_request) Successful in 1m54s
CI / node-tests (pull_request) Successful in 2m8s
CI / typecheck (pull_request) Successful in 2m19s
CI / browser-tests (pull_request) Successful in 3m37s
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
2026-07-30 00:38:22 +02:00
codinget afbc809240 chore: remove deprecated APIs: setExitNodeEnabled, ping(disco), fetch, ssh
CI / format (pull_request) Successful in 2m41s
CI / lint (pull_request) Successful in 2m46s
CI / install (pull_request) Successful in 10m45s
CI / typetest (pull_request) Successful in 2m49s
CI / typecheck (pull_request) Successful in 3m2s
CI / node-tests (pull_request) Successful in 3m10s
CI / browser-tests (pull_request) Successful in 6m13s
2026-07-29 21:38:42 +00:00
codinget 7f6a2bbc22 chore: switch to the rebased tailscale build
CI / lint (pull_request) Successful in 1m52s
CI / format (pull_request) Successful in 2m3s
CI / install (pull_request) Successful in 6m22s
CI / typetest (pull_request) Successful in 2m0s
CI / typecheck (pull_request) Successful in 2m15s
CI / node-tests (pull_request) Successful in 2m17s
CI / browser-tests (pull_request) Successful in 3m29s
2026-07-29 20:15:25 +00:00
codingetandClaude ca91c68717 docs: record tsconnect integration test coverage in AI_CHANGES
CI / format (pull_request) Successful in 1m58s
CI / lint (pull_request) Successful in 2m0s
CI / install (pull_request) Successful in 5m9s
CI / typetest (pull_request) Successful in 1m38s
CI / typecheck (pull_request) Successful in 1m54s
CI / node-tests (pull_request) Successful in 2m0s
CI / browser-tests (pull_request) Successful in 3m14s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 23:51:26 +00:00
codingetandClaude fddeb7f5ba docs: document the new integration test env variables
CI / format (pull_request) Successful in 2m4s
CI / lint (pull_request) Successful in 2m9s
CI / install (pull_request) Successful in 5m28s
CI / typetest (pull_request) Successful in 1m46s
CI / node-tests (pull_request) Successful in 1m55s
CI / typecheck (pull_request) Successful in 2m5s
CI / browser-tests (pull_request) Successful in 3m19s
TSCONNECT_TEST_USER_AUTH_KEY and TSCONNECT_TEST_EXIT_NODE_ID gate the Taildrop
and exit node tests; both are optional and the suite is green without them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 23:21:18 +00:00