[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`.
|
||||
|
||||
@ -44,3 +44,5 @@
|
||||
<!-- ===== S116 curate batch (2026-07-13) — moved 2 verbose entries (S115, S116) from L1 (hook >17.1KB) ===== -->
|
||||
- **S115 (2026-07-13) `/fable-real` spec-review presence-not-age adopt (D1 docs + D2 hmw.js STOP-HARD + D3 archive-gate) — PASS-WITH-FIXES (0C/2M/5m):** sub = `runs/2026-07-13-presence-not-age-adopt/spec-review-fable-real.md`. **M1: acceptance-grep can't detect its OWN deliverable's miss** — D2 crit-4 regex `fail-soft.*default subagent\|degrade về default subagent` catches only 1/3 doc-lines (misses ultra-on:21 "cảnh báo" + README:208 order fail-soft-AFTER) → 0-hits=false-PASS; fix = bare-token grep + human-classify vs frozen-history, NOT narrow ordered-pattern. **M2: "skip element" bolted on contiguous-prefix cut = correctness inversion** — naive `if protected continue` leaves skipped entry ABOVE cutLine → STILL archived while code thinks excluded; needs non-contiguous per-entry byte-sum; DRY-RUN bounds harm but 0 acceptance tests after-est. **Lessons: (1) `parallel()` = runtime-builtin NOT in-repo → premise unverifiable-from-source but design robust-under-BOTH-truth-values = endorse-with-caveat; (2) grep-acceptance must bare-token+classify; (3) verify EACH regex-alt vs EACH real target-line by hand; (4) node --check HAS teeth + top-level return/await pass via CJS wrapSafe (empirical > theory).** Spec faithful (3 floors+rec-3+3 honest-notes verified on-disk), scope-clean, honest-caveated; no Smart-Friend lower.
|
||||
- **S116 (2026-07-13) outward-email GATE se→ai_infra H-22 WAL restart runtime-verify — PASS (0 over-claim / 3 minor):** file `broadcasts/outbox/ai_infra/2026-07-13-se-to-ai_infra-h22-wal-restart-runtime-verify.md`. 6/6 ground-truth re-run MATCH — #1 rev-list=0 · #2 tree clean (modulo email-artifact itself untracked) · #3 HEAD=88bd8e6 · #4 WAL empty-template · #5+#6 EXACT: archive-gate 12/12 sub<25.6KB (tightest investigator-codebase 25237, 363B headroom) + A7 246/246 pointers 0-fail; crystallized 382713B/380K-tok cap/252429-tok headroom. Caveat section STRONG+prominent (own §header "Nấc honest", bold WAL RỖNG/CHƯA, enumerates a/b/c verified vs content-recovery NOT; line31 defers real-persist→S111 Stop-hook×2). No implicit "full restart-recovery verified". **Minor: (1) caveat item (a) "WAL persist qua restart" evidentiary-WEAK — `.claude/WAL.md` git-COMMITTED @88bd8e6 empty-template 0-drift → post-reboot existence = git/filesystem guarantee NOT WAL-mechanism proof (self-corrected by line31 defer-to-S111); (2) unit-notation "382.7KB / 380K-tok" juxtaposes bytes-vs-tokens (382.7KB≈95-127K tok not 382.7K) — looks scarier/understates headroom, "(fits)+252K" resolves; (3) current tree clean modulo email-artifact-itself (untracked).** Lesson: persist-claim on git-tracked WAL → verify tracked+0-drift FIRST; "file survives restart" = git/filesystem property, mechanism-persist proof lives at Stop-hook run (S111). No Smart-Friend lower — report well-calibrated toward humility.
|
||||
|
||||
- **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.**
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
---
|
||||
name: s123-governance-4change-review
|
||||
description: S123 review 4 governance change (backtick-guard H24-1 + detector moi H24-3 + retire dang-3 + chu-thich mark) — PASS_WITH_FIXES, 3 bug H24-3 tai-hien + nguy-bien retire-rationale
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
|
||||
# S123 — review 4 thay-đổi governance (pre-commit, 7 file M)
|
||||
|
||||
**Verdict: PASS_WITH_FIXES** (0 blocking-commit · 3 MUST-FIX trước khi tin H24-3 · 1 MAJOR logic · 3 MINOR).
|
||||
Diff: `scripts/governance-detectors.ps1` (+123) · `tiep.md` · `workflows/README.md` · `session-end.md` · `session-start.md` · `ACTIVE-MARKS.md` · `.session-counter.json`. HEAD thật = `8ba0e7e` (KHÔNG phải `cefb183` như brief — 2 `wal:` flush chen vào, benign).
|
||||
|
||||
## 🔴 CAUGHT — H24-3 lặp ĐÚNG cái bẫy mà cùng diff vừa vá (gen-2)
|
||||
|
||||
`$SessLabelRx` (`governance-detectors.ps1:661`) **KHÔNG có tick-parity guard**, trong khi cùng diff bỏ 30 dòng comment chứng-minh *"mọi doc viết VỀ dương-giả tự trở thành dương-giả"*. Tái-hiện (cây tạm): doc trích `**Last updated:** … (S119` inline + có heading `## … (S123)` + KHÔNG có label riêng ⇒ `$labelN`=119 (số của NGƯỜI KHÁC) vs maxHead=123 ⇒ **FLAG MED = FP**. Trigger canonical = **chính adap-report S123 mô-tả H24-3**. Kéo theo: lý-do severity MED *"0 proxy"* SAI — `$labelN` = first-regex-hit ≠ "label của CHÍNH file" = proxy, vỡ đúng lúc file trích.
|
||||
|
||||
## 🔴 CAUGHT — greedy `.*` lấy `(S<N>` CUỐI dòng, không phải MAX
|
||||
|
||||
`$SessHeadingRx = '^#{2,}\s+.*\(S(\d+)'` (`:662`). Comment `:634` khai *"newest (S<M>) carried by a heading"* = sai. Chứng cô-lập: `## Tong hop (S122 …) va lich su (S110 …)` → regex ra **S110**, max thật **S122**. FN tái-hiện: in `[ok] label S115 >= newest heading S110` — câu sai về chính file. Fault-inject 6/6 chỉ thử MAX-across-LINES (vòng max lo được); trục **within-line CHƯA THỬ**. Corpus hôm nay 0 ca ⇒ LATENT. Mỉa: cùng diff dùng `Matches` ở `Get-AnchorDate` nhưng `Match` ở đây — **không nhất-quán**.
|
||||
|
||||
## 🔴 MAJOR — lý-do retire viết ra ≠ lý-do thật, áp thẳng thì GIẾT dạng-2
|
||||
|
||||
Khắc ở 4 mặt (`tiep.md:58` · `README.md:32` · `session-end.md:61` · `ACTIVE-MARKS.md:29`): *"doc CẤM viết mới mà máy VẪN NHẬN ⇒ cấm-bằng-trí-nhớ ⇒ gỡ"*. Áp verbatim cho dạng-2: `README.md:24` ghi dạng-2 = *"legacy C8 — nhận, **cấm viết mới**"* ⇒ cùng hình-dạng ⇒ phải gỡ ⇒ 5 folder S71 thành orphan ⇒ ép rewrite history mà C8 **cấm**. **Luật vận-hành THẬT** (em-main đo đúng nhưng viết khác): *retire khi tập di-sản RỖNG (dạng-3: 0), giữ khi CÒN (dạng-2: 5)* — miễn-trừ C8 hết hiệu-lực khi hết người thụ-hưởng.
|
||||
|
||||
## 🔴 Q5 — "retire HOÀN-THÀNH mark" = NGUỴ-BIỆN (nhưng FORM chú-thích vẫn đúng)
|
||||
|
||||
Điều-khoản (2) dựng "NHẬN ≠ CHO PHÉP" thành **nguyên-tắc** mượn C8 — **CỐ Ý tách** lưới-rộng ⟂ luật-hẹp. Retire **thu lưới bằng luật** — em-main tự khai *"luật và máy nói cùng một câu"* = biến nhận **=** cho-phép. Đó là **NGƯỢC** điều-khoản, không phải hoàn-thành nó. (Retire vẫn ĐÚNG — lý-do khác: hết di-sản.)
|
||||
**Tiền-lệ:** H-15 v2 @S82 (`adap-reports/2026-06-21:37`) em-main SỬA What-cell, biện-minh *"delta TRONG mark cũ, **không phải quyết-định-governance MỚI**"* · S122 mark `…20-42-01` (`2026-07-14:26`) anh chốt chú-thích, thân nguyên = **làm-rõ Ý-ĐỊNH** (roster 12 = ảnh chụp). S123 = anh **CHỐT RETIRE** = **quyết-định MỚI** ⇒ đúng ca mà tiền-lệ H-15 loại trừ. P4/P8 (`session-start.md:149`) KHÔNG bị vi-phạm (không tự-đóng-dấu). ⇒ Form OK, nhưng **hỏi anh mark MỚI**, đừng chốt bằng lập-luận "HOÀN-THÀNH".
|
||||
|
||||
## Q6 — 1 biên-giới đáng cãi (outward)
|
||||
|
||||
`adap-requests/2026-07-15-se-r5-…:67-69` = **request ĐANG BAY tới hub**, thì-hiện-tại *"TRI-ACCEPT … là bản vá SE **đang chạy**"* + xin fleet adopt tri-accept. SE vừa retire dạng-3 ⇒ hub adopt = **xuất-khẩu đúng nhánh chết** mà SE gỡ vì nguy-hiểm. Report/broadcast đã gửi = đóng băng ĐÚNG; nhưng request đang mở ≠ lịch-sử ⇒ đề-nghị **addendum cho hub**, KHÔNG sửa bản đã gửi.
|
||||
|
||||
## ✅ Chống được soi (đo lại, khớp)
|
||||
|
||||
46→45 tái-hiện (old 46 · new 45 · H24-1 4→2 · `comm -13` = đúng 1 flag H24-3, **0 flag mới**) · fenced **"0 ca" ĐÚNG** (383 file, 6 anchor hit, 0 in-fence) · backtick-FN corpus = **0** (2 ca ODD là mention thật: 3 và 5 tick) · `Matches`-not-`Match` ở Get-AnchorDate = **cần thật** · retire: **0 orphan / 26 run / 5 dạng-2 / 6 folder dạng-3 đều có flat** — khớp từng số · **7/7 fault-inject TỰ tái-hiện** gồm ca chốt `## Synthesis`-no-flat (S122 IM → S123 FLAG) · `8249B` · `22ea8c5`@14:28:07 · `dfa3dae`@14:48:54 · **"@S122 25 run" = ĐÚNG lịch-sử** (`git ls-tree` 48e0d26=25 · 22ea8c5=26) · pointer `README.md:17`/`:19` vẫn trúng sau edit.
|
||||
**Q4:** retire **KHÔNG** mất khả-năng bắt — thu hẹp tập-nhận ⇒ chỉ thêm FP, đo 0. **Q8: ENDORSE không bump** — `:6` 69.871 ch, S119×3, S120/121/122=**0**, `retro-harvest`=0, `TRI-ACCEPT`=0 ⇒ bump = dán nhãn S122 lên chuyện kể dừng ở S119. Fix đúng = **bỏ nhãn phiên** (B1 collapse, chính resolve-text gợi ý).
|
||||
|
||||
## MINOR
|
||||
|
||||
**"5/5 separation"** (`:549`) = số tự-tính, đĩa hôm nay chỉ đỡ **4/4** — case 5 (`permission-matrix:16`) KHÔNG còn trên đĩa: W4 `a09dcae` đổi anchor thành `**Status (cập-nhật …):**` **không khớp AnchorPattern nào** ⇒ *"TRUE POSITIVE, still fires"* SAI (không fire, không cả parse). **Kèm phát-hiện adjacent (W4/S122, không thuộc diff):** file thoát flag bằng cách **đổi FORMAT anchor** chứ không refresh ngày ⇒ nay **vô-hình vĩnh-viễn** với H24-1, detector **mất positive-control** = metric xanh do rời tập-đo (Goodhart).
|
||||
**`docs/_user-guide/node_modules/` = 30 .md gitignored NẰM TRONG `$GovMd`** (`Get-GovernanceMd:129-138` quét docs/**+.claude/** filesystem, không đọc .gitignore). Pre-existing, 0 anchor hit ⇒ 0 impact hôm nay; nhưng **cùng lớp hiểm-hoạ** em-main tự ghi `:495-503` (1 anchor tương-lai lạc vào ⇒ set `moc-phai` ⇒ bóp chết H24-1). H24-3 mới đi thêm 30 file này.
|
||||
`ACTIVE-MARKS.md:22` trỏ `README.md:19-20`; `:20` nay **rỗng** sau edit (thân mark đóng băng ⇒ ghi-nhận thôi).
|
||||
|
||||
## Bài học (dùng lại)
|
||||
|
||||
1. **Vá 1 lớp bẫy ⇒ grep MỌI detector CÙNG LỚP trong chính diff đó.** em-main viết đúng định-luật "lây qua trích-dẫn" rồi đẻ detector mới không guard — bài-học nằm trong context vẫn không tự bật (khớp `feedback_root_cause_over_symptom` S122).
|
||||
2. **Fault-inject test đúng trục đang chạy được.** 6/6 PASS mà trục within-line chưa hề chạm ⇒ đếm ca PASS ≠ phủ trục. Hỏi *"trục nào KHÔNG có ca nào?"*.
|
||||
3. **Lý-do viết ra phải chịu test đối-xứng:** áp luật vừa viết cho nhánh ANH EM (dạng-2) — vỡ ⇒ luật viết ≠ luật làm.
|
||||
4. **Số "N/N" trộn đo-hôm-nay + dựng-lại-lịch-sử = false-specificity** (lặp S109). Đĩa đỡ 4/4 thì viết 4/4.
|
||||
5. **"Fix" bằng đổi format cho khớp-mẫu trượt = rời tập-đo, không phải sửa.**
|
||||
Reference in New Issue
Block a user