A worker can replace Git metadata outside its given folder
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 64/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- git, go
- Bereich
- cli, security, testing-qa
Rechercherichtung
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.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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 containsis outside your copy, the child.gitstill exists, the parent.gitdoes not exist, and the command exits nonzero. - e2e: Through the same door, let the stub create
add.pyandtest_add.pyinside the given folder; assert both files exist there,python3 -m pytest -qpasses, 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.mdandinternal/manual/chat/choosing-a-folder.mdquoteis outside your copy, and the change entry'sinvalidatesnames the old belief that--diralone 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.
- Vorherrschende Sprache
- Go
- Sterne
- 115
- Forks
- 14
- Ø Merge
- 9 Std. 44 Min.
- Gemergte PRs (30 T.)
- 766
Entwicklungsumgebung
Die Einrichtungsdateien dieses Projekts haben wir noch nicht geprüft. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus Agent-Field/CodeAF
-
area:chat bug sev:papercut
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
Agent-Field/CodeAF#1592 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:headless bug sev:critical
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Agent-Field/CodeAF#1566 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:chat feature
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Agent-Field/CodeAF#1510 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:tests bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Agent-Field/CodeAF#1489 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:chat bug good first issue sev:papercut
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Agent-Field/CodeAF#1470 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in Agent-Field/CodeAF
Ähnliche Issues
-
bug
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 92/100
open-telemetry/opentelemetry-go-compile-instrumentation#1417 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
agent-research-finding agent-research-recommend chore ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
jordansmall/spindrift#4068 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Type/Task
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
OpenNSW/nsw-srilanka#537 ·
Maintainer antworten meist innerhalb von 1 Tag
-
security
Schwierigkeit 2/5 1-2 Tage Anfängerfreundlichkeit 62/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 90/100
Maintainer antworten meist innerhalb von 1 Tag