FLT-104 — Build Report¶
Built by: Codex (offloaded under governor RED), verified by Claude (WT-6022), 2026-07-17.
Branch: wt/WT-6022/FLT-104. Spec: docs/FLT-104-gate0-auth-smoke-spec.md.
Result (verified independently, not on Codex's word)¶
dotnet build -warnaserror: 0 warnings, 0 errors.dotnet test: 18 passed, 0 failed.
Implemented¶
fleet-routine.sln+src/FleetRoutine.Cli(exefleet-routine) +tests/FleetRoutine.Tests(xUnit).doctorverb:--register-probe(one-time S4U task registration),--noninteractive(trigger + read,--harness/--json/--allow-missing),--reset,--probe-payload(the in-task probe runner).WindowsProbeTask.cs: persistentfleet-routine-doctorS4U task via Task Scheduler COM (Microsoft.Win32.TaskScheduler), RunLevel Highest; fail-closedValidate()on wrong-user / SYSTEM / non-S4U / wrong-RunLevel; request/result handoff via JSON files under%LOCALAPPDATA%\fleet-routine\doctor; per-run nonce checked to reject stale results.- Six
IHarnessProbeimplementations (Probes.cs): Claude / Codex / Gemini / Grok (subprocess), Odysseus / Ollama (HTTP, localhost only). Prompt via temp file; UTF-8 no-BOM. Canary.cs: per-run nonceFLEET_OK_<8hex>; case-sensitivecontainsafter ANSI-strip + CRLF normalize.Gate.cs/Models.cs: gate aggregation (6/6 or--allow-missing), result schema +failureClassmapping.- Tests: Canary (nonce match / mismatch / banner-no-nonce → fail), gate aggregation, failure classifier, serialization, probe runner.
Reviewer notes (Claude, ceiling review)¶
- No password/secret is ever handled — S4U registration passes
password: null. Confirmed clean. - DESIGN NUANCE to confirm on the first real run: uses passwordless
TaskLogonType.S4U, which yields a token without network credentials. Harness OAuth tokens are read from local disk and vendor API calls carry those tokens (not Windows network creds), so it should work — but the live Gate 0 run must prove the S4U profile actually loads the tokens. If a harness fails withAUTH_TOKEN_MISSINGonly under S4U, revisit password-stored logon (TaskLogonType.InteractiveOrPassword) as a fallback. This is precisely the risk Gate 0 exists to surface.
Owed before merge to master¶
- Council code-review gate (
/council-code-review) — not yet run (Codex's runner died before its own review step; committed to the isolated branch to preserve verified-green work). - Live Gate 0 run on the main PC (the acceptance criterion) — requires the one-time
--register-probeinteractive step by Andrew. TODO(FLT-104)inWindowsProbeTask.cs: align account/RunLevel with the real fleet-dispatch listener config.