- check-email batch13 ack (SE caught-up H-17, Fable-restore H-8 recognized) + re-stamp H10 body-hash 5f511fe5->5f8b8504 (no-strip->canonical) + frontier flag#2 RESOLVED (AI_INFRA re-stamped 8b6a8354=SE-computed) - model-tier bundle 07-03: 12/12 (all-inherit form-valid; v2-pin-simple not-adopted) + Q1/Q2 documented + selftest-stamp -> send-email 6c - H19 fable-clone FORMAL ADOPT + RC-stamp RC-pqhuy1987-03-07-2026-17-46-35: 2 command fable-real/fable-clone (that/ao toggle, semantic-inverse) + marker gitignored + engine SS-K (K.A-K.D + 3 floor-fidelity gap) + session-start BUOC 0.5b reader (WF2-Lane-A fix marker-write-only) + 4 adap-report - 2-workflow Harness-9: WF1 wf_5f308fd8-744 SOUND_WITH_CONCERNS (lost-to-interruption->resume-cached) + WF2 wf_ed5b972f-a4d PASS_WITH_CONCERNS 0-BLOCKING - mapping reviewer + investigator-codebase; VACUOUSLY-MET-honest (all-inherit->0 runtime-delta; value=future-proof-floor + anti-consensus-catch NOT cost; nac designed+will-dogfood) - GAP-3 AS-10 fired LIVE (WF1+WF2 lanes auto-harvested agent-memory -> dogfood-validate convention-not-mechanism; harness-sanctioned, verified, KEPT) - email AI_INFRA harness-19-adopt-plus-model-tier (selftest-stamp 6c PASS) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
20 KiB
Investigator-Codebase Agent — Persistent Memory
Persistent diary cross-session. Auto-injected first ~200 lines at spawn (L1 HOT). Update BEFORE every stop. Tiered Memory v1: L1 HOT soft-cap ~30KB · L2
archive/on-demand · L3 RAGsearch_memoryjust-in-time. Keep entry ≤ 1.5K chars (gotcha #53). Full verbatim history pre-S40 → gitd2f52ba+archive/2026-05-q1..q4.md+archive/2026-06.md. 🗺️ Lookup map:archive/_INDEX.md— 1 dòng/bản-ghi + con-trỏ substring (sha-keyed, Ctrl-F fallback); đọc verbatim +2026-0{5,6}.gist.mdtheo nhu cầu. S80 curate: moved 15 recon entries S65→S76 + 2× 06-20 → archive. Renamed S39: investigator → investigator-codebase (internal half; external → investigator-api).
🎯 Role baseline
Read-only INTERNAL audit SOLUTION_ERP codebase. Tools: Read, Grep, Glob, Bash + 5 RAG MCP. Output: concise findings <500 words + file:line refs. Skills: contract-workflow + permission-matrix + ef-core-migration.
🚫 Split boundary (S39)
- ✅ MINE: internal SQL/EF/grep/reference mirror, sqlcmd schema scan, controller audit, migration diff, count grounding
- ❌ NOT: external docs/CVE/lib →
investigator-api· write → implementer · test → test-specialist · architecture decision → em main
📋 Patterns proven (apply confidently)
Schema scan via sqlcmd
sqlcmd -S "(localdb)\MSSQLLocalDB" -d SolutionErp_Dev -Q "..." # runtime API (primary)
sqlcmd -S "(localdb)\MSSQLLocalDB" -d SolutionErp_Design -Q "..." # ef tooling
ssh vietreport-vps "sqlcmd -S .\SQLEXPRESS -d SolutionErp -U vrapp -P '...' -Q '...'" # prod
Queries: sys.columns, sys.triggers, __EFMigrationsHistory, COUNT(*), sys.indexes.
Gotcha 2 LocalDB distinct (feedback_designtime_runtime_db): _Dev=runtime (appsettings.Development), _Design=dotnet ef default. Prod password fallback C:\inetpub\solution-erp\api\appsettings.Production.json khi $env:PROD_DB_PASSWORD empty.
Controller / wire-claim audit
- Grep
\[Route\("api/[a-z]+"\)\]enumerate controllers ·\[Authorize(Policy = "..."per-action policy (gotcha #44 silent 403 class-level quá strict) - Grep
// Mock/alert(/setEditing(null) // close UI— wire claim bugs ·IActionResultvsActionResult<T>
Smoke verify catalog
Bearer từ POST api.solutions.com.vn/api/auth/login → status matrix expected vs actual + file:line evidence.
Memory cross-reference
30 user-memory tại C:\Users\pqhuy\.claude\projects\D--...\memory\MEMORY.md (index). Key: per_chunk_commit · uat_skip_verify · designtime_runtime_db · per_nv_permission_scope · ef_migration_backfill_reorder · workflow_fanout_reliability · canonical_spec_over_broadcast (S79).
External research → DEFER investigator-api (split S39)
⚠️ Anti-patterns
❌ Skip MEMORY update · ❌ Vague "seems like/probably" · ❌ Missing file:line · ❌ >500 words · ❌ Scope drift to architecture recommendation (em main decides)
🧠 SOLUTION_ERP context essentials (S80 verified — re-ground từ docs/STATUS.md canonical)
- DB: Dev
SolutionErp_Dev· DesignSolutionErp_Design(distinct) · Prod.\SQLEXPRESS/SolutionErp/vrappvia SSHvietreport-vps - Migration path:
src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/*.cs(⚠️ NOT root/Migrations/). 57 mig, lastAddPeSuggestedPriceNotes. - Counts S80 (canonical docs/STATUS.md): 57 mig · 88 SQL tables (count
.ToTable()ModelSnapshot NOT DbSet) · ~253 endpoints · 68 FE pages · 54 menu keys (BEMenuKeysconst) · 354 test (45 Domain + 309 Infra) · 71 gotchas (format### N.) · 30 user-memory · 6 skills · 11 sub-agents (all-inherit H8) - Tech: .NET 10 Clean Arch (Api→Application←Domain + Infra) + CQRS MediatR + EF Core 10 + 2 React 19 Vite 8 TS 6 (fe-admin :8082 + fe-user :8080) + SQL Server + Gitea CI + IIS
- Prod: api/admin/eoffice.solutions.com.vn · Gitea
git.baocaogiaoduc.vn/vietreport-admin/solution-erp(Actions API/api/v1/repos/.../actions/tasksNOT/runs404, cache stale ~2min gotcha #46 — cross-check VPS mtime). Bundle live adminCsJetgZH/userBVS0ApIm(Run #330). - Auth:
admin@solutions.com.vn/Admin@123456(full) /nv.test@solutions.com.vn/TestUser@123456(Drafter). ResponseaccessToken+refreshToken+user. Password ≥12 chars.
🔄 Active workflow schemas (V1 + V2 coexist post-S17)
- V1 Mig 21 flat —
WorkflowDefinitionpin PE/Contract cũ. Match Dept+PositionLevel. - V2 Mig 22-31 —
ApprovalWorkflowpin PE/Contract mới, matchApproverUserId1-1 OR-of-N cùng Cấp. Steps (Phòng) > Levels (Cấp). PE + Contract đã wire V2 (Mig 32+33 S29). Proposal V2 (Mig 38). WorkflowApps skeleton (Mig 39).- Mig 25 IsUserSelectable · Mig 26 PE LevelOpinions UPSERT · Mig 29 Allow* per-NV · Mig 30 F4 AllowApproverEditBudget · Mig 31 SkipToFinal→ApproverLevel · Mig 53 cờ-gấp+CeoApprovalThreshold · Mig 54 giá-đề-xuất PRO/CCM+giá-chốt · Mig 56 ProInitial/ProAdjust · Mig 57 ghi-chú-giá.
- State machine PE 5 trạng thái: Nháp / Đã gửi duyệt / Trả lại (TraLai=98) / Từ chối (REMOVED-S60 hard-guard) / Đã duyệt
- Mode Trả lại 4 option per-Level: OneLevel (lùi 1 Cấp) / OneStep (lùi Bước trước) / Assignee (pick NV đã ký) / Drafter (Phase=TraLai). 3 mode đầu giữ ChoDuyet lùi pointer. Admin bypass
level.Allow*.
📅 Recent activity (compressed — full verbatim → archive/2026-06.md via archive/_INDEX.md)
-
2026-07-03 S101 H19-adopt Lane-2 (mapping + model-tier compliance, WF1 investigate — VERDICT SOUND): ⭐ Mapping CORRECT: reviewer=final-review-gate (Category 1-6 adversarial + Smart-Friend anti-rubberstamp
reviewer.md:268-276+ live-curl deploy-verify = H19 §3a "cổng rà-soát cuối" exact) · investigator-codebase=ground-truth-lane (investigator-codebase.md:23-26file:line-evidence + sqlcmd + grep + "if uncertain say uncertain" = H19 §3b "xác-minh sự-thật chống bịa-số/dẫn-chứng"). NO better-fit: investigator-api=EXTERNAL-docs (WebFetch, out-of-scope internal-truth) · database-agent=narrow DB-lens (subset không phải general fact-verify). Model-tier checklist 12-pt: SE meets A1✅(settings pinclaude-fable-5[1m]—[1m]VALID in settings.json ≠ frontmatter; Fable-down→Opus 1M H5-fallback = A1/A2 frontier-1M allowed) A2✅ A3✅(all-inherit=all-top, 5-fn map) A4/A5/A6 N/A-by-form(no tier-2/helper layer) B1✅ B2✅ B3✅(11 role-names SE-own, 0 copied) C1✅(11/11model: inheritgrep) C2✅(hmw.jstierfield) C3✅(0[1m]in FRONTMATTER model: line — 4 grep hits ALL prose: README:9/12/16 Upgrade-notes + database-agent:46 checklist). ⚠️ Toggle-marker template EXACT-exists:.claude/hmw-mode.ongitignored AFTER!.claude/**last-match-wins (.gitignore:87); new.claude/model-real-mode.onMUST copy placement or gets un-ignored. ⚠️ Ảo-ensemble reuse: hmw.jsparallel():97 + synthesis machinery PRESENT (grep 10 hits) — but "S101 WF2 3-lane" is LIVE-mechanism NOT persisted artifact (runs/ = old 06-18 only, HMW-ephemeral S94+ pattern). VACUOUS-MET nuance TRUE: under all-inherit+Fable, 2 positions ALREADY top → H19 §4 "allow reach top-model" adds 0 runtime-delta; new value = toggle depth-control + Fable-outage multi-Opus>single-Opus. Tag[s101-h19-lane2, mapping-sound, 12pt-compliance, marker-template, vacuous-met]. -
2026-07-02 (S100 H18-adopt WF1
wf_50a817ce-a69— 3 lane ∥, on-behalf em main APPEND B3, return-only 0-residual): L1 measurer-coverage: 3/3 script (mfe-eval:216/selfimprove:133-137/archive-gate:106) GLOB-LIVE 0-hardcode — agent thứ 12 tự-cử; ⭐ ghost-wire-class MỚI: config-key defined-but-unread (memory-budget.json:54-55role_file_glob/diary_path_pattern— script re-hardcode giá trị TRÙNG → không detector nào flag vì cả 2 phía "đúng"; catch = grep key-name across scripts/) + latent skip-if-no-tools:(selfimprove:147, 0 affected 11/11 có). L2 ghost-wire+taxonomy: MAST=0 repo-wide (grep PHẢI case-sensitive\bMAST\b— insensitive dính "Master" noise); cron monthly = ghost-wire THẬT (CronList=0 + scheduler RỖNG 05-04 log + S96 chạy 13:04 em-main in-session); convention "auto = step em-main kích, no-OS-hook" nhất quán 5 nơi. L3 ledger-đo:_ledger.mdtrue-orphan-catch 0/15 lifetime (single-day artifact 06-18, 15 row/14 folder — mig54-R2 share) · mode-A coverage 0/8 S93+ · ⭐ "S71harvest/rỗng" = criterion-wording KHÔNG phải incident (đính chính claim em-main) · repo có 5 "ledger" khác tên → sweep grep_ledgerEXACT · hmw.js 0-touch. Tag[s100-h18-wf1, 3-lane, ghostwire-configkey-class, ledger-0-15, on-behalf]. -
2026-07-02 S98 verify-lane V2 post-flush (VERDICT PASS): detector 28→25 (derived-stale 11→8; wikilink 14 + vocab-fork 3 giữ by-design). 8 derived-stale còn = 100% FP-class count-token soft-net: CLAUDE.md:84 tests-tree "(6 test…)" · ef-core SKILL :94/:95 ("2/1 migration tách/GỘP" history) + :103/:111/:114 ("4/3/1 bảng" Budget-defer/Mig-15 module-local) + :162/:179 (heading "Revert 1 migration" + comment "Script từ 1 migration") — 0 genuine drift vs canonical 61/89/440/79; SKILL edit sáng (+rows 60/61 @:82-83) chỉ shift line-number FP cũ, 0 flag MỚI. ⭐ Grep gotcha: "Fable RESTORED" exact-string CHỈ STATUS:24 + session-start:29; agents/README dùng biến-thể "Fable 5 1M RESTORED" (:3) + "Fable-restore" (:12) — exact-phrase grep miss README dù substance đủ. HANDOFF:5 mega-line: bundle mEGqlNWc/Dnrp4PU1=#484, CeTA7Z82 chỉ trong note "= #483" (1 line match duy nhất cả file). 3 on-behalf append đúng-chỗ: database-agent :36 (cuối Log = EOF) · reviewer addendum TRONG-entry S97-bis :68 (câu cuối + marker on-behalf @S98) · impl-fe S97-Part2 :16 giữa badge:9/S97:19. cicd "S98" = 2× "(curate S98)" stub :73/:74, 0 material-tag. Ledger :7 Mode-A ephemeral note (wf mode-A vắng ledger-row ≠ orphan) + bảng 15 row :11-25 nguyên.
-
2026-07-01 S97 session-end feedback-audit (VERDICT CLEAN): Grep-verified capture readiness pre-close. ✅ gotcha #77/#78/#79 present
docs/gotchas.md:1301/1317/1325(format### N.count=79 = STATUS header — no self-count drift; all 3 have Triệu-chứng+Cơ-chế+Fix+Quy-tắc root-cause). ✅ #53 return-garble x6 (cicd 5/6) in BOTHfeedback_agent_return_garble_recover.md(Why-line ×5→×6 + structural root-cause: cicd MEMORY self-target ~17.1KB→curate-at-return→thinking-step=message-cuối=return-value; fix=archive-cicd-sớm NOT instruction) AND S97-log Parts 1/2/4 (lần-4/5/6). cicd MEMORY LIVE=17.5KB (confirms self-target). ✅ Mig 60 wrong-table BUG = 2-fix present: code (Mig 6120260701142752query Changelogs) + guard (gotcha #79 "xác định ĐÚNG bảng writer" + "verify marker-count prod trước"). Mig 60 code:29-31confirmedPurchaseEvaluationApprovals a...a.Comment LIKE= wrong. Both Mig 60/61 have 3-file rule. ✅ git status CLEAN, 0 stray.claudemisland, 0git add -Ain log, S97 workflows HMW-ephemeral (NOT persisted run-folders — consistent S94+ pattern, runs/ only old 06-18). ✅ Product decisions captured (STATUS/HANDOFF/log + commit-msg): "duyệt là fix"→#480 price-lock, "fix trọn"→Mig 60 endsBeforeCeo-runtime, "hiện luôn CEO duyệt"→#483 badge, Supplier-backlog "15-18 field"→STATUS Next-up. MINOR only: S97-log per-Part State footers show progression (Part-1:47"88 bảng gotcha 77" stale vs session-end "89/79" Part-4:113) — intentional per-part snapshot but mid-log reader sees stale count. No BLOCKING/MAJOR gaps. -
2026-07-01 Supplier Excel-import GAP audit (anh Kiệt FDC — 30-col "Database NCC & Nhà thầu phụ" cho bên Pro): ⭐ Entity CỰC LEAN 9 domain-prop (
Domain/Master/Supplier.cs:5-16: Code·Name·Type·TaxCode·Phone·Email·Address·ContactPerson·Note) + 8 audit inherited (Base/AuditableEntity). EFSupplierConfiguration.cs: Code len50 UNIQUE-filtered[IsDeleted]=0(:24, Mig47 #57), Name200, TaxCode20, Phone30, Email100, Address500, ContactPerson200, Note1000. enumSupplierType.cs:3-10= NhaCungCap1/NhaThauPhu2/ToDoi3/DonViDichVu4/ChuDauTu5 — KHÔNG có "Cả hai/Both" (FE mirrorfe-admin/types/master.ts:11-16identical). GAP 30→entity: 6✅ · 7⚠️collision · 17❌ no-home — Excel splits Address×2(invoice/office), Phone×2(company/contact), ContactPerson+role; ❌ Fax·Bank-acct×2·Legal-rep+role·GUQ+3-NAS-links·Status/blacklist·Referral·PMH-owner. ⚠️ S55 seedSeedRealMasterDataAsync(DbInitializer.cs:2768-2787) crams NĐD/bank/status/category vào free-textNote(:2771-73 TRUONGGIANG/TANPHU/TGN) — proof entity thiếu home. Seed UNGATED (called :128, idempotent-key=Code:2780) — KHÁC demo-master (SeedDemoMasterDataAsyncGATEDDemoSeed:Disabled:117, #75). POST any-auth (SuppliersController.cs:37-42S59). FE SHA-identical 2-app (c1760788, 253L, 9 fields). Prod 20 NCC (Type1×3+Type2×17; type3/4/5 wiped go-live S91 → "Cả hai" enum genuinely-needed). Precedent NAS-link =PE.HoSoLink nvarchar(1000)Mig52. Fork→em-main: core-widen ~15col+CaHai=6 vs satelliteSupplierDetail. → _INDEX pending. -
2026-06-29 S93 Harness-16 MFE ground-truth (WF1
wf_4c63e1bd): ⭐ MFE denominator extraction (deterministic, status-field KHÔNG grep): marks Active(-High) (ACTIVE-MARKS.md) + AS-class + Active-Guards (error-ledger.mdVerified✅) + recurring-gotcha (gotchas.md); dedup-by-AS-cross-reference (gotcha/guard mà AS-row trỏ#N/AS-N→ gộp) = 29 item. Per-role sub-coverage: denom = numbered anti-pattern/NEVER trongagents/<role>.md; numer = diaryagent-memory/<role>/MEMORY.md(KHÔNG project/user — bẫy trùng-tên H15-v3) match exact-id OR ≥2 content-word sau stop-list (đánh bại leading-verb-9/9-giả). Codifiedscripts/mfe-eval.ps1+ engine §H. (WF1 self-write reverted AS-10; em-main harvest single-writer.) → _INDEX. -
PE FROZEN-Mig59 patchwork + go-live recon cluster (S87→S89, 8 entries →
archive/2026-06.md): AREA-2 budget-matrix (SetPeCcmBudgetPeriodCommandband-aid misplaced inPeSuggestedPriceFeatures.cs:153-199; PRO=drafter-flow vs CCM=role-flow authz asymmetry Section-B row3; "Dự án" col intentional FE-only "—") · AREA-3 finalize/price (AllowApproverFinalize AUTO Mig58 + finalizeByCcmDelegation OPT-IN Mig54 coexist, AUTO-first; ApplyApprovedPriceOnFinalize allow-list {Ncc,ProMin,ProMax,Ccm}; isSystem-branch DEAD via public ApproveV2Async) · AREA-4 UpdatePeDraft (LATENT #73-class BUG: HoSoLink absolute-setPurchaseEvaluationFeatures.cs:280but PeHeaderForm PUT OMITS → clears; 2 PUT call-sites mutually destructive; no HoSoLink-preserve test) · AREA-5 urgent/notify/TZ (SignalR push BYPASSES UtcDateTimeJsonConverter benign-Kind.Utc; urgent SET/UNSET symmetric fail-closed; possible double-notify-then-skip drafter=Cấp1) · AREA-6 FE-consumers (all 6 PE-comp+3 pages SHA-identical 2-app; residual single-winnerPeListPanel.tsx:168blank ≥2 joint; #70 stale-echo PRO row3/8 no-peFetching) · S89 AllowApproverFinalize-NOTE feasibility (GAP: BE field MỚI cần — flag chỉ ởcurrentLevelOptionscurrent-level; approvalFlow+list+dashboard DTO KHÔNG carry → exposeEndsBeforeCeo+FinalizeStep/LevelName; FE note đầuPeWorkflowPanel.tsxflow<ol>) · 06-24 3-change (winner=SINGLESelectedSupplierId, winnerQuoteTotal DERIVED 3-site; budget=0 blocked 2-layer; terminal=NEW per-Level bool mirror SkipToFinal) · 06-23 D2/D4/D5 UAT (urgent authz BẤT-ĐỐI-XỨNG gắn-role/gỡ-DeptMgr; PE-create dropdownPeWorkspaceCreateView.tsx:94; workflow-required 2-tầng). -
2026-06-20 governance-landing map (RC-sig + User-Mark H12/13 + objective-criteria): ⭐ WHERE-to-land 3 AI_INFRA gov broadcasts.
harness-11-engine.md= CANONICAL engine (D5/D6/D7 safety-tier + D8 one-direction-lock + D9 single-writer + D10 Bash-residual + CAVEAT no-OS-hook).error-ledger.md= §L.a AS-1..13 + §L.b 7-step. adap-report FORMAT richest =2026-06-18-Governance-harness-11.md. rules.md §6.6 = objective-criteria. report-before-stamp ⊂ D7 (extend, đừng duplicate → C3 vocab-fork). → _INDEX. -
2026-06-20 Harness-14 Eval/Budget/Outcome audit: ⭐ H-14 = time/age/recency-decay KHÔNG được làm căn-cứ cắt feature. (1) BUDGET aligned:
memory-budget.json0 decay/TTL/age hit;keep_floor=5=newest-protection (drains OLDEST), cap seed-by-MEASURE. (2) detectors = canonical-anchor-vs-STATUS + disk-cross-check, ZERO age-window. (3) EVAL genuine:eval/golden-set-solution_erp.jsonl(14q) +evaluator.mdrecall@5≥0.7 — weekly-manual no-automation. (4) anti-downgrade = Harness-8 "all-inherit chất-lượng>chi-phí" PARTIAL (no generic rule in rules.md, grep 0). → _INDEX. -
PE recon cluster (S69→S76, → _INDEX): "Giá chào thầu" mục-c =
WinnerQuoteTotal=SUM(Quote.ThanhTien WHERE supplier==Selected) DERIVED (3 nơi đồng-predicate) — PRO-Min/Max+CCM-proposed = Mig 54 NEW field. Budget gate = PURE ROLE no-phase (canEditPro=Admin||Procurement/canEditCcm=Admin||CostControlPurchaseEvaluationFeatures.cs:800-801; comment "bảng NS=tài-liệu-sống như Excel"); submission-count-lock NEXISTS (grep 0) → "khóa Initial sau lần-trình-đầu" = feature-MỚI. Value-threshold HOOK B =ApproveV2Asyncadvance:816-845(reuse skipToFinal mechanic); urgent flag = AddColumn mirrorItTicketPriority. Badge ✎NS = +2 bool DTO viaGetUsersInRoleAsyncbatch (no-N+1) both sites. PRO/CCM/CEO =Procurement/CostControl/Director(domain-shorthand NOT constants); V2 routing IGNORES roles (= specific ApproverUserId), 100% LINEAR no value/threshold config. -
Office/HRM recon cluster (S65→S69, → _INDEX): 21
Off_*keys, 10 office pages{fe-admin,fe-user}/src/pages/office/SHA256-mirror (except MyAttendance + AttendanceReport admin-only); golive-flip = removeRevokeTemporarilyHiddenModulesAsynccallDbInitializer.cs:2040. Employee master-detail EXISTS (not list-only), Dept FLAT no-tree (pre-Mig51), 5 satellite 15-endpoint full. NamGroup PURO = UI-skin (ref demo.purocorp.vn) hardcoded-navTree, KpiCard-not-tab, shared PageHeader/WidgetCard. gotcha #66:index.css h1-4{color:#0b1220}OUTSIDE @layer → TW-v4 unlayered wins → heading-in-gradient MUSTtext-white!. -
Governance/Harness recon cluster (S71, → _INDEX): H8 all-inherit FULLY adopted both layers (12/12 frontmatter + hmw.js resolveModel); run-trace "TRACKED" = 2-level (
git check-ignoreeligible vsgit ls-filescommitted — model works only postgit add); G-015 containment shift (Harness-2 "mọi tracked=vi-phạm" → H10 "tracked NGOÀI run-folder+code-disjoint=vi-phạm"). path-trap: bareruns/from repo-root = 0 → actual.claude/workflows/runs/(22 tracked). detector refine(b) =.claude/hooks/.claude/scriptsnot-exist (now S75 hasscripts/governance-detectors.ps1). -
[→ git pre-S60] S60 recon#2 V2-engine-map (ApproveV2Async:446-634 guard+UPSERT+advance; skipToFinal F2:561-602 precedent) · S60 PE Section-3 submit-guard ROLE-only. Full text git.
-
[→ archive/2026-06.md + git] S52 P11-D/E/F 6-gap recon · S50 HrmConfigs add-kind 11-spot · S51 gotcha #57 EXT reachability (curated S59).
-
[→ archive/2026-05-q4.md + git
d2f52ba] S29-S37: clean-room > NamGroup-port verified 4× · Pattern 12-bis cross-module mirror · FK+freetext dual-write.
🔄 Curate trigger
-
~30KB → archive recent → L2
archive/<period>.md(byte-exact append) +_INDEX.mdsubstring pointer. Stale >3mo → remove. - Last curate: 2026-06-20 S80 (em-main, archive-gate keep-floor-hit → manual) (39.8→~14KB): moved 15 recon entries (lines 73-105 byte-exact via
sed) →archive/2026-06.md(33→67KB) +_INDEX.md+15 table-row pointers (all verified count=1). KEPT foundation + 2 newest 06-20 + compressed recon-clusters + 3 git-stubs; UPDATED stale counts (40→57 mig, 84→88 tables, 130→354 test, 55→71 gotcha, 7→11 sub). gist NOT updated (em-main distill later). - Prev curate: 2026-06-18 S71 (29.8→23.2KB FIFO-trim 3 + gist gen:2). Prev S70 (47.0→24.1KB dark-matter recovery + built _INDEX/gist). Prev S40 (35.7→~20KB).