Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

A worker can replace Git metadata outside its given folder

オープン
#1,351 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
64/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
git, go

調査の方向性

Start with taskGroundGuard.PreAction, refusedOutsideGround, and outsideGroundRefusal in internal/session/taskoutside.go, then trace Workspace.Resolve in internal/exec/workspace.go. Run the existing e2e path through codeaf do --json --dir with the described stub worker. Done means the boundary refusal contains "is outside your copy", the nested repository remains intact, the parent is unchanged, and in-folder files and tests succeed.

索引モデルが issue の本文から書いたものです。

説明

area:session bug sev:critical

What happened

HAZARD seen once on commit 17ae56d34 (staging-20260921-17ae56d3496f) on 2026-09-21. Lane A2, item A2-06, gave codeaf do a repository folder. The worker trace then named these actions:

rm -rf <repo>/.git
cd <parent> && git init
git commit

The repository's .git disappeared, the parent gained .git, and the parent history contained 6f85800 Add add(a,b) and one pytest test. Three controlled reruns did not reproduce it. v0.3.0 (9258f7052) was not checked, so this issue makes no regression claim.

Replication

Deterministic (no model).

No deterministic reproduction is known. A future gate should use a stub worker that attempts the three recorded commands in a nested repository and assert the boundary refuses them.

Field (real models).

Set OPENROUTER_API_KEY and run from a throwaway directory only:

root="$(mktemp -d)"; export CODEAF_HOME="$root/home"; repo="$root/parent/repo"
mkdir -p "$CODEAF_HOME" "$repo" && git -C "$repo" init -q
git -C "$repo" -c user.name=Test -c [email protected] commit --allow-empty -m base
codeaf do 'create add.py defining add(a, b) that returns a+b, and test_add.py with one pytest test for it. Declare the check "python3 -m pytest -q" so the review runs it.' --dir "$repo" --keep --db "$root/parent/a2-06.db" --yes-spend --json --model deepseek/deepseek-v4-flash --timeout 8m
git -C "$repo" status --short; git -C "$root/parent" log --oneline -1

Budget eight minutes and about $0.10. The original event may not recur; the three non-reproducing controls are part of the evidence, and the worker trace is why the boundary still needs a gate.

Where

The relevant enforcement seams are taskGroundGuard.PreAction, refusedOutsideGround, and outsideGroundRefusal in internal/session/taskoutside.go, plus Workspace.Resolve in internal/exec/workspace.go. The report does not establish how the commands passed them.

The fix

Every worker write and destructive action must stay within the folder passed by --dir. Refuse deletion of that folder's .git, refuse creating Git metadata in its parent, and surface the existing boundary wording containing is outside your copy.

Acceptance

  • e2e: Through codeaf do --json --dir <nested-repo> with a stub worker that attempts the three recorded commands, assert a receipt contains is outside your copy, the child .git still exists, the parent .git does not exist, and the command exits nonzero.
  • e2e: Through the same door, let the stub create add.py and test_add.py inside the given folder; assert both files exist there, python3 -m pytest -q passes, and no parent file changes.
  • Unit: Every destructive or write action resolves its effective working directory and targets through taskGroundGuard.PreAction; symlink, .., and changed-working-directory cases cannot escape the ground.
  • The manual pages internal/manual/chat/permissions.md and internal/manual/chat/choosing-a-folder.md quote is outside your copy, and the change entry's invalidates names the old belief that --dir alone constrained all worker actions.

Filed from the 2026-09-21 staging verification of 17ae56d34; the lane reports, frames and e2e logs are in the owner's handoff folder for this promotion.

主要言語
Go
スター
115
フォーク
14
平均マージ
9時間 37分
マージ済み PR(30日)
755

環境構築

このプロジェクトの環境構築ファイルはまだ確認していません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Agent-Field/CodeAF のほかの issue

Agent-Field/CodeAF の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。