CURRENT DEV AUTHORITY — 2026-09-11 America/Chicago. The DEV optimization/versioning records in
project.mdandCHANGELOG.mdsupersede older mutable DEV build, campaign, performance, and readiness claims below. Historical measurements retain their original dates and remain evidence for their recorded configuration only.
Authority date: 2026-09-11 America/Chicago
Current DEV evidence through: 2026-09-11 terminal four-hour evidence-grounded incremental sweep; no candidate was promoted and latest performance winner remains DEV-B8-WIN-01
Purpose: preserve current facts and hard boundaries that future TFTMAC work must not casually reinterpret.
Before planning, running, changing, interpreting, or resuming any TFTMAC DEV optimization test, read the current versions of all three of these records:
facts.md— hard project facts, safety boundaries, current authority pointers, and mandatory process rules.project.md— living project wiki: what TFTMAC/DEV is, current working winner, current runtime/client identity, current test series, and current optimization state.CHANGELOG.md— append-only DEV test/version ledger: exact tests already attempted, outcomes, metrics, integration YES/NO, reasoning, rollback state, andDEV-B8-WIN-##progression.
For the active results-first pass, also obey .clara/plans/ff2f318b-245d-418a-b86f-e07d55b19826/RECOVERY_CONSTRAINTS_2026-09-10.md.
LOCKED RECORD-BOOK POLICY: every completed DEV optimization test must update the current record books in the same work cycle. A test result is not considered fully recorded until CHANGELOG.md contains the exact result and integration decision and project.md reflects any change to current winner/state/version progression. Update facts.md whenever the result changes a current fact, hard boundary, mandatory rule, runtime/client identity, or authoritative current configuration. Do not copy transient measurements into facts.md merely because a test ran; facts stays concise and authoritative, while CHANGELOG.md retains the detailed test history.
LOCKED PROMOTION POLICY: continuous useful 60 FPS is the cumulative destination, not a per-candidate minimum. There is no fixed positive-gain percentage floor for retaining an optimization. VERIFIED, REPEATABLE NET IMPROVEMENT -> integrate it, assign/promote the next working DEV-B8-WIN-## identity, update project.md and CHANGELOG.md, and use that winner as the baseline for the next test. NOT VERIFIED / INCONCLUSIVE / REGRESSION -> log the exact result and reason in CHANGELOG.md, do not integrate it, keep/restore the latest verified winner in project.md, and move to the next candidate. A small regression in one secondary metric may be accepted when the overall measured system/gameplay result is better and no correctness, stability, compatibility, or severe-tail regression outweighs the gain. Small verified gains are intentionally retained so they can compound toward the 60-FPS target.
LOCKED LKG SEPARATION: the frozen LKG remains separate and immutable. The evolving DEV working winner is never allowed to silently rewrite the historical LKG/control evidence.
LOCKED AUTHORITY PRECEDENCE: facts.md is the first project-specific authority. project.md is the current living wiki and must agree with it. CHANGELOG.md is the detailed test/version ledger. Other plans, handoffs, SSOT/reference files, tests, captures, source comments, or historical documents do not silently override these records. If newer machine/runtime evidence conflicts with facts.md or project.md, treat that as an authority-staleness signal: validate the newer evidence first, update facts.md and project.md to the newly proven truth, then continue. Never choose a conflicting lower-level document over facts.md without first reconciling the authority records.
LOCKED PLAN/CHANGE FINALIZATION GATE: before finalizing any implementation plan, change scope, promotion decision, or completion claim, re-read the current facts.md and project.md, reconcile them against any newer evidence discovered during the work, and update them first if they are stale. A plan is not final while an unresolved factual conflict exists.
LOCKED CLEAN-WORKSPACE COMPLETION RULE: active implementation work may be dirty while it is in progress, but no selected managed change may be declared finalized or complete with accidental dirty state. Intended source/docs must be checkpointed/published; generated or transient artifacts must be restored, ignored, or removed from the worktree without destroying authoritative external evidence; final Git status for the selected change must be clean. Unrelated managed work must be preserved rather than destroyed to manufacture cleanliness.
LOCKED OVERNIGHTLAB EVIDENCE POLICY: OvernightLab is retained as a telemetry/provenance tool and must follow the current facts.md + project.md authority. Historical data is not discarded merely because CPU, RAM, or another secondary configuration value differs from the current winner; preserve requested/effective values and label such evidence non-comparable/data-only unless a valid matched comparison admits it. A wrong official-client identity or wrong selected game RHI/core pipeline for the intended test is a promotion disqualifier, but its already-recorded raw evidence remains forensic data. Resolved negative candidates stay logged and are not automatically rerun. The automatic OvernightLab baseline is the latest verified DEV winner, currently DEV-B8-WIN-01, never the frozen LKG unless an explicit historical comparator is requested.
This file separates durable product facts from mutable observations and historical results. A statement becomes a project fact only when it has direct machine, runtime, source, SQL, or user-acceptance evidence. Requested settings are not effective settings; presentation cadence is not Unreal FPS; a hypothesis is not a result.
Exact benchmark formulas, automatic full-run analysis, AI-readable output
shape, and current findings live in benchmark.md.
| Label | Meaning |
|---|---|
| LOCKED | Product or safety contract. Change only through an explicit, evidence-backed project decision. |
| VERIFIED CURRENT | Directly observed on the current Mac, installed app, source tree, or live runtime. Mutable software/version facts must retain an observation date. |
| VERIFIED HISTORICAL | Direct result from an earlier capture or campaign. Useful evidence, but not automatically transferable to the current M4/native runtime. |
| USER ACCEPTED/REJECTED | Direct usability evidence supplied by the person playing TFT. It is decisive for playability but does not by itself identify a software boundary. |
| INFERRED | Evidence-supported explanation that has not been observed at the claimed internal boundary. |
| UNKNOWN | Not measured or not validly attributable. Never silently promote this to fact. |
| Fact | State | Evidence |
|---|---|---|
| Computer | VERIFIED CURRENT: Mac mini, model identifier Mac16,10, model number MU9D3LL/A |
system_profiler SPHardwareDataType, 2026-08-30 |
| SoC | VERIFIED CURRENT: Apple M4 | system_profiler |
| CPU topology | VERIFIED CURRENT: 10 physical/logical cores: 4 performance and 6 efficiency | system_profiler; sysctl hw.physicalcpu, hw.perflevel* |
| GPU | VERIFIED CURRENT: integrated Apple M4 GPU, 10 cores, Metal supported | system_profiler SPDisplaysDataType |
| Unified memory | VERIFIED CURRENT: 16 GB; exact hw.memsize is 17,179,869,184 bytes |
system_profiler; sysctl hw.memsize |
| CPU/GPU clock | VERIFIED CURRENT BOUNDARY: this Mac does not expose a fixed project-controlled CPU or GPU MHz value through the audited system_profiler/sysctl fields. Frequency is not a TFTMAC emulator knob. Do not invent an 800 MHz or 1600 MHz virtual-GPU fact. |
Live host audit |
| Power | VERIFIED CURRENT at audit: AC power | pmset -g batt |
| Thermal/power warnings | VERIFIED CURRENT at audit: no thermal, performance, or CPU-power warning had been recorded | pmset -g therm |
| macOS | VERIFIED CURRENT: macOS 26.6.2, build 25G83; Darwin 25.6.0 | sw_vers; system_profiler |
| Architecture | VERIFIED CURRENT: arm64 | Xcode/Swift target and stack lock |
| Xcode | VERIFIED CURRENT: Xcode 26.6, build 17F113, authoritative path /Applications/Xcode-26.6.0.app/Contents/Developer |
xcodebuild -version; ssot/STACK.lock.yaml |
| Swift | VERIFIED CURRENT: Apple Swift 6.3.3, arm64 macOS target | swift --version |
The current Mac is not the same host as the older M1 Max performance campaign. Historical M1 Max results remain valid for their recorded environment, but they must never be presented as measurements of this M4 Mac mini.
- LOCKED: TFTMAC is its own native macOS application. It is not a Clara app, does not ship through Node, and does not depend on a Clara service to play.
- LOCKED: the application uses AppKit window behavior, a native Metal-backed display, normal macOS menus and window controls, and native macOS fullscreen.
- LOCKED: the Android Emulator's Qt window stays hidden in normal operation.
- LOCKED: the complete Android display is shown aspect-correctly. The normal guest/output target is 1920×1080; a 16:9 fullscreen content region is filled.
- LOCKED: no scrcpy or encoded-video path is the production display path.
- VERIFIED CURRENT: bundle identifier
com.flashls1.tftmac. - VERIFIED CURRENT: installed release
/Applications/TFTMAC.app, version 2.3.0, build 8, arm64. Capture2026-08-31T21-39-18.396Z-fe34e3a1-fb91-44eb-804f-4ca8519dfc31directly proves authorized ADB, official TFT PID observation, exactGameActivitySurfaceView selection, automatic graphics-run admission,COMPLETEstack receipts, and frame-to-run/hash/window/receipt linkage. - VERIFIED CURRENT:
/Users/flash/Desktop/TFTMAC.apppoints to the signed/Applications/TFTMAC Control Launcher.app, which launches the unchanged/Applications/TFTMAC.appand may unlock onlyemulator-5582. Direct launch of/Applications/TFTMAC.appremains the rollback. - VERIFIED CURRENT:
LSSupportsGameMode=trueis present in the installed bundle. This establishes Game Mode eligibility, not proof that macOS activated it during a particular match. - VERIFIED CURRENT: the official full-bleed penguin-samurai icon is embedded.
The source, 1024-pixel output, and ICNS hashes are frozen in
ssot/runtime-authority.json. - VERIFIED HISTORICAL RELEASE ACCEPTANCE: Build 8 was signed with the local
TFTMAC Local Code Signingidentity and passed deep/strict verification when the release receipt was created. It is not notarized for public distribution. - VERIFIED TIMESTAMPED HOST AUDIT (2026-08-31T23:13:30Z): the installed TFTMAC
executable and emulator-host hashes still match that Build 8 receipt, but the
login keychain now exposes zero valid code-signing identities and
codesign --verify --deep --strictfails withCSSMERR_TP_NOT_TRUSTED. Current-host installed-runtime verification was therefore blocked until the local identity was repaired. The later 2026-09-02 recheck records two valid identities and deep/strict verification PASS for both installed apps. Neither observation rewrites the historical release acceptance result.
- LOCKED USER POLICY:
/Applications/TFTMAC.appis the protected stable Control launcher/runtime. Normal engineering work must not rebuild, patch, overwrite, replace, or install development artifacts over this app. - LOCKED USER POLICY: active feature development targets the isolated DEV /
advanced_diagnosticsproduct at/Applications/TFTMAC DEV.app, bundlecom.flashls1.tftmac.dev, with its separate AVD, ports, state, captures, and launcher. - LOCKED USER POLICY: Control exists as the always-available known-good rollback/playable launcher while DEV changes are being developed and validated.
- LOCKED USER POLICY: moving accepted DEV functionality into a full production release is a separate, explicit release-promotion operation. Until Flash explicitly authorizes that promotion and its acceptance gates pass, DEV work must not mutate the installed Control artifact.
- LOCKED: build/install scripts and agent workflows must fail closed if a DEV operation would overwrite or drift the protected Control executable, emulator-host identity, AVD, ports, or launcher.
- OPERATIONAL NOTE: because Control and DEV use an exclusive runtime lease, one may need to be cleanly closed before the other launches; this does not authorize changing the Control artifact or configuration.
-
LOCKED: launch the emulator through the packaged
TFTMAC Emulator Host.appin the logged-in user's macOS session:/usr/bin/open -n -W --env ... --args ... -
LOCKED: do not replace that host chain with direct Node/Clara
spawn(). The discarded direct-service path changed the ADB execution/session identity and produced an unauthorized guest. -
LOCKED: ADB server port
5038; emulator console port5582; serialemulator-5582. -
LOCKED: do not inject
ADB_VENDOR_KEYS. The launcher uses the logged-in user's established ADB identity. Build 8 passes emptyADB_SERVER_SOCKETandANDROID_ADB_SERVER_ADDRESSvalues through/usr/bin/open; its packagedRuntimeHost/main.cdoes not yet remove those variables beforeexecv. -
VERIFIED HISTORICAL ROOT CAUSE: the incorrect direct path used
5040,5592, andemulator-5592, leading tounauthorizedand eventuallyTimed out waiting for emulator ADB device.The Android runtime, AVD, GPU, RAM, CPU, and proven host launcher were not the cause of that failure. -
LOCKED: authenticated EmulatorController is loopback-only, discovered from the launched emulator's PID-bound registration, and authenticated with a token held only in memory.
-
VERIFIED CURRENT: controller port request
8554; emulator option-grpc-use-token; raw controller frame limit raised to 16 MiB because a 1920×1080 RGBA frame is 8,294,400 bytes and exceeds gRPC's former 4 MiB default.
| Item | Current DEV authority |
|---|---|
| Application | /Applications/TFTMAC DEV.app, bundle com.flashls1.tftmac.dev, version 2.3.0 build 8 |
| Runtime root | /Volumes/MAC MINI M4/TFTMAC/Diagnostics/GraphicsRuntimeV1/StockShadow |
| SDK root | /Volumes/MAC MINI M4/TFTMAC/Diagnostics/GraphicsRuntimeV1/StockShadow/SDK |
| Emulator | Android Emulator 37.1.11.0, build 15917651 |
| AVD | TFTMAC_Diagnostic_StockShadow_R1 |
| Ports / serial | ADB 5041, console 5586, controller 8556, serial emulator-5586 |
| Guest display | 1920×1080, 320 dpi, 60 Hz |
| Effective guest CPU | 8 vCPU; recent verified QEMU launches contain -cores 8. These are virtual CPUs scheduled on the 10-core M4 host, not eight dedicated physical host cores. |
| Effective guest RAM | 6144 MiB (6 GiB); recent verified QEMU launches contain -memory 6144. |
| GPU / audio | host GPU / CoreAudio |
| Current game RHI | OpenGL ES through ANGLE (OPENGL_ES_ANGLE) |
| ANGLE revision | 1166eec4c0b125e9e945196acfc549983ef72b18 |
| Official TFT package | com.riotgames.league.teamfighttactics |
| Current verified TFT build | 18.1-5423749, version code 8423749 |
| Working cache winner | DEV-B8-WIN-01: multifile cache enabled; preferSubmitAtFBOBoundary disabled; syncMonolithicPipelinesToBlobCache removed |
The sealed StockShadow AVD file itself remains a restoration baseline and currently contains hw.cpu.ncore=6 and hw.ramSize=5120. The installed runtime-modes.json locked profile records 6 vCPU / 6144 MiB, while current RuntimeModeAuthority.swift defaults advanced_diagnostics effective vCPU to 8 and retains 6144 MiB RAM. The decisive effective-runtime evidence is the launched QEMU command plus runtime receipt: current DEV test launches use 8 vCPU / 6144 MiB and restore the sealed AVD baseline afterward. Do not edit the stored AVD merely to make its static values look like the transient effective launch.
| Item | Protected Control / last-observed authority |
|---|---|
| Runtime root | /Volumes/MAC MINI M4/TFTMAC/Runtime |
| SDK root | /Volumes/MAC MINI M4/TFTMAC/Runtime/SDK |
| Emulator | Android Emulator 37.1.11.0, build 15917651 |
| AVD | TFT_Ultra_Tablet |
| Guest | Official Google Play ARM64 system image, API 36, image revision 7 |
| Platform tools | 37.0.1 |
| WebView provider | com.google.android.webview |
| WebView version observed | 151.0.7922.199 |
| TFT package | com.riotgames.league.teamfighttactics |
| TFT version historically observed on protected Control | 18.1-5402721, version code 8402721; do not use this as the current DEV client identity |
| Installer authority | com.android.vending / Google Play |
| Unreal activity | com.epicgames.unreal.GameActivity |
| Riot login activity | com.riotgames.platformui.mobilefre.MobileFREWebViewActivity |
- LOCKED USER FACT: current TFT uses Unreal Engine. Engineering work must reason about the current Unreal-based client, not the retired legacy engine.
- LOCKED USER PREMISE: the former native Mac path no longer supplies the current playable client after the engine transition; TFTMAC exists to present the official Android Unreal client as a native Mac experience.
- LOCKED: Google Play owns install/update delivery; Riot owns authentication, game content, and the signed TFT package.
- LOCKED: do not mirror, modify, patch, inject into, re-sign, or privately distribute Riot's APK or signed assets.
- LOCKED SECRET BOUNDARY: never expose Riot/Google credentials, tokens, CAPTCHA/MFA material, or consent data in Git, docs, telemetry, command output, or chat.
- VERIFIED CURRENT DEV LOGIN: DEV has an approved local saved-sign-in mechanism using the protected local
riot-login.jsoncredential file (0600) and code path identified asDEV_LocalCredentialFile. Its contents are never project evidence and must never be printed. CAPTCHA, MFA, consent, or other interactive challenges remain manual when required by the official UI. - MUTABLE: package and WebView versions can change through their official stores. Every session must record what was actually installed.
- UNKNOWN: the TFT signer digest has been observed in Android package output, but has not yet been promoted as a durable project-authority digest.
TFT Unreal OpenGL ES workload
-> Android system ANGLE (`libGLESv2_angle.so`)
-> ANGLE Vulkan backend / ranchu
-> gfxstream over virtio-gpu ASG
-> host Vulkan / MoltenVK-to-Metal translation
-> Apple Metal / M4 GPU
-> Android SurfaceFlinger actual presentation
-> authenticated raw RGBA frame stream
-> TFTMAC Metal presenter
-> native macOS fullscreen window
Boundary rules:
- Unreal owns game simulation, effects, render-thread/RHI workload, and the game's actual frame production.
- VERIFIED CURRENT DEV PATH: dedicated current-client engine-log evidence selects
OPENGL_ES_ANGLE. Recent runtime receipts also show/system/lib64/libGLESv2_angle.soon the active RHI path. A generic lower-stack classifier may still emitUNREAL_ENGINE_VULKANbecause Vulkan is used beneath ANGLE; that raw generic classifier is not authoritative for the game's selected RHI. Direct Unreal Vulkan was separately tested and rejected for this fast-pass after Metal vertex-descriptor/missing-attribute failures. - ANGLE owns GLES-to-Vulkan translation only when a game selects GLES/EGL and Android selects ANGLE for that package. Its ES 3.2 exposure is a compatibility route, not general conformance proof.
- gfxstream/ASG owns guest-to-host graphics command transport. Configured ring, buffer, and flush values do not prove per-frame transport latency.
- MoltenVK owns host Vulkan-to-Metal translation. Environment values are requested values unless effective behavior is directly measured.
- TFTMAC owns host launch/session control, the final completed-frame copy, orientation/scaling, native input mapping, output cadence, and local evidence.
- Two different components use Metal: MoltenVK for emulated Vulkan work and TFTMAC for final image presentation. A fast final presenter does not prove the upstream game/transport pipeline is fast.
| Variable | Current DEV working authority |
|---|---|
| App | TFTMAC DEV 2.3.0 build 8 / com.flashls1.tftmac.dev |
| Runtime mode | advanced_diagnostics / StockShadow |
| Guest display | 1920×1080 |
| Density / refresh | 320 dpi / 60 Hz |
| Effective vCPU | 8 |
| Effective guest RAM | 6144 MiB (6 GiB) |
| GPU / audio | host / CoreAudio |
| ADB / console / controller | 5041 / 5586 / 8556 |
| AVD / serial | TFTMAC_Diagnostic_StockShadow_R1 / emulator-5586 |
| Graphics route | OpenGL ES → ANGLE → Vulkan/gfxstream → MoltenVK/Metal |
| ASG | 1 MiB write buffer / 16 KiB write step / 32 KiB ring / 800 µs flush |
| ANGLE enabled | exposeNonConformant*:exposeES32ForTesting |
| ANGLE disabled | preferSubmitAtFBOBoundary |
| Cache | multifile enabled; global monolithic pipeline sync removed (DEV-B8-WIN-01) |
| TFT build | 18.1-5423749 / 8423749 |
These are effective DEV test values proven by live QEMU/runtime receipts. The stored StockShadow AVD baseline intentionally remains 6/5120 for restoration; the runtime transaction/authority applies the effective DEV values and restores baseline on shutdown.
The protected normal-play Control configuration below remains valid as Control/history and rollback context. It is not the current DEV optimization baseline. Change one declared DEV test factor at a time; do not silently mix these profiles.
| Variable | Control |
|---|---|
| Profile | tftmac_5gb_native_v1 |
| Guest display | 1920×1080 |
| Density | 320 dpi |
| Refresh target | 60 Hz |
| vCPU | 6 |
| Guest RAM | 5120 MiB |
| GPU | host |
| Audio | CoreAudio |
| Transport | virtio-gpu-asg |
| ASG write buffer | 1,048,576 bytes / 1 MiB |
| ASG write step | 16,384 bytes / 16 KiB |
| ASG data ring | 32,768 bytes / 32 KiB |
| ASG draw flush | 800 microseconds |
| Emulator features | GLESDynamicVersion,Vulkan,GuestAngle,-GLPipeChecksum,VulkanBatchedDescriptorSetUpdate,AsyncComposeSupport,VirtioGpuFenceContexts |
| ANGLE enabled | exposeNonConformantExtensionsAndVersions:exposeES32ForTesting |
| ANGLE disabled | preferSubmitAtFBOBoundary |
| MoltenVK synchronous submits | 0 / disabled |
| MoltenVK max active command buffers | 64 |
| MoltenVK fast math | 1 / enabled |
| TFT graphics | High |
| TFT FPS cap | 60 |
| Riot Performance Mode Beta | OFF |
The protected Control/native settings UI historically exposes only:
- vCPU: 4, 6, 8;
- guest RAM: 4096, 5120, 6144 MiB;
- refresh target: 30 or 60 Hz;
- ASG draw flush: 400 or 800 microseconds;
- named experiment: Control or Combat Latency A.
The existence of a UI choice does not mean it is faster. All restart-bound values require a clean, logged relaunch.
- VERIFIED CURRENT: Mac primary-button down/drag/up maps to Android
EmulatorController
TouchEvent, identifier0, non-zero contact pressure, and explicit zero-pressure release. Desktop mouse events are not the primary touch path. - VERIFIED CURRENT: keyboard input uses EmulatorController
sendKey. SQLite stores character count and special-key name only, never typed text. - VERIFIED HISTORICAL: the Riot login form expects the private Riot account
username, not an email address and not the public
Name#TagRiot ID. - VERIFIED CURRENT RISK: Riot's WebView can ANR on input dispatch. The narrow
proven recovery keeps TFTMAC and the emulator alive, restores
show_ime_with_hard_keyboard=0, restarts only Riot's failed process, and reopens the official activity. This is recovery evidence, not proof that the mutable WebView/IME defect can never recur. - LOCKED: secure Android PIN unlock stays manual. TFTMAC may record that unlock is required, but never the PIN or typed content.
- VERIFIED CURRENT: Build 7 establishes virtual AC power, Android stay-awake
state, and
mWakefulness=Awakebefore unlock/gameplay. It logsGUEST_GAMEPLAY_POWER_READYor fails clearly. - VERIFIED CURRENT: emulator requests
-audio coreaudio; prior live evidence observed active 48 kHz stereo output and no partial/empty underruns. - UNKNOWN/USER ACCEPTANCE: software audio health does not prove the user can hear sound at their selected speakers/headphones.
The on-screen overlay labels two host-facing rates:
SRC <distinct source-image rate> · OUT <native Metal presentation rate>
SRCis distinct authenticated gRPC images received per second.OUTis TFTMAC Metal presentation cadence.- Neither is automatically Unreal gameplay FPS.
- A repeated/static image can be presented at 60 OUT while TFT produces fewer useful frames.
dumpsys gfxinfois not authoritative for TFT's native Unreal/Vulkan SurfaceView.- Player-visible game-frame authority is the exact TFT SurfaceFlinger layer's actual-present timestamps, summarized into one-second windows.
- p95, p99, maximum interval, 1% low, jank, severe stalls, repeated images, and visible-stutter markers matter more than a flattering average.
Every app launch creates a private mode-0700 capture directory:
~/Library/Application Support/TFTMAC/Captures/<session-id>/
TFTMAC_NATIVE_RUNTIME.sqlite
native-events.jsonl
emulator.stdout.log
emulator.stderr.log
logcat.raw.txt
bounded diagnostic artifacts
Persistent normalized comparison authority:
~/Library/Application Support/TFTMAC/TFTMAC_LAB.sqlite
The implemented “SQL logging system” is local SQLite. It is not a MySQL server and does not require a network database service.
The session database is raw query authority. The persistent lab links raw captures by session/configuration/artifact identity rather than duplicating credential-bearing or full raw data.
| SQL table | Fact represented | Normal cadence |
|---|---|---|
sessions |
session start/end/status/profile | boundary |
runtime_receipts |
requested/effective launch, package, ports, renderer, profile | startup and receipts |
events |
lifecycle, ADB, package, markers, failures, process/layer changes | event-driven |
frame_samples |
bounded image/hash/dimension/sequence checkpoints | boundary/checkpoint |
frame_interval_windows |
source ingress intervals/drops | 1 second |
presentation_samples |
labeled SRC/OUT/mailbox behavior | about 1 second |
game_frame_intervals |
exact TFT actual-present intervals and flags | each observed guest frame |
game_frame_windows |
FPS, 1% low, p50/p95/p99/max, jank/severe/misses | 1 second |
stream_freshness_windows |
changed/repeated frames and transport loss | 1 second |
host_presentation_windows |
final Metal submissions/completions/GPU time/errors | 1 second |
resource_samples |
QEMU CPU/RSS, TFT PID/activity | 5 seconds |
guest_memory_samples |
guest memory and swap | 5 seconds |
host_resource_samples |
host memory pressure, thermal, power source | 5 seconds |
clock_sync_samples |
host/guest midpoint and round-trip error | 30 seconds |
surfaceflinger_samples |
render rate and cumulative miss counters | boundaries and 30 seconds |
audio_samples |
audio output/rate/stereo/tracks/underruns | boundaries and 30 seconds |
logcat_aggregates |
ANR/fatal/LMK/renderer/audio counts | 5 seconds |
pipeline_log_aggregates |
gfxstream/ASG/Vulkan/MoltenVK/shader/fence counts | 5 seconds |
graphics_pipeline_snapshots |
effective layer and graphics identities | 30 seconds |
graphics_runs |
automatic TFT process/layer lifetime, configuration SHA, target FPS, start/end reason | process/layer lifecycle |
graphics_pipeline_incidents |
automatic exact-layer degradation and conservative causal unknowns | bounded incident |
diagnostic_artifacts |
trace path/hash/processor/normalization status | event-driven |
combat_benchmarks |
complete benchmark configuration, coverage, validity, metrics | benchmark end |
combat_incidents |
trigger metrics, trace link, first divergent boundary/unknowns | incident |
combat_comparisons |
control/candidate deltas and decision | comparison |
game_process_sessions |
TFT PID lifetime | process transition |
input_samples |
touch metadata and keyboard counts only | each input event |
- VERIFIED CURRENT: base graphics logging opens automatically from the observed TFT process/layer and seals only at process/app close. It is independent of match markers, Combat Benchmark controls, and battle classification.
- VERIFIED CURRENT: stack receipts, SHA-256,
graphics_run_id, and exact interval/window joins are written continuously. They prove scope and receipt integrity, not internal causal ownership. - LOCKED: the final native Mac presenter remains a hidden correctness receipt. It is not displayed, ranked, or selected as a graphics root cause.
- UNKNOWN / PLANNED: no shared work ID or source-site span currently crosses guest submit, ASG/gfxstream, host Vulkan, MoltenVK, and Metal. The current logger cannot identify an internal root; advanced causal instrumentation is planned in an isolated diagnostic runtime.
Privacy facts:
- Raw logcat and raw traces are sensitive local sidecars and are not pasted or published without deliberate sanitization.
- No screenshot, raw frame payload, username, password, email, token, cookie, PIN, CAPTCHA, MFA value, or typed content belongs in SQL or project history.
- No remote telemetry service is required.
-
LOCKED: complete automatic TFT process/layer runs are preferred product-performance evidence. Every logged frame and resource/pipeline sample inside the lifecycle participates; match/combat markers and classifiers are optional annotations only.
-
LOCKED: the current UI/source-named Combat Benchmark remains a faster 5–8 minute bounded A/B screen; it does not gate base graphics logging or replace a full-run promotion check.
-
LOCKED: graphics optimization decisions use graphics cadence and boundary evidence. CPU/RAM/audio observations remain health/correctness context only; this effort does not optimize them.
-
LOCKED: the product target is useful-frame cadence of at least 60 FPS throughout the complete run, not a flattering average or selected scene.
-
LOCKED:
benchmark.mdis the formula and reporting authority. Historicaldocs/benchmarks.mdresults retain their original M1 Max/userdebug scope. -
Start the bounded A/B during representative continuous gameplay; no semantic phase marker is required.
-
Minimum valid combat duration: 300 seconds.
-
Automatic close: 480 seconds.
-
Exact TFT layer/timestamp availability: at least 95%.
-
Clock coverage: at least 95%.
-
p95 clock RTT at or below 2 ms permits precise cross-boundary attribution; 2–10 ms permits coarse ordering; above 10 ms means cross-host cause UNKNOWN.
-
Start trace: one bounded 20-second, 32-MiB Perfetto trace.
-
Incident traces: at most two 15-second, 32-MiB traces.
-
Automatic incident trigger: two adjacent one-second windows with 1% low below 30 FPS, p99 at least 50 ms, or severe stalls.
-
Trace cooldown: 120 seconds; no concurrent traces.
-
If trace-active versus trace-inactive windows differ by more than 5%, retain performance data but mark trace causality
OBSERVER_OVERHEAD_INVALID. -
Valid traces are SHA-256 sealed and normalized by pinned
trace_processor_shellv58.2. Pinned SHA-256:d29864d1ba3b36855527bb1b0ca3aa7f703cdce338b9680bb922c5c151b358fa.
Decision rules:
- HOME_RUN: a standout broad win: 1% low +20% or more, jank and severe rates each -30% or more relative, and either weighted FPS +10% or p95 interval -15%, without a material veto.
- PROMISING: any valid directional improvement in weighted FPS, 1% low, both p95/p99 tails, or smoothness/jank/missed-vsync behavior, provided no material regression or correctness/usability veto outweighs it. There is no +5% FPS floor.
- REJECT: correctness/usability failure or material regression, including weighted FPS about 5% worse, 1% low about 10% worse, p95/p99 at least 10% worse, or any boot, render, input, audio, login, memory, cleanup, or usability regression.
- INCONCLUSIVE: invalid workload/coverage/synchronization, incompatible configuration identity, or valid evidence with no directional improvement or decisive regression.
- A
PROMISINGincremental candidate requires the existing cold confirmation before becoming the next DEV working winner; a later full-run check may still veto it if compounding exposes a material regression. - LOCKED:
HOME_RUN/PROMISINGare relative candidate decisions, not proof that the product target is met. The separate full-run status remainsTARGET_NOT_METuntil useful-frame cadence holds at least 60 FPS throughout.
- VERIFIED CURRENT: automatic capture
2026-08-31T22-30-26.086Z-8df607d7-a34a-4e2a-b00d-739aa3143200recorded an uninterrupted 42m27s TFT graphics run (PID 2774) with 144,364 exact SurfaceFlinger intervals, 99.629% exact-layer coverage, and 189 degradation incidents. Weighted FPS was 56.98, 1% low 21.49 FPS, p95 21.510 ms, p99 33.434 ms, and 53.72% of intervals missed the 60-FPS budget. - VERIFIED CURRENT BOUNDARY: final native presentation remained near 60 Hz
during this run, so it is retained only as hidden correctness context. The
first internal graphics boundary remains
UNKNOWN; present evidence localizes lateness upstream of or at the exact TFT SurfaceFlinger layer.
- VERIFIED CURRENT CAPTURE:
2026-09-02T05-26-14.078Z-0fb7a877-23f7-4933-bc9f-5525ed8c6d3dis retained as the user's severe-slowdown run. The sealed SQLite authority is 18,583,552 bytes with SHA-2562246edff4f433cd5a6d8d995a612274930d2ad979fa649f9249b690fe6f3ed8b. - VERIFIED PERFORMANCE: the final 300-second tail contains 213 exact-layer windows. Mean effective FPS was 15.884, the worst window was 0.684 FPS, mean 1% low was 10.081 FPS, and the windows accumulated 13,494 missed-vsync equivalents. This is direct evidence of unacceptable sustained frame loss.
- VERIFIED PIPELINE CONTEXT: stream delivery averaged approximately 15 FPS with no sequence loss while the final Mac presenter continued its established near-60-Hz correctness cadence. The useful-frame deficit therefore existed before the final presenter; the final presenter is not a selectable root-cause candidate.
- VERIFIED CPU ASSIGNMENT: guest CPUs
0-5were online and present and the guest reported six processors. The slowdown was not caused by TFTMAC assigning only two guest vCPUs. - VERIFIED TRACE SIGNAL: in the second bounded Perfetto trace, Unreal's
RHIThreadwas scheduled running for 13.38 seconds of an approximately 14.7-second trace (91.3%) and runnable-but-not-running for only 1.6%.SwappyThread3,GameThread, andRenderThreadwere scheduled running for approximately 40.2%, 24.6%, and 11.4% of the trace. This is the strongest current signal of serialized pressure in the guest Unreal RHI/Vulkan path; it does not by itself prove which owned gfxstream/MoltenVK boundary must be changed. - VERIFIED GUEST WARNINGS: the run logged
VIRTGPU_PARAM_CREATE_FENCE_PASSINGunavailable 26 times, nineDRM_IOCTL_VIRTGPU_GET_CAPSinvalid-argument failures, and nineDRM_IOCTL_VIRTGPU_CONTEXT_INITfile-exists fallbacks. These remain causal suspects, not proven owners. - VERIFIED HOST CHURN:
emulator.stdout.logcontains 307 internal emulator helper ADB failures withcannot start server on remote host, while TFTMAC's primary ADB server remained authorized on 5038. Empty inherited ADB endpoint variables are a source-level defect to repair, but this background churn is not yet proven to explain the frame collapse. - VERIFIED ARTIFACTS: two bounded traces and their normalized JSON/CSV
receipts are retained under the capture's
perfetto/directory. They are private diagnostic evidence and must not enter Git. - USER ACCEPTANCE: this run was reported as too slow for enjoyable play. It is a retained regression/problem record, not a promotable configuration.
- VERIFIED HISTORICAL LAUNCH: capture
2026-09-02T05-54-33.919Z-e13fd9b8-1091-4516-bd6e-66f8b50a912dpassed the exclusive-runtime preflight, launched through the packaged Mac host, authorized ADB on 5038 /emulator-5582, and produced a 1920x1080 first native frame. - VERIFIED HISTORICAL SETTINGS: protected Control preset
control, six vCPU, 5120 MiB RAM, 1920x1080 at 320 dpi and 60 Hz. This is the normal-play authority restored for the user's game; do not restart or replace it during live play. - VERIFIED CONTROL RESULT: graphics run
3ebd80ab-5f0f-489e-97ae-d9e0d780831aretained 14,348 exact TFT frame intervals across 353.5 seconds: 47.384 weighted FPS, 7.870 FPS 1% low, 16.868/34.002/50.492 ms p50/p95/p99, 19.090% jank, 1.429% severe stalls, and 3,820 missed-vsync equivalents. - VERIFIED REJECTION: the preceding severe run retained 35,424 intervals
across 1,355.8 seconds: 26.446 weighted FPS, 2.770 FPS 1% low,
16.975/117.088/218.054 ms p50/p95/p99, 34.714% jank, 21.037% severe stalls,
and 44,922 missed-vsync equivalents. Control was decisively more usable, so
combat_latency_ais rejected for normal play. The workloads were not a formal matched A/B pair, so the QoS request alone is not claimed as the cause.
-
LOCKED CONTROL:
/Applications/TFTMAC.appremains the protected normal-play app with bundle IDcom.flashls1.tftmac. Its executable SHA-256 remainsd3bf7c249a3e5f11b81f778b063e1a8cfe2e7fdeec0537ee6bd8447b1c2268d2, and its packaged emulator-host SHA-256 remainsea028ec1d74cc025638c2a0e5f8c783748803c1b0ba9012962c038251fb3eb63. The protected app remains directly launchable as rollback. The Desktop icon points to the separate signed Control unlock wrapper and retains the official Control artwork. -
VERIFIED DEV INSTALL:
/Applications/TFTMAC DEV.appis a separately signed native app with bundle IDcom.flashls1.tftmac.devand a distinct generated DEV icon./Users/flash/Desktop/TFTMAC DEV.apppoints to it. -
LOCKED ISOLATION: DEV selects
advanced_diagnostics, uses state namespaceadvanced_diagnostics, ADB/console/controller ports5041/5586/8556, serialemulator-5586, and AVDTFTMAC_Diagnostic_StockShadow_R1. Control continues to use its original application-support root, ports5038/5582/8554, serialemulator-5582, and AVDTFT_Ultra_Tablet. The global runtime lease forbids either launcher from starting while the other owns the runtime. -
VERIFIED CURRENT SIGNING: both installed app bundles pass strict deep
codesignverification with the localTFTMAC Local Code Signingidentity. The current keychain exposes that identity and the Apple Development identity;scripts/verify-installed-runtime.commandalso passes for Control. -
VERIFIED CURRENT: the stock-shadow DEV runtime physically clones Emulator 37.1.11 and the API 36 Control AVD into the diagnostic root. Its sealed receipt state is
STOCK_SHADOW_RUNTIME_IDENTITY_PASS; the Control AVD tree hash remained unchanged before and after cloning. -
VERIFIED CURRENT: three consecutive stock-shadow DEV launches reached ADB
device, awake/unlocked Android, authenticated controller, exact native first frame, official TFT package/layer, input/audio receipts, and clean shutdown:2026-09-02T12-16-42.125Z-c46f...,2026-09-02T12-18-11.819Z-1300..., and2026-09-02T12-19-13.294Z-3d6d.... -
BOUNDARY: Control is the dependable playable launcher. DEV stock shadow is launch/play compatible for isolated diagnostics but can never replace Control.
-
VERIFIED CURRENT: Build 7 live capture
2026-08-31T02-54-28.329Z-14000b50-bf29-44c6-a963-9203d5313494reached authenticated ADB, a 1920×1080 RGBA first frame, awake/stay-on guest power, logger health, official TFT package receipt, andTFT_READY_FOR_USERundercombat_latency_a. -
VERIFIED CURRENT: configuration SHA-256
05039d1fd0987f46fc7da8de5f483d8c7ffaf8f39bd1eaecdd1aee11603bbb07. -
VERIFIED CURRENT: host pre-exec QoS request returned 0 and read back
user_interactive, relative priority 0. -
UNKNOWN: this does not prove every QEMU worker inherited that scheduling class or that combat performance improved.
-
VERIFIED CURRENT: the same live session recorded Riot WebView/input ANR aggregates and a narrow Riot-only recovery. Do not misclassify that as a graphics improvement or as a whole-emulator crash.
-
VERIFIED CURRENT: the user marked one complete Build 7 match in that same session from event 1442 at
2026-08-31T03:19:25Zthrough event 3065 at2026-08-31T03:51:00Z, a 1,895.054-second / 31m35.054s range. -
VERIFIED CURRENT: the marked run contains 93,724 exact TFT actual-present intervals: weighted FPS 49.449, 1% low 16.300 FPS, p95 33.822 ms, p99 48.746 ms, maximum 1,254.162 ms, 19.110% jank, and 0.610% severe intervals. Exact-layer measured coverage was 100%, with one stable layer and no history truncation.
-
VERIFIED CURRENT: 58,925 intervals (62.871%) exceeded the 60 FPS frame budget; total budget overrun was 357,921.976 ms; the longest consecutive budget-miss run was 325 intervals; and 1,599 of 1,693 complete one-second windows (94.448%) were below 60 FPS.
-
VERIFIED CURRENT: final TFTMAC Metal output averaged 59.968 FPS with zero drawable/command errors and maximum recorded final-presenter GPU time 3.267 ms, while 23,231 presentations reused a source frame. This makes the final pass a poor explanation for the missing useful frames in this match; it does not identify which upstream component was first late.
-
UNKNOWN: this full run is not a candidate-vs-Control decision. It has no matched Control/formal benchmark row, and p95 clock RTT was 86.757 ms, so cross-host ownership is invalid.
benchmark.mdpreserves the complete result.
- USER REJECTED: worst gameplay/graphics experience; do not select again.
- VERIFIED HISTORICAL: 480.646 seconds; weighted FPS 56.665; 1% low 17.698; p95 21.760 ms; p99 34.335 ms; maximum frame 517.488 ms; jank rate 4.554%; severe rate 0.290%.
- VERIFIED HISTORICAL: incident 1% lows 1.932 and 4.629 FPS; one incident included a 517.488 ms p99/max interval.
- INVALID FOR CAUSAL ATTRIBUTION: p95 clock RTT 87.318 ms and observer overhead invalidated cross-boundary ownership claims.
- LOCKED DECISION:
home_run_aremains only as a historical migration/raw receipt enum. It is not selectable. Riot Performance Mode Beta stays OFF.
These are VERIFIED HISTORICAL results from a different M1 Max/userdebug campaign, useful for candidate selection but not current M4 runtime performance:
- ASG versus pipe at exact stage 1-1: 40.1 FPS / 34.85 ms p95 versus 29.6 FPS / 49.75 ms p95. ASG selected.
- Three controls at Trial 1-2/1-5/1-8: 40.60 / 36.03 / 27.83 FPS.
- Confirmed 67% effects/LOD profile: 45.20 / 38.50 / 33.80 FPS; stage-1-8 p95 35.07–35.95 ms.
- 16 KiB ASG write step beat paired 4 KiB control and was retained.
- 2560×1440 versus 1600×900 changed a controlled stage-1-5 result only from 30.5 to 31.3 FPS despite 2.56× source pixels, indicating that scene was not primarily pixel-fill bound.
- The historical selected stack did not achieve the 57 FPS heavy-scene goal and did not reproduce the user's worst approximately 15 FPS gameplay period.
- VERIFIED HISTORICAL: specialist research covered Unreal, ANGLE, gfxstream/ ASG, MoltenVK, Metal, and transferable Fortnite/Unreal measurement categories.
- VERIFIED HISTORICAL: the 10,000-world ZoeMC v0.2 run used declared subjective priors. It is hypothesis-ordering evidence, not empirical proof.
- RESOLVED BRANCH: the simulation's decisive next test—authenticated native frame delivery—was completed. Raw authenticated gRPC is viable for correct 1920×1080 native presentation and input.
- NOT PROMOTED: direct MMAP zero-copy without producer fencing, direct MoltenVK texture sharing without a supported contract, encoded video/scrcpy, and external emulator-window presentation.
- Fortnite/Unreal research can suggest counters, trace categories, pipeline-cache ideas, and workload hypotheses. It does not prove TFT-specific capabilities or justify altering Riot's signed shaders.
- Pipe transport.
- MoltenVK 128/256 command buffers.
- Synchronous MoltenVK queue submission.
- Guest submit thread and broad shader prewarm.
- Native GLES and direct Vulkan routes.
VirtioGpuNativeSync,VirtioGpuNext, disabled Vulkan descriptor batching.- ASG 8/32 KiB write steps, 64/128 KiB rings, 512 KiB write buffer, and 2/4 ms flush screens.
- Active-consumer host patch.
- More guest RAM or an eighth vCPU as an assumed optimization.
- Audio disabled.
- MSAA2, material quality 1,
r.OneFrameThreadLag=0, forced half-rate skeletal animation, extreme effects/LOD, blind 50% scale, and blind PSO prewarm. - Riot Performance Mode Beta and the combined Home Run A host flags.
- LOCKED TEST SHAPE: Control remains High/60/OFF and the complete proven emulator stack.
- RETIRED CANDIDATE: changed only the packaged emulator host's requested
pre-exec QoS to
user_interactive; it is not selectable for current tests. - VERIFIED IMPLEMENTATION: candidate/configuration hashing, stale-preset migration, host QoS receipt parsing, guest power gate, correctness rollback, and stable semantic TFT-layer comparison have native tests.
- VERIFIED LAUNCH: Build 7 established the requested QoS at the host pre-exec boundary and reached TFT ready with logging active.
- VERIFIED REJECTION: the user rejected the gameplay and the measured run was materially worse than the restored Control. It remains historical only.
- VERIFIED CURRENT: R11 is
FAILED_FIRST_NATIVE_FRAMEhistorical evidence, not launch-ready authority. Emulator 35.6.3/API 37 cannot govern current DEV. - VERIFIED CURRENT: exactly three runtime modes remain:
control,advanced_diagnostics, and fail-closedcandidate. Current DEV uses theadvanced_diagnosticsstock-shadow runtime described above. - VERIFIED SOURCE:
DevExperimentProfileseals the profile, one-factor feature override, effective configuration SHA-256, workload-manifest SHA-256, duration, warmup, and correctness requirements. The balanced campaign order is Control / queue-submit-inline / Control / virtual-queue-off / Control / fence-contexts-off / Control. - VERIFIED SOURCE: the owned ARM64 Vulkan probe has five deterministic one-minute workloads after a 30-second warmup and no network/Riot access.
- VERIFIED SOURCE: the app schema contains all eight causal SQL structures.
Swift and C++ define the same 96-byte
PipelineEventV1; the C++ per-thread ring has a fixed capacity of 256 and strict owned-probe label parsing. Standalone ABI/parser verification passes. - BOUNDARY: runtime/source hooks below the app and the seven-run campaign are not yet accepted evidence. No internal component is named as root until the label, lineage, loss, observer-overhead, and replication gates pass.
The R9/R10/R11 entries below are retained as historical failure evidence. They do not override the current stock-shadow DEV authority.
- VERIFIED HISTORICAL (2026-09-02T02:07:03Z): Wave B source integration was
complete under the append-only Wave B v4 correction authority. The default
mode remains
control, andcandidateremains blocked. - VERIFIED HISTORICAL (Wave B source checkpoint): runtime-mode registry SHA-256 was
136d1f8f9ac587f9ab0e839e7521b21d9c5e7a1d451d5a0bac44b44a8fe56479. Runtime identity, registry/configuration hashes, AVD identity, ADB/console/ controller ports, and serial are persisted in the exclusive lease contract. - VERIFIED HISTORICAL:
scripts/verify-tftmac.commandcompleted with exit code 0, produced an unsigned Release build, and passed all 49 native tests with zero failures. The post-verification process audit found no active TFTMAC, emulator, orqemu-system-aarch64process; no runtime, AVD, installed app, or official TFT package was changed or launched by Wave B. - VERIFIED HISTORICAL (2026-09-02T02:20:37Z): diagnostic ADB
5041, console5586, and controller8556passed listener and exclusive-bind checks with control stopped. A new R9 diagnostic forwarder was built from the proven nativeRuntimeHost/main.cchain, ad-hoc signed, deep/strict verified, and sealed under receipt SHA-2563a0bfccbcc96466bbdb83a14a0530906ef7c37ec0e0e61b8f701b2e534e15c7f. The stale first-load host remains preserved but is not R9 launch authority. - VERIFIED HISTORICAL: the R9
advanced_diagnosticsvariant was selectable only through the explicitTFTMAC_RUNTIME_MODE=advanced_diagnosticsenvironment request. Its R9 registry SHA-256 is798bad7512da1079167b120575c5c446a1ae7a5bec3030c19fc1da817dbf206b; unsigned Release and all 49 native tests pass. Control remains the default. - VERIFIED HISTORICAL (R9 first-boot attempt 1): capture
2026-09-02T02-23-48.444Z-9a2df80c-263a-4e10-beaa-8980d095c365failed before QEMU because the diagnostic registry incorrectly used the emulator-only R9 install directory asANDROID_SDK_ROOT. The forwarder and isolated ADB server did launch, the emulator reportedBroken AVD system path, no QEMU process loaded, and the R9 AVD configuration was restored to its accepted SHA-256090fe426402562e227a3a1a6bd6eab9f9572cd48fbe3d467c276d419860caf90. The corrected registry restores the existing dedicated API 37 SDK and ADB at/Volumes/MAC MINI M4/TFTMAC-RUNTIME-DATA/SDK; source validation and all 49 native tests passed after the correction. - VERIFIED HISTORICAL (R9 first-boot attempt 2): capture
2026-09-02T02-31-04.642Z-c7f52368-7fd7-411d-bbf9-d6dee45eb765failed before QEMU because Android Emulator 35.6.3 rejects the stock-control-crash-report-modeargument. The argument is now gated to Control; it is not sent to the diagnostic runtime. - VERIFIED HISTORICAL (R9 first-boot attempt 3): capture
2026-09-02T02-33-42.154Z-d39fac1f-393f-409f-b235-5200853db209loaded the R9 QEMU/gfxstream runtime but crashed inprotozero::MessageArena::DeleteLastMessageInternalthroughperfetto::TrackEvent::Initialize,gfxstream::host::InitializeTracing, andFrameBuffer::initialize. Exact symbols place the first R9 blocker in the custom gfxstream Perfetto initialization path, not in Riot, the AVD, MoltenVK, Metal, ADB authorization, CPU, RAM, or audio. - VERIFIED HISTORICAL (R10 first boot): capture
2026-09-02T03-00-38.256Z-b95cb5a2-59c6-4855-859e-846bc1deca8aproved the successor passed the R9 initialization crash, loaded API 37, MoltenVK, selected the Apple M4 Vulkan device, enabledVK_EXT_robustness2, and initialized the OpenGL ES Translator adapter. It then crashed inperfetto::protos::gen::TrackDescriptor::SerializeAsStringfromgfxstream::SyncThread::doSyncThreadCmd,SyncThread::initSyncEGLContext, andFrameBuffer::initialize. This proves default-disablingInitializeTracingwas insufficient because unguarded gfxstream trace-name macros still entered Perfetto. - VERIFIED HISTORICAL (R10 minidump adjudication): the retained macOS 26.6.2
arm64 minidump reports uptime
3 seconds,EXC_BAD_ACCESS / KERN_INVALID_ADDRESSat address0x8, and a crashed instruction inlibandroid-emu-tracing.dylib + 0x749c. Its stack carriestrack_event,gfxstream.default, andlibgfxstream_backend.dylib + 0x314278; its gfxstream Mach-O UUID is4C4C4449-5555-3144-A1FC-F6DFE0021481, and its annotation reports35.6.3-standalone-0. This is the already-classified R10 Perfetto track-registration null dereference, not an R11 crash and not evidence against TFT, Riot login, the API 37 image, MoltenVK, Metal, CPU, RAM, audio, or the stock 37.1.11 runtime. - VERIFIED HISTORICAL (R11 sealed successor): R11 kept tracing compiled but
places the gfxstream event, instant, and name-track macros behind an explicit
runtime opt-in. Sealed build manifest SHA-256 is
3fd3e18aab970728fcb94efded84952fbde0e84bce86d0ef3592184eaa1170fa; gfxstream SHA-256 isa770f67660c8d88f5a853b4705aefa0210ef37670a9a8df1b22b702b1f79584b; runtime-configuration SHA-256 isc910e13e1096da4d3ee162ed82d5658d32aee4b29d9c6af30d19447c03784560. The fresh stoppedTFTMAC_Diagnostic_API37_R11clone receipt SHA-256 ise7418f81a37ad3d8169a9c1818e904f1678722e3879fcf7ee610c3257b80d419. - VERIFIED HISTORICAL (R11 source/runtime gate): registry SHA-256 is
b2a8080248900c27efdaac7fe3825ccb919188d43072af7a870bfc49c3e0e96f. Diagnostic preflight isREADYon isolated ports5041/5586/8556, and the official unsigned Release verifier passed all 49 native tests with zero failures. Control remains the default and candidate remains fail-closed. - VERIFIED HISTORICAL (R11 live attempt 1): capture
2026-09-02T03-18-30.572Z-f4a767a5-b385-4385-bcff-7873c9cffdf9reached controller discovery andLOADED_RUNTIME_IDENTITY_PASSfor exact R11 QEMU and gfxstream hashes. It did not crash. TFTMAC then performed an owned shutdown becauserunControllerstill hard-coded the Control emulator version37.1.11and rejected the valid R11 status35.6.3.0 (35.6.3-standalone-0). The check is now mode-aware and consumes the sealedexpected_emulator_version_containsauthority (35.6.3for R11); the regression assertion is included in the existing 49-test suite. - VERIFIED HISTORICAL (R11 corrected live attempt): capture
2026-09-02T03-27-32.017Z-80c1dff8-30cf-4f3d-984f-2a3c37863de6passed controller authentication and exact R11 loaded-runtime identity. The R9/R10 Perfetto crash did not recur. ADB changed fromofflinetounauthorizedusing the logged-in user's default key and noADB_VENDOR_KEYS; no native first frame arrived before the bounded 120-second gate. The emulator explicitly reported that the API 37 guest requires a host supportingQemuCameraSensorOrientationandVulkanVirtualQueue. The owned shutdown restored the diagnostic AVD configuration. - VERIFIED HISTORICAL (R11 wake-control retry): capture
2026-09-02T03-33-05.318Z-d463ced7-5843-4a11-8c95-c9757c7ee032repeated exact R11 identity/controller passes and sentPowerimmediately after authentication. It again produced no first frame and ADB remained unauthorized. This rejects a wake-command timing explanation; repeating the same R11 runtime is not an eligible next experiment. - VERIFIED HISTORICAL (R11 ADB provisioning and isolated DEV launch): the
existing logged-in-user ADB identity was approved once inside the isolated
DEV AVD; no
ADB_VENDOR_KEYSinjection or authorization bypass remains in the runtime profile. Final DEV capture2026-09-02T07-46-40.998Z-8260f517-a8a4-4d5e-918f-723b81de32f4passed ownership preflight, exact R11 loaded-runtime identity, and ADB statedevice. Automatic session/database logging started in the isolated DEV application-support namespace. - VERIFIED HISTORICAL (R11 first-frame failure after ADB repair): that same
capture never emitted
FIRST_NATIVE_FRAMEand recordedRUNTIME_FAILEDat2026-09-02T07:48:46ZwithTimed out waiting for Android to post its first native frame.The 120-second gate therefore proves the launcher and ADB authorization are no longer the blocking boundary; the custom R11/API 37 rendering path still fails before native frame delivery. DEV was shut down cleanly after preserving this evidence. - VERIFIED HISTORICAL (hybrid compatibility probe): substituting the R11
gfxstream backend into an isolated APFS clone of the stock 37.1.11 host failed
to load because stock
libemugl_common.dylibdoes not export the actively requiredg_emugl_dma_get_host_addrsymbol. Substituting the paired R11libemugl_common.dylibpassed that loader boundary but the stock QEMU then terminated withSIGSEGVduring gfxstream renderer initialization (minidump21ab1231-eb10-42b6-a896-35f4e3c31511.dmp). A null-symbol shim would corrupt active DMA call sites. Further binary-library swapping is rejected. - VERIFIED SOURCE BOUNDARY: Google's published 37.1.11 stable release notes
state that the release added Vulkan extensions required by API 37 system
images. The public QEMU history exposes 37.1.8 as the last 37.1 canary version
bump but does not expose a
37.1.11bump commit or a 37.x release branch. Therefore an exact source identity for build15917651is currentlyUNKNOWN; no branch head or 37.1.8 revision may be represented as that exact source. - OPEN LIVE GATE: R11 proved crash removal and exact loaded identity, but it
did not pass native first-frame or API 37 AVD acceptance. The next eligible
runtime is one built from a coherent modern
emu-main-devmanifest graph, not another 35.6.3 retry or hybrid library swap. Manual device PIN, Riot authentication, and gameplay remain user-operated and are not automated.
- VERIFIED SOURCE: the modern manifest is pinned to
2692acc620f6563b21995540656674faeb536cdconemu-main-dev; preparation and uninstrumented Release build scripts enforce four-job parallelism and refuse to run while Control or DEV is active. - VERIFIED FAILURE AND FIX: the first sync target was the case-insensitive
external APFS volume and failed because Android requires distinct
BUILDandbuild/paths.scripts/prepare-causal-source-runtime.commandnow creates a 180-GiB sparse, case-sensitive APFS image and validates case sensitivity before syncing. The failed checkout is historical partial state and is not source authority. - PAUSED, NOT FAILED: the corrected case-sensitive sync was deliberately interrupted for this clean handoff. No source-lock receipt or uninstrumented causal-stock build receipt exists yet. The preparation script is resumable.
- OPEN LOCAL SETUP: Keychain service
com.flashls1.tftmac.android-unlock.v2, accountandroid-user-0, was not populated before this stop. The PIN is never in source, arguments, logs, SQL, or this repository.scripts/setup-android-unlock.commandis the only setup entry point. - NOT RUN: the seven-run owned Vulkan-probe campaign has no accepted result yet. No one-factor candidate is promoted and no source component has been named as root.
- The causal magnitude of Combat Latency A's QoS request under a formally workload-matched A/B. It is already rejected for normal play because its observed severe run was decisively worse and provided no usable benefit.
- Whether QEMU decoder/render/submission workers actually receive beneficial scheduling after exec.
- The first divergent boundary in the run's worst sustained under-60 periods.
- RESOLVED CURRENT (2026-09-03): Exact ASG-versus-gfxstream-versus-MoltenVK
ownership is verified and closed by
causal-hook-timeline-20260903-r6using the timeline-semaphore submit sideband (VK_KHR_timeline_semaphore). Across 99,480 recorded events and 10,796 fully correlated frames (0 losses, 0 overwrites, 100% SHA-256 integrity), total host graphics latency (Site 1001 ASG decode through Site 2005 Metal GPU completion) averages 0.792 ms (p50 0.692 ms, p95 1.489 ms, p99 2.033 ms). Gfxstream submit averages 0.014 ms, MoltenVK translation averages 0.106 ms, and Metal GPU execution averages 0.683 ms. The host graphics stack is proven non-bottleneck (<5% of 16.67 ms frame budget); lateness is upstream of the host decode boundary in guest - RESOLVED CURRENT (2026-09-03): MoltenVK Global Persistent Pipeline Cache
is implemented in
MVKDevice.mm(getOrCreateDefaultPipelineCache()), hooked intocreatePipelineswheneverpipelineCache == VK_NULL_HANDLE, and saves periodically and on shutdown to/Volumes/MAC MINI M4/TFTMAC/Diagnostics/GraphicsRuntimeV1/Cache/moltenvk_pso.cache. In live diagnostic runr6,moltenvk_pso.cachewas successfully created, populated with 3,709 bytes, and verified with valid Apple vendor0x106bVulkan 1.4 header. In parallel,scripts/prewarm-tft-gameplay.commandwas created and verified, forcing guest ART Ahead-Of-Time (AOT) compilation to native ARM64 (status=speed), pre-faulting >2 GB of game APK and.pakassets into guest Linux RAM pagecache, and prioritizing Unreal Engine:psoprogramserviceworker threads to eliminate guest compilation and disk stalls. - Whether MMAP can reduce host copy/frame age without tearing or ownership corruption. Raw gRPC remains the working control.
- Whether current sound is audibly correct at the user's output device.
- Whether Riot WebView input ANR recurs after future TFT/WebView updates.
- Public distribution acceptance: Build 8 has a historical local-signing receipt, current-host trust is blocked, and no notarization is claimed.
- Whether any owned candidate can hold the complete automatic run at the 60 FPS target without correctness, audio, login, memory, or cleanup regression.
- RESOLVED CURRENT (2026-09-04): Full 32-minute live combat match (
2026-09-04T17-50-10.043Z) established that planning/shopping locks at 58.6–59.8 FPS while 20–30 unit combat rounds surge CPU load to 380%–510%, dipping frame rates to 40–53 FPS. Definitive memory audit proved guest Android has 1.7 GB free RAM headroom (consumed 3.2 GB of 5.1 GB, 0 LMK kills) and is not memory-pressured. Host macOS (16 GB unified) has 2.9 GB free uncompressed RAM; increasing guest RAM to 8 GB causes unified memory page compression and disk swapping that starves Metal GPU presentation. Allocating 8 vCPUs for DEV mode inRuntimeModeAuthority.swiftgives the guest horsepower to absorb 510% combat spikes, whilep.ClothPhysics=0,r.DynamicRes.OperationMode=1,r.pso.PrecompileThreadPoolSize=2, andam force-stopclean snapshot exit lock the gameplay loop.
Use this precedence for current project truth:
facts.md— first project-specific authority for current facts, boundaries, and mandatory rules;project.md— living current-state wiki, which must agree withfacts.md;- newly observed direct machine/runtime/source evidence only as a reconciliation trigger: validate it, then update
facts.md/project.mdbefore relying on the new fact in a final plan or change; CHANGELOG.md— detailed append-only test/version history and integration decisions;- reconciled machine-readable authority (
ssot/runtime-authority.json,ssot/STACK.lock.yaml), current native source/tests, andbenchmark.md; docs/TFTMAC_NATIVE_RUNTIME_KNOWLEDGE_BASE.md,dev.md, and other current references after checking them against items 1–5;- historical campaign docs/SQL, plans, simulations, and research as dated evidence or hypotheses only.
A conflicting lower-precedence document never wins merely because it is more detailed or newer-looking. If credible newer evidence disagrees with facts.md/project.md, stop the finalization step, validate the evidence, reconcile the authority records, and only then continue. TFTMAC.md, old launchers, old Node helpers, source-build plans, old profiles, and dated handoffs are never allowed to silently become current runtime authority.
Before completion of a selected managed change, verify intended work is committed/published as required and git status is clean. Dirty generated test output is not an acceptable finished state.