10 KiB
Final-review fix round 1 report (sanitized)
Verdict
- Base:
fa499a9bdd37011833691b0f447470d8b7e8a3a6. - Final frozen source:
10cd66fe6a5b484a4dc569326a228c1c5484a5d4onfeat/thoth-auth. - Authentication remediation: PASS / ADDRESSED. All four final-review Important findings are resolved relative to the remediation brief.
- Terra Minor evidence corrections: ADDRESSED.
- Branch/release readiness: FAIL. The completed exact-source workflow still contains executed baseline clone-contract, LF/Compose, and Linux Docker failures. Unavailable external/manual gates remain PENDING.
- Source and evidence remain separate commits. No workflow was dispatched from the evidence-only phase.
Finding disposition
| Finding | Disposition | Evidence |
|---|---|---|
| Important 1 — exhaustive Windows cleanup | RESOLVED | Cleanup now attempts close/delete/validation operations in deterministic order and returns sanitized ErrUnsafeFile after aggregating failures. TestWindowsPrivateRegularCleanupClosesAfterDeleteDispositionFailure and TestWindowsClaimCleanupAttemptsLaterOperationsAfterEarlierFailure cover the non-short-circuit contract. Global no-delete sharing remains unchanged. |
| Important 2 — usable native Windows authority | RESOLVED | Owner-only descriptors use the current user SID, protected/non-defaulted DACL semantics, valid NT attributes/access masks, self-relative creation descriptors, and semantic full-control validation. Equal-or-stronger Windows fixture adaptations retain no-delete handles instead of weakening ACL/identity checks. The final native three-package gate passes. |
| Important 3 — restore-test deadlock | RESOLVED | Lifecycle-stage release observes the buffered worker outcome, uses a bounded/cancellable release, reports premature completion directly, and never waits indefinitely on done. TestReleaseLifecycleStageReturnsPrematureWorkerOutcome and the lifecycle-lock terminal-cleanup test are green. |
| Important 4 — complete native package gate | RESOLVED | Workflow and remediation plan both use the exact unfiltered command go test ./internal/safeio ./internal/backup ./internal/authstorage -count=1. Final logs prove all three packages executed natively. |
| Minor — non-executed gate classification | RESOLVED | Non-executed/skipped commands are NOT_RUN / BLOCKED; FAIL is reserved for commands that ran and failed. Historical results remain separately labelled. |
| Minor — explicit Windows StageArchive row | RESOLVED | .artifacts/task-15/automated-gates.json contains windows_stagearchive_retained_capability = PASS, bound to the final source and native backup result. |
Additional failures exposed by the required unfiltered gate were fixed without narrowing the workflow: Windows secret-bearing archive reservation is protected before use; StageArchive shares one retained root capability across both staged files; claim/consume transitions serialize the complete public validation and retained-handle operation while preserving ACL, hard-link identity, reparse rejection, and no-delete invariants.
RED → GREEN record
Initial RED
- Run
32122302381: https://github.com/mptyl/ThothII/actions/runs/32122302381 - Source:
b31b27e5845ffd3adf311429367319beaba263c7. - Windows job:
95665197885. - Result: native
safeio/backupfailure, including the 10-minute restore lifecycle timeout;authstoragewas absent from the command. This established the RED for Important 2–4 and the required native authority. - Cleanup failure-injection tests added for Important 1 first exposed the short-circuit behavior before the implementation was changed.
Final concurrency RED
- Run
32140481263: https://github.com/mptyl/ThothII/actions/runs/32140481263 - Source:
b48e9e9189dd0e8083db9bd0378704524e670edb. - Windows job:
95721724645. - Native results: backup PASS (
20.757s), authstorage PASS (104.180s), safeio FAIL (63.502s). The only failures were:TestCanonicalPrivateClaimWaitsForRetainedRemoveOperation: the concurrent claim returnedfalse, unsafe filebefore retained removal completed;TestCanonicalPrivateClaimConsumeHasOneConcurrentWinner: iteration 8 returnedunsafe file.
- Diagnosis: the process mutex started below
validateClaimPaths; a concurrent caller could fail while reopening the retained no-delete directory before reaching the lock.
GREEN implementation and local gates
The lock boundary was moved to the three public claim/read/remove APIs, covering validation, relative operation, and handle close. The Unix implementation uses a no-op boundary and retains its existing descriptor-relative semantics.
Final-source local commands passed:
go test ./internal/safeio ./internal/backup ./internal/authstorage -count=1
go test -race ./...
go vet ./...
go build -o /tmp/thothii-tht-host ./cmd/tht
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o /tmp/thothii-tht-windows.exe ./cmd/tht
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go test -c ... ./internal/{safeio,backup,authstorage}
- Focused host package times: safeio
8.750s, backup8.378s, authstorage8.854s. - Race suite and vet: PASS.
- Host CLI: Mach-O arm64; Windows CLI and all three Windows test binaries: PE32+ x86-64.
- Cross-compilation remains compile-only and is not used as native proof.
Exact-source native certification
- Run:
32141428407 - URL: https://github.com/mptyl/ThothII/actions/runs/32141428407
- Event/status/conclusion:
workflow_dispatch/completed/failure. - Head SHA:
10cd66fe6a5b484a4dc569326a228c1c5484a5d4— exact final source match. - Windows job:
Windows clone and Compose contract, job95724751282: https://github.com/mptyl/ThothII/actions/runs/32141428407/job/95724751282 - Native step:
Run native Windows retained-capability tests— PASS. - Exact command:
go test ./internal/safeio ./internal/backup ./internal/authstorage -count=1. - Native package results:
- safeio PASS (
8.230s); - backup PASS (
5.195s); - authstorage PASS (
8.383s).
- safeio PASS (
- Job conclusion:
failureonly because the followingVerify Windows clone contractbaseline step failed with a PowerShellParserErroratscripts/test-windows-clone-contract.ps1:208;$remoteYaml:is not delimited before:.
Remaining branch/release blockers
| Gate | Classification | Exact outcome |
|---|---|---|
| Windows native authentication packages | PASS | All three required packages executed on final source. |
| Windows clone contract | FAIL / baseline | Executed after native PASS; PowerShell parser error at line 208. |
| LF, Compose, docs, and TypeScript | FAIL / baseline CI contract | Job 95724751205; unified Compose passed, then test-no-deployment-coupling-scope.sh failed because TMPDIR was unset. Downstream skipped commands are NOT_RUN / BLOCKED. |
| Linux Docker deployment and rollback | FAIL / infrastructure prerequisite | Job 95724751356; executed smoke stopped because rg was unavailable. Cleanup proof passed; no new image manifest was generated. |
| Native Windows Docker Desktop/WSL2 startup | NOT_RUN / BLOCKED | Job 95724752028 was skipped by workflow conditions; no Docker/WSL2 command executed. |
| Harness/Ruff/other historical baseline gates | FAIL | Retained with their recorded source and results; not rewritten as final-source proof. |
| L2, real PSD/manual acceptance, provider readiness | PENDING | Required secrets, identity/access, or provider prerequisites remain unavailable. |
The historical Docker image manifest remains bound to source
74b062f1a737103524cbe706346cfd65f87cdfd1; it was not reused as proof for the final source.
Principal source commits
cd5f505— exhaustive cleanup, Windows authority foundation, restore deadlock tests/fix, and complete workflow/plan package command.a0e05adthroughb6396e6— effective full-control DACL semantics, valid NT attributes/access, self-relative descriptors, retained no-delete fixture ordering, and Windows installation fixture protection.824245d— preserve existing lifecycle ACL trees instead of mutating inherited authority.455fffb,2d1670e,c01482c,9fc1a15— concurrent claim/consume and settled-loss handling.6474118— one retained StageArchive root capability shared across staged files.feee4ee— unified Windows path wrappers on the retained primitive.b261dd4— bounded private-root sharing contention handling.b48e9e9— deterministic retained-remove concurrency regression and claim-operation lock.10cd66f— final lock boundary includes public path validation; frozen source.
Files changed
Source changes relative to the fix-round base:
.github/workflows/deployment.yml;docs/superpowers/plans/2026-08-18-thothii-authentication-remediation.md;tools/tht/internal/authstorage/storage_test.go;tools/tht/internal/backup/{create.go,create_test.go,fixture_security_unix_test.go,fixture_security_windows_test.go,preflight.go,preflight_test.go,preflight_windows_test.go,restore.go,restore_test.go};tools/tht/internal/safeio/{claim_unix.go,claim_windows.go,claim_windows_test.go,files.go,files_test.go,private_root_windows.go,private_windows.go,private_windows_test.go}.
Evidence/status changes are restricted to:
.artifacts/task-15/automated-gates.json;.superpowers/sdd/2026-08-18-thothii-authentication-remediation/task-4-report.md;.superpowers/sdd/2026-08-18-thothii-authentication-remediation/fix-round-1-report.md;.superpowers/sdd/2026-08-16-thothii-authentication/task-15-report.md;PROJECT_STATE.md.
Machine-readable evidence SHA-256:
5c110b7b2607693de078def441b10290c5a29024c83b7e5a0ced894b72b7507f.
Git and protection status
- The evidence commit contains only the five evidence/status files listed above; no source is
changed after frozen source
10cd66fe6a5b484a4dc569326a228c1c5484a5d4. - After the evidence commit and push, the intended status is synchronized
feat/thoth-auth...origin/feat/thoth-authwith only protected untracked.playwright-cli/and.thothctl/. AGENTS.md,CLAUDE.md, anddocs/agents/are untouched. No generatedtools/tht/thtexists.- Evidence commit SHA is reported externally after commit creation because a commit cannot contain its own final hash.