Files
solution-erp/.claude/agent-memory/reviewer/MEMORY.md
pqhuy1987 2757e418a1
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m43s
[CLAUDE] Docs: closeout OUTWARD wave adap đợt-9/10 + vá drift skill-matrix H24
Closeout 4 mục OUTWARD của wave S141-S142 (anh gật @S143):
- adap-report 7/7 thư, đủ 5 trường REPORT-FORMAT LOCK, evidence đo thật
- email hub báo-nấc (sha 6c94873f72e0, selftest_verify exit 0, log _index cùng lượt)
- STAGE-2: 7 thư -> inbox/ai_infra/, _index 0 pending, cross-check 7/7
- squash K=8 wal: -> commit chốt

Ngoài wave: agents/README skill-matrix thiếu 2 row H24 (drift S121) -> 15/17 thành 17/17.

Nấc cao nhất khai được = executed-file/verified-pending-restart (trio CHƯA spawn).
2 phát hiện khai thẳng theo G-015 (chi tiết trong report + email):
- whitelist `tools:` KHÔNG chặn ghi ở runtime: 6 vai read-only bị append Write+Edit
- pull-lag do "watch broadcasts/inbox" canh nhầm chỗ

TICK H24: counter 16->17 (S143), 3-điều-kiện OK-reachable, không fail-loud.
Detector TOTAL 46 == baseline 46, 0 flag mới.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 12:32:27 +07:00

121 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Reviewer Agent — Persistent Memory
- **S141 (07-20) fable-real gate SPEC adap đợt-9/10 — GO-WITH-FIXES 0C/7M/9n `[engine: fable-real · model claude-fable-5 spawn-param-thắng data-point mới · wf_25210715-f7d · 0-garble, sub-file ghi-trong-lúc-làm]`:** spec-review 5-trục trên spec THIẾT-KẾ (chưa có diff) vẫn bắt 7M thật. ⭐ M3-class: **2 site roster-count sống nằm NGAY TRONG 2 file spec ĐANG sửa** (session-start:97 + session-end:142 "4 monitor") — 5-lane invest + lead đều sót vì grep token "roster 14" MISS site viết "10 … + 4 monitor" ⇒ **sweep same-CLASS (mọi cách viết count) không chỉ literal**. ⭐ M2-class: detector MỚI phải kiểm luật owner TẠI CHỖ trước khi quyết TOTAL (governance-detectors.ps1:65-68 "brand-new net → INFORM-sink day-one" — spec quyết ngược không reconcile). ⭐ M7-class: sửa prereq-stale (b) mà bỏ (a) cùng-đợt-về = tạo stale MỚI cùng class đang vá. ⭐ M1: FI ca "giảm-counter" bất-khả-FLAG nếu detector thiếu nhánh regress — acceptance phải falsify được TỪNG biến-thể. Fidelity-check 7 thư: FAITHFUL + 2 form-deviation có-chủ-đích (alias-model n1 · Light-skip M4 → carve-out-class cần lưới+khai-nấc). stamp_verify.py hub tolerant từ Jul-3 — thư 07-17 chỉ codify cái đã chạy. Tag `[s141, spec-gate, same-class-sweep, inform-sink-day-one, prereq-pair-flip]`
- **[→ archive/2026-07.md @S140] S139 (07-18) L3 review wave adap-3-bản 8-file — GO 0C/0M/3-LOW-nit `[opus-worker]`:** re-measure MỌI acceptance từ git HEAD (không tin sub/EM); fault-inject C6 8/8 + H24-4 8/8 byte-exact + live 45/exit-0. **m-3 no-self-exempt: chấm cả edit vào file CHÍNH VAI MÌNH.** Nhãn "measured" sống qua gate CHỈ KHI falsify-path tồn-tại + reviewer CHẠY + nó đứng (2/2 grounded). Marker-collision `^`-anchor SỐNG trên HANDOFF.md thật. Tag `[s139, l3-go, measured-label-grounded, m3-no-self-exempt]`
- **[→ archive/2026-07.md @S140] S134b (07-17) pre-commit review lũy-kế tạm-tính — PASS 0C/0M/4-nice `[opus-worker]`:** 7/7 trục; **bài #81 CỦA CHÍNH MÌNH (S133) implementer áp đúng** (5/5 finalize→DaDuyet qua helper). "insertion-only + `grep '^-'`=0" chắc hơn diff-mắt; D4-persist = trace TỪNG caller tới SaveChanges (Add-không-save = row ma). Tag `[s134b, precommit-pass, 81-ap-dung]`
- **[→ archive/2026-07.md @S134] S133 (07-17) pre-commit pe-budget-freeze — PWF 0MUST/2SHOULD:** literal-grep 4-site enum PASS nhưng grep `.Phase = <biến>` lòi 2 đường GIÁN TIẾP bypass helper (`WorkflowService:308` + `DbInitializer:1323`). **RULE "mọi nhánh set X" grep CẢ assignment-qua-BIẾN — #81 indirect-assignment.** Tag `[s133, indirect-assignment-grep, 81-class]`
> **Persistent diary cross-session.** Auto-injected first ~200 lines at spawn (L1 HOT).
> Update BEFORE every stop. Tiered Memory v1: L1 HOT cap ~17KB (hook 24.4KB read-limit) · L2 `archive/` on-demand · L3 RAG `search_memory` just-in-time. Keep entry ≤ 1.5K chars (gotcha #53).
> Full verbatim history pre-S40 → git `d2f52ba` + `archive/2026-05-q1..q2.md`; S51→S76 detail → `archive/2026-06.md` (S69/S70/S71/**S80** curate). Archive map: `archive/_INDEX.md` + per-period `.gist.md`.
## 📁 Area memory (L2 on-demand — Read khi review vùng tương ứng)
- [S62 PE budget soft-warning](project_s62_pe_budget_soft_warning.md) — PASS: hard-block→soft-warning; submit-guard intact + validator giữ `BudgetPeriodAmount>0`, row8 negative-safe (additive-only). Validator class `PurchaseEvaluationFeatures.cs:317`.
- [Wire/mirror claim verification anchors](feedback_wire_claim_verification_anchors.md) — sha256 twin-file · `git diff -U0` isolate true-adds · `allowNegative` bleed check · guard-still-intact grep.
- **S89 trio** ([sectionB](project_s89_pe_sectionb_review.md) · [endsBeforeCeo](project_s89_pe_endsbeforeceo_plan_review.md) · [finalize-note](project_s89_finalize_note_plan_review.md)) — adjustMut share race + authz-lens ≠ concurrency-lens · FE 4 render-sites plan-missed-2 · ground-truth-accurate-nhưng-gaps.
- **S101 H18/H19 WF2 + LANE-C — PWC/PASS:** content-hash ≠ commit-SHA (hex strip/no-strip) · exact-token sweep misses paraphrase → widen concept-phrase. → `archive/2026-07.md`.
- [S103 H20+crystallized-backfill review](project_s103_h20_crystallized_backfill_review.md) — WF2 PASS; 6/6 hash recompute MATCH + 4 already-met verified. Lesson: multi-axis warning phải nằm trong OUTPUT của script (reader chạy inline), không chỉ doc.
- [S111 PE sign-off 6-decision design review (schema/history lens)](project_pe_signoff_history_schema_review.md) — GO-WITH-ADJ; D5 opinion-history: append-only table, REJECT version-col (drops UNIQUE + breaks UPSERT).
- **PE per-hạng-mục series ×5** ([cardinality#3](project_pe_multiwinner_perhangmuc_review.md) · [BE-financial](project_s114_pe_multi_ncc_perhangmuc_financial_review.md) · [spec-l3](project_pe_multi_ncc_perhangmuc_specreview.md) · [IMPL](project_s114_multi_ncc_perhangmuc_impl_review.md) · [neg-quote](project_pe_negative_quote_correctness_review.md)) — derived src-of-truth: re-derive MỌI write-path KỂ CẢ Delete · grep field-NGUỒN không chỉ field-đọc · sign-loss: defer-parse tới field-chung mọi mutation.
- [S113 Supplier import v2 close-review (owner anh Kiệt)](project_s113_supplier_import_v2_review.md) — GO-WITH-ADJ 2 must-fix (consumers không pass published=true → drafts leak). Lesson: "filter added" ≠ "drafts hidden" — grep-all-consumer + create write-path.
- [S118 Procurement master-access seeder review](project_s118_procurement_master_access_review.md) — PASS(cond); MAJOR Reports.Read leaks financials + Suppliers.Update grant ≠ edit. Lesson: menu-flag grant ≠ API capability; bare `[Authorize]` GET = open-to-all.
- [S123 governance 4-change review (backtick-guard + H24-3 + retire dạng-3 + mark)](project_s123_governance_4change_review.md) — PASS_WITH_FIXES; CAUGHT H24-3 thiếu enclosure-guard mà cùng diff vừa chứng cần (gen-2 citation-trap) + greedy `.*` lấy `(S<N>` CUỐI≠MAX + lý-do-retire áp cho dạng-2 thì giết C8. Q5 "HOÀN-THÀNH mark" = nguỵ-biện. Q8 ENDORSE không-bump.
---
## 🎯 Role baseline
Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod UAT (`*.solutions.com.vn`). Tools: Read, Grep, Glob, Bash (curl + git diff + sqlcmd read) + 5 RAG MCP. Skills: `dependency-audit-erp` + `contract-workflow` + `permission-matrix`. Output: PASS/FAIL + concrete issues file:line. NEVER write code.
---
## 🚨 Recurring bug patterns (catch priority)
- **#44 Silent 403 class-level Authorize quá strict** — Drafter dropdown empty silent (TanStack catch silent → UI empty). Grep `\[Authorize\(Policy=.*\)\]` class-level + curl non-admin expect 200. Fix: class-level `[Authorize]` only (any authenticated); POST/PUT/DELETE giữ `[Authorize(Policy="X.Create")]`.
- **#43 Step.Order ≠ index 0-based** — `Where(s=>s.Order==i)` wrong row. Fix: EF query → in-memory `OrderBy(Order).ToList()` → index.
- **#42 Dual schema V1/V2 — Service phải branch** — `if (entity.ApprovalWorkflowId is Guid awId) ApproveV2Async else V1Legacy`.
- **Wire BE claim** — grep diff `// Mock`/`alert(`/no POST-PUT-DELETE call + live curl expect 2XX. Severity CRITICAL block.
- **#70 FE absolute-set stale-echo race** — N fields cùng-cột share 1 mutation + echo sibling từ server-snapshot (`bs`) + `invalidate()` fire-and-forget (không await) → lưu 2 ô liên-tiếp đè mất. Window mở SAU `isPending=false` (btn re-enable), KHÔNG lúc in-flight. Catch: đếm field-cùng-cột share mutation + check invalidate awaited; fix = `useIsFetching` gate nút Lưu tới khi refetch land.
- **#71 enum proxy-predicate pollution** — thêm enum value vào entity dùng-chung → UI/guard phân-loại theo PROXY-predicate (`supplierId===null`) thay vì enum tường minh → value mới lẫn nhầm phân-loại + false-pass guard. Catch: grep mọi field-proxy predicate, loại value mới tường minh; build-verify TỪNG app.
- **Cross-module security mirror (S29 Smart Friend)** — khi mirror entity/Command cross-module (PE→Contract→Budget V2), focus data-shape MISS security guard. Pattern: `aw.ApplicableType == ExpectedType` validate ON Create BEFORE instantiation (mirror `PurchaseEvaluationFeatures.cs:62-77`). Attack: Drafter forge POST với `approvalWorkflowId` của module khác → FK Restrict chỉ check Id-existence NOT ApplicableType → wrong-scope pin. Re-verify `IsActive`+`IsUserSelectable` server-side. Password ≥12 chars. Severity MAJOR.
- **#17 EF migration 3-file** — `git diff --name-only | grep Migrations/` expect 3 (target + Designer + Snapshot).
---
## 📋 6-category checklist (EVERY review)
- **Cat 1 Wire BE/feature claim:** grep mock markers diff + `await api\.(post|put|delete|patch)\(` + live curl POST/PUT/DELETE if deploy claim + status matrix.
- **Cat 2 Schema integrity:** 3-file rule Mig + column types vs entity def. Reference `docs/gotchas.md` (71 active).
- **Cat 3 Security:** `[Authorize]` class-level ALL new controllers + per-action policy admin-scoped (gotcha #44) + FE PermissionGuard + menuKeys.ts mirror BE MenuKeys.cs + FluentValidation + EF parameterized.
- **Cat 4 Code quality:** `dotnet build SolutionErp.slnx` 0 err + `npm run build` × 2 app (TS6 strict) + tests baseline **354 PASS** (Phase 9 UAT exception OK) + no `--no-verify` + anti-fiddle (scope drift >20% LOC = FAIL) + mirror 2 FE app §3.9.
- **Cat 5 Test coverage:** new helper → xUnit · new endpoint → integration · bug → regression test-before-fix. Phase 9 UAT test-after default OK (`feedback_uat_skip_verify`). Baseline 354.
- **Cat 6 Writing-quality (Harness-7, S64):** outward text (verdict gửi anh / report) = tiếng Việt câu hoàn-chỉnh đủ dấu đúng ngữ-pháp; describe issue + acceptance criteria, NOT code edits. Escalate disagreement explicit.
---
## ⚠️ Anti-patterns + 🛡️ Smart Friend guard
1. ❌ Recommend code edits (only describe issue+criteria) · 2. ❌ Skip live curl if deploy claim · 3. ❌ Accept "wire" without grep proof · 4. ❌ Defer to em main authority (escalate explicit) · 5. ❌ Skip MEMORY · 6. ❌ **Lower bar match em main** (Smart Friend Cognition anti-pattern).
**Smart Friend (Cognition):** NEVER lower bar. Em main code fine → PASS. Em main issues → FAIL with specifics regardless social pressure. "Quality ceiling set by primary, not escalation." Value = raise quality through catch.
---
## 🧠 SOLUTION_ERP review essentials (S80 verified — re-ground từ docs/STATUS.md canonical)
- **Tests baseline:** **354 PASS** (45 Domain + 309 Infra · 0 fail/skip). Must increase khi feature added (§7); Phase 9 UAT exception (`feedback_uat_skip_verify`).
- **Gotchas:** **71 active** (`docs/gotchas.md`, format `### N.`). Latest: #69 bundle-hash non-determ (deploy rebuild-FE-uncond rotate) · #70 FE stale-echo race (useIsFetching gate) · #71 enum proxy-predicate pollution · #66 Tailwind v4 unlayered `h1-h4` color thắng utility · #58 EF read-modify-write lost-update→ExecuteUpdate atomic.
- **Migrations:** **57 latest `AddPeSuggestedPriceNotes`** (path `src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/`). PE-budget: Mig 50 `PeWorkItemBudgets` per-gói-thầu (DROP module Budget cũ) · Mig 54 giá-đề-xuất PRO/CCM + giá-chốt · Mig 55 CcmNote · Mig 56 ProInitial/ProAdjust split · Mig 57 ghi-chú-giá PRO/CCM.
- **Endpoints:** ~253 · **88 SQL tables**.
- **Identity password ≥12 chars** (reject 11-char). Test creds: admin `admin@solutions.com.vn/Admin@123456` (full) · UAT `nv.test@solutions.com.vn/TestUser@123456` (Drafter CCM).
- **Prod:** api/admin/eoffice.solutions.com.vn. Bundle live admin `CsJetgZH` / user `BVS0ApIm` (Run #330). **Pin:** MediatR `12.4.1` (flag `Version="14`) · Swashbuckle `6.9.0` · Node CI `20.x`.
- **Conventions:** `docs/rules.md` (§1.1 outward writing, §3.9 mirror 2 FE, §5.2 commit, §6.5 docs narrative, §7 test timing, §2.8 pin).
---
## 📅 Recent activity (compressed — full verbatim → `archive/2026-06.md` + `archive/2026-07.md` via `archive/_INDEX.md`)
- **S134 (07-17) SPEC-review pre-code PE lũy-kế — GO_WITH_FIXES 0C/2M/9N [detail → run sub-reviewer-0.md]:** M1 spec đặt "không đổi X" phải tự-kiểm mọi field bắt-buộc của việc-mới có đủ nguyên-liệu trong X-nguyên-trạng (helper thiếu actor param ⇒ hmw tự thêm = VỠ acceptance A6) · M2 claim-hành-vi-FE phải trace về biến trong predicate, không tin câu-văn · SHA 6-file TỰ-ĐO = trọng-tài khi 2 nguồn lệch (`47c97df1``5534addb`). Tag `[s134, spec-review, constraint-self-consistency, banner-gate]`
- **[→ archive/2026-07.md @S134] S131b GATE#2 outward follow-up — PWF 1M:** follow-up bounded-source phải GIỮ con-số source ("hàng loạt" re-inflate "3 closeout" = re-introduce class morning-gate đã gỡ) · verbatim-quote owner so TỪNG CHỮ kể cả homophone x/s.
- **[→ archive/2026-07.md @S134] S131 GATE outward 3-op-gap — PWF:** → [topic](project_s131_h24_h22_3gap_outward_gate.md). Số atomic đúng HẾT vẫn fencepost (ghép lệch cột-mốc đẻ "gấp-đôi" 2× khi thật 1.6×) — hero-ratio re-derive từ raw + đếm tay từng nhãn.
- **[→ archive/2026-07.md @S134] S129 adap-errata-EOL 2-lane — GO-WITH-FIXES ×2:** writer-only = NỬA-VÁ (consumer-sweep áp cho cả ĐỀ-XUẤT-VÁ) · tally "7/7 ADOPTED" = rung-flatten · quick-test tự chạy lại = chứng không-bịa rẻ nhất · story-delta BỊA bắt bằng glob-scope.
- **[→ archive/2026-07.md @S128/@S126] S124 ×2 + S125 ×2 (digest):** S124-L2: push-guard "ahead-of-broadcast" OVERCLAIM (looser ≠ ahead) · S124-wave: do-token trap bắt WHILE adopting — verify = re-Read full + tự đọc truncation-line · S125-relabel: notice-N = CẬN-TRÊN heuristic, negative-control chuỗi-lặp mới phân-biệt heuristic/tokenizer · S125-fable-real: false-TAMPER → RCA verifier-bệnh (sibling-test 2-CHIỀU: sibling-MATCH⇒file-bệnh · sibling-FAIL⇒verifier-bệnh); stamp-then-edit = re-stamp + re-selftest cùng lượt.
- **[→ archive/2026-07.md @S134] S123 governance 4-change — PWF:** → [topic](project_s123_governance_4change_review.md). 🔴 #53 garble tại TAO ⇒ ghi diary TRƯỚC return · vá-1-lớp ⇒ grep MỌI matcher cùng-lớp TRONG diff.
- **Digest S93→S117 (verbatim → `archive/2026-07.md`; 1 mệnh-đề/entry):** S93 code-gate re-derived denom · S97 default-flip byte-mirror SHA ×2 · S98 Windows byte-verify = .NET (MSYS strip
báo sai) · S100 HELD stale run-id NOT-stamped · S101 persist-claim cần reader-side · S108 outward-claim "đã sửa X" phải cat X trước gate · S109 gist meta-count ≠ disk · S110 claim-về-code grep lại kể cả reword · S111 nâng-nấc-quên-sync cùng-diff · S115 verify EACH regex-alt by-hand · S116 persist-claim = tracked + 0-drift · S117 2-tier guard compare SUM-EXPRESSION.
- **S92 PROD-security hide 5 menu-groups admin-only — PASS (1 note):** → [project_s92_admin_only_modules_revoke.md](project_s92_admin_only_modules_revoke.md).
- **June-2026 digest — LESSON-ONLY (verbatim → `archive/2026-06.md` + `_INDEX`):** merge-distill fabricates false-specificity ⇒ QUALITY gate AFTER presence · sha = self-declared NOT recompute · fail-closed guard BEFORE terminal-state + server-recompute · TRACKED = check-ignore ≠ ls-files · menu-hide ≠ API-lock · single→multi stops at display-layer.
- **[→ archive/2026-07.md @S128 + topic] S112 close-reviews+FINAL — GO 0-must:** derive guard từ ENDPOINT authz; EDGE-5 gác FROM-state ĐỈNH method; self-flip ≠ external-accept. → [topic](project_s112_supplier_import_review.md).
- **[→ archive/2026-07.md @S128] S126 A1-H23-probe + email-H23-gate — gate FAIL bắt 3 lỗi trước stamp:** số AGGREGATE cumulative KHÔNG vào outward artifact (evidence bền = per-lane run-id) · "ba việc" = 2 ASK (mở thư đếm thật) · self-obs R1-open → hedge + quy-thuộc. Stamp `945cf3ad`. Evidence: runs/2026-07-16-S126-adap-spec-execute/.
- **[→ archive/2026-07.md @S134] S128 D-review 2-lane adap — GO-COMMIT 2/2:** direction-of-error quyết mức lỗi outward (lệch CONSERVATIVE = minor) · sha-variant-per-publisher: brute-force canonical-variant với known-good TRƯỚC khi phán tamper · soi literal-fidelity evidence-paste CẢ KHI giá-trị đúng. Trace: `runs/2026-07-16-S127-adap-dot-16-07/`.
- **[→ archive/2026-07.md @S134] S128 fable-real #2 spec-execute — GO-WITH-FIXES 4SF:** lệnh verify trong spec = CODE chạy thử trước (2/4 sai thật) · Get-FileHash ≠ body-sha (sai-loại-hash) · fold = disposition TỪNG DÒNG.
- **[→ archive/2026-07.md @S134] S127 fable-real #1 gate đầu-vào — GO-ADAP, BÁC claim hub:** hedge broadcast test bằng MỞ config THẬT (rag.json override ACTIVE) · "already-aligned" tinh-thần ≠ luật. Full: `runs/2026-07-16-S127-adap-dot-16-07/sub-reviewer-1-verdict.md`.
---
## 2026-07-17 S138 — review spec wave 3-bản (engine fable-real · **#53-GARBLE → entry ON-BEHALF, lead ghi sau VERIFY-đĩa** từ transcript-forensics `wf_a0aa62f5-9e8`)
- **Task:** adversarial review spec v1 wave adap 3 bản AI_INFRA 17-07 — chạy 36 tool-use/208K tok, đọc TRỌN spec + sub-invest + 3 bản + 5 script đo + detector + 4 cửa + 5 re-count, **chết TRƯỚC khi soạn verdict** (StructuredOutput không gọi).
- **Verdict (em-main-solo gate thay — KHÔNG phải phán của vai này):** GO_WITH_FIXES 3M/3m/1n; 2/3 MAJOR đến từ chính re-count của lane trước khi chết (HANDOFF:7 "Prev S134" giữa-dòng → boundary phải `^**Prev S` · STATUS In-Progress toàn lineage → scope HANDOFF-only). Chi tiết `runs/2026-07-17-S138-adap-3-ban-17-07/review-synthesis.md`.
- **Learned:** wf-agent chết KHÔNG resume được SendMessage ("No transcript found") — thang recovery wf-lane = disk → journal → **transcript-forensics** → em-main-solo; re-count của lane chết = evidence dùng được.
- **Surprise:** marker-collision — file HANDOFF hiện-hành chứa chuỗi "Prev S134" giữa dòng NEXT-anh ngay ngày detector được thiết kế (boundary-marker trùng mặt chữ nội dung, cùng họ citation-trap S123).
## 2026-07-18 S140 — FIDELITY GATE sleep-compress L2 (5 gist DRAFT vs verbatim, Phase 3b G-001 lead-no-self-grade)
- **Task:** chấm 4-trục (bịa/drift/keep-drop/coverage-token) 5 cặp gist-draft↔`archive/2026-07.md` {cicd·tooling·inv-cb·harvest·reviewer} TRƯỚC khi lead Write chính thức.
- **Verdict:** FIDELITY FAIL — 1/5 pair FAIL (**investigator-codebase**) + 4 PASS. inv-cb FAIL trục-3: "Drop thấp: 0" là CLAIM SAI — 2 recon-cluster verbatim THIẾU HẲN khỏi gist: line 31 S71 run-trace (`TRACKED`-2-level check-ignore-vs-ls-files · G-015 containment-shift H2→H10 · path-trap runs/22-tracked) + line 28 06-20 governance landing-map (`harness-11-engine` canonical D5-D10 · Harness-14 `keep_floor=5`/`golden-set`-14q). Grep độc-lập xác: gist 0-match cả 6 token, verbatim :28/:31 CÓ. Author gộp 3/5 sub-cluster của S125-batch (Office/PE-recon/FROZEN-Mig59) nhưng bỏ 2 → Drop-thấp overstate. Minor: 17.5KB(LIVE) mislabel self-target(thật 17.1) · AREA-2 `PeSuggestedPriceFeatures.cs:153-199` dropped.
- **4 PASS:** cicd (20 run-record→6 CỤM; gate-chain Infra 413→464 / tổng 458→509 arithmetic khớp; A/005-008-010 + endsBeforeCeo flip exact) · tooling (12-dp model-chain + D-BUNDLE-lag + permission-matrix-Session6 exact; `D51OYyGV`/`BVdssm5S` nghi-bleed-từ-cicd nhưng THẬT ∈ tooling-verbatim :54 STATUS:27-pointer-history = 0-bleed) · harvest (7 block-md5: 5 khớp verbatim-header + 2 L1-only HONEST-disclosed ⚠; minor CỤM10 self-compact "S114"→thật @S113-end + list thiếu S123/S125-exec nhưng token-layer đủ) · reviewer (45-rec→9 CỤM, CỤM9=catch-all nên Drop-thấp-0 ĐÚNG; verbatim tự-lệch service:871-vs-873 → draft resolved-đúng-873).
- **Learned:** "Drop thấp: 0" là claim FALSIFIABLE — grep từng June-recon-cluster curated-into-July xem gist carry chưa; 4/5 carry đủ (reviewer nhờ CỤM-catch-all), inv-cb chọn-lọc 10-nhóm bỏ 2 recon-infra mà vẫn khai 0. Per-file bleed test = token gist-X phải ∈ verbatim-X (không phải chỉ ∈ 1 verbatim nào đó); `D51OYyGV` cứu bởi pointer-history-line. Tag `[s140, fidelity-gate-sleep-compress, drop-thap-claim-falsifiable, inv-cb-fail-2-recon-cluster, per-file-bleed-pointer-history]`
## 2026-07-18 S140b — GATE OUTWARD email SE→ai_infra pre-stamp (G-015 no-overclaim, năm-vòng report)
- **Verdict:** GO_WITH_FIXES (2 minor + 1 opt). Claim-by-claim vs đĩa/transcript phiên NÀY: **Vòng4** (fidelity 4-PASS+1-FAIL+CỤM11+grep-6-token-0-match) GROUNDED — gist committed `aa88d01``## CỤM 11 :46` + 6 token `:47/:53` + Drop-thấp honest-disclosed (= CHÍNH việc tao lượt trước) · **Vòng5** (probe 5-nhãn `measured/empirical/calibrated/grounded/đã-đo` 0-tool 17s) GROUNDED = CHÍNH TAO + `lead-view-auditor:15` agentId `a56dcf6da…`+17s · **Vòng2** (light-audit#3 counter14 → 1 LOW view-stale + 1 MED gap-owner) EXACT = `lead-view:15`+`lead-omission:17` · last_sleep `07-10→07-18` EXACT (`aa88d01~1` vs HEAD) · `0b0285c` msg confirm H2 6/6+H1-1-drift · session-model-se-draft.md tồn (7779B).
- **Fix-1 (precision/measured-label):** `68.968B` = DRAFT-total (reviewer draft 15777) nhưng SHIPPED `.gist.md`=**69175B** (reviewer +207 draft→final; 4 agent kia draft==final) · `183.054B` vs git-blob 183005 (<0.5%, CRLF/method). Honest-note (iv) đã round "≈18369KB" nới precise-figure về rounded HOẶC re-Get-Item final .gist.md. **Fix-2 (semi-overclaim):** "2 FLAG đều đã xử trong phiên" diary: LOW=xong-chờ-closeout-clear · MED gap-owner-specifics resolve=PENDING (tracker/owner-defer) reword "triage/nêu-hướng" chứ không "đã xử". **Opt:** `291550ff` (assert 2-chiều) = SE-internal hash, ai_infra khó resolve.
- **Learned:** measured-label "68.968B" = draft-stage stale số-đo phải trỏ artifact SHIPPED (committed .gist.md) KHÔNG draft-scratchpad; nhưng direction nhỏ (<0.5%, compression trông tốt hơn ) + honest-note (iv) round sẵn minor không FAIL (S128 direction-of-error). Outward-gate mạnh nhất khi claim = việc-CHÍNH-TAO (Vòng4/5) re-measure by-construction. Tag `[s140b, outward-gate-go-with-fixes, measured-draft-vs-shipped, semi-overclaim-da-xu-pending]`
## 🔄 Curate trigger
- Hook-cap **>17.1KB** (24.4KB read-limit — đổi từ ~30KB cũ, S109) → archive recent → L2 `archive/<period>.md` (append additive) + `_INDEX.md` substring pointer. Stale >3mo → remove.
- **S140 curate (self, 2026-07-18, hook 20.7KB→~18.4KB):** moved 2 verbatim (S139·S134b) → `archive/2026-07.md` batch-marker @S140 (append-BEFORE-stub, same-source-string = byte-id by-construction) + tighten S133 pointer. Carry: S134-SPEC-review + June-digests còn nén được nếu cần <17.1KB (defer không cut-without-move mid-return).
- **S134 curate (self, 2026-07-17, hook 21.3KB→<17.1KB):** moved 8 verbatim (S131b·S131·S129·S128×2·S127·S133·S123) `archive/2026-07.md` batch-marker @S134 + seal-verify substring 6/6+2 · nén digest đã-archive (S124×2/S125×2 gộp 1 dòng) + gộp curate-log .
- **Prev curates (digest):** S128 em-main (seal 3/3 md5 e5218d2f45b6) · S116 · S113 · S109 · **S102 recovery: cut-not-moved ×5 @`f229b07` — Lesson: L1-shrink kèm claim "→archive" = BẮT BUỘC grep moved-not-cut trước khi trust digest** · S80 · S71 · S70 · S40.