@@ -282,7 +282,8 @@ jobs:
282282
283283 # Comparison section (only for PRs with base results)
284284 if is_pr and base_results:
285- output.append("## 📊 Changes from Base Branch\n")
285+ output.append("<details open>")
286+ output.append("<summary><h2>📊 Changes from Base Branch</h2></summary>\n")
286287 output.append("*Only showing statistically significant changes (p < 0.05)*\n")
287288 output.append("| Operation | Base | PR | Change |")
288289 output.append("|-----------|------|-----|--------|")
@@ -316,13 +317,16 @@ jobs:
316317 elif len([c for c in changes if c[2] < 0.05]) > 15:
317318 sig_count = len([c for c in changes if c[2] < 0.05])
318319 output.append(f"\n*Showing top 15 of {sig_count} significant changes*")
319- output.append("")
320+ output.append("\n</details>\n ")
320321 elif is_pr and not base_results:
321- output.append("## 📊 Changes from Base Branch\n")
322+ output.append("<details open>")
323+ output.append("<summary><h2>📊 Changes from Base Branch</h2></summary>\n")
322324 output.append("*No benchmarks in base branch - showing PR results only*\n")
325+ output.append("</details>\n")
323326
324327 # Backtrace section
325- output.append("## Stack Capture (KSBacktrace)\n")
328+ output.append("<details>")
329+ output.append("<summary><h2>Stack Capture (KSBacktrace)</h2></summary>\n")
326330 output.append("| Operation | Time | Status | Notes |")
327331 output.append("|-----------|------|--------|-------|")
328332
@@ -341,8 +345,11 @@ jobs:
341345 status = get_status(t, excellent=0.0001, good=0.001, ok=0.005)
342346 output.append(f"| {desc} | {format_time(t)} | {status} | {notes} |")
343347
348+ output.append("\n</details>")
349+
344350 # Dynamic Linker section
345- output.append("\n## Dynamic Linker (KSDynamicLinker)\n")
351+ output.append("<details>")
352+ output.append("<summary><h2>Dynamic Linker (KSDynamicLinker)</h2></summary>\n")
346353 output.append("| Operation | Time | Status | Notes |")
347354 output.append("|-----------|------|--------|-------|")
348355
@@ -370,8 +377,11 @@ jobs:
370377 status = get_status(t, excellent=0.001, good=0.005, ok=0.020)
371378 output.append(f"| {desc} | {format_time(t)} | {status} | {notes} |")
372379
380+ output.append("\n</details>")
381+
373382 # Memory section
374- output.append("\n## Safe Memory Operations (KSMemory)\n")
383+ output.append("<details>")
384+ output.append("<summary><h2>Safe Memory Operations (KSMemory)</h2></summary>\n")
375385 output.append("| Operation | Time | Per-Call | Status |")
376386 output.append("|-----------|------|----------|--------|")
377387
@@ -394,8 +404,11 @@ jobs:
394404 status = get_status(per_call, excellent=0.000001, good=0.00001, ok=0.0001)
395405 output.append(f"| {desc} | {format_time(t)} | {format_time(per_call)} | {status} |")
396406
407+ output.append("\n</details>")
408+
397409 # JSON section
398- output.append("\n## JSON Encoding (KSJSONCodec)\n")
410+ output.append("<details>")
411+ output.append("<summary><h2>JSON Encoding (KSJSONCodec)</h2></summary>\n")
399412 output.append("| Operation | Time | Status | Notes |")
400413 output.append("|-----------|------|--------|-------|")
401414
@@ -418,8 +431,11 @@ jobs:
418431 status = get_status(t, excellent=0.0005, good=0.002, ok=0.010)
419432 output.append(f"| {desc} | {format_time(t)} | {status} | {notes} |")
420433
434+ output.append("\n</details>")
435+
421436 # Thread section
422- output.append("\n## Thread Operations (KSThread)\n")
437+ output.append("<details>")
438+ output.append("<summary><h2>Thread Operations (KSThread)</h2></summary>\n")
423439 output.append("| Operation | Time | Per-Call | Status |")
424440 output.append("|-----------|------|----------|--------|")
425441
@@ -440,8 +456,11 @@ jobs:
440456 status = get_status(per_call, excellent=0.0000005, good=0.000005, ok=0.00001)
441457 output.append(f"| {desc} | {format_time(t)} | {format_time(per_call)} | {status} |")
442458
459+ output.append("\n</details>")
460+
443461 # Crash Report section
444- output.append("\n## Crash Report Writing (KSCrashReport)\n")
462+ output.append("<details>")
463+ output.append("<summary><h2>Crash Report Writing (KSCrashReport)</h2></summary>\n")
445464 output.append("| Operation | Time | Status | Notes |")
446465 output.append("|-----------|------|--------|-------|")
447466
@@ -457,14 +476,7 @@ jobs:
457476 status = get_status(t, excellent=0.005, good=0.010, ok=0.050)
458477 output.append(f"| {desc} | {format_time(t)} | {status} | {notes} |")
459478
460- # Performance guide
461- output.append("\n## Performance Guidelines")
462- output.append("### Crash Capture Budget")
463- output.append("- ✅ **Excellent**: Operations complete in microseconds")
464- output.append("- ✅ **Good**: Acceptable for crash-time execution")
465- output.append("- ⚠️ **OK**: May impact crash capture latency")
466- output.append("- ❌ **Review**: Too slow for crash-time, consider optimization")
467- output.append("\n*Goal: Complete crash capture <100ms to minimize data loss risk*")
479+ output.append("\n</details>")
468480
469481 # Summary
470482 total_tests = len(pr_results) if pr_results else 0
0 commit comments