Skip to content

refactor(sdk): family-first perf-data layout with dual-read transition (AIC-1501)#1371

Open
Arsene12358 wants to merge 14 commits into
yimingl/aic-1500-collector-v3-manifest-v2from
yimingl/aic-1501-family-layout-reorg
Open

refactor(sdk): family-first perf-data layout with dual-read transition (AIC-1501)#1371
Arsene12358 wants to merge 14 commits into
yimingl/aic-1500-collector-v3-manifest-v2from
yimingl/aic-1501-family-layout-reorg

Conversation

@Arsene12358

Copy link
Copy Markdown
Contributor

PR 2 of 4 of the Collector V3: op-centric collector management project (Linear: AIC-1501), implementing design §3 (docs/perf_database/collector-v3-op-centric-design.md, shipped in #1370). Stacked on #1370 — the base branch is yimingl/aic-1500-collector-v3-manifest-v2, so this diff shows only PR 2's changes; GitHub retargets to main when #1370 merges.

What this does

The perf data tree physically reorganizes from data/<system>/<backend>/<version>/ to data/<system>/<family>/<backend>/<version>/ (family = the 12 catalog families from collector/op_backend_catalog.yaml), making the operation family a first-class filesystem entity: one family's whole history is one subtree, a family upgrade adds exactly one directory, and per-op version pins (manifest v2, #1370) map 1:1 onto the layout. Every reader is dual-layout during a transition window (family-first, legacy fallback with a one-time deprecation warning), and the loader stays catalog-free at runtime — family dirs are discovered structurally (any first-level dir not named trtllm/sglang/vllm/nccl/oneccl), so no identity file ships in the wheel.

How to review this (instead of 906 renames)

Audit tools/perf_database/migrate_family_layout.py — the reviewed, fail-closed, idempotent migration tool that produced the data commit — plus the loader seams. The script: catalog-driven mapping (aborts on any unknown table stem or unexpected directory, before any move), plan/execute/verify modes, per-table count manifest (--verify --manifest independently proves zero tables lost), deterministic sorted plans, pure git mv for tables (LFS OIDs untouched). It was verified by two independent full rehearsals on copies of the real tree (implementer + reviewer, exact-match plans: 906 moves, 31 marker actions) before the real run.

Code seams, in reading order: _iter_backend_version_dirs + rewired discovery/marker functions (aic-core/.../sdk/perf_database.py); resolve_op_data_path (operations/base.py) + the 27-site per-op rewire across operations/ and engine.py; family-aware _build_op_sources; dual-layout walkers in audit_kernel_source.py (its (system, backend, version, path) yield tuples are invariant, so backend_facts.py needed zero changes) and create_charts.py; Rust resolve_op_sources fallback + load gate + comm roots (mod.rs).

Verification evidence

  • Migration: VERIFY OK including the count manifest (41 tables, 906 files, all counts identical); post-migration tree has zero legacy-depth parquet; idempotent re-plan is empty.
  • Full unit suite post-migration: 2172 passed. Integration suite: 97 passed. Real-tree smoke: 10 systems / 89 (backend, version) pairs discovered; h200/trtllm and b200/sglang databases load.
  • op_kernel_source_manifest.yaml regeneration is normatively invariant pre-vs-post migration (identical tiers/systems/frameworks/row counts). One informational statistic (median_pct_divergence for gdn_perf/causal_conv1d_update, 28.12→27.52) shifts because the audit tool's within-framework dedup is encounter-order-sensitive (pre-existing) and iteration order changed; the committed manifest also has known pre-existing drift (the daily job's own update PR has been open since May). No manifest regen ships here — the daily job will pick it up.
  • CLI DeepEP preflight verified against the real tree post-fix (h200_sxm/sglang/0.5.6.post2 → data found).

Disclosures & transition notes

  • Six files converted from LFS to in-git binary (h200_sxm/*/vllm/0.18.0/*.parquet, 2.0 MB total): the old .gitattributes LFS rule was path-specific to the legacy location and is now dead (removed here). Every other parquet in the tree was already in-git binary, so this matches repo practice; content identity is proven by the manifest invariance run. Marker .txt replicas remain LFS via the depth-agnostic rule (verified with git check-attr).
  • Markers: SHARED_LAYER_REUSE.txt replicated 27→255 (one per family with sibling data, per design), INCOMPLETE.txt 4→7. PR 3 replaces both with structured reuse.yaml / collection_meta.yaml.
  • Transition-window semantics: SDK resolution prefers the family copy on duplicates; the chart tool prefers legacy (both documented + tested) — only reachable if a legacy-shaped straggler lands before the GitLab auto-collect promotion step cuts over to the family layout (coordination item on AIC-1501; dual-read tolerates the interim).
  • Dev note: Rust changes require maturin develop -m aic-core/rust/aiconfigurator-core/Cargo.toml to rebuild the editable .abi3.so — a stale extension was the only test failure encountered during verification.
  • Accepted minors (final review triage): audit-tool stat order-sensitivity (pre-existing, above); verify_tree's shadowed family-name branch (dead code, one-shot tool); legacy-side underscore-skip shares its tested code path with the family side.

Test plan

uv run pytest tests/unit -m unit -n 2 (2172 passed) · uv run pytest -m integration -n 2 (97 passed) · cargo test --manifest-path aic-core/rust/aiconfigurator-core/Cargo.toml perf_database (109 passed) · migration --verify --manifest OK · prediction-regression gate expected green in CI (data content unchanged; paths only).

🤖 Generated with Claude Code

@Arsene12358 Arsene12358 requested review from a team as code owners July 15, 2026 17:38
@Arsene12358 Arsene12358 requested review from anish-shanbhag and tianhaox and removed request for a team July 15, 2026 17:38
@copy-pr-bot

copy-pr-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 199baa8a-aaaf-47fe-836a-e3e7cdd57eb9

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Perf Parquet Diff Report

Compared origin/yimingl/aic-1500-collector-v3-manifest-v2 to HEAD for aic-core/src/aiconfigurator_core/systems/data.

  • Parquet files changed: 912
  • CSV-to-parquet conversions checked: 0
  • Conversions with matching columns and rows: 0
  • New parquet files without a base CSV/parquet counterpart: 6
  • Modified or renamed parquet files: 900
  • Deleted parquet files: 6
  • Legacy *_perf.txt files added or modified: 0
  • Row-level changes: +276777 / -276777 / ~0
  • Full per-file diff artifacts: 1174 files under parquet-diff-details/diffs/

Per-File Row Diff Preview

Showing the first 3 rows per diff kind for each changed parquet file. Full exact CSVs are in parquet-diff-details/.

aic-core/src/aiconfigurator_core/systems/data/h200_sxm/attention/vllm/0.18.0/context_attention_perf.parquet
  • Rows: +43656 / -0 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, batch_size, isl, num_heads, num_key_value_heads, head_dim, beam_width, attn_dtype, kv_cache_dtype, step, window_size

added rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/attention/vllm/0.18.0/context_attention_perf.parquet.added.csv

framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.009136000027259191
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.00919999989370505
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,128,0.009216000015536943
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/attention/vllm/0.18.0/generation_attention_perf.parquet
  • Rows: +67588 / -0 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, batch_size, isl, num_heads, num_key_value_heads, head_dim, beam_width, attn_dtype, kv_cache_dtype, step, window_size

added rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/attention/vllm/0.18.0/generation_attention_perf.parquet.added.csv

framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009535999968647957
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009674666449427605
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,128,0.009557333464423815
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/comm/vllm/0.18.0/custom_allreduce_perf.parquet
  • Rows: +138 / -0 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, allreduce_dtype, num_gpus, message_size, backend

added rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/comm/vllm/0.18.0/custom_allreduce_perf.parquet.added.csv

framework,version,device,op_name,kernel_source,allreduce_dtype,num_gpus,message_size,latency,backend
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1024,0.028388800621032717,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1048576,0.027152318954467774,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,128,0.02771392107009888,vllm_eager
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/gemm/vllm/0.18.0/gemm_perf.parquet
  • Rows: +101014 / -0 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, gemm_dtype, m, n, k

added rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/gemm/vllm/0.18.0/gemm_perf.parquet.added.csv

framework,version,device,op_name,kernel_source,gemm_dtype,m,n,k,latency
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,1024,0.007621333003044128
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,10240,0.01033155537313885
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,12288,0.011239111423492432
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/linear_attention/vllm/0.18.0/gdn_perf.parquet
  • Rows: +121 / -0 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, phase, batch_size, seq_len, num_tokens, d_model, d_conv, num_k_heads, head_k_dim, num_v_heads, head_v_dim, model_name

added rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/linear_attention/vllm/0.18.0/gdn_perf.parquet.added.csv

framework,version,device,op_name,kernel_source,phase,batch_size,seq_len,num_tokens,d_model,d_conv,num_k_heads,head_k_dim,num_v_heads,head_v_dim,model_name,latency
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,1024,4,16,128,16,128,Qwen/Qwen3.5-0.8B,0.0039680000394582745
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,16,128,Qwen/Qwen3.5-2B,0.003497600182890892
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,32,128,Qwen/Qwen3.5-35B-A3B,0.0033984001725912093
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/moe/vllm/0.18.0/moe_perf.parquet
  • Rows: +64260 / -0 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, moe_dtype, num_tokens, hidden_size, inter_size, topk, num_experts, moe_tp_size, moe_ep_size, distribution

added rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/moe/vllm/0.18.0/moe_perf.parquet.added.csv

framework,version,device,op_name,kernel_source,moe_dtype,num_tokens,hidden_size,inter_size,topk,num_experts,moe_tp_size,moe_ep_size,distribution,latency
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,balanced,0.036714665591716766
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.01,0.03403519988059998
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.2,0.03452799916267395
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/context_attention_perf.parquet
  • Rows: +0 / -43656 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, batch_size, isl, num_heads, num_key_value_heads, head_dim, beam_width, attn_dtype, kv_cache_dtype, step, window_size

removed rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/context_attention_perf.parquet.removed.csv

framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.009136000027259191
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.00919999989370505
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,128,0.009216000015536943
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/custom_allreduce_perf.parquet
  • Rows: +0 / -138 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, allreduce_dtype, num_gpus, message_size, backend

removed rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/custom_allreduce_perf.parquet.removed.csv

framework,version,device,op_name,kernel_source,allreduce_dtype,num_gpus,message_size,latency,backend
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1024,0.028388800621032717,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1048576,0.027152318954467774,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,128,0.02771392107009888,vllm_eager
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/gdn_perf.parquet
  • Rows: +0 / -121 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, phase, batch_size, seq_len, num_tokens, d_model, d_conv, num_k_heads, head_k_dim, num_v_heads, head_v_dim, model_name

removed rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/gdn_perf.parquet.removed.csv

framework,version,device,op_name,kernel_source,phase,batch_size,seq_len,num_tokens,d_model,d_conv,num_k_heads,head_k_dim,num_v_heads,head_v_dim,model_name,latency
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,1024,4,16,128,16,128,Qwen/Qwen3.5-0.8B,0.0039680000394582745
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,16,128,Qwen/Qwen3.5-2B,0.003497600182890892
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,32,128,Qwen/Qwen3.5-35B-A3B,0.0033984001725912093
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/gemm_perf.parquet
  • Rows: +0 / -101014 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, gemm_dtype, m, n, k

removed rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/gemm_perf.parquet.removed.csv

framework,version,device,op_name,kernel_source,gemm_dtype,m,n,k,latency
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,1024,0.007621333003044128
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,10240,0.01033155537313885
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,12288,0.011239111423492432
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/generation_attention_perf.parquet
  • Rows: +0 / -67588 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, batch_size, isl, num_heads, num_key_value_heads, head_dim, beam_width, attn_dtype, kv_cache_dtype, step, window_size

removed rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/generation_attention_perf.parquet.removed.csv

framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009535999968647957
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009674666449427605
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,128,0.009557333464423815
aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/moe_perf.parquet
  • Rows: +0 / -64260 / ~0
  • Key columns: framework, version, device, op_name, kernel_source, moe_dtype, num_tokens, hidden_size, inter_size, topk, num_experts, moe_tp_size, moe_ep_size, distribution

removed rows - full CSV: parquet-diff-details/aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/moe_perf.parquet.removed.csv

framework,version,device,op_name,kernel_source,moe_dtype,num_tokens,hidden_size,inter_size,topk,num_experts,moe_tp_size,moe_ep_size,distribution,latency
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,balanced,0.036714665591716766
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.01,0.03403519988059998
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.2,0.03452799916267395

Artifact Contents

  • Full per-file unified diffs: perf-parquet-diff artifact under parquet-diff-details/diffs/ (1174 files)
  • Exact row-level CSVs: perf-parquet-diff artifact under parquet-diff-details/ (listed in summary.csv)

@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Sanity Check Chart Generation Report

📥 Download all sanity charts from workflow artifacts

New perf data files were detected in this PR. Please use the link above to
download sanity check charts for the new perf data to compare the collected
perf data vs SOL (theoretical max performance).

Below is a report of whether the chart generation was successful for each op.
If doesn't validate whether the perf data itself is sane.

Chart Generation Report for system: a100_sxm, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: a100_sxm, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: a100_sxm, backend: trtllm, backend_version: 1.0.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: a100_sxm, backend: vllm, backend_version: 0.14.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: trtllm, backend_version: 1.2.0rc5

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b200_sxm, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b300_sxm, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b300_sxm, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b300_sxm, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b300_sxm, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • nccl_all_gather
  • nccl_all_reduce
  • nccl_alltoall
  • nccl_reduce_scatter
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b300_sxm, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b300_sxm, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: b60, backend: vllm, backend_version: 0.12.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: b60, backend: vllm, backend_version: 0.20.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: vllm, backend_version: 0.14.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb200, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb300, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb300, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb300, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: gb300, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb300, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: gb300, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.6.post2

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: trtllm, backend_version: 1.2.0rc5

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module Skipped ⚠️: required paired perf files are not present: dsa_context_module_perf.parquet
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: vllm, backend_version: 0.14.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h100_sxm, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.6.post2

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: trtllm, backend_version: 1.2.0rc5

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • dsa_module Skipped ⚠️: required paired perf files are not present: dsa_context_module_perf.parquet
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.14.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.18.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • dsa_module
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention ✅ (130 unavailable points skipped)
  • context_attention_with_prefix ✅ (130 unavailable points skipped)
  • generation_attention ✅ (44 unavailable points skipped)
  • generation_attention_b ✅ (48 unavailable points skipped)
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.12

  • gemm
  • context_attention ✅ (130 unavailable points skipped)
  • context_attention_with_prefix ✅ (130 unavailable points skipped)
  • generation_attention ✅ (44 unavailable points skipped)
  • generation_attention_b ✅ (48 unavailable points skipped)
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention ✅ (65 unavailable points skipped)
  • context_attention_with_prefix ✅ (65 unavailable points skipped)
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.9

  • gemm
  • context_attention ✅ (130 unavailable points skipped)
  • context_attention_with_prefix ✅ (130 unavailable points skipped)
  • generation_attention ✅ (44 unavailable points skipped)
  • generation_attention_b ✅ (48 unavailable points skipped)
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: trtllm, backend_version: 1.0.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: trtllm, backend_version: 1.3.0rc15

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: vllm, backend_version: 0.14.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: vllm, backend_version: 0.22.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: l40s, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe
  • CLI smoke test ✅

Chart Generation Report for system: rtx_pro_6000_server, backend: sglang, backend_version: 0.5.10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe Skipped ⚠️: no chart was generated for this data shape
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: rtx_pro_6000_server, backend: sglang, backend_version: 0.5.14

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe Skipped ⚠️: no chart was generated for this data shape
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: rtx_pro_6000_server, backend: trtllm, backend_version: 1.3.0rc10

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • context_mla_with_prefix
  • generation_mla
  • generation_mla_b
  • moe Skipped ⚠️: no chart was generated for this data shape
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: rtx_pro_6000_server, backend: vllm, backend_version: 0.19.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe Skipped ⚠️: no chart was generated for this data shape
  • allreduce
  • CLI smoke test ✅

Chart Generation Report for system: rtx_pro_6000_server, backend: vllm, backend_version: 0.24.0

  • gemm
  • context_attention
  • context_attention_with_prefix
  • generation_attention
  • generation_attention_b
  • moe Skipped ⚠️: no chart was generated for this data shape
  • allreduce
  • CLI smoke test ✅

@Arsene12358

Copy link
Copy Markdown
Contributor Author

Merge protocol (stacked PR): please do not merge this PR until its base PR has merged to main and GitHub has auto-retargeted this one to main (the repo's delete-branch-on-merge triggers that automatically). Merging it as-is would fold this PR into its base PR's branch instead of main. After each upstream merge I'll rebase this branch onto main (squash-merge cascade) — the diff you review is unaffected. Merge order: #1370#1371#1372.

@Arsene12358

Copy link
Copy Markdown
Contributor Author

CI fix pushed (a7dab925): the prediction-regression gate's tier-1 grid walker and the wheel-layer probe in verify_installed_package_layers.py still assumed the legacy <backend>/<version> layout — both now family-aware (gate verified end-to-end pre/post: previously 100 bogus combos like backend='moe', now walks correctly and processes real combos). These were the root causes of the failing "AIC Prediction Regression Gate" and "Build and Test" checks on this stack.

@Arsene12358 Arsene12358 changed the title refactor(sdk,data): family-first perf-data layout with dual-read transition (AIC-1501) refactor(sdk): family-first perf-data layout with dual-read transition (AIC-1501) Jul 16, 2026
@Arsene12358

Copy link
Copy Markdown
Contributor Author

CI fixes pushed (head 54529133):

  • Validate PR title: retitled to single-scope refactor(sdk) — the check's action (ytanikin/pr-conventional-commits) parses scopes with [\w$.\-*/ ]*, so comma-separated multi-scopes fail the type parse entirely; single scope also matches this repo's title convention. Check is green after the edit.
  • Build and Test (unit): the CI test container has no git binary, and this PR's test_migrate_family_layout.py ran git init in a fixture used by every test. The scan/plan/verify tests now use a plain tmp_path tree (they are pure filesystem); only the 9 execute-path tests (git mv/rm/add) keep the real-repo fixture behind a skipif on a missing git binary. With git: 40 passed (unchanged coverage). Without git on PATH: 31 passed, 9 skipped.

@Arsene12358

Copy link
Copy Markdown
Contributor Author

Round 2 (head 168d7f61): the unit job on this PR went green, but the stacked PRs surfaced two more git-dependent test files from #1372 (test_changed_ops.py diffs real git revisions — all 26 tests need git by nature; test_migrate_markers.py execute paths). Rather than skip-gating every tool test, the test Docker stage now installs git (test stage only — the shipped runtime image stays git-free; verified against the exact nvcr jammy base image, git 2.34.1 installs cleanly). This also turns the 9 requires_git skips from the previous commit back into real CI runs, restoring full 40-test coverage; the skipif guard stays as defense for any future git-less environment.

Arsene12358 and others added 10 commits July 16, 2026 16:16
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…AIC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
… (AIC-1501)

Extend _iter_version_subdirs filter to skip directories starting with underscore
in addition to dot, restoring behavior from the old _build_op_sources sibling walk.
Underscore-prefixed directories follow staging conventions and should not be
discovered as version directories.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…lback (AIC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…omm roots (AIC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…IC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
… for migration script (AIC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
Executed by the reviewed tools/perf_database/migrate_family_layout.py:
906 table moves (git mv — LFS OIDs unchanged), 27 SHARED_LAYER_REUSE.txt
replicated to 255 family-scoped copies, 4 INCOMPLETE.txt replicated to 7,
legacy dirs removed. VERIFY OK incl. per-table count manifest.

Post-migration proof: full unit suite 2167 passed; integration suite 97
passed; real-tree loader smoke (10 systems, 89 backend/version pairs);
kernel-source manifest normatively invariant (one informational
median_pct_divergence stat shifts via pre-existing order-sensitive dedup).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
Arsene12358 and others added 4 commits July 16, 2026 16:16
…er, DeepEP preflight, LFS rule, docs (AIC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…e (AIC-1501)

Signed-off-by: Yiming Liu <yimingl@nvidia.com>
The CI unit-test container has no git; the repo fixture's 'git init' made
every test in this file error there. scan/plan/verify are pure filesystem,
so those tests now use a plain tmp_path tree; only the execute-path tests
(git mv/rm/add) keep the real-repo fixture, behind a skipif on a missing
git binary.

With git: 40 passed. Without git on PATH: 31 passed, 9 skipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
The CI unit job runs pytest inside the test image, which had no git binary.
The perf-database tool tests need one: changed_ops tests diff real git
revisions, and the migrate_* execute-path tests drive git mv/rm/add. Test
stage only; the shipped runtime image stays git-free. Verified against the
exact base image (nvcr ubuntu jammy-20250619): git 2.34.1 installs cleanly.

With this, the requires_git skips in test_migrate_family_layout.py become
no-ops in CI (full 40-test coverage restored) while still guarding any
future git-less environment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
@Arsene12358 Arsene12358 force-pushed the yimingl/aic-1501-family-layout-reorg branch from 168d7f6 to 163813b Compare July 16, 2026 08:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant