---
name: feedback_agent_cwd_relative_memory_misland
description: "Sub-agent cd vào subdir (src/Backend, fe-admin) rồi Write MEMORY relative-path → stray .claude/ trong subdir, canonical thiếu delta; em main session-end PHẢI git-status scan + reconcile + proxy-harvest"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 7671838c-e743-496d-ab52-30d30ddedbda
---

Khi sub-agent `cd` vào subdir (vd `src/Backend`, `fe-admin`) để build/test rồi Write `MEMORY.md` bằng **relative path**, file rơi vào `<subdir>/.claude/agent-memory/<role>/` (stray) thay vì canonical repo-root `.claude/agent-memory/<role>/`. Hệ quả: agent report "MEMORY updated ✓" nhưng **canonical thiếu delta** + stray dir lọt vào `git status` (nguy cơ commit nhầm vào source tree).

**Why:** S54 — 3 agent (implementer-backend/frontend, test-specialist) đều cd subdir → 2 ghi nhầm `src/Backend/.claude/`. Bắt được vì: (1) `git status` hiện `?? src/Backend/.claude/`; (2) canonical MEMORY của chúng KHÔNG hiện `M` dù agent claim updated; (3) grep canonical = 0 match S54. Đây là biến thể của [[feedback_session_end_memory_write_verify]] (0-byte/lost-write) + [[feedback_monitor_residual_write_containment]] (sub Bash/Write residual G-015): write THÀNH CÔNG nhưng SAI CHỖ.

**How to apply (em main session-end, BẮT BUỘC):**
- `git status --short` → scan `?? **/.claude/` ngoài root (find `fe-*/.claude`, `src/**/.claude`, `tests/**/.claude`). Có = stray.
- Cross-check: agent claim "MEMORY updated" nhưng `git diff --stat .claude/agent-memory/<role>/MEMORY.md` empty + `grep -c "<session-tag>"` canonical = 0 → write mis-landed.
- Reconcile: move file VALUABLE (pattern_*.md) stray→canonical (KHÔNG mất content) → `rm -rf <subdir>/.claude` → APPEND delta vào canonical MEMORY từ agent return-message (em main single-writer proxy, B2/B3 no-overwrite-unverified).
- KHÔNG commit stray vào source tree. Verify `git status` sạch sau reconcile.
- Backstop = git-diff commit-gate (em main review mọi non-em-main path trước commit) — KHÔNG dựa agent self-report.
