blob: d0545e6c4085acde26bfc9688471eeffb8299804 [file] [log] [blame] [view]
# 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](https://issues.webrtc.org/42223979).
* **Avoid AutoThread:** Do not use `AutoThread`. In tests, use `webrtc::test::RunLoop`.
See [issue 469327588](https://issues.webrtc.org/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.