25 KiB
25 KiB
Reviewer Agent — Archive 2026-07 (L2 verbatim, FROZEN additive-only)
Recovered S102 (2026-07-06): 5 entry verbatim (S97 · S97-bis · S98×3) bị cut-not-moved tại commit
f229b07(S101 nén L1, digest claim "Detail →archive/2026-06.md" nhưng verbatim chưa từng được move — H2 harvest-curator Fidelity-FLAG S102). Trích content-exact từgit show 5ee32c0:.claude/agent-memory/reviewer/MEMORY.md(PS .NET per-line match, line-ending normalize LF, 0 ký tự mất). Thứ tự giữ nguyên như L1 gốc (newest-first: S98×3 → S97-bis → S97). Quy tắc file: NEVER rewrite existing bytes; entry mới APPEND cuối file. Map:archive/_INDEX.md.
- S98 (2026-07-02) FIDELITY GATE gist impl-frontend 2026-H1 (10 record → 6 cụm + 5 reflection) — PASS-với-sửa (1 minor): 34/34 substring-pointer count==1 (grep -o -F đếm occurrence, gồm cặp bẫy "gotcha #50"≠"gotcha#50" resolve 2 record khác nhau đều hợp-cảnh). 3 interpretive-flag verify GROUND-TRUTH ngoài verbatim: double-rAF (code ListPage:270 comment "2 rAF để browser commit translate-x-full TRƯỚC" + duration-200) · 2 PageHeader song-song (4 file disk thật ×2 app) · wildcard
ev.*Notetheo-từng-mut (đúng 3 call-site 1770/1785/1841). FLAG cwd-misland hướng-chéo: session-log S76:40 CORROBORATE verbatim (cd fe-admin → rơi fe-user/.claude) + .gitignore L109-111 comment trung-tính → draft trung-tính ĐÚNG, không sửa hướng. Sửa duy nhất: R4 parenthetical nói chuỗi "nằm trong chính gist" — misleading, chuỗi resolve count==1 trong archive. Lesson: fidelity-gate 3 lớp = so-verbatim + pointer-arithmetic + ground-truth-code cho MỌI chỗ gist DIỄN GIẢI vượt verbatim; honest-empty BẤT-NGỜ="không" > bịa filler; verbatim TỰ mâu-thuẫn (S52-vs-S53) → gist flag discrepancy chứ KHÔNG resolve bịa (anti-S88-fabrication-by-merge, lần này draft làm đúng). - S98 (2026-07-02) VERIFY LANE V3 cicd-monitor L1-curate moved-not-cut — PASS (0 blocking, 3 minor): sha256 line-level backup-L73/74 == archive-L7/8 (2398/1909B text) + byte-arithmetic đóng EXACT (removed 4309 raw − stubs 1451 = 2858 = size-delta 19917→17059) + diff duy-nhất
73,74c73,74+ CR/LF profile 86/86→86/86 không đổi + FROZEN archives 0-diff + _INDEX 78=2+39+20+6+7+3+1 pointer-resolve count==1. Tool-lesson Windows byte-verify: MSYS grep/sed/awk = TEXT-MODE strip\r(grep -c\rbáo 0 trên file CRLF thuần!); od-token-pipeline đếm sai (641 vs 86 — token-split artifact); ground-truth =.NET ReadAllBytes/wc -c/trpipe /od -ctail. Moved entries CRLF→LF normalize (encoding-only, 0 ký tự mất — Write tool ghi file mới LF uniform). Minor caught: MEMORY.md "Last curate" ledger vẫn S80 (S98 chưa ghi sổ, discoverable qua stub "(curate S98)"); archive-header chữ "byte-exact" đúng trừ CR-terminator. - S98 (2026-07-02) VERIFY LANE V1 re-tier mega-line STATUS/HANDOFF conservation (uncommitted) — PASS (0 mismatch): blurb S94+S93 cắt khỏi mega-line = VERBATIM trong archive tier-S98 (STATUS IndexOf ordinal 9412/11090 · HANDOFF 6147/7775; HEAD cross-check cùng blurb, HANDOFF lệch +51 = đúng bundle-hash morning-edit TRƯỚC blurb). Proof-of-no-other-deletion = arithmetic full-accounting prefix+b94+sep(
·,3)+b93+tail(125=old-pointer) == lineLen exact ×2 file — mạnh hơn spot-check. Old-pointer tái hiện trong pointer mới (archive-S98 + archive-S94 đều =1). Kỹ thuật-bẫy: commonPrefix lấn 1-char (*đầu**Prevtrùng*mở italic pointer mới) → Replace-decompose trên removed-region FAIL giả; fix = IndexOf(blurb) trên FULL line. Line-count bằng (92/92, 12/12) → index-by-index diff enumerate đủ 6+2 dòng vào allowed-list. Flagged: archive??UNTRACKED — phảigit addcùng commit kẻo pointer gãy. Read-tool truncate dòng >2K = KHÔNG verify được mega-line → PS ReadAllLines UTF8 + ordinal IndexOf là đường duy nhất. - S97-bis (2026-07-01) PE EndsBeforeCeo CONFIG→RUNTIME + Mig 60 backfill (bug anh Kiệt FDC, cross-stack+mig, live UAT) — PASS (0 issue): field
EndedByLevelFinalizeset true DUY NHẤT nhánh level-finalize service:871 (grep-all confirm 5 nhánh DaDuyet: 671 drafter-auto / 873 finalize-SET / 911 ccm-delegation / 943 all-steps-CEO / 1049 V1-legacy — chỉ 873 set, 4 nhánh còn lại giữ false = đúng semantics). 4 projection nhất quán: detail ternaryphase==DaDuyet?field:true(:1153) · List/InboxPhase==DaDuyet?field:config-subquery(:647/:767) · ListApproved direct field (filter DaDuyet :176). Migration 3-file OK (Designer+Snapshot có bit-NOT-NULL-default-false); backfill markerLIKE N'%Duyệt KẾT THÚC tại%'KHỚP-EXACT service comment:883 (system prefix, user-comment nối SAU) + tablePurchaseEvaluationApprovalsverified (config:148+DbSet) +Phase=7=DaDuyet verified enum. ccm-delegation comment[CCM duyệt done miễn CEO]KHÔNG match backfill → false nhất-quán runtime. EF-translate ternary List/Inbox CONFIRMED runtime (không giả định):PeDraftVisibilityTestsgọi ListPurchaseEvaluationsQuery full-projection nằm trong 395 Infra PASS. FE 2-app SHA256-IDENTICALb7abbc2f, gatefinalizeFlowStep=endsBeforeCeo?find:null+ banner:278 + typeendsBeforeCeo:booleancó sẵn 2 DTO. Build slnx 0w/0e + 440 test (45D+395I) 0-fail + tsc×2 exit-0 (self-verified, không tin claim). Test repropeFinButWentCeo(cùng-config finalize + field=false → EndsBeforeCeo=FALSE) = contrast quyết-định runtime-vs-config, xuất sắc. Anti-pattern-none: 11-file đúng-scope 0-drift, extend-in-place test NET+0-method giữ 440. Lesson: backfill LIKE-2-wildcard trên chuỗi VN-đặc-thù = false-positive risk MINOR-lý-thuyết (chỉ phiếu DaDuyet-hiện-tại 1-lần, UAT ít-phiếu) KHÔNG đủ FAIL. Config→runtime split đúng: chỉ THÊM chính-xác cho DaDuyet, non-DaDuyet giữ heads-up config như trước = không regression. Re-affirmed @S97 Part-5 session-review lane (spawn fail-return-schema → verdict recovered từ chính entry này per #53-recover-from-diary; em-main grep bổ-sung: 0 wrong-table pattern nào khác ngoài Mig 60 — đã fix Mig 61). (addendum on-behalf H2-proposed @S98) - S97 (2026-07-01) PE finalize UAT ×2 app: reword badge + đảo default checkbox opt-out→opt-in (uncommitted, prod-live anh Kiệt FDC) — PASS (0 issue): 4 hunk/file × 2 = 8 total, 12ins/12del, no thừa. E1
useState(true→false)L57 · E2 resetsetApplyLevelFinalize(false)L221 · E3 helper-text reword (strings KHỚP spec verbatim) · E4 badgekhông trình tới→Kết thúc tại {finalizeLevelName ?? finalizeStepName ?? 'cấp trên'}+ template-literal title. SHA256 full-file IDENTICALbcf812fd…×2 + git-diff --no-index exit-0. Comment L121không trình tớiINTACT (bare-string 2-site: comment giữ + JSX đổi) +e.target.checkedhandler L664 INTACT (spec correctly NOT flip). Logic-non-break VERIFIED: default-false → eligible-untick →sendPrice(L171)=false +shouldPickPrice(L496)=false → price-picker KHÔNG bắt (spec pt6 ✓); payload L200(approverFinalizeEligible ? applyLevelFinalize : true)= pre-existing S96 opt-out no-op cho non-eligible, unaffected by flip. TypefinalizeStepName/LevelName: string|null(purchaseEvaluation.ts:149-150) →??-chain TS-safe. 0 BE/test/mig leak. Build fresh ~17:55 ×2 (fe-user hashDxUomy4CKHỚP impl-claim; fe-admin rotateDkyQ0xCd→diskl_kwCZIF= #69 normal). Anti-pattern-none: precedent-backed cosmetic+default-flip, byte-mirror tight.
- S101 H18 WF2 governance re-run (self=workflow-lane · em-main synthesized): re-verified S100 Harness-18 adopt (
5ee32c0, governance-only) — original WF2wf_31ea3985-92clost to CLI-restart → freshwf_955643c3-f7dPASS_WITH_CONCERNS. Lane-A detector-teeth PASS (fault-inject 4/4-RepoRoottemp-tree — proved detector FLAGS injected-stale, not happy-path). Lane-B caught 1 CONCERN em-main missed in S100 sweep:workflows/README.md:51stale label "ledger orphan-scan" (NO_ledgertoken → grep-exact sweep skipped) → FIXED S101. Lesson: exact-token sweep misses paraphrased labels — widen to concept-phrase when retiring a named artifact. Lane-C #53 return-garble (workflow-lane returned no StructuredOutput) → recovered first-hand, NOT re-spawned (feedback_agent_return_garble_recover). - S101 H19 WF2 review LANE-C (adap-reports + honesty · self=reviewer ·
wf_5f308fd8-744=WF1): PASS. 4 adap-reports (H19 fable-clone + 3 model-tier) + send-email 6c. Hashes recompute indep MATCH (H196909299a+ model-tieree00d253/a7ff304b/eed277f7), all carryreviewer_gate: PASS. 12/12 honest; Q2 hysteresis0.85/5/2verbatim budget.json:35-37. Danger-phrase "verified" only in G-011 legend + "verified-pending-restart"; nấc="designed+will-dogfood, thật-mode CHƯA chạy". Lesson: hex→SHA disambiguation — recompute BOTH strip/no-strip variants to prove a hex string is a content_sha256 BODY-hash not a commit-SHA (line-295f511fe5→5f8b8504= hash-transition,git cat-file=not-commits, claim TRUE presentation-nit only). - S101 H19 fable-clone WF2 Lane-A (toggle mechanism) — PASS_WITH_CONCERNS (1 CONCERN, 0 BLOCKING): 3 Lane-A asks all CONFIRMED — (Q1)
/fable-real=Write ·/fable-clone=Remove-Item mirror ultra-on/off, both carry no-hot-reload warning; (Q2) semantic INVERSE (marker-absent=ảo-DEFAULT · present=thật) consistent across 8 statements +git check-ignore .claude/fable-real-mode.on=IGNORED (line 92 AFTER!.claude/**neg line 83, verifiedcheck-ignore -v) + tracked cmd-file NOT-ignored; (Q3) GAP-1 scope-guard "N lane CÙNG 1 vai, KHÔNG mixed-roster" pinned in BOTH cmd-files + §K.C, and hmw.js VALID_ROLES independently confirmed = all 9 roles no 2-position gate (resolveModel unrestricted) → GAP-1 leak framing ACCURATE not fabricated. CONCERN (refutation that landed): marker is a WRITE-ONLY dead artifact —/fable-real.md:10claims "Mode persist qua marker → SỐNG qua session/compact" but NOTHING readsfable-real-mode.on;/session-startBƯỚC 0.5 reads onlyhmw-mode.onand was NOT extended (session-start.md unmodified in git status, empty grep for any reader). Write half-loop exists, read→report→route half-loop absent → wording overstates mechanism. Non-blocking because vacuously-met-today (all-inherit → 2 positions ALREADY top-model → 0 runtime-delta; toggle manual/owner-driven by design) — bites only when Fable returns + tiering resumes. Anti-pattern: mirror-a-toggle copies the WRITER side but silently drops the READER side — a persist-claim needs BOTH write-on-set AND read-on-session-start; verify the consumer exists, not just the producer. Vacuously-met disclosure itself was clean (§K.D + mark both say "KHÔNG overclaim runtime-delta"). (dời từ Role-baseline @S102 — H2 Placement-flag; NOTE @S102: reader BƯỚC 0.5b ĐÃ wire tại S101-cuối → CONCERN closed, marker có consumer.) - S100 H18 WF2 synthesis + Lane-B — SYNTHESIS reviewer 2-lane JSON→overall PASS_WITH_CONCERNS (LaneA PASS + LaneB PWC, neither BLOCKING). Re-verified indep: ledger +2/0-del revert-clean · ratio-band replaced
|diff|>=10· glob replaced 3-fixed-list · 6/6 consumers 🧊-marked · every LIVE_ledgermarked (unmarked=history) · CONCERN workflows/README:51 no-token points-authoritative=non-block · KEY anti-pattern HELD (stale WF2wf_31ea3985NOT stamped, both placeholders await fresh run). Prior S100-bis Lane-B PASS (2 minor) folded in. - 2026-07-10 (S108 first-real-run H19)
[engine: fable-real-single · Fable-S108](em-main harvest B3, GAP-2/3): Task single-deep-pass adversarial 3 artifact S108 (runbook 58.7KB + adap-request + email outward — $outwardFlag=Y Cat-6). Verdict FAIL — 1 CRITICAL (email claim “đã sửa comment” khi hmw.js:31-32 chưa sửa, cat xác nhận) + 4 MAJOR (2 stale-outage-claim sót §3.5/§4.3 · clone-example thiếu tier:'opus' trái K.B/floor-2 khi Fable UP · AP-4 tự-toggle trái K.D-2 · drift-note 9-vai sai vs engine-10) + 6 minor; core JSON-shape/biến/checklist/GAP-guard SOUND (7 refutation: 5 đứng · 2 vỡ về phía artifact). Learned: doc assemble-từ-N-worker → grep stale-claim theo CLASS toàn file sau khi fix đại diện (header “đã sửa 6” ≠ sửa hết) · mọi outward-claim “đã sửa X” phải cat X trước gate. Surprise: đoạn drift-note (viết để cảnh báo drift) là chỗ duy nhất mô tả sai canonical. Em-main áp 37-fix + vá hmw.js thật → verdict-fixes closed cùng phiên. Return dòng-1 Verdict-header chuẩn, 0 garble.
S112 curate (self, 2026-07-12, hook 20.5KB) — collapsed 2026-06 digest cluster from L1 Recent-activity (verbatim below; detail already in 2026-06.md / linked area files)
- 2026-06-29 S93 Harness-16 MFE adoption review (WF2
wf_13e3d35a3-lane PASS 0-blocking): ⭐ code-gate re-derived denom-29 + leading-verb-trap DEFEATED (NEVER commit push→0 content-word) + READ-ONLY-budget proof (1 write-op.mfe-state.json); WF1-reviewer caught BLOCKING vocab-fork (memory-fidelity H6.7≠H16 → MFE+alias-map §H). Detail → adap-report harness-16-mfe. → _INDEX. - S92 (2026-06-29) Adversarial PROD-security hide 5 menu-groups admin-only on eoffice (uncommitted) — PASS (0 blocking, 1 awareness note): A-E all upheld; CatalogManager Danh-mục access stripped (intended-by-spec, role assigned to 0 users post-S89, flag em-main only). Detail + per-attack file:line → project_s92_admin_only_modules_revoke.md.
- S91 (2026-06-25) PE D2 create-contract 1→N multi-winner + winner-names (FROZEN, NOT-deployed) — PASS: fix for S89-bis dead-end; codegen mid-loop SaveChanges flushes ONLY seq-row (contract built LOCAL); GiaTri per-winner Quote-sum join PES.Id; positional DTO arg-order verified 3 sites; FE mirror byte-identical; 419 PASS. Detail →
archive/2026-06.md. - S90 (2026-06-25) PE stability-fix batch D1 (5 chg+11 test, FROZEN) — PASS: Block B re-key SelectedSupplierId→IsWinner (single unchanged proven); CEO-notify SaveChanges (was Add-but-never-flush); HoSoLink null-safe+clear-via-empty option(b); #70 ||peFetching 2 PRO cells; 413 PASS. Detail →
archive/2026-06.md. - S89-bis (2026-06-25) AREA-6 FE-consumers (PE FROZEN, investigator verify) — 4/4 confirm + 1 NEW miss: all 4 hold; NEW catch = create-contract joint-winner DEAD-END (FE shows button on
some(isWinner)but BE hard-blocksSelectedSupplierId is null). Anti-pattern: single→multi conversion stops at detail-display layer. Detail →archive/2026-06.md. - S89 (2026-06-25) AREA-4 workflow-edit (PE FROZEN, investigator verify) — 3 confirm/1 do-not-touch: HoSoLink #73-class clear-on-partial-edit CONFIRMED + NEW 2nd destructive call-site (PeDetailTabs:817 InfoTab.save omits hoSoLink). Anti-pattern: echo-all-siblings convention rots when NEW absolute-set field added. Detail →
archive/2026-06.md. - S86 (2026-06-24) PE Section B 3-cột Dự-án|PRO|CCM (Mig 59) — PASS: authz byte-mirror UpdatePeSuggestedPriceCcm (NotFound→Forbidden, fail-closed); FE
canEditCcmKHỚP BIT-EXACT BE gate; submit-guard untouched (grep CcmBudgetPeriod in Services=ZERO); div-by-0 safe; 402 PASS. Detail →archive/2026-06.md. - S82 (2026-06-21) Harness-15-v2 adopt review (0 code) — 3/3 lane PASS: caught 3 MINOR. Memory-note:
broadcasts/_index.mdsha = notify self-declaredcontent_sha256frontmatter NOT recompute → don't flag index-vs-file mismatch before reading frontmatter. Stamped-mark mid-session edit OK if only refresh confirmed-decision What-cell. - S76 (2026-06-19) PE budget 3-cột Mig 56 + badge — PASS: MAJOR race fixed gotcha #70 (useIsFetching gate). Badge role-set MUST mirror gate bit-for-bit. SURPRISE: spec "KHÔNG migration" FALSE — đọc changed-set thật, đừng tin scope-framing em-main. → _INDEX S76.
- S72 (2026-06-18) Mig 54 PE giá-đề-xuất + CCM-finalize OPT-IN — financial go-live PASS:* fail-closed guard throw BEFORE set Phase=DaDuyet; finalize-bypass = 3 orthogonal gate + server-recompute amount no-trust-client. → _INDEX S72*.
- S71 (2026-06-18) Harness-10 run-trace — PASS/GAPS: "TRACKED" 2-level = check-ignore(eligible) vs git-ls-files(committed), model only post
git add. → _INDEX S71*. - S69 (2026-06-17) Office re-skin + golive authz — PASS: re-skin proof = grep api-call+queryKey sorted -u byte-equal; public-grant = granted root NOT inherit-root (no sibling cascade); accent missing -800 stop = silent no-class Tailwind v4. → _INDEX S69*.
- S65 (2026-06-16) public HRM Hồ sơ + PE mục E — PASS: upgrade-path MUST MUTATE row (
if(!row.CanRead){...}) NOT skip-existing when prior revoke pre-set false (S58-class); menu-hide ≠ API-lock. → _INDEX S65*. - S88 (2026-06-25) Fidelity-gate L2 gist distill (test-specialist) — FAIL (1 fabrication-by-merge): gist gán "Mig 45" cho cluster span 2 episode khi chỉ 1 mang số đó (Master = Mig 47). Anti-pattern: merge-distill fabricates false specificity; token-PRESENCE pass BLIND to cross-episode mis-attribution → QUALITY gate after presence gate. Detail →
archive/2026-06.md.
- 2026-07-12 (S112 Supplier Excel-import Phase-B close-review, FE/E2E/DEPLOY lane)
[fable-real-single]: GO-WITH-ADJUSTMENTS — detail →project_s112_supplier_import_review.md. Mandatory known adjust = bake ExpectedHeaderTokens (svc:35-67); MAJOR independent catch = FE Import button reuses Suppliers.Create guard but endpoint needs Admin/CatalogManager role → non-functional button for fe-user drafters (BE secure). Deploy dup-risk CONFIRMED safe (4 real NCC ungated-seed Codes=col4 → re-import Update/fill-nulls). Lesson: reusing sibling menu-guard for Admin-scoped NEW action under-restricts — derive guard from ENDPOINT authz. Positive: 24 clamp-consts=EF-len byte-exact, int-enum contract exact (no StringEnumConverter), multipart matches 4 working uploads. - 2026-07-12 (S112 PE sign-off approach-review PRE-fan-out+deploy, security/governance lane)
[fable-real-single]: GO-WITH-ADJUSTMENTS. (1) EDGE-5 decision-3 hard-lock: spec placement (reject-branch SVC:92 + EnsureCanReject:321 + handler) INCOMPLETE — bỏ sót admin-override path SVC:290 (if(isAdmin) evaluation.Phase=targetPhase) → admin un-terminal DaDuyet bằng decision=Approve (KHÔNG qua reject). Fix = 1 guard TOP-of-method sauvar fromPhaseSVC:53. Lesson: terminal-lock gác FROM-state ở ĐỈNH method, KHÔNG rải per-branch (per-branch bỏ sót admin/fall-through). (2) CEO-skip decision-2: A1 (creator tự ký ô mình thay auto-bypass) TẠO đường CEO-skip MỚI multi-step-có-CEO — trước A1 bypass advance-qua slot creator (bỏ check finalize); sau A1 creator qua ApproveV2Async → slot cóAllowApproverFinalize=true + tick → DaDuyet bỏ CEO (SVC:867). invest-C "đã tồn hôm nay" IMPRECISE (chỉ đúng 1-step-no-CEO). Escalate owner. Lesson: đổi auto-advance→manual-approve = mở lại per-slot flag mà auto-path che khuất — re-scan flag khi đổi ai-đi-qua-code-nào. - 2026-07-12 (S112 Supplier Excel-import close-review PRE-deploy, BE+ADJUST)
[fable-real-single]: GO-WITH-ADJ. 6 axes PASS: OrdinalIgnoreCase preview+confirm (BuildCiIndex:446/batchByCode:157/seen:158), FillNulls:381-409 skip Code/Name/Type, all-or-nothing gate:137-152 pre-mutate + SaveChanges:188, parser abs Cell:284 (KHÔNG CellsUsed) +#REF!→null:289 +NAS-raw:290 +fingerprint-Ordinal-reject:223, Mig 63 reversible+3-file+snapshot:3330, col→field 30/30 OK (Code=col4 viết-tắt, Name=col5 tên-cty). REQUIRED adjust = bake 30 real token → ExpectedHeaderTokens:37-66 (nguồn test RealFileHeaderTokens:420-451 == brief exact; Case 9 auto-flip). CAUGHT (MAJOR de-risk): Unicode NFC/NFD — test dựng workbook từ literal NFC nên KHÔNG chứng file Excel THẬT accept; đề.Normalize(FormC)NormalizeHeader:306. Lesson: self-flip token-test = internal-consistency KHÔNG external-file-acceptance (artifact ngoài repo = bất-khả-verify). - 2026-07-12 (S112 FINAL pre-commit+deploy review — BÓ 2-feature PE-signoff + Supplier-import)
[fable-real-single]— VERDICT GO (0 must-fix): Cả 2 close-review adjust ĐÃ áp đúng. F1 PE: EDGE-5 guard đúng ĐỈNH-method SVC:66 (sau fromPhase:53) exempt admin+system, precede CẢ 5 branch incl admin-override:306 (:306 vốnif(isAdmin)nên non-admin không tới) + EnsureCanRejectV2Async:332 untouched; A1 minOwn=Min(Order):607 bypass<minOwn no-auto-sign pointer-stopif(minOwn>1):637 (StepIdx giữ 0 từ submit:265), 4 nhánh cũ (auto-sign/next-Bước/step2/terminal) DELETED; History CHANGE4:751-777 log opinion-cũ→Changelog TRƯỚC 4 dòng overwrite, chỉ non-empty, keyed per-level-row (matchingLevel.Id) → chỉ fire khi CÙNG-NV re-sign, enum Workflow=5/Update=2 tồn. Tests 8-new/4-updated adversarial-grade (EDGE-5 system-exempt chứng qua msg "không hỗ trợ"≠"kết thúc"; history 2-boundary). F2 import: 30 ExpectedHeaderTokens==test byte-identical all-NFC (script verify 0-mismatch); NormalizeHeader FormC:313 áp cả 2 phía; endpoint [Authorize(Roles=Admin,CatalogManager)] = pattern Update/Delete; Mig 63 = 2 nullable additive (prod-safe, expansion-cols từ Mig 62778fc98deployed per 4-NCC-in-prod). Nice-to-have (KHÔNG block): (a) test comment :31-37 + svc :31-34 stale "BEST-GUESS chưa khớp" (đã bake) — misleading, harmless; (b) test NormalizeJoin:407-414 thiếu.Normalize(FormC)mà svc:313 có — moot vì token toàn NFC nhưng latent nếu sau thêm token NFD. UAT-visible behavior change (by-design, không phải bug): A1 bỏ auto-terminal-on-submit → TP tạo phiếu-1-bước-tự-là-cấp-cuối GIỜ phải bấm Duyệt thêm 1 lần (trước tự DaDuyet). Lesson: Case-9 self-adjusting (shouldMatch tính runtime) PASS ≠ chứng real==expected → phải diff byte-level 2 mảng token TAY; build/test-green (458) nhận theo claim, review logic bằng đọc.
- S115 (2026-07-13)
/fable-realspec-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 regexfail-soft.*default subagent\|degrade về default subagentcatches 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 — naiveif protected continueleaves 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.mdgit-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.