blob: 7a58a985ad76f60ee0782bc48f2bdcd272243a0e [file] [view] [edit]
# 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.