| # Gemini Coding Assistant Project Guidelines |
| |
| ## High-Level Flow |
| |
| Follow the following flow to implement any feature. Refer to each chapter of |
| this document for detailed guidelines. |
| |
| 1. Understand the requirements and Design the solution |
| 2. Implement the solution and test it |
| 3. Commit the code changes |
| |
| Agent should not skip to next step without explicit permission from user. |
| |
| ## Understand the requirements and Design the solution |
| |
| AI Agents should start in the design mode. In this mode, the agent should |
| understand the requirements and design the solution. |
| |
| Agent should act as a senior software engineer to design the solution and reason |
| with the user. |
| |
| Agent should use the following source as reference: |
| |
| - workspace files |
| - Use the build.md to configure the Meson. Use the `subprojects` directory. |
| - Refer to the docker system file for include headers. |
| |
| AI Agent should not use MCP commands unless user explicitly requests it. |
| |
| The implementation plan should consist of the following: |
| |
| - High level design |
| - when my requirements are ambiguous, first ask, don't guess. |
| - step by step implementation plan |
| - elaborate all impacted files and reason. |
| - test cases |
| |
| AI Agent should save the implementation plan in the temporary markdown file. |
| |
| ## Implement the solution and test it |
| |
| AI Agents should start in the implementation mode. In this mode, the agent |
| should implement the solution and test it. |
| |
| AI Agent should act as a senior software engineer to implement the solution. If |
| the implementation plan needs to be revised, ask for user's approval first. |
| |
| AI Agent should compile the code in the docker container based on `build.md` and |
| make sure the code compiles successfully. |
| |
| AI Agent should use `.clang-format` to format the code before compiling. |
| |
| AI Agent should create all unit tests under `tests/` directory. Then, it should |
| run all the tests in a clean docker container (with no cached artifacts). |
| |
| If any unit test case fails, fix it and recompile, and test again. Agent should |
| not run shortcut and alter the test cases in the plan. |
| |
| Setup a subagent based on the implementation plan and lesson.md file to review |
| the code changes. |
| |
| ## Local Presubmit and Commit |
| |
| Before commit, run local presubmit test: |
| |
| - Create a dummy commit (`git commit -m "temp: strip shmem"`) removing |
| `shared_mem_dep` and `absl_status_dep` in root `meson.build`. |
| - Copy `common_clang_tidy_config.yaml` from Google3 Kokoro platform configs into |
| the workspace root. |
| - Use the `openbmc/ubuntu-unit-test` Docker container (prioritize Google3 |
| version). |
| - Use `openbmc-build-scripts` from `/openbmc_build_scripts/` under g3 third |
| party or upstream OpenBMC. |
| - Run `run-unit-test-docker.sh` inside the docker container w/ `-c 1`. |
| - Drop dummy commit w/ `git reset --hard HEAD~1` upon completion. |
| |
| Ask the user to provide the bug id. |
| |
| The commit message should follow the OpenBMC git format: |
| |
| - Title: `subsystem: short description` (<= 50 chars). |
| - Blank line. |
| - Body: Detailed explanation of why and what, wrapped at 72 chars. |
| - Footer: `Tested: <brief test performed>` |
| - Footer: `Google-Bug-Id: <bug id>` |
| - Footer: `Signed-off-by: Name <email>` |
| |
| **Guidelines for Content:** |
| |
| - **Highlight the Generic Idea**: Focus on the bug fix or the core feature. |
| Explain the high-level design decisions. |
| - **Condense Implementation Details**: Do not include low-level details (like |
| specific variable names, sentinel values, or small code changes) in the main |
| body. |
| - **Use a 'Misc' Section**: Move unrelated or minor changes (like macro usage, |
| timeout increases, formatting) to a separate `Misc:` section at the end of the |
| body. |
| |
| For example: |
| |
| ```text |
| benchmark: refine control plane benchmarks |
| |
| Refined the control plane benchmarks to use full device paths in Flatten |
| model keys and 'contains'/'contained_by' edges in Graph model. |
| |
| Signed-off-by: Hao Jiang <jianghao@google.com> |
| ``` |
| |
| Using `@mcp:buganizer:` to upload the implmenetation plan to the bug. |
| |
| - upon `git commit --amend`, update the implmenetation plan in the original |
| comment number. |