Skip to content

Harden post-agent cache Git commits - #53879

Open
pelikhan with Copilot wants to merge 5 commits into
mainfrom
copilot/fix-security-red-team-issues
Open

Harden post-agent cache Git commits#53879
pelikhan with Copilot wants to merge 5 commits into
mainfrom
copilot/fix-security-red-team-issues

Conversation

Copilot AI commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

The security scan flagged dynamic Git operations in setup scripts. Review identified the post-agent cache commit path as able to inherit agent-written hooks and Git configuration before staging or committing.

  • Git metadata hardening

    • Reinitialize symlinked .git metadata.
    • Remove non-sample hooks and unsafe Git info overrides.
    • Clear local config surfaces that can execute commands (include*, filter*, merge*, aliases, credential settings, and unsafe core.* keys).
    • Enforce /dev/null hooks and disabled fsmonitor.
  • Commit defense in depth

    • Commit with --no-verify.
  • Regression coverage

    • Add a shell test that plants a pre-commit hook and Git clean filter, then verifies neither executes while agent changes are committed.
git config core.hooksPath /dev/null
git config core.fsmonitor false
git commit --no-verify --allow-empty -m "run-${RUN_ID}" -q

run: https://github.com/github/gh-aw/actions/runs/32204573204> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 25.9 AIC · ⌖ 8.32 AIC · ⊞ 9.3K ·

Comment /souschef to run again


Run: https://github.com/github/gh-aw/actions/runs/32210439073> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 25.8 AIC · ⌖ 8.18 AIC · ⊞ 9.3K ·

Comment /souschef to run again


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 33.9 AIC · ⌖ 8.18 AIC · ⊞ 9.3K ·
Comment /souschef to run again


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 8.97 AIC · ⌖ 8.15 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix security issues identified by Red Team scan Harden post-agent cache Git commits Aug 19, 2026
Copilot AI requested a review from pelikhan August 19, 2026 01:08
@pelikhan
pelikhan marked this pull request as ready for review August 19, 2026 01:10
Copilot AI balanced review requested due to automatic review settings August 19, 2026 01:10
@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

No ADR enforcement needed: PR #53879 does not have the 'implementation' label and has 0 new lines of code in business logic directories (file_count: 2, default_business_additions: 0).

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

No test files were added or modified in this PR. Test Quality Sentinel skipped. (PR contains shell script changes: commit_cache_memory_git.sh and commit_cache_memory_git_test.sh — these are outside the analysis scope of Go *_test.go and JavaScript .test.cjs/.test.js files.)

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #53879

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

reviewed_at: 2026-08-19T00:00:00Z
review_event: REQUEST_CHANGES
top_themes:
  - repository reinitialization can destroy valid integrity history
files_reviewed:
  - actions/setup/sh/commit_cache_memory_git.sh
  - actions/setup/sh/commit_cache_memory_git_test.sh
comment_count: 1

Note

This comment is managed by comment memory.

It stores persistent context for this thread in the code block at the top of this comment.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 5.47 AIC · ⌖ 8.73 AIC · ⊞ 7K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes

This hardening is moving in the right direction, but it also introduces a repository-reset path that can break legitimate cache-memory repositories and discard the integrity history this script is supposed to preserve.

Blocking theme
  • Reinitializing the repository when Git metadata is symlinked is not a safe sanitization strategy; it can destroy valid history in linked-worktree or redirected metadata layouts.

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 5.47 AIC · ⌖ 8.73 AIC · ⊞ 7K
Comment /review to run again


if has_symlinked_git_metadata; then
echo "WARNING: Detected symlinked cache-memory git metadata; reinitializing git metadata"
rm -rf .git

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This hardening silently wipes the entire cache-memory Git history whenever .git, .git/config, .git/info, or .git/hooks is a symlink. In the common linked-worktree layout, .git is supposed to be a file/symlink-like indirection into the real metadata directory, so rm -rf .git && git init detaches the checkout from the original repo and destroys the integrity branch history you are trying to preserve.

💡 Why this blocks the change

The new has_symlinked_git_metadata guard treats any symlink as hostile and reinitializes the repository in place. That is too blunt for Git’s normal storage models: worktrees and some cached checkouts legitimately redirect metadata outside the working tree. Reinitializing here means later commits land in a brand-new repo with no prior refs, so auditability and cache continuity are broken.

A safer fix is to reject unexpected metadata layouts without mutating them, or to validate the resolved target stays inside an allowed directory before using it.

