Repository navigation
fix(ci): pin artifact destinations (D-1058, D-1015, D-1194, D-1129) - #525
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Artifact extraction now validates and opens its destination as one operation, then keeps that directory handle through every write. Replacing a parent pathname after validation cannot redirect extraction to a different directory.
Verified against freshly fetched origin/main c2eac4e. No AGENTS.md or .claude/CLAUDE.md was present at the repository root.
The choice follows the existing os.Root extraction approach: keep the pathname validator for validation-only consumers, and give artifact extraction a pinned handle. Returned paths are display values; extraction uses the handle. A refused opening can leave a newly created empty directory, since removing it by a raced pathname would be unsafe. No product decision, production access, release or HQ edit is required.
Validation from free/ci:
go test -mod=vendor ./internal/authz ./internal/artifacts/records— PASS.go vet -mod=vendor ./internal/authz ./internal/artifacts/records— PASS.go build -mod=vendor ./internal/authz ./internal/artifacts/records— PASS.git diff --check— PASS.go test -mod=vendor ./...— BLOCKED by linker errors opening missing files under the worker's shared /Volumes/D4/dev-caches/go-build cache. A clean archive of origin/main was tested with the same command and also failed with missing cache objects. Both full-module runs were stopped after confirming that infrastructure blocker; no cache workaround was attempted. A separate clean-maingo test -mod=vendor ./internal/doctorpassed, so the shared-cache failure is intermittent rather than a claimed source regression.No hooks were bypassed. One conventional commit, no attribution lines.