You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Phase 1 hardening: golden KDF test, facade saveCredential match theo userId, .bak/lock polish #1
Nợ kỹ thuật của Account Store v2 (đã land): các điểm review yêu cầu nhưng chưa có trong code/tests. Nếu golden test fail thì dừng toàn bộ tickets phía sau.
What to build
Hardening cho store đã merge, không có feature mới:
Golden decrypt test cho KDF: decrypt một file credentials.json do code cũ (trước Store v2) mã hóa → phải ra đúng credential. Lấy mẫu: copy file thật tại ~/.zcode-proxy/credentials.json (nếu có) thành fixture test; nếu không có file thật, tạo fixture bằng checkout code cũ. Test chạy trên bản copy, không bao giờ đụng file thật.
Verify 2 test sendOrderedUpstreamRequest abort fail trên cây sạch (git stash → bun test → git stash pop): xác nhận chúng là pre-existing, không do Store v2. Ghi kết quả vào issue này (comment). Ticket 3 dựa vào code này.
Facade saveCredential match theo userId: hiện giờ facade ghi đè theo primaryAccountId — nếu JWT refresh của acc KHÁC primary được save qua facade, nó ghi nhầm entry. Sửa: match entry theo account key (userId/JWT subject) của credential được truyền, giữ nguyên label/addedAt.
.bak ghi đúng một lần, mode 0600: migration hiện có thể ghi đè .bak nếu load nhiều lần trước khi file chuyển v2 thành công. Đảm bảo: chỉ ghi khi chưa tồn tại, permission 0600.
Stale lock check pid: nếu holder pid còn sống (cùng machine) thì coi lock đang giữ, không reclaim chỉ vì TTL hết (TTL chỉ dành cho process chết). Kiểm tra kill(pid, 0).
Acceptance criteria
Golden test decrypt fixture (code cũ) pass; chạy trên copy, file thật không bị đổi
Kết quả verify 2 abort tests trên cây sạch được comment vào issue này
Facade saveCredential credential của acc B (không phải primary) không ghi đè entry của acc A
.bak: tồn tại sẵn thì không ghi đè, mode 0600
Stale lock với pid sống không bị reclaim; pid chết → reclaim
bun test toàn repo không giảm pass so với baseline (1142 pass / 2 fail pre-existing)
KHÔNG đụng handler/pool/scheduler (phạm vi Phase 1)
(fail) sendOrderedUpstreamRequest — abort propagation > aborts mid-request: promise rejects and the server-side socket closes [2013.97ms]
(fail) proxyRequest — ordered transport abort (CL-04, handler level) > client abort during ordered dispatch: no connect-retry, single upstream request, 502 [2010.97ms]
✅ Xác nhận pre-existing: cả 2 fail trên cây sạch (không có thay đổi Phase 1). Baseline thật là 1140 pass / 2 fail. Cả hai là abort-timeout tests (~2s) — không phải regression của Store v2, nhưng Ticket #5 dựa vào code sendOrderedUpstreamRequest nên cần biết: lỗi có thể là flaky timing hoặc bug thật trong abort propagation, sẽ điều tra khi làm #5 nếu cần failover-abort chính xác.
Hoàn thành Phase 1 hardening — đầy đủ 5 hạng mục, theo đúng thứ tự chốt:
1. Verify abort tests trên cây sạch ✅ (comment ở trên): cả 2 fail pre-existing tại HEAD 2fb3663. Baseline thật: 1140 pass / 2 fail.
2. Golden decrypt test ✅
File thật trước (bước quyết định): copy credentials.json từ docker volume /data/auth/, decrypt bằng code mới với secret từ .env → PASS (provider=zai, apiKey 268181e99c…, hasJwt=true). KDF khớp byte-for-byte với code cũ trên dữ liệu thật.
Fixture trong repo: src/auth/fixtures/credentials-v1-golden.json — tạo bằng store.ts từ commit HEAD (2fb3663, pre-Phase-1) chạy trong process riêng, credential giả, secret golden-fixture-secret. File thật không được commit hay đụng tới.
3. Facade saveCredential match theo userId ✅ — giờ match entry theo account key (userId/JWT subject), không ghi đè primary mù quáng. Tests: refresh acc B không đè primary A (label/addedAt giữ nguyên); re-login cùng acc vẫn overwrite đúng behavior cũ; primary pointer không đổi.
4. .bak một lần + 0600 ✅ — chỉ ghi khi chưa tồn tại, mode 0600, chứa payload v1 gốc (không phải v2 đã migrate). Test chứng minh .bak không bị clobber bởi migration sau.
5. Stale lock check pid ✅ — kill(pid, 0) probe: ESRCH (chết) → reclaim; EPERM (sống, user khác) → tôn trọng; pid riêng của mình → tôn trọng. TTL chỉ áp dụng khi pid unparseable. Tests: lock TTL-hết nhưng pid sống → KHÔNG reclaim; pid chết → reclaim.
Kết quả toàn suite: 1149 pass / 2 fail (chỉ 2 abort pre-existing đã verify ở trên; +9 pass so với baseline sau khi thêm 11 tests mới: 2 golden + 5 hardening + 4 accounts trước đó đã chạy).
Chưa đụng handler/pool/scheduler. Sẵn sàng cho #3.
Đã hoàn thành đầy đủ 5 hạng mục hardening. Golden KDF pass trên file thật (docker volume) + fixture. Baseline tăng từ 1140 → 1149 pass, chỉ còn 2 abort tests pre-existing (đã verify trên cây sạch). frontier chuyển sang #2 và #3.
Activity
longphamdev commentedon Nov 9, 2026
Bước 1 — Verify abort tests trên cây sạch (HEAD 2fb3663, git stash):
✅ Xác nhận pre-existing: cả 2 fail trên cây sạch (không có thay đổi Phase 1). Baseline thật là 1140 pass / 2 fail. Cả hai là abort-timeout tests (~2s) — không phải regression của Store v2, nhưng Ticket #5 dựa vào code
sendOrderedUpstreamRequestnên cần biết: lỗi có thể là flaky timing hoặc bug thật trong abort propagation, sẽ điều tra khi làm #5 nếu cần failover-abort chính xác.longphamdev commentedon Nov 9, 2026
Hoàn thành Phase 1 hardening — đầy đủ 5 hạng mục, theo đúng thứ tự chốt:
1. Verify abort tests trên cây sạch ✅ (comment ở trên): cả 2 fail pre-existing tại HEAD 2fb3663. Baseline thật: 1140 pass / 2 fail.
2. Golden decrypt test ✅
credentials.jsontừ docker volume/data/auth/, decrypt bằng code mới với secret từ.env→ PASS (provider=zai, apiKey 268181e99c…, hasJwt=true). KDF khớp byte-for-byte với code cũ trên dữ liệu thật.src/auth/fixtures/credentials-v1-golden.json— tạo bằng store.ts từ commit HEAD (2fb3663, pre-Phase-1) chạy trong process riêng, credential giả, secretgolden-fixture-secret. File thật không được commit hay đụng tới.3. Facade saveCredential match theo userId ✅ — giờ match entry theo account key (userId/JWT subject), không ghi đè primary mù quáng. Tests: refresh acc B không đè primary A (label/addedAt giữ nguyên); re-login cùng acc vẫn overwrite đúng behavior cũ; primary pointer không đổi.
4. .bak một lần + 0600 ✅ — chỉ ghi khi chưa tồn tại, mode 0600, chứa payload v1 gốc (không phải v2 đã migrate). Test chứng minh .bak không bị clobber bởi migration sau.
5. Stale lock check pid ✅ —
kill(pid, 0)probe: ESRCH (chết) → reclaim; EPERM (sống, user khác) → tôn trọng; pid riêng của mình → tôn trọng. TTL chỉ áp dụng khi pid unparseable. Tests: lock TTL-hết nhưng pid sống → KHÔNG reclaim; pid chết → reclaim.Kết quả toàn suite: 1149 pass / 2 fail (chỉ 2 abort pre-existing đã verify ở trên; +9 pass so với baseline sau khi thêm 11 tests mới: 2 golden + 5 hardening + 4 accounts trước đó đã chạy).
Chưa đụng handler/pool/scheduler. Sẵn sàng cho #3.
longphamdev commentedon Nov 9, 2026
Đã hoàn thành đầy đủ 5 hạng mục hardening. Golden KDF pass trên file thật (docker volume) + fixture. Baseline tăng từ 1140 → 1149 pass, chỉ còn 2 abort tests pre-existing (đã verify trên cây sạch). frontier chuyển sang #2 và #3.
feat(auth): multi-account store v2 + Phase 1 hardening (#1)