[CLAUDE] Docs: S123 citation-trap guard + H24-3 + DUAL-ACCEPT + luat retire-legacy
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m22s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m22s
Anh chot 4 viec governance. Detector 46->45 = DOI THANH-PHAN (-2 duong-gia +1 duong-THAT), khong phai "flag giam". Mark moi RC-pqhuy1987-15-07-2026-17-23-10. - backtick-guard H24-1: discriminator = ENCLOSURE (use vs mention), KHONG port duoc charset-guard cua H24-2 vi vi-du byte-identical voi claim. Helper DUY-NHAT Test-Quoted. Fault-inject 5/5 (2 anti-Goodhart). - H24-3 session-label lag (MED, moi): va am-gia CHUNG-MINH-DUOC cua H24-1 (so NGAY ma ngay = moi nhat => 0 flag trong khi nhan lui 3 phien; tai-phat lan 4). Fault-inject 6/6 + 6/6 sau fix. - DUAL-ACCEPT (dang-3 RETIRED) + LUAT RETIRE LEGACY: go nhanh legacy khi tap di-san RONG, giu khi CON nguoi thu-huong. Repo that 0 orphan/26. Fault-inject 7/7. - tiep.md:66 stale-at-birth + sweep view-residual-asym 6/6 be-mat LUAT sach. Reviewer PASS_WITH_FIXES bat 6 loi that, lead verify 4/4 doc-lap: gen-2 citation-trap (lead viet 30 dong chung-minh dinh-luat roi de H24-3 KHONG guard) - greedy .* lay CUOI khong phai MAX - ly-do retire ap cho dang-2 thi giet C8 - "retire HOAN-THANH mark" = nguy-bien - "5/5" = 4/4. Goodhart DO DUOC (ngoai diff): W4/S122 "va" permission-matrix:16 bang doi FORMAT anchor => khop 0 pattern => H24-1 mat chinh positive-control no dung quanh; flag-count GIAM nen trong nhu thanh-cong. Outward: addendum R5 (DUNG adopt TRI-ACCEPT) + email hub ed3786a10f12 (selftest-stamp MATCH x2). _index reconcile: 2 email S122 gui ma chua log. #53 garble x4/3 agent - harvest-curator ghi diary TRONG luc lam nen vot duoc tu dia ngay; reviewer tu rut luat "ghi diary TRUOC return" tu garble-1 va nho dung no ma garble-2 vot duoc. Prompt-dung KHONG chan duoc #53. Lead sai 4 ca tron o truc dem-ve-minh: "25"!=26 - "5/5"!=4/4 - viet "7/7 PASS" TRUOC khi chay - "0 proxy" sai. State GIU NGUYEN: Mig 66 - 89 bang - 509 test - gotcha 82 - menu 54. Con no: STATUS:6 CO Y chua bump (H24-3 dang FLAG, giu cho hien ra). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -12,14 +12,15 @@
|
||||
- [S89 finalize-note PLAN review](project_s89_finalize_note_plan_review.md) — CONCERN: plan ground-truth 100% accurate; gaps = note omits intermediate-approvers-still-sign + skipToFinal-last-level corner + Dev DB 9 migs behind.
|
||||
- **S101 H18/H19 WF2 governance re-run + LANE-C** — PWC/PASS; detector fault-inject 4/4; 4 hash recompute MATCH (hex→SHA strip/no-strip proves content-hash ≠ commit-SHA); lesson: exact-token sweep misses paraphrased labels → widen concept-phrase khi retire named artifact; #53 garble recovered. → `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; Decision-5 opinion-history: RECOMMEND append-only table, REJECT version-col (drops UNIQUE + breaks UPSERT). Hook @ ApproveV2Async UPSERT :784-790. Decision-3 caller-safe (SlaExpiryJob=Contract-only). A1 breaks 4 bypass tests.
|
||||
- [PE multi-NCC per-hạng-mục cardinality#3 review](project_pe_multiwinner_perhangmuc_review.md) — PASS_WITH_ADJ; 6 BE read-site inventory COMPLETE (grep 1:1). 2 MUST: giaTri isSingle/detailsSum silent-financial; seed sets IsSelected never IsWinner → empty names + CreateContract throws. Lesson: derived src-of-truth = EVERY write-path re-derive.
|
||||
- [S113 Supplier import v2 close-review (owner anh Kiệt)](project_s113_supplier_import_v2_review.md) — GO-WITH-ADJ 2 must-fix: consumers (PeDetailTabs:2222 + ContractCreatePage:321 ×2app) DON'T pass published=true → drafts leak into pickers (R4/R6 "ẩn" undelivered) + CreateSupplier:86 missing IsPublic=true. Dedup/publish/mig/authz SOLID. Lesson: "filter added" ≠ "drafts hidden" — grep-all-consumer + create write-path.
|
||||
- [S114 PE per-hạng-mục BE-financial review](project_s114_pe_multi_ncc_perhangmuc_financial_review.md) — NEEDS-FIX: 6 financial-SUM→IsSelected (0 sót) but DeleteQuote:396 + DeleteDetail:262 KHÔNG re-derive IsWinner → stranded winner → phantom HĐ GiaTri=0. Lesson: derived-invariant re-establish MỌI mutation kể cả DELETE.
|
||||
- [PE per-hạng-mục spec review (winner-truth lần 3)](project_pe_multi_ncc_perhangmuc_specreview.md) — PASS_WITH_ADJ. MUST: CreateContract isSingle→detailsSum (`:76-90`) over-count 1-winner≠cả-gói. Lesson: grep write-path field-NGUỒN (IsSelected) không chỉ field-đọc; cite-range bọc branch-decision.
|
||||
- [S114 PE per-hạng-mục IMPL review (flip lần 3)](project_s114_multi_ncc_perhangmuc_impl_review.md) — NEEDS-FIX. CAUGHT: DeleteQuote (`...Features.cs:371-397`) KHÔNG re-derive IsWinner → xóa quote cuối (nút Xóa FE:2897) VỠ invariant → phantom winner + HĐ giá 0. Lesson: cardinality grep-consumer PHẢI gồm Delete-handler field-nguồn; spec-enum writer KHÔNG đáng tin. SOLID: 5 SUM + non-tautology test + hash ae3788e9.
|
||||
- [PE negative-quote FE-only spec review (correctness-wire)](project_pe_negative_quote_correctness_review.md) — PASS_WITH_FIXES. R1/R2 no-op verified accurate (CreateContractFromEval:88-100 no-clamp · BE Sum()<=0 :206 + FE :201). MUST: sign-loss — form.thanhTien read DIRECT at POST :2232/:2875+gate :2226; toggle phải re-sign field-chung KHÔNG chỉ flip neg-flag (VndInlineEdit defer-parse-at-own-save không có ở 2 dialog). Consumer inventory COMPLETE 0-break (fmtMoney/toLocaleString neg-safe). Lesson: defer-parse widget→shared-form dialog = sign phải tới field-chung ở MỌI mutation incl toggle.
|
||||
- [S118 Procurement master-access seeder review](project_s118_procurement_master_access_review.md) — PASS(cond); scope-isolation PERFECT (RoleId==Procurement, S92 held) + build 0/0. MAJOR: Reports.Read leaks contract-financials to PRO (`/reports/dashboard` unguarded `[Authorize]`-only) + `Suppliers.Update` grant does NOT enable edit (PUT role-gated Admin/CatalogManager) only Publish+Import. Lesson: menu-flag grant ≠ API capability — grep target controller authz-attrs; bare `[Authorize]` GET = open-to-all so Read-grant is FE-visibility-only.
|
||||
- [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 multi-NCC per-hạng-mục cardinality#3 review](project_pe_multiwinner_perhangmuc_review.md) — PASS_WITH_ADJ; 2 MUST (giaTri isSingle/detailsSum · seed IsSelected≠IsWinner). Lesson: derived src-of-truth = EVERY write-path re-derive.
|
||||
- [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.
|
||||
- [S114 PE per-hạng-mục BE-financial review](project_s114_pe_multi_ncc_perhangmuc_financial_review.md) — NEEDS-FIX: DeleteQuote/DeleteDetail KHÔNG re-derive IsWinner → phantom HĐ GiaTri=0. Lesson: derived-invariant re-establish MỌI mutation kể cả DELETE.
|
||||
- [PE per-hạng-mục spec review (winner-truth lần 3)](project_pe_multi_ncc_perhangmuc_specreview.md) — PASS_WITH_ADJ. Lesson: grep write-path field-NGUỒN (IsSelected) không chỉ field-đọc; cite-range bọc branch-decision.
|
||||
- [S114 PE per-hạng-mục IMPL review (flip lần 3)](project_s114_multi_ncc_perhangmuc_impl_review.md) — NEEDS-FIX; DeleteQuote vỡ invariant. Lesson: cardinality grep-consumer PHẢI gồm Delete-handler field-nguồn; spec-enum writer KHÔNG đáng tin.
|
||||
- [PE negative-quote FE-only spec review (correctness-wire)](project_pe_negative_quote_correctness_review.md) — PASS_WITH_FIXES; MUST = sign-loss (form.thanhTien read DIRECT at POST). Lesson: defer-parse widget→shared-form dialog = sign phải tới field-chung ở MỌI mutation incl toggle.
|
||||
- [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.
|
||||
|
||||
---
|
||||
|
||||
@ -75,7 +76,8 @@ Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod
|
||||
|
||||
## 📅 Recent activity (compressed — full verbatim → `archive/2026-06.md` + `archive/2026-07.md` via `archive/_INDEX.md`)
|
||||
|
||||
- **S117 (2026-07-13) PE negative-quote FE-only spec-review (financial-invariant-owner lens) — PASS (0 blocking, 1 confirm + 2 test-notes):** budget-intact VERIFIED — UpsertQuote (`PurchaseEvaluationDetailFeatures.cs:282-366`) writes 0 budget fields; quote ThanhTien flows ONLY into read-only display aggregates (currentProposalTotal/prevSelectedTotal :911-926 + winnerQuoteTotal :1188) — NEVER mutates PeWorkItemBudget. #81 IsWinner + S114 multi-winner SAFE: winner-derive keyed on `IsSelected` boolean, sign-agnostic (negative ThanhTien irrelevant). R1 baked (ContractFeatures.cs:46 GiaTri>=0 untouched=manual path; CreateContractFromEvaluation:88-90 no-clamp=PE-inherit). R2 FE:201/BE:206 BOTH `SUM(ThanhTien where IsSelected)<=0` = IDENTICAL algebraic sum → 0 divergence from negatives. CONFIRM raised: enterable-negatives OPERATIONALIZE net-value driving CEO-escalation gate (winnerQuoteTotal<CeoApprovalThreshold→CCM skip-CEO) — governance, not display; owner sign-off. T3 note: `SeedWinnerWithQuoteAsync` seeds 1 quote/winner → "mixed net>0 submittable" half needs multi-quote seed. **Lesson: 2-tier guard divergence check = compare SUM EXPRESSION not just comparator; derived-flag safety = trace what flag is KEYED-ON (IsSelected≠ThanhTien); "budget intact" true for RECORD but quote-sum still flows to display+governance aggregates.**
|
||||
- **S123 (2026-07-15) governance 4-change pre-commit review — PASS_WITH_FIXES (0 blocking/3 must-fix/1 MAJOR/3 minor):** detail → [topic](project_s123_governance_4change_review.md). 🔴 **#53 garble ×1 ở CHÍNH TAO; đĩa KHÔNG cứu được vì chưa ghi diary** ⇒ H2 MED-3 (reviewer 5-spawn/0-dòng) trả giá THẬT. **Luật tự-áp: ghi diary TRƯỚC return.** Bài: (1) vá 1 lớp bẫy ⇒ grep MỌI detector cùng-lớp TRONG chính diff; (2) fault-inject N/N chỉ chứng trục ĐÃ chạm — hỏi "trục nào KHÔNG có ca nào?"; (3) áp luật-vừa-viết cho nhánh anh-em → vỡ ⇒ luật-viết ≠ luật-làm; (4) "N/N" trộn đo-nay + dựng-lịch-sử = false-specificity (lặp S109); (5) "fix" bằng đổi format cho khớp-mẫu trượt = rời tập-đo (Goodhart, mất positive-control).
|
||||
- **S117 (2026-07-13) PE negative-quote FE-only spec-review — PASS (0 blocking/1 confirm):** budget-intact VERIFIED (UpsertQuote writes 0 budget fields); #81/S114 winner-derive keyed on `IsSelected` = sign-agnostic; R2 FE:201/BE:206 SUM identical ⇒ 0 divergence. **Lesson: 2-tier guard check = compare SUM EXPRESSION not comparator; derived-flag safety = trace what flag is KEYED-ON; "budget intact" true for RECORD but quote-sum still feeds display+governance aggregates.** → `archive/2026-07.md`.
|
||||
- **S116 (2026-07-13) outward-email GATE se→ai_infra H-22 WAL restart runtime-verify — PASS (0 over-claim/3 minor):** 6/6 ground-truth re-run MATCH (#5+#6 EXACT: archive-gate 12/12 sub<25.6KB + A7 246/246 pointers; crystallized 382713B/380K-tok/252K headroom). Caveat STRONG+prominent (defers real-persist→S111). Minor: (a)-persist WEAK — `.claude/WAL.md` git-committed 0-drift → survives-restart = git property NOT WAL-mechanism. Lesson: persist-claim on git-tracked WAL → verify tracked+0-drift; mechanism-proof lives at Stop-hook run. → `archive/2026-07.md`.
|
||||
- **S115 (2026-07-13) `/fable-real` spec-review presence-not-age adopt — PASS-WITH-FIXES (0C/2M/5m):** M1 acceptance-grep can't detect its OWN deliverable's miss (narrow regex 1/3 doc-lines → false-PASS; fix bare-token+classify). M2 skip-element on contiguous-prefix cut = correctness-inversion. Lesson: verify EACH regex-alt vs EACH target-line by hand; `parallel()` runtime-builtin robust-under-both = endorse-with-caveat. → `archive/2026-07.md`.
|
||||
- **S101 H19 fable-clone WF2 Lane-A (toggle) — PWC, CONCERN closed @S102:** marker WRITE-ONLY dead artifact — persist-claim cần CẢ reader-side (verify consumer exists, not just producer); reader BƯỚC 0.5b wired S101-cuối. → `archive/2026-07.md`.
|
||||
@ -85,7 +87,7 @@ Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod
|
||||
- **S93 (2026-06-29) Harness-16 MFE adopt (WF2 3-lane) — PASS 0-blocking:** code-gate re-derived denom-29; READ-ONLY-budget 1 write-op; WF1 caught vocab-fork H6.7≠H16. → adap-report + _INDEX.
|
||||
|
||||
- **S92 (2026-06-29) PROD-security hide 5 menu-groups admin-only (uncommitted) — PASS (1 note):** A-E upheld; CatalogManager Danh-mục stripped (by-spec, 0 users). → [project_s92_admin_only_modules_revoke.md](project_s92_admin_only_modules_revoke.md).
|
||||
- **June-2026 archived digest (detail → `archive/2026-06.md` + `_INDEX`; S89/S90/S91 PE = FROZEN do-not-touch):** S91 create-contract 1→N multi-winner (codegen mid-loop flush ONLY seq-row; positional DTO 3-site; 419 PASS). S90 stability D1 (Block B re-key IsWinner; CEO-notify never-flush fix; #70 ||peFetching). S89-bis AREA-6 joint-winner DEAD-END (FE `some(isWinner)` vs BE `SelectedSupplierId is null`). S89 AREA-4 HoSoLink #73 clear-on-partial + 2nd call-site PeDetailTabs:817. S88 fidelity-gate FAIL: merge-distill fabricates false-specificity (QUALITY gate AFTER presence). S86 PE Section B authz byte-mirror NotFound→Forbidden fail-closed. S82 Harness-15-v2: sha=self-declared frontmatter NOT recompute. S76 PE budget: #70 useIsFetching gate + spec-scope-framing can be FALSE (read changed-set). S72 Mig 54: fail-closed guard BEFORE DaDuyet + server-recompute no-trust-client. S71 Harness-10: TRACKED=check-ignore(eligible) vs git-ls-files(committed). S69 Office re-skin: grep byte-equal + public-grant root NOT inherit-root. S65: upgrade MUST MUTATE row NOT skip-existing; menu-hide ≠ API-lock.
|
||||
- **June-2026 digest — LESSON-ONLY (verbatim → `archive/2026-06.md` 70KB + `archive/_INDEX.md`; S89/S90/S91 PE = FROZEN do-not-touch):** codegen mid-loop flush ONLY seq-row · single→multi conversion stops at display-layer (FE `some(isWinner)` vs BE `is null` = dead-end) · echo-all-siblings convention rots when NEW absolute-set field added · merge-distill fabricates false-specificity ⇒ QUALITY gate AFTER presence · authz byte-mirror fail-closed (NotFound→Forbidden) · sha = self-declared frontmatter NOT recompute · spec-scope-framing can be FALSE ⇒ read changed-set · fail-closed guard BEFORE terminal-state + server-recompute no-trust-client · TRACKED = check-ignore(eligible) ≠ git-ls-files(committed) · public-grant root NOT inherit-root · upgrade MUST MUTATE row NOT skip-existing; menu-hide ≠ API-lock.
|
||||
|
||||
- **S108 (2026-07-10 first-real-run H19) — FAIL (1C+4M+6m):** email claim "đã sửa comment" khi hmw.js chưa sửa. Lesson: outward-claim "đã sửa X" phải cat X trước gate; grep stale-claim theo CLASS sau fix đại diện. → `archive/2026-07.md`.
|
||||
- **S109 (2026-07-10 fidelity-gate 2 gist L2) — PASS_WITH_FIXES (3):** gist meta-count 15≠disk 14; delta tự-tính +8.8KB = self-computed false-specificity; N/A-just over-claim → fact-claim trong N/A verify như content. → `archive/2026-07.md`.
|
||||
|
||||
Reference in New Issue
Block a user