Files
solution-erp/.claude/agent-memory/harvest-curator/MEMORY.md
pqhuy1987 73f2939d8b [CLAUDE] Docs: S116 closeout — PE negative-quote (STATUS/HANDOFF/session-log + harvest)
- STATUS/HANDOFF prepend S116 (test 486->495 · bundle Dd55jBpj/DVDr1UQ4) + fix
  D1 Tests-row (486->495, 441->450 Infra) + D2 bundle-live-pointer (tooling-auditor
  caught 2 derived-summary lags below the mega-line).
- Session log 2026-07-13-S116-pe-negative-quote.md.
- Harvest: investigator-codebase on-behalf S116 (invest lanes RETURN-only) +
  reviewer/impl-fe/impl-be/test/cicd self-written · monitor diaries (harvest-curator
  self-compact moved-not-cut + tooling-auditor archive-move).
- §5.0 squash 2 wal-trailing (dfa1c8c/0edbc58, post-feature Stop-hook flush) folded here.
- Feature already shipped 88368fd (Run 386 PASS 5m28s); this commit = docs/memory/run-trace
  only -> CI skip (paths-ignore #41).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 17:40:27 +07:00

15 KiB
Raw Blame History

Harvest-Curator Agent — Persistent Memory

Persistent diary cross-session. Auto-injected first ~200 lines at spawn (L1 HOT). Update BEFORE every stop. Tiered Memory v1: L1 self-target ≤17.1KB (hook read-limit 24.4KB) · L2 archive/ on-demand · L3 RAG search_memory just-in-time. Keep entry ≤ 1.5K chars. NEW agent 2026-06-07 (adopt AI_INFRA Harness 1 — H2 harvest-integrity; TÁCH khỏi tooling-auditor H1 per anh-mandate "H1/H2 hay quên+nhầm → riêng-biệt").


🎯 Role baseline

H2 harvest-MD-integrity auditor SOLUTION_ERP-self. Read-only + propose-only (em main = single-writer, VERIFY→APPEND B3; ngoại lệ duy nhất = diary chính mình khi em main cho phép). Verify HARVEST mỗi session ĐỦ+ĐÚNG 5-trục: Coverage · Completeness · Fidelity-FLAG · Placement · Corruption. @session-end GATE trước đóng + gom run-folder; @session-start báo harvest mới + delta mồ-côi + orphan run vs ledger.

🚫 Split boundary

  • MINE: harvest-memory integrity (5-trục) + spawn-record 4-field + run-folder gom (Harness-10) + delta mồ-côi — SOLUTION_ERP-self
  • NOT: tooling/skill/plugin/docs-freshness → tooling-auditor (H1) · corpus/RAG/deploy → cicd-monitor · Fidelity tự-phán "bịa" → escalate reviewer · write/decide → em main

📋 Baseline state (re-ground S99)

  • Spawn-record 4-field SE: {task · verdict · learned · surprise} (memoryDelta R1 contract HMW).
  • agent-memory: 12 folder .claude/agent-memory/<role>/MEMORY.md (placement target — S107 +office-document seed). Cap L1 = 25.6KB (H11 memory-archive-gate.ps1); hook self-target 17.1KB.
  • Run-trace (Harness-10, thay wave-folder Harness-2): .claude/workflows/runs/<run-id>/ git-TRACKED, FLAT (run.md + sub-*.md + *-synthesis.md); 5 run cũ 06-18 giữ sub-md/+harvest/ subfolder (dual-accept). 🧊 Ledger runs/_ledger.md RETIRED H18-B S100 (true-catch 0/15 lifetime + mode-A coverage 0/8; 15 row frozen giữ lịch-sử) — orphan-authority = folder-scan: folder có run.md*-synthesis.md VẮNG/0-byte. Mode-A ephemeral (S98 note): HMW default KHÔNG tạo run-folder = by-design, vắng folder ≠ orphan.
  • Nền H2 gốc: session-end.md Phase 1.5 §L.b = 3/5 trục; sub này nâng +Fidelity-escalate +Placement = đủ 5.

⚠️ Anti-patterns

Tự ghi/overwrite memory ngoài diary mình (propose→em main APPEND) · tự phán Fidelity "bịa" (→ reviewer) · tick "đã flush?" nhị-phân (phải đủ 5-trục) · đụng tooling-freshness (đó là tooling-auditor) · G-015 overclaim "read-only enforced" · final-message trả narrative memory-curation thay verdict (#53 return-garble).

Methods (giữ vĩnh viễn — đúc từ S50-S66, verbatim → archive/2026-06.md)

  1. Chunk-count qua RAG MCP list_projects, KHÔNG shell-probe Qdrant (MCP trỏ host khác → false-negative).
  2. Sub killed-mid-write → verify tail terminates-clean (wc -l + closing-Tag), KHÔNG chỉ -size 0 (partial-write ≠ 0-byte).
  3. Detect interrupted-session: so mtime agent-memory vs closeout-commit timestamp.
  4. Commit-stat "có append" ≠ "có fanout-record" — classify bằng grep tag session + mtime, đừng tin stat.
  5. Extract added-bullet trong diff: grep "^+-" (filter grep -v "^[+-][+-]" NUỐT dòng +- **…).
  6. tail -c N cắt giữa UTF-8 multibyte in ra ký-tự-thay-thế GIẢ — corruption thật = grep literal U+FFFD (đừng viết literal đó vào L1 kẻo tự false-alarm).
  7. Mojibake quoted-cũ vs mới: arithmetic line-shift = đúng số dòng insert phía trên → cũ.
  8. Sub die không để delta → commit-body = spawn-evidence (S60 reviewer tự khai trong msg).
  9. U+FFFD self-quote trong file MÌNH + archive = quoted-evidence cố-ý — đừng false-alarm.
  10. Trend self-tag session-drift (cicd s50→s51 · inv s56→s57 · inv s57bis→s58 · cicd s98→s97 ×4): entry mới soi tag vs session thật.

📅 Recent activity (FIFO — older → archive/)

S50→S66 (14 entry) verbatim → archive/2026-06.md — curate S99 (hook 19.9KB > self-target 17.1KB), moved-not-cut grep-verified 5/5 + entry-count 14. Digest: verified-runtime S50 · GATE PASS 5/5 ×6 (S50/51/58/59/63/66) · chuỗi 4-MISS post-S57bis rushed-closeout + reviewer die ×3 (S57bis ×2 + S60) · cicd over-cap saga 32→86.8KB → curate S66 86.8→28.9KB. S98→S101 (4 entry) verbatim → archive/2026-07.md — self-compact 2026-07-10 @S109-start (plan đứng từ S107/S108; block-md5 e2b906336b4cdad3034329cffc09525a moved-not-cut). Digest: S98/S99/S100 @start-report chuỗi CLEAN (3 orphan-append S97 đóng · cicd #485 orphan-sane arithmetic-fidelity · tooling live-delta bootstrap) · S101 GATE PASS 5/5 + AS-10 Fidelity-call LEGIT-KEEP (keep-if-correct, 0 fabrication). S102→S106 (5 entry) verbatim → archive/2026-07.md — self-compact 2026-07-12 @S111-start HOOK-directed (plan ĐỨNG từ S107/S108/S110; mở-rộng +S106 để đạt <17.1KB; block-md5 3163566688e277f628daf349c1230142 6652B moved-not-cut, giữ file-order gốc — S106 nằm trước S105-close). Digest: S102 CATCH ×2 (reviewer cut-not-moved f229b07 → recover + dead-satellite pointer) · S104-retro self-record blind-spot gate-agent · S105 @start mồ-côi-×1-đóng / @close moved-not-cut byte-level tooling 19380→16305 · S106 ref-table = S98-snapshot benign + cicd-not-spawned-S105 resolved-false-alarm. S107→S109 (5 entry) verbatim → archive/2026-07.md — self-compact 2026-07-12 @S113-end HOOK-directed (plan ĐỨNG từ S107-end/S108; +S109 đạt <17.1KB; block-md5 75b69b41534cb67cdf349b6e1164d47f 5623B moved-not-cut, file-order verbatim). Digest: S107 md5-3of3 all-clean flip-8 · S107-end/S108 GATE PASS 5/5 (od-12th-seed · engine-label-first md5-4of4) · S109-start sleep-resume disk-MATCH + 0-gist-new + self-compact-S98→S101-exec (luot-a-transcript-lost) · S109-sleep-P1 gather 5+5-gist propose-only. S110→S111 (4 entry) verbatim → archive/2026-07.md — self-compact 2026-07-13 @S116-end HOOK-directed (SELF 20KB>read-limit; plan ĐỨNG từ S114-start; block-md5 640f80e452b42badb12bc2a3c57cf9f7 6638B moved-not-cut, file-order verbatim, anchor 4×{L1=0·AR=1}). Digest: S110-start rerun-DEDUP luot-sang-transcript-lost (gist byte-exact cat-file==disk) · S110-end GATE PASS 5/5 close-gate-15of15 garble-x2-recovered + FFFD-baseline-1-selfquote seed · S111-start self-compact-S102→S106-EXECUTED + gist-frozen-x2 · S111-end GATE PASS 5/5 close-gate-0of16 h22-first-subtask-runtrace + --stat-truncate-trap.

  • 2026-07-12 (S113 @start RE-REPORT — self-write diary): Model claude-opus-4-8 (Opus). Verdict 🟡 H2 MOSTLY-CLEAN — 0 orphan/20 · corruption 0 · 2 coverage-gap propose-APPEND (post-S112 closeout 8fa2fcc 16:51; harvest-curator KHÔNG spawn S112 → em-main harvest direct qua 0d912ad+8fa2fcc). (1) Orphan 0/20: 4 S112 folder dùng synthesis EMBEDDED-in-run.md (## synthesis populated — pattern MỚI cho invest/review ensemble, KHÁC h21/h22 separate implement-synthesis.md); 14×06-18 synthesis nằm SUBFOLDER → maxdepth-1 scan FALSE-flag 5 (h10-implement/invest/review + h910-curate/finalize) → maxdepth-2 resolve sep-synth=1 (dual-accept, đừng scan nông). All 4 S112 git-tracked (6/6/4/4, 0 untracked). (2) Harvest 4/6 role CLEAN: inv-cb :20 stamp [engine: fable-clone-ensemble · Opus-S112] 4-field khớp run.md · reviewer ×4 :96-100 (stamp [fable-real-single]) · impl-fe top-🆕 date-labeled (grep-'S112' MISS = method-#4) · cicd :73 #496. (3) 🔴 2 GAP propose-APPEND: impl-be chỉ ghi PE (:77), THIẾU Supplier-BE (SupplierExcelImportService+preview/confirm endpoint+Mig 63 AddSupplierImportSourceFields) — shipped Run #496 nhưng 0 spawn-record nhà mình · test-specialist chỉ bump baseline 440→458 'as of D4' (nên D10/S112), 0 narrative cho ~950 test-LOC (SupplierExcelImportServiceTests +452 NEW / PeSubmitGuardAndBypass +498). Knowledge KHÔNG mất (đủ ở run.md+reviewer+cicd) → propose-only, em-main verify+APPEND B3. (4) Corruption 0: 0-byte 0 · tail 0a 6/6 · FFFD 1 = self-baseline (method-#9). Fidelity 0 fabrication → KHÔNG escalate; minor nit impl-fe '450 tests'(final 458) + test-spec label 'D4'≠'D10'. SELF ~19.2KB > 17.1 target → compact S107→S108 phiên tới. Tag [s113-start, 0-orphan-20, embedded-synthesis-pattern, 2-coverage-gap-implbe-testspec, maxdepth1-false-flag].
  • 2026-07-12 (S113 @end GATE — self-write diary, VERIFY-idempotent 0 re-APPEND): Model claude-opus-4-8. GATE PASS 5/5 trục + close-gate 0/21. Coverage 6/6 sub S113 entry đủ 4-field: impl-be :77 (Mig 64 IsPublic+dedup-MST-primary) · impl-fe :9 (FE ×2app, DEVIATION-flag template-btn) · test-spec :59 (458→477 +19, 🔴 BUG NRE null-Code) · reviewer :17 TIERED pointer→project_s113_supplier_import_v2_review.md 3408B (GO-WITH-ADJ 2 must-fix) · cicd :73 🟢 #383/id497 5fa11b5 GO 5m14s · inv-cb :20 ensemble stamp [engine: fable-clone-ensemble · Opus-S113] (em-main harvest, RETURN-only). Landing pattern MỚI: 6 diary committed qua H22 WAL-flush (58f1c5f8304d08 HEAD, KHÔNG closeout ccdcbe7=docs-only H1) — tree clean, 0 uncommitted/mồ-côi. Fidelity MẠNH: 5fa11b5 file-list xác nhận MỌI claim on-disk (Mig 64 3-file · 2 test-file SupplierImportV2Dedup+SupplierPublishAndList · PublishSupplierCommand+GetSupplierImportTemplateQuery NEW · FE 5-file×2app) → 0 fabrication, KHÔNG escalate. S113-start 2 GAP CLOSED (idempotent): impl-be :80 nay có full S112-Supplier entry · test-spec narrative đủ. Close-gate: runs/2026-07-12-S113-supplier-import-v2-invest/ run.md 4202B (embedded=2: ## Synthesis+## OUTCOME) + spec 12900B, cả 2 tracked; orphan 0/21 (14×06-18 sep-synth · h21/h22 sep · 4 S112 embed=1 · S113 embed=2). Corruption 0: 0-byte 0 · tail 0a 8/8 · FFFD 0/8 (S113-touched files) · moji 0. Nit ×2 benign (INFORM, 0 data-loss, KHÔNG escalate): (a) inv-cb entry trỏ "journal.jsonl" NHƯNG folder RETURN-only 0 jsonl/sub-*.md — content THẬT ở run.md Synthesis/OUTCOME+spec → propose sửa pointer · (b) impl-be "backfill 22 prod" stale-est, thật 37 (cicd+inv+run.md reconcile 37/37, all-rows UPDATE→moot). Chore: inv-cb 21.6KB cao nhất (em-main defer-curate next-session per plan, KHÔNG miss) · reviewer 20.3 · cicd 19.9 · impl-be 19.8 · SELF 19.3 → self-compact S107→S108 phiên tới ĐỨNG; all < 25.6 cap. Tag [s113-end-gate, pass-5truc, close-gate-0of21, wal-flush-landing, 2gap-closed, journal-jsonl-deadpointer-nit].
  • 2026-07-12 (S114 @start RE-REPORT — self-write diary, VERIFY-idempotent 0 re-APPEND): Model claude-opus-4-8 (Opus). Verdict 🟢 ALL-CLEAN 5/5 trục + 0/21 orphan (post-S113 final wal-flush a3e9e14 19:39:33; S113 harvest ĐÃ HOÀN-TẤT @S113-end, đây = re-verify sau flush cuối). (1) Harvest-mới 0: porcelain 0 dòng + 12/12 L1 mtime ≤19:36:52 < a3e9e14 (method-#3) ⟹ 0 mồ-côi by-construction; post-end DUY-NHẤT 1 commit = a3e9e14 chạm CHỈ diary SELF (S113@end-entry + self-compact). (2) Orphan 0/21 (embedded-synth re-scan sau khi tự-bắt -cl-bug false-flag: 4 S112 embed=1 ## synthesis · S113 embed=2 ## Synthesis+## OUTCOME · 14×06-18 sep-synth · h21/h22 sep). (3) Coverage 6/6 sub S113 landed đủ 4-field (impl-be:77·impl-fe:9·test-spec:59·reviewer:17-TIERED·cicd:73·inv-cb:20-ensemble); #53-garble ×2 CẢ HAI captured (inv-cb:23 visibility-lane em-solo-recover + impl-be:77 backend-first-return SendMessage-resume); 4-BUG captured đúng nhà (NRE-null-Code#80 test-spec:59 · draft-leak+CreateSupplier-IsPublic reviewer:17 · authz-403→D3 role→policy-fix impl-be:77); S113-start 2-GAP STAY-CLOSED (impl-be:80 S112-Supplier entry + test-spec narrative). (4) Corruption 0: 0-byte 0/12 · tail 0a 12/12 · FFFD 1 = SELF-baseline self-quote (method-#9). (5) Self-compact S107→S109 @S113-end (a3e9e14) moved-not-cut VERIFIED (5 anchor L1=0/AR=1; S108-GATE L1=1 = digest-line mention đúng; archive 18390B tail-0a). 2 KNOWN benign nit persist (em-main chưa fix, 0-data-loss, INFORM KHÔNG escalate): inv-cb:21 "journal.jsonl" dead-pointer (folder RETURN-only 0-jsonl, content THẬT @run.md-synth+narrative:20-25) · impl-be:77 "backfill 22 prod" stale-est (thật 37, UPDATE SET IsPublic=1 all-rows→moot). Self-inconsistency benign: S113@end body ghi "compact deferred" nhưng digest+diff = EXECUTED HOOK-directed (pattern S111). Chore: inv-cb 21.6K cao nhất · reviewer 20.8 · cicd 20.4 · impl-be 20.2 · SELF 16.8K post-compact healthy → self-compact S110→S111 phiên tới; all < 25.6 cap. Tag [s114-start, all-clean, 0-orphan-0of21, verify-idempotent, garble-x2-captured, 4bug-captured, self-compact-s107-s109-moved-not-cut].
  • 2026-07-13 (S116 @end GATE — self-write diary, VERIFY-idempotent 0 re-APPEND): Model claude-opus-4-8. GATE PASS 5-trục + close-gate 0/24 (PE nhập giá ÂM ô báo giá, shipped 88368fd + CI #386; HEAD 0edbc58 wal-flush-landing, tree clean). Coverage 🟡 5/6 role-bucket đủ (1 sub-gap): 3 impl self-write đủ 4-field (impl-fe :9-15 sign-toggle-immediate-commit math.abs-no-global-mod SHA 3e16dba5 ×2 + gotcha details[].quotessuppliers[] · impl-be :77 guard-1line ACCEPT + stale-comment-flag · test-spec :59 486→495 +9 T1-T4) + cicd :79 #386 GO 5m28s; invest-ensemble 4-lane RETURN-only em-main consolidated 4→2 (:78 Budget-consumers + :97 edge/precedent, FE+BE-surface embedded, knowledge-complete); review-ensemble 3-lane RETURN-only → Lane1 correctness-wire :21 TIERED-pointer (project_pe_negative_quote_correctness_review.md 2908B EXISTS not-dead) + Lane3 financial-invariant :77 — NHƯNG Lane2 mirror-completeness KHÔNG có spawn-record riêng (knowledge NOT-lost: run.md:11 'mirror clean' + correctness-pointer + invest:97 SHA-identical + impl-fe SHA-pair) → propose em-main APPEND minimal Lane2. fable-real deep-pass #53-GARBLE 0-verdict → em-main-solo gate (run.md:13), nothing-to-harvest. Fidelity STRONG 0-fab → KHÔNG escalate: 88368fd = 7-file EXACT (2FE+1BE+4test no-mig) · BE Sum()<=0.All(x==0) verbatim in-diff · 9 new [Fact]/[Theory] = +9 = gate 495. Corruption 0: 0-byte 0 · tail 0a 7/7 · FFFD 0 worker (self=1 baseline #9) · cicd:58 $(cygpath) = intentional-cmd-example không shell-baked · moved-not-cut ×2 VERIFIED (reviewer→2026-07 3-anchor · impl-be FIFO→2026-06 5-anchor). Close-gate: run.md embedded-synth ✅ PIPELINE COMPLETE:19 + run.md/spec git-tracked HEAD; orphan 0/24 (14×06-18 sep · h21/h22/presence sep · 4×S112+S113emb2+S114+S116 embedded). method-#10 DOUBLE session-drift-tag S116 (cả 2 = em-main ON-BEHALF harvest, self-write all-correct-S116): reviewer:77 label S117-forward + invest:78 tag [s115?]-backward → mislabel clusters tại on-behalf-harvest → propose normalize→S116. Nit: run.md:20-23 leftover template [ ] rows dup completed Stages4-6 (benign residue, propose trim). Chore: fe-designer 21.5K idle-07-01 · invest-cb 21.1 · impl-fe 21.1 · cicd 20.4 · reviewer 19.2 (post-curate + re-append) · SELF 19.1→~21K → self-compact S110→S111 STILL-DUE phiên tới; all < 25.6 cap. Tag [s116-end-gate, pass-5truc, close-gate-0of24, review-lane2-mirror-gap, double-session-drift-tag-m10, fidelity-strong-7file-exact].