feat(qa): OEM Validation Lab — Host Foundation (PR-1, cihazsız çekirdek)#59
Open
selimmujdeci wants to merge 2 commits into
Open
feat(qa): OEM Validation Lab — Host Foundation (PR-1, cihazsız çekirdek)#59selimmujdeci wants to merge 2 commits into
selimmujdeci wants to merge 2 commits into
Conversation
Cihaz gerektirmeyen ilk QA çekirdeği. Uygulama runtime'ına DOKUNMAZ (SystemBoot wiring yok, src/ import edilmez); yalnız Node built-in kullanır. ÇEKİRDEK - registry + definePhase sözleşmesi (duplicate id red, deterministik sıra) - değişmez context (immutable) + host yetenek tespiti (device.* ÜRETEMEZ) - fail-soft orchestrator: faz çökerse Lab çökmez, kalan fazlar koşar - coverage-aware scoring: atlanan test SKORU ŞİŞİRMEZ, coverage'ı düşürür - verdict: min(skor kapısı, coverage tavanı, profil tavanı) — yalnız AŞAĞI iner - bounded + redakte artefakt deposu; shell'siz, zaman-sınırlı exec YAPISAL KİLİTLER (kanıt olmadan iddia yok) - cihaz coverage 0 → verdict tavanı HOST_VERIFIED (skor 100 olsa bile) - host lane profili OEM_READY tavanı isteyemez (şema reddeder) - host lane'de adb/fastboot çağrısı context.exec tarafından REDDEDİLİR - safety-critical FAIL/INCOMPLETE veya blocker bulgu → REJECTED FAZ 1 — BUILD VALIDATION APK varlığı, SHA-256 (stream), paket adı, sürüm (version.properties hizası), izin yüzeyi, release-debuggable sızıntısı, apksigner imzası + mevcut scripts/verify-webview-compat.mjs yeniden kullanımı. Araç yoksa (aapt2/Java/APK) ilgili kontrol SKIPPED_NA — "koşamadı" ASLA "geçti" sayılmaz. İLK KOŞUNUN GERÇEK BULGUSU Sevk edilen APK, kaynak AndroidManifest.xml'de OLMAYAN 2 izin taşıyor (c2dm.permission.RECEIVE, DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION — Gradle manifest-merge ile kütüphanelerden). Sözleşmeye mergedPermissions olarak BELGELENDİ; kontrol zayıflatılmadı. RAPORLAR docs-local/qa-runs/<ts>/: report.json (TEK gerçek kaynak) + QA/OEM/BUILD markdown (yalnız JSON'dan render) + artifacts/ + raw/. Git'e girmez (.gitignore). Sır + kişisel/makine yolu redaksiyonu (report.json'da ham mutlak yol YOK). KOMUTLAR: qa:oem:host · qa:oem:report · qa:oem:validate-profile TESTLER: 62 sözleşme testi (tam paket 3262 yeşil) DOKÜMAN: docs/OEM_VALIDATION_LAB_ARCHITECTURE.md + docs/qa/RUNBOOK LEDGER: #43 🟡 host'ta doğrulandı / 🔴 cihaz katmanı UYGULANMADI Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013JFgCEkmi1AVowXvZC57HY
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Comment on lines
+75
to
+80
| child = spawn(file, argv, { | ||
| cwd: opts.cwd, | ||
| env: opts.env ?? process.env, | ||
| shell: false, // ASLA shell — argüman dizisi tek yol | ||
| windowsHide: true, | ||
| }); |
CI (Ubuntu) yakaladı: basename('C:\sdk\platform-tools\adb.exe') POSIX'te
tüm dizeyi döndürür (ters bölü ayraç DEĞİLDİR) → host lane'in adb yasağı
Windows tarzı yolu tanımıyor, komut spawn edilmeye çalışılıyordu.
Fix: ayraçlar basename'den ÖNCE normalleştirilir (platformdan bağımsız).
Kilit genişletildi: ters-bölülü, POSIX-mutlak ve çıplak adb/fastboot yolları.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013JFgCEkmi1AVowXvZC57HY
This was referenced Jul 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Amaç
OEM Validation Lab'in cihaz gerektirmeyen ilk çekirdeği. Bir OEM "çalışıyor" demez, kanıt ister — Lab'in tek işi bir yapının nereye kadar kanıtlandığını abartmadan söylemek.
Uygulama runtime'ına DOKUNULMADI: SystemBoot wiring yok,
src/altındaki uygulama import edilmiyor, native OBD/CAN ve polling frekansları değişmedi, SQL/Supabase'e dokunulmadı. Yeni bağımlılık yok (yalnız Node built-in).Yapısal kilitler — "kanıt yoksa iddia yok"
Bunlar yorum değil, kodda zorlanan invaryantlar:
HOST_VERIFIED(skor 100 olsa bile)qa/core/verdict.mjsKAPI 2hostlane profiliOEM_READYtavanı isteyemezqa/profiles/_schema.mjsdetectHostCapabilities()device.*üretemez (üretirse throw)qa/core/context.mjsadb/fastbootçağrısı reddedilirqa/core/context.mjs→exec()REJECTEDqa/core/verdict.mjsKAPI 1qa/core/scoring.mjsplanned=0 → ratio=0)qa/core/scoring.mjs"Koşamadı" ≠ "geçti" ≠ "düştü": araç yok →
SKIPPED_NA, ortam çöktü →INCOMPLETE, gerçek kusur →FAIL.Faz 1 — Build Validation
Mevcut araçları yeniden kullanır (yeni script yazmaz):
scripts/verify-webview-compat.mjs,android/build.gradlebuildDir override,version.properties, aapt2, apksigner.Kontroller: dist varlığı · eski-WebView ES2015 boot kapısı · APK varlığı · SHA-256 (stream) · paket adı · sürüm hizası (stale-APK tuzağı) · izin yüzeyi · release-debuggable sızıntısı · imza doğrulaması.
İlk koşunun gerçek bulgusu
Sevk edilen APK, kaynak
AndroidManifest.xml'de olmayan 2 izin taşıyor — Gradle manifest-merge ile kütüphanelerden geliyor:com.google.android.c2dm.permission.RECEIVE(Capacitor push/FCM)com.cockpitos.pro.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION(AndroidX)Yani kaynak manifest ≠ sevk edilen izin yüzeyi. Sözleşmeye
mergedPermissionsolarak belgelendi; kontrol zayıflatılmadı.Host koşusu (gerçek sonuç)
9/9 kontrol PASS, skor 100 — ama verdict yine HOST_VERIFIED. Tasarımın kalbi bu.
Raporlar & gizlilik
docs-local/qa-runs/<ts>/→report.json(tek gerçek kaynak) +QA_REPORT.md/OEM_REPORT.md/BUILD_REPORT.md(yalnız JSON'dan render, saf fonksiyon) +artifacts/+raw/.Git'e girmez (.gitignore). Rapora giden her metin redaksiyondan geçer: API key/JWT/MAC/VIN/koordinat →
<REDACTED_*>; kişisel yol →<HOME>; repo yolu →repo:/…; makine yolu (gradle buildDir override) →<ABS>/…. Doğrulandı:report.json'da ham mutlak yol yok.Komutlar
Doğrulama
npx tsc -b --noEmitnpm run lintnpm run test(tam paket)npm run buildnpm run qa:oem:hostWindows uyumu:
apksigner.bat→cmd.exe /cköprüsü (Node.batspawn edemez), JAVA_HOME tespiti (Android Studio jbr), shell string birleştirme yok (argüman dizisi), child-process timeout'ları bounded, timer'lar daima temizlenir.Bilinen eksikler (dürüst sınırlar)
qa:oem:hostelle koşuluyor (mevcutmain.ymlkırılmasın diye ayrı PR).Doküman & Ledger
docs/OEM_VALIDATION_LAB_ARCHITECTURE.md(22 bölüm: anayasa → coverage modeli → plugin sözleşmesi → Scenario Engine, burn-in, OTA regresyon, plugin certification, AI validation, enerji profilleri → atomik PR yol haritası)docs/qa/OEM_VALIDATION_LAB_RUNBOOK.mddocs/DEVICE_VALIDATION_LEDGER.md→ feat(assistant): Unified Assistant Context Store (OfflineAssistantContext) #43: 🟡 host'ta doğrulandı / 🔴 cihaz katmanı uygulanmadı🤖 Generated with Claude Code
https://claude.ai/code/session_013JFgCEkmi1AVowXvZC57HY