| @./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 |