if has_symlinked_git_metadata; then
  echo "Refusing to mutate symlinked git metadata" >&2
  exit 1
fi

That preserves the security boundary without corrupting valid repositories.

@github-actions github-actions Bot mentioned this pull request Aug 19, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Hardens post-agent cache commits against agent-controlled Git hooks and configuration.

Changes:

  • Scrubs risky Git metadata and configuration.
  • Disables hooks/fsmonitor and bypasses commit verification.
  • Adds hook/filter regression coverage.
Show a summary per file
File Description
actions/setup/sh/commit_cache_memory_git.sh Hardens post-agent staging and commits.
actions/setup/sh/commit_cache_memory_git_test.sh Tests malicious hooks and filters.

Review details

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

  • Files reviewed: 2/2 changed files
  • Comments generated: 5
  • Review effort level: Balanced

Comment on lines +39 to +47
has_symlinked_git_metadata() {
local path
for path in .git .git/config .git/info .git/hooks; do
if [ -L "$path" ]; then
return 0
fi
done
return 1
}
Comment on lines +60 to +61
mkdir -p .git/info
rm -f .git/info/exclude .git/info/attributes .git/info/grafts .git/info/sparse-checkout
Comment on lines +63 to +66
git config --unset-all core.attributesFile >/dev/null 2>&1 || true
git config --unset-all core.fsmonitor >/dev/null 2>&1 || true
git config --unset-all core.sshCommand >/dev/null 2>&1 || true
git config --unset-all core.hooksPath >/dev/null 2>&1 || true
# Commit on the current integrity branch; allow empty commits in case
# the agent made no changes (idempotent).
if git commit --allow-empty -m "run-${RUN_ID}" -q 2>/tmp/gh-aw-commit-err; then
if git commit --no-verify --allow-empty -m "run-${RUN_ID}" -q 2>/tmp/gh-aw-commit-err; then
Comment on lines +52 to +60
cat > "${D}/evil-hooks/pre-commit" <<EOF
#!/usr/bin/env bash
touch "${SENTINEL_HOOK}"
EOF
chmod +x "${D}/evil-hooks/pre-commit"
printf 'content\n' > "${D}/agent-data"
printf 'agent-data filter=evil\n' > "${D}/.gitattributes"
run_script "${D}" >/dev/null
assert "pre-commit hook was not executed" "[ ! -e '${SENTINEL_HOOK}' ]"

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /diagnosing-bugs and /tdd — requesting changes on two missing core.* scrubs and a missing reinit test path.

📋 Key Themes & Highlights

Issues Found

  • core.worktree not scrubbed (line 55 of the script) — could redirect git add -A to an agent-controlled path
  • core.gitProxy not scrubbed (line 58) — executes arbitrary commands on every remote URL match
  • User identity set after reinit block (line 47) — leaves a narrow window where commit identity is undetermined
  • scrub_git_config_entries case-handling-i flag gives false confidence; lower-case contract should be documented
  • eval in test helper — sets a risky precedent even if currently safe
  • Symlinked .git reinit path has no test coverage — a regression there would be invisible

Positive Highlights

  • ✅ Defence-in-depth: hooks dir cleaned, core.hooksPath /dev/null, --no-verify, and config scrubbing are layered correctly
  • ✅ Regression test covers the primary attack vector (hook + clean filter) end-to-end
  • has_symlinked_git_metadata correctly checks all relevant paths including .git/config, .git/info, .git/hooks
  • set -euo pipefail in both files ensures unexpected errors surface immediately

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 51.3 AIC · ⌖ 11.7 AIC · ⊞ 7.8K
Comment /matt to run again

git init -q
fi

# Agent-written cache state may contain hooks or configuration that executes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] core.worktree is not scrubbed — an agent-written value would cause git add -A to stage files from an agent-controlled directory instead of the cache dir.

💡 Suggested fix

Add this alongside the other core.* unsets:

git config --unset-all core.worktree >/dev/null 2>&1 || true

core.worktree changes what directory git treats as the working tree, so it's a high-severity execution-redirection surface.

@copilot please address this.

# Agent-written cache state may contain hooks or configuration that executes
# during staging or committing. Clear those command surfaces before either step.
if [ -d .git/hooks ]; then
find .git/hooks -mindepth 1 -maxdepth 1 \( -type f -o -type l \) ! -name '*.sample' -delete

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] core.gitProxy is not scrubbed — it accepts a shell command that git executes for every remote URL match, making it a persistent command-injection surface even if no push/fetch occurs in this script.

