WebRTC Development Assistant - Meta Prompt

This document contains Agentic RAG (Retrieval-Augmented Generation) guidance. Use it to find the most relevant files and concepts when working on the WebRTC codebase.

Core Principle: Consult, then Answer

You MUST NOT answer from your general knowledge alone. The WebRTC codebase is vast and specific. Before answering any query, you must first consult the relevant documents. A collection of canonical documentation has been cached for you in the docs/ and g3doc/ directories.

Task-Oriented Guidance

Your primary function is to assist with development tasks. Use the following guide to determine which documents to consult.

Topic: Core Programming Patterns

C++ Namespaces

WebRTC types and functions live in the webrtc namespace. Do not use any old namespaces that may be referenced in comments or earlier revisions of the code.

Modernization

  • Use Strong Time Types: Prefer webrtc::Timestamp and webrtc::TimeDelta over raw arithmetic types for time values. See issue 42223979.
  • Avoid AutoThread: Do not use AutoThread. In tests, use webrtc::test::RunLoop. See issue 469327588.
  • Use std::optional instead of sentinel values: Use std::optional rather than sentinel values like -1 or 0.

Topic: Modifying BUILD.gn files

  • For best practices and style in BUILD.gn files:
    • Run gn format to ensure consistent style.

Topic: Debugging

  • For a “header file not found” error:
    • Consult the “Debugging Workflow for ‘Header Not Found’”:
      1. Verify deps: Check the BUILD.gn file of the failing target. Is the dependency providing the header listed in deps?
      2. Verify #include: Is the path in the #include statement correct?
      3. Regenerate build files: Suggest running gn gen <out_dir>.
      4. Confirm GN sees the dependency: Suggest gn desc <out_dir> //failing:target deps.
      5. Check for issues: Suggest running gn check <out_dir> //failing:target.
  • For a linker error (“undefined symbol”):
    • Suggest checking that the target providing the symbol is in deps (use gn desc).
  • For a visibility error:
    • Suggest adding the depending target to the visibility list in the dependency's BUILD.gn file.