diff --git a/.claude/agents/pr-reviewer.md b/.claude/agents/pr-reviewer.md index bcf82ec..2e2fb9f 100644 --- a/.claude/agents/pr-reviewer.md +++ b/.claude/agents/pr-reviewer.md @@ -108,21 +108,31 @@ For each changed file, evaluate: ### 5. Classify findings -Assign each finding a severity: - -| Severity | Criteria | -| ------------ | ------------------------------------------------------------------ | -| P0 — Blocker | Must fix before merge: bugs, data loss, security, CI failures | -| P1 — High | Should fix: race conditions, API design issues, missing validation | -| P2 — Medium | Recommended: inconsistencies, test gaps, dead code | -| P3 — Low | Nice to have: style, minor improvements, documentation | +Tag each finding with an emoji from the +[Code Review Emoji Guide](https://github.com/erikthedeveloper/code-review-emoji-guide). +Every comment — inline or body-level — must start with the emoji. + +| Emoji | Name | When to use | Blocking? | +| ----- | ------------ | ---------------------------------------------------------------------------- | --------- | +| 🔧 | wrench | Required change — bugs, security, data loss, CI failures, missing validation | Yes | +| ❓ | question | Clarification needed — something is unclear and needs a substantive answer | Yes | +| 🤔 | thinking | Reasoning aloud — expressing concern or exploring an alternative | No | +| ♻️ | refactor | Refactoring suggestion — actionable restructuring or extraction opportunity | No | +| 🏕 | campsite | Campsite rule — "leave it cleaner than you found it"; unrelated improvement | No | +| ⛏ | nitpick | Nitpick — minor style/formatting preference; not blocking | No | +| 🌱 | seedling | Future consideration — planting a seed for later, not blocking | No | +| 📝 | memo | Informational note — fun fact, context, or explanation; no action required | No | +| 📌 | out-of-scope | Out of scope — valid concern that should be tracked as a separate issue | No | +| 😃 | praise | Positive feedback — highlight something done well | No | + +Always include at least one 😃 praise comment per review to acknowledge good work. ### 6. Present findings for user approval **Do not submit the review automatically.** Present all findings to the user organized by severity, with: -- Severity and title +- Emoji tag and title - File path and line number - Description and suggested fix - Whether it would be an inline comment or body-level finding @@ -143,10 +153,9 @@ After user approval, submit the selected findings as a formal review. #### Determine the review verdict -- If any P0 findings are included: `CHANGES_REQUESTED` -- If any P1 findings are included: `CHANGES_REQUESTED` -- If only P2 or below: `COMMENT` -- If no findings: `APPROVE` +- If any 🔧 or ❓ findings are included: `CHANGES_REQUESTED` +- If only non-blocking findings (🤔 ♻️ 🏕 ⛏ 🌱 📝 📌 😃): `COMMENT` +- If no findings (only 😃 praise): `APPROVE` #### Build inline comments @@ -159,7 +168,7 @@ comment. Use the file's **current line number** (not diff position) with the "path": "crates/edgezero-core/src/kv.rs", "line": 166, "side": "RIGHT", - "body": "**P1 — Race condition**: Description of the issue...\n\n**Fix**:\n```rust\n// suggested code\n```" + "body": "🔧 **Race condition**: Description of the issue...\n\n**Fix**:\n```rust\n// suggested code\n```" } ```` @@ -175,23 +184,29 @@ concerns, architectural issues, dependency problems) in the review body: <1-2 sentence overview of the changes and overall assessment> -### Findings +### 😃 Praise -#### P0 — Blockers +- -- **Title**: description (file:line) +### Findings -#### P1 — High +#### Blocking -- **Title**: description (file:line) +- 🔧 **Title**: description (file:line) +- ❓ **Title**: description (file:line) -#### P2 — Medium +#### Non-blocking -- **Title**: description +- 🤔 **Title**: description +- ♻️ **Title**: description +- 🏕 **Title**: description +- ⛏ **Title**: description +- 🌱 **Title**: description +- 📝 **Title**: description -#### P3 — Low +### 📌 Out of Scope -- **Title**: description +- ### CI Status @@ -237,7 +252,7 @@ Where `comments.json` contains the array of inline comment objects. Output: - The review URL -- Total findings by severity (e.g., "2 P0, 3 P1, 5 P2, 2 P3") +- Total findings by emoji tag (e.g., "3 🔧, 1 ❓, 2 ♻️, 1 ⛏, 2 😃") - Whether the review requested changes or approved - Any CI failures encountered diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9c2c67a..2ddc971 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -15,59 +15,3 @@ body: placeholder: What happened? validations: required: true - - - type: textarea - id: reproduction - attributes: - label: Steps to reproduce - description: Minimal steps to trigger the bug. - placeholder: | - 1. Create a handler with ... - 2. Run `edgezero dev` - 3. Send a request to ... - 4. See error ... - validations: - required: true - - - type: textarea - id: expected - attributes: - label: Expected behavior - description: What should have happened instead? - validations: - required: true - - - type: dropdown - id: adapter - attributes: - label: Adapter / Target - description: Which adapter or target is affected? - multiple: true - options: - - Fastly (wasm32-wasip1) - - Cloudflare (wasm32-unknown-unknown) - - Axum (native) - - CLI - - Core (platform-independent) - validations: - required: true - - - type: input - id: version - attributes: - label: EdgeZero version - description: Output of `cargo metadata --format-version 1 | jq '.packages[] | select(.name == "edgezero-core") | .version'` or the git SHA. - placeholder: "0.1.0 or commit abc1234" - - - type: textarea - id: logs - attributes: - label: Relevant log output - description: Paste any error messages or logs. - render: shell - - - type: textarea - id: context - attributes: - label: Additional context - description: Anything else that might help (OS, Rust version, related issues). diff --git a/.github/ISSUE_TEMPLATE/story.yml b/.github/ISSUE_TEMPLATE/story.yml index 7de0ec7..504b6da 100644 --- a/.github/ISSUE_TEMPLATE/story.yml +++ b/.github/ISSUE_TEMPLATE/story.yml @@ -15,44 +15,3 @@ body: placeholder: "As a developer, I want ... so that ..." validations: required: true - - - type: textarea - id: acceptance-criteria - attributes: - label: Acceptance criteria - description: What must be true for this story to be considered done? - placeholder: | - - [ ] Criterion 1 - - [ ] Criterion 2 - validations: - required: true - - - type: dropdown - id: scope - attributes: - label: Affected area - description: Which part of the project would this touch? - multiple: true - options: - - Core (routing, extractors, middleware) - - Adapter — Fastly - - Adapter — Cloudflare - - Adapter — Axum - - CLI (new, build, deploy, dev) - - Macros (#[action], #[app]) - - Documentation - - CI / Tooling - validations: - required: true - - - type: textarea - id: solution - attributes: - label: Proposed approach - description: How should this be implemented? Include API examples if relevant. - - - type: textarea - id: context - attributes: - label: Additional context - description: Links, mockups, related issues, or prior art. diff --git a/.github/ISSUE_TEMPLATE/task.yml b/.github/ISSUE_TEMPLATE/task.yml index 0a41b3a..3eec12c 100644 --- a/.github/ISSUE_TEMPLATE/task.yml +++ b/.github/ISSUE_TEMPLATE/task.yml @@ -14,38 +14,3 @@ body: description: What needs to be done and why? validations: required: true - - - type: textarea - id: done-criteria - attributes: - label: Done when - description: How do we know this task is complete? - placeholder: | - - [ ] Criterion 1 - - [ ] Criterion 2 - validations: - required: true - - - type: dropdown - id: scope - attributes: - label: Affected area - description: Which part of the project would this touch? - multiple: true - options: - - Core (routing, extractors, middleware) - - Adapter — Fastly - - Adapter — Cloudflare - - Adapter — Axum - - CLI (new, build, deploy, dev) - - Macros (#[action], #[app]) - - Documentation - - CI / Tooling - validations: - required: true - - - type: textarea - id: context - attributes: - label: Additional context - description: Related issues, dependencies, or notes.