💡 Suggested fix
git config --unset-all core.gitProxy >/dev/null 2>&1 || true

Also consider uploadpack.packObjectsHook and uploadpack.packObjectsHook for completeness, which likewise execute arbitrary commands.

@copilot please address this.

fi
done
return 1
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] After rm -rf .git && git init -q, the new repo has no user.email/user.name yet, so if the script exits early between git init and the git config user.* lines below, the subsequent commit would use whatever global/system identity is configured — potentially none, causing an error with unhelpful output.

💡 Suggestion

Move the git config user.* lines immediately after git init (inside the if block), so the identity is always set before any other git operation:

if has_symlinked_git_metadata; then
  rm -rf .git
  git init -q
  git config user.email "gh-aw@github.com"
  git config user.name "gh-aw"
fi

@copilot please address this.


cd "$CACHE_DIR"

scrub_git_config_entries() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] scrub_git_config_entries calls git config --local, but if .git was just reinitialized (empty config), there is nothing to unset — that is fine. However if the grep -E -i match produces zero lines the while loop body never runs and exits 0. The subtle risk: git config --name-only --list may emit keys with uppercase prefixes that the ^${key_prefix}\. pattern misses on case-sensitive filesystems if key_prefix is passed in mixed case. The -i flag on grep mitigates this, but key_prefix is always lower-case at the call sites, so the -i is redundant and its presence may give false confidence.

💡 Suggestion

Document the lower-case contract in the function comment, or normalise with tr '[:upper:]' '[:lower:]' before the grep, so callers never need to think about case:

| tr '[:upper:]' '[:lower:]' | grep -E "^${key_prefix}\."

@copilot please address this.


assert() {
local name="$1"
local condition="$2"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/tdd] assert uses eval on caller-supplied strings, which is an injection risk if a test name or path ever contains shell metacharacters. Given this is a test-only file and paths come from mktemp -d they are likely safe, but it sets a dangerous precedent.

💡 Suggested alternative

Pass the command as a function reference or use a simple if/then pattern instead of eval:

assert() {
  local name="$1"; shift
  if "$@" 2>/dev/null; then
    echo "${name}"
    TESTS_PASSED=$((TESTS_PASSED + 1))
  else
    echo "${name}"
    TESTS_FAILED=$((TESTS_FAILED + 1))
  fi
}
# call: assert "name" test -e "${SENTINEL_HOOK}"

This eliminates eval entirely for the majority of assertions.

@copilot please address this.

cat > "${D}/evil-hooks/pre-commit" <<EOF
#!/usr/bin/env bash
touch "${SENTINEL_HOOK}"
EOF

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/tdd] The test only covers core.hooksPath (external hooks dir) and filter.*. It does not exercise the symlinked-.git reinitialisation path (has_symlinked_git_metadata), which is one of the two major new code paths added. A bug there would go undetected.

💡 Suggested additional test
echo "Test 3: Symlinked .git metadata is reinitialized"
D3="${WORKSPACE}/test3"
REAL_GIT="${WORKSPACE}/real-git"
git -C "$(mkdir -p "${D3}" && echo ${D3})" init -q
mv "${D3}/.git" "${REAL_GIT}"
ln -s "${REAL_GIT}" "${D3}/.git"   # simulate symlinked metadata
run_script "${D3}" >/dev/null
assert "symlinked .git was replaced with real dir" "[ ! -L '${D3}/.git' ]"
assert "repo still functional after reinit" "git -C '${D3}' status"

@copilot please address this.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ponytail review (over-engineering only): one shrink opportunity found; the rest is tightly-scoped security hardening with a single justified regression test.

net: -3 lines possible.

Generated by ✂️ Ponytail Reviewer for #53879 · auto · 26.2 AIC · ⌖ 4.91 AIC · ⊞ 7.3K
Comment /ponytail to run again

done
return 1
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shrink: four separate --unset-all calls for single core.* keys, each with its own >/dev/null 2>&1 || true. Loop: for k in attributesFile fsmonitor sshCommand hooksPath; do git config --unset-all "core.$k" >/dev/null 2>&1 || true; done, saves 3 lines.

@github-actions

Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great work on this security hardening! You've addressed the critical gap in the post-agent cache commit path where agent-written Git hooks and configuration could inherit and execute.

What looks great:

  • Comprehensive Git metadata hardening (symlink reinit, hook removal, unsafe config scrubbing)
  • Robust regression test that plants malicious hooks and filters, then verifies neither executes
  • Defense-in-depth approach using --no-verify and /dev/null hooksPath
  • Clear comments explaining the threat model and remediations

This PR is ready for review and merge. The test coverage for the security fix is solid and directly validates the mitigations. Well done! ✨

Generated by ✅ Contribution Check · auto · 59.7 AIC · ⌖ 4.1 AIC · ⊞ 9.2K ·

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: Harden post-agent cache Git commits

Good hardening work. The approach — clearing hooks, scrubbing dangerous config sections before staging, and using --no-verify on commit — closes the main injection surfaces. Two non-blocking issues noted inline:

  1. core.worktree not scrubbed (security gap): could redirect git add -A to an arbitrary path.
  2. eval in test assert helper (minor reliability): condition strings with shell-special chars can misfire silently.

No blocking issues.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · sonnet46 · 47.3 AIC · ⌖ 8.92 AIC · ⊞ 5.7K

git config --unset-all core.attributesFile >/dev/null 2>&1 || true
git config --unset-all core.fsmonitor >/dev/null 2>&1 || true
git config --unset-all core.sshCommand >/dev/null 2>&1 || true
git config --unset-all core.hooksPath >/dev/null 2>&1 || true

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

core.worktree not scrubbed — an agent could write core.worktree = /sensitive/path to the local git config, causing git add -A to stage files from an arbitrary path instead of the cache directory. Add:

git config --unset-all core.worktree >/dev/null 2>&1 || true

after the existing core.hooksPath --unset-all line.

@copilot please address this.

local condition="$2"
if eval "${condition}" 2>/dev/null; then
echo " ✓ ${name}"
TESTS_PASSED=$((TESTS_PASSED + 1))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assert helper uses eval — the test harness evaluates condition strings with eval "${condition}". If a test condition accidentally contains shell-special characters (e.g., from a path with spaces or glob chars), it may silently misfire. Consider replacing eval with bash -c "${condition}" or restructuring assertions to pass the condition as a proper subshell.

@copilot please address this.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Please address the latest blocking review feedback on this PR and then run the pr-finisher skill.

Current blockers to resolve:

  • github-actions[bot] requested changes because reinitializing the repository when Git metadata is symlinked can destroy valid cache-memory history in linked-worktree or redirected metadata layouts.
  • github-actions[bot] requested changes on missing scrubs for core.worktree and core.gitProxy, plus missing coverage for the symlinked .git reinit path.

Failing checks on the current head:

A branch refresh was attempted by sous-chef as well.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 25.9 AIC · ⌖ 8.32 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Copilot AI requested a review from gh-aw-bot August 19, 2026 01:43
@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot A recent author update landed on this PR, but there is still no maintainer-visible resolution on the blocking reviews. Please refresh the branch if needed, re-run the affected checks, and then run the pr-finisher skill once the reviewer-visible security fixes are clearly confirmed.

Current maintainer-visible blockers:

  • github-actions[bot] requested changes because the earlier repository-reset path could destroy cache-memory history.
  • github-actions[bot] also requested confirmation of the core.worktree / core.gitProxy scrubs and the symlinked .git regression coverage.

A branch refresh was attempted by sous-chef as well.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 25.8 AIC · ⌖ 8.18 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Copilot AI commented Aug 19, 2026

Copy link
Copy Markdown
Contributor Author

@copilot A recent author update landed on this PR, but there is still no maintainer-visible resolution on the blocking reviews. Please refresh the branch if needed, re-run the affected checks, and the...

Confirmed on current HEAD 74861fa899: the branch is up to date with main; symlinked Git metadata is rejected without mutation, core.worktree and core.gitProxy are scrubbed, and the regression test proves the symlink and original history remain intact. bash actions/setup/sh/commit_cache_memory_git_test.sh passes all 11 assertions and make agent-report-progress passes. The current CGO check is action_required with zero jobs, so a maintainer must approve/re-trigger it.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot A recent author update landed on this PR, but the blocking security reviews still need a final maintainer-visible resolution summary.

Current maintainer-visible blockers:

  • Please restate on the current head that the symlinked Git metadata path is now rejected safely, core.worktree / core.gitProxy are scrubbed, refresh the branch if needed, and then run the pr-finisher skill.
  • A branch refresh was attempted by sous-chef as well.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 33.9 AIC · ⌖ 8.18 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Copilot AI commented Aug 19, 2026

Copy link
Copy Markdown
Contributor Author

@copilot A recent author update landed on this PR, but the blocking security reviews still need a final maintainer-visible resolution summary.

Current maintainer-visible blockers:...

Confirmed on current HEAD 0836ac1: the branch is refreshed to main (0368d98) and is 0 commits behind. Symlinked Git metadata is rejected without mutation or history loss, and core.worktree / core.gitProxy are scrubbed in 74861fa. The regression test passes all 11 assertions, including symlink/history preservation, and make test, make recompile, and make agent-report-progress pass. The pr-finisher review is complete; the prior CI failures were checkout-cache misses before builds/tests ran.

@github-actions

Copy link
Copy Markdown
Contributor

Triage: category=bug · risk=high · score=58/100 (impact 30/50, urgency 20/30, quality 8/20)
Recommended action: fast_track

Security-hardening change (git symlink/worktree metadata) with repeated CHANGES_REQUESTED from github-actions[bot] and active gh-aw-bot escalation thread. mergeable_state=blocked. Needs maintainer resolution given security sensitivity — recommend fast-tracking human review to close out blockers.

Generated by 🔧 PR Triage Agent · auto · 58.8 AIC · ⌖ 2.56 AIC · ⊞ 8.3K ·

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot A recent author update landed on this PR, but the blocking security reviews still need a final maintainer-visible resolution summary.

Current maintainer-visible blockers:

  • Please restate on the current head that the symlinked Git metadata path is now rejected safely, core.worktree / core.gitProxy are scrubbed, refresh the branch if needed, and then run the pr-finisher skill.
  • A branch refresh was attempted by sous-chef as well.

Generated by 👨🍳 PR Sous Chef

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 55.3 AIC · ⌖ 8.21 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Copilot AI commented Aug 19, 2026

Copy link
Copy Markdown
Contributor Author

@copilot A recent author update landed on this PR, but the blocking security reviews still need a final maintainer-visible resolution summary.

Current maintainer-visible blockers:...

Confirmed on current HEAD 0836ac1: the branch is refreshed to main (0368d98) and is 0 commits behind. Commit 74861fa safely rejects symlinked Git metadata without mutation or history loss and scrubs both core.worktree and core.gitProxy. All 11 regression assertions, make test, make recompile, and make agent-report-progress pass. The pr-finisher review is complete; current-head CGO remains action_required with zero jobs and requires maintainer approval/re-trigger.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Please address the latest maintainer-visible blockers on this PR and then run the pr-finisher skill.

Current maintainer-visible blockers:

  • There is still a blocking github-actions[bot] review awaiting a maintainer-visible resolution update.
  • Ensure any required ADR is linked in the PR body if the gate still expects it.

A branch refresh was attempted by sous-chef as well.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 8.97 AIC · ⌖ 8.15 AIC · ⊞ 9.3K ·
Comment /souschef to run again

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Aug 19, 2026

Copy link
Copy Markdown
Contributor Author

@copilot Please address the latest maintainer-visible blockers on this PR and then run the pr-finisher skill.

Current maintainer-visible blockers:...

Resolved in e267d5e: current HEAD safely rejects symlinked Git metadata, scrubs core.worktree/core.gitProxy and worktree-scoped config, disables commit signing, and covers post-commit hooks, filters, signing, and history preservation. The Design Decision Gate explicitly reports that no ADR is required. The pr-finisher validation is complete: all 13 targeted assertions, make test, make recompile, and make agent-report-progress pass; prior CI failures were checkout-cache misses before tests/builds ran.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Please address the latest maintainer-visible blockers on this PR and then run the pr-finisher skill.

Current maintainer-visible blockers:

  • There is still a blocking github-actions[bot] review awaiting a maintainer-visible resolution update.
  • Please leave one concise reviewer-facing handoff on the current head restating that symlinked Git metadata is rejected safely, core.worktree / core.gitProxy are scrubbed, and the final validation you re-ran.
  • A branch refresh was attempted by sous-chef as well.

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 27.5 AIC · ⌖ 9.11 AIC · ⊞ 6.9K ·
Comment /souschef to run again

Copilot AI commented Aug 19, 2026

Copy link
Copy Markdown
Contributor Author

@copilot Please address the latest maintainer-visible blockers on this PR and then run the pr-finisher skill.

Current maintainer-visible blockers:...

Current HEAD e267d5e safely rejects symlinked Git metadata without mutation or history loss and scrubs both core.worktree and core.gitProxy. The branch is 0 commits behind main; all 13 targeted security assertions and make agent-report-progress pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🚨 [SECURITY] 🚨 Security Red Team Findings - 2026-08-18

4 participants