blob: 18463e0eaa6b6e0c9f8f10d2302aefd064653d72 [file] [log] [blame] [view]
@./common.minimal.md
# Workflow Tips
## General Workflow:
* **User Guidance:** Proactively communicate your plan and the reason for each
step.
* **File Creation Pre-check:** Before creating any new file, you MUST first
perform a thorough search for existing files that can be modified or
extended. This is especially critical for tests; never create a new test
file if one already exists for the component in question. Always add new
tests to the existing test file.
* **Read Before Write/Edit:** **ALWAYS** read the entire file content
immediately before writing or editing.
* **File Deletion:** **NEVER** perform actions that might delete files
(either directly via e.g. `rm` or indirectly via e.g. `git clean`)
without first asking the user for permission.
## Standard Edit/Fix Workflow:
**IMPORTANT:** This workflow takes precedence over all other coding
instructions. Read and follow everything strictly without skipping steps
whenever code editing is involved. Any skipping requires a proactive message to
the user about the reason to skip.
1. **Comprehensive Code and Task Understanding (MANDATORY FIRST STEP):** Before
writing or modifying any code, you MUST perform the following analysis to
ensure comprehensive understanding of the relevant code and the task. This
is a non-negotiable prerequisite for all coding tasks.
* **a. Identify the Core Files:** Locate the files that are most relevant
to the user's request. All analysis starts from these files.
* **b. Conduct a Full Audit:**
i. Read the full source of **EVERY** core file.
ii. For each core file, summarize the control flow and ownership
semantics. State the intended purpose of the core file.
* **c. State Your Understanding:** After completing the audit, you should
briefly state the core files you have reviewed, confirming your
understanding of the data flow and component interactions before
proposing a plan.
* **d. Anti-Patterns to AVOID:**
* **NEVER** assume the behavior of a function or class from its name
or from usage in other files. **ALWAYS** read the source
implementation.
* **ALWAYS** check at least one call-site for a function or class to
understand its usage. The context is as important as the
implementation.
2. **Make Change:** After a comprehensive code and task understanding, apply
the edit or write the file.
* When making code edits, focus **ONLY** on code edits that directly solve
the task prompted by the user.
3. **Write/Update Tests:**
* First, search for existing tests related to the modified code and update
them as needed to reflect the changes.
* If no relevant tests exist, write new unit tests or integration tests if
it's reasonable and beneficial for the change made.
* If tests are deemed not applicable for a specific change (e.g., a
trivial comment update), explicitly state this and the reason why before
moving to the next step.
4. **Build:** **ALWAYS** build relevant targets after making edits.
5. **Fix compile errors:** **ALWAYS** follow these steps to fix compile errors.
* **ALWAYS** take the time to fully understand the problem before making
any fixes.
* **ALWAYS** read at least one new file for each compile error.
* **ALWAYS** find, read, and understand **ALL** files related to each
compile error. For example, if an error is related to a missing member
of a class, find the file that defines the interface for the class, read
the whole file, and then create a high-level summary of the file that
outlines all core concepts. Come up with a plan to fix the error.
* **ALWAYS** check the conversation history to see if this same
error occurred earlier, and analyze previous solutions to see why they
didn't work.
* **NEVER** make speculative fixes. You should be confident before
applying any fix that it will work. If you are not confident, read more
files.
6. **Test:** **ALWAYS** run relevant tests after a successful build. If you
cannot find any relevant test files, you may prompt the user to ask how this
change should be tested.
7. **Fix test errors**:
* **ALWAYS** take the time to fully understand the problem before making
any fixes.
8. **Iterate:** Repeat building and testing using the above steps until all are
successful.
## Knowledge base
This file contains rich, helpful, task-oriented guidance for this repository:
@./knowledge_base.md