test(ios): close T-iOS-32's end-to-end half — real worktree lifecycle against a real server

T-iOS-32's acceptance is "builder 测试 + 端到端一次". The builder half was green,
but grep for projects/worktree across the whole test tree returned nothing — no
test had ever created or removed a real git worktree against a real server.

Six tests on a throwaway git fixture: create/remove/prune verified against both
the filesystem and git's own `worktree list --porcelain` + .git/worktrees/, and
asserting the values the SERVER derives rather than echoing our input (branch
feature/e2e-worktree becomes directory feature-e2e-worktree; the raw branch name
must never appear in the path). Includes a differential leg for the guarded-route
rule — the same request without Origin is 403 with zero side effects, and with it
is 200 — which needs raw URLSession, since APIClient structurally cannot emit an
Origin-less guarded request.

GET /sessions gets its own HOME-isolated server: history.ts reads
os.homedir()/.claude/projects, so against the shared harness the assertions would
land on the developer's real Claude history, and in CI the directory is absent so
it degrades to [] and proves nothing.

Integration tests 26 -> 32, independently re-run.
This commit is contained in:
Yaojia Wang
2026-07-30 16:58:22 +02:00
parent 5cc755b0b6
commit ddab77b337
10 changed files with 1577 additions and 23 deletions

View File

@@ -0,0 +1,25 @@
//
// APIClientTokenPolicyProbe.swift F3APIClient
//
// `APIClient` ********
// `APIClient.AuthCookie` " APIClient "
// import SessionCore
// `AuthCookie` `SessionCore.AuthCookie`
//
// **** import APIClient `AuthCookie` / `AccessTokenRule`
// APIClient internal
// TokenPolicyDriftTests SessionCore `SessionCore.AuthCookie`
@testable import APIClient
enum APIClientTokenPolicy {
static var cookieName: String { AuthCookie.name }
static func headerValue(for token: String) -> String {
AuthCookie.headerValue(for: token)
}
static func isWellFormed(_ candidate: String) -> Bool {
AccessTokenRule.isWellFormed(candidate)
}
}