Skip to content

feat: coordinate symbol-reference completeness with fbuild callgraph #18

Description

@zackees

Context

The dashboard is adding level-one symbol hover/focus/click reference popups. All 96 Blink/APA102/Rainbow profiles were reanalyzed with explicit cross-toolchain tools, preserving ELF digests, memory totals and symbol sizes. The popup separates incoming symbols from object-file referencers and distinguishes a confirmed ELF entry root, unavailable analysis and unexplained retention.

The audit found 41,645 unexplained positive-size row occurrences and 10,620 unresolved-name occurrences across 96 profiles. These are candidates for investigation, not proof of unused code. Current fbuild JSON cannot explain KEEP/vector/data-pointer roots or distinguish all analysis failure states. Names can also identify several rows (code, literal pools, merged strings).

Audit artifact: REFERENCE-AUDIT.md and per-report *-references.json in FastLED/dashboard. Current producer is fbuild v2.5.37.

Proposal

Track the upstream callgraph/retention fixes with the dashboard consumer. Adopt structured availability, edge kinds, root reasons and stable graph-node identities when fbuild supplies them. Keep direct symbol references and TU-level references visibly separate. Until then, display uncertainty explicitly and retain unresolved target names.

Acceptance criteria

  • Cross-linked fbuild issues have agreed producer/consumer contracts.
  • RED → GREEN browser/schema tests cover producer analysis failure, a known linker root, a vtable-retained function and a map-derived owner/name collision.
  • Incoming data-pointer references are shown as data references, rather than claimed runtime callers.
  • Empty references never imply unused code; confirmed roots and unresolved retention have distinct states.
  • Reaudit all 96 profiles and compare counts before/after each upstream fix, preserving benchmark provenance.
  • Hover/focus/click and keyboard dismissal continue working for Flash and RAM without rebuilding firmware for view-only changes.

Decisions

  • P2: the first reference UI can ship with explicit uncertainty; the completeness follow-ups stay open.
  • Do not infer KEEP/vector roots from symbol-name heuristics; require ELF/linker evidence.
  • Keep the dashboard's supplemental schema versioned until fbuild exposes the matching typed transport.

Coordinated producer issues

  • fbuild #1659: tool discovery and silent graph loss.
  • fbuild #1660: omitted weak-object vtables and static pointer references.
  • fbuild #1661: availability/root/edge/identity transport and unexplained retention.

Each producer issue links back here. Keep this tracker open for the remaining producer/consumer integration even after the initial popup ships.

Activity

  1. zackees commented on Oct 8, 2026

    @zackees
    MemberAuthor

    Completed in dashboard PR #20, deployed at https://fastled.github.io/dashboard/.

    • Backend fixes merged in FBuild PR #1663; FBuild 2.5.38 published after the exact-commit full release dry run and publication gates passed.
    • Installed the published PyPI wheel and rebuilt all 96 profiles: Blink, APA102 SPI and Rainbow × Uno, ESP32-S3, ESP32 Dev and Teensy 4.1 × seven releases plus pinned master.
    • Every report passed strict schema validation and saved-ELF SHA-256 verification. Disassembly and static-data passes succeeded on all profiles. Reports include 250,649 typed edges, 18,698 static-pointer edges and 4,782 allocated weak objects.
    • Verified APA102 showPixels vtable slot +72 on ESP32-S3 and ESP32 Dev. The live dashboard popup shows the owner at +0x48, and Flash/RAM detail views stay separate.
    • Confirmed failed or mismatched ELF audits withhold typed relationships and roots. Tall popups scroll above/below the trigger without covering it. TypeScript/lint/schema tests and all seven browser cases pass; README preview images regenerated.

    Object cross-reference metadata remains explicitly unavailable on 48 Uno/Teensy profiles. Unexplained retention is reported honestly; runtime indirect calls and linker KEEP/platform roots remain outside supported analysis. See REFERENCE-AUDIT.md for the full matrix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions