self-development: distill recurring conventions from PR review feedback#786
self-development: distill recurring conventions from PR review feedback#786kelos-bot[bot] wants to merge 2 commits intomainfrom
Conversation
Add three new agent conventions from recent PR review feedback: 1. Per-TaskSpawner configuration should be CRD fields, not controller flags (PR #838 - gjkim42 review) 2. CRD API backward compatibility - never rename JSON field tags (PR #838 - P1 review finding) 3. Gate optional CRDs behind Helm values flags (PR #821 - PodMonitoring broke installs on clusters without monitoring.googleapis.com) Also includes previously proposed conventions from PR #786: - Consistent guidance across surfaces - Provider-agnostic API design - Idiomatic Helm values - Deploy-dev workflow sync - Controller-driven migration - Release note user action requirements Co-Authored-By: Claude Opus 4.6 <[email protected]>
bcdeef3 to
7ade17e
Compare
|
/kelos pick-up |
|
🤖 Kelos Task Status Task |
|
🤖 Kelos Agent @gjkim42 /kelos needs-input Rebased on origin/main (was already up to date). Added The only failing CI check is Ready for re-review. |
7ade17e to
782ce1c
Compare
0871329 to
6379545
Compare
6f6241c to
41ed5c4
Compare
41ed5c4 to
5f6baa8
Compare
5f6baa8 to
675ac75
Compare
eb7fce3 to
f472430
Compare
…eedback Adds conventions learned from recent PR reviews: 1. Fail fast on invalid configuration (PR #971): three P1 and four P2 issues flagged silent degradation when credentials or config were invalid, falling back to unauthenticated requests instead of erroring. 2. No manual PR branch checkout in TaskSpawner prompts (PR #974): Kelos already checks out the PR branch automatically; manual checkout instructions are redundant and confusing. Also carries forward the previously proposed changes from PR #786: - os.Getenv() secret-in-flag-defaults convention (PR #971) - TaskSpawner creation conventions (PR #965) - Branch template variable documentation fix (PR #965) Co-Authored-By: Claude Opus 4.6 <[email protected]>
1d88c65 to
0d360ce
Compare
Greptile SummaryThis PR propagates five conventions distilled from recent PR review feedback — secrets in Confidence Score: 5/5Safe to merge — documentation/configuration only, no runtime code changes, with one minor P2 style inconsistency. All findings are P2 style suggestions; no P0/P1 issues found. The changes are purely documentation and configuration with a well-scoped, evidence-backed set of convention additions. self-development/agentconfig.yaml and self-development/kelos-workers.yaml have a minor mismatch between the documented branch-fallback example and the canonical form used in the spawner YAMLs.
|
| Filename | Overview |
|---|---|
| AGENTS.md | Adds five new coding-convention bullets (secrets in flags, fail-fast config, minimal API, backward-compat manifests, docs accuracy); straightforward documentation update. |
| self-development/README.md | Single-line fix: corrects the {{.Branch}} description from "Usually PR head branch or push branch" to "PR head branch; empty for issue events". |
| self-development/agentconfig.yaml | Propagates all five conventions to the shared dev-agent config; documented branch-fallback form ({{if .Branch}}) is inconsistent with the canonical form ({{with index . "Branch"}}) used in the actual spawner YAMLs. |
| self-development/kelos-workers.yaml | Adds all five conventions to the worker agent config; same branch-fallback form inconsistency as agentconfig.yaml; also adds previously-missing Kubernetes resource-comparison rule. |
| self-development/kelos-reviewer.yaml | Adds correctness/security/doc-accuracy checklist items to the reviewer prompt; branch field updated to the safe {{with index . "Branch"}}{{.}}{{else}}main{{end}} fallback form, resolving the prior P2 finding. |
| self-development/kelos-api-reviewer.yaml | Adds three new API-design checklist bullets (minimal surface, backward-compat, stale manifests); clean addition with no issues. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[PR Review Feedback\nPRs #965 #971 #902 #974 #1035 #1056] --> B[Five Conventions Distilled]
B --> C1[1. No os.Getenv secrets\nas flag defaults]
B --> C2[2. Fail fast on\ninvalid config]
B --> C3[3. Minimal API surfaces]
B --> C4[4. Docs match\nimplementation]
B --> C5[5. TaskSpawner\nconventions]
C1 --> D1[AGENTS.md]
C2 --> D1
C3 --> D1
C4 --> D1
C1 --> D2[agentconfig.yaml]
C2 --> D2
C3 --> D2
C4 --> D2
C5 --> D2
C1 --> D3[kelos-workers.yaml]
C2 --> D3
C3 --> D3
C4 --> D3
C5 --> D3
C3 --> D4[kelos-api-reviewer.yaml\nnew compatibility checklist]
C1 --> D5[kelos-reviewer.yaml\nsecurity + doc-accuracy checklist]
C2 --> D5
C4 --> D5
C5 --> D6[kelos-reviewer.yaml\nbranch: with index Branch main]
D6 --> E[Resolves prior P2 finding\nfrom PR #786 review]
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 2
self-development/agentconfig.yaml:41
**Documented convention form differs from canonical implementation**
The convention here prescribes `{{if .Branch}}{{.Branch}}{{else}}main{{end}}`, but `kelos-reviewer.yaml` and `kelos-api-reviewer.yaml` both use `{{with index . "Branch"}}{{.}}{{else}}main{{end}}`. Both are functionally equivalent for map access in Go templates, but the same inconsistency exists in `kelos-workers.yaml` line 40. Given that this PR introduces the "Docs must match implementation" rule, the documented example should match the canonical form actually deployed.
```suggestion
- The `{{.Branch}}` template variable is empty for issue-only events; use `{{with index . "Branch"}}{{.}}{{else}}main{{end}}` when it may be empty
```
### Issue 2 of 2
self-development/kelos-workers.yaml:40
**Documented convention form differs from canonical implementation**
Same issue as `agentconfig.yaml` line 41 — the prescribed form `{{if .Branch}}{{.Branch}}{{else}}main{{end}}` does not match the `{{with index . "Branch"}}{{.}}{{else}}main{{end}}` form used in `kelos-reviewer.yaml` and `kelos-api-reviewer.yaml`. The convention text and the deployed examples should agree.
```suggestion
- The `{{.Branch}}` template variable is empty for issue-only events; use `{{with index . "Branch"}}{{.}}{{else}}main{{end}}` when it may be empty
```
Reviews (3): Last reviewed commit: "self-development: add API backward-compa..." | Re-trigger Greptile
Adds five conventions distilled from recent PR reviews and applies them across AGENTS.md, the shared and worker AgentConfigs, and the reviewer prompts. 1. Never use os.Getenv() for secrets as Go flag defaults (PR #971) — flag prints defaults in --help output, leaking secret values. 2. Fail fast on invalid configuration (PR #971) — do not silently fall back to unauthenticated/degraded behavior when credentials or config are missing. 3. Keep API surfaces minimal (PR #902) — only fields immediately needed, no speculative additions; API is hard to change once shipped. 4. Docs must match implementation, not aspiration (PRs #1035, #1056) — describe only what the code actually does; verify enforcement before documenting a contract. 5. TaskSpawner conventions (PRs #965, #974): - Prefer webhook-based triggers over poll-based. - {{.Branch}} is empty for issue-only events; use the {{if .Branch}}{{.Branch}}{{else}}main{{end}} fallback form. - issue_comment fires for both issues and PRs; design prompts to detect and handle both contexts. - Do not include manual PR branch checkout instructions — Kelos checks out the PR branch automatically. Also fixes the kelos-reviewer TaskSpawner branch field to use the safe fallback form (was using bare {{.Branch}}, which is empty for issue events; flagged P2 in PR #786 review). Co-Authored-By: Claude Opus 4.7 <[email protected]>
7aff731 to
6a74ec3
Compare
PR #1058 surfaced a recurring API-change pattern not covered by the existing "Keep API surfaces minimal" rule: - A scalar -> array kind change on an existing CRD field (BodyContains) was flagged P1 because existing in-cluster resources would fail structural-schema validation; the repo itself had ~9 stale YAMLs in self-development/ and examples/ still using the old scalar form. - The maintainer asked twice about backward compatibility on a newly added BodyPattern field, and required removing +kubebuilder:validation:MinLength=1 because it would reject existing YAMLs that don't yet have the field. - The agreed migration path was to add new fields and mark the old one +deprecated rather than remove it. Adds the convention to AGENTS.md (and CLAUDE.md via symlink), to the shared agentconfig.yaml and kelos-workers.yaml, and to the kelos-api-reviewer prompt as an explicit checklist item under "API compatibility and evolution". Co-Authored-By: Claude Opus 4.7 <[email protected]>
|
You're iterating quickly on this pull request. To help protect your rate limits, cubic has paused automatic reviews on new pushes for now—when you're ready for another review, comment |
What type of PR is this?
/kind cleanup
What this PR does / why we need it:
Distills six recurring conventions from recent PR review feedback and propagates them across
AGENTS.md, the shared and workerAgentConfigs, and the reviewer prompts. All changes are backed by specific PR review findings — no speculative rules.1. Never use
os.Getenv()for secrets as Goflagdefaultscmd/kelos-webhook-server/main.goandcmd/ghproxy/main.gowhereos.Getenv("GITHUB_TOKEN")was used asflag.StringVardefault, leaking the secret in--helpoutput.AGENTS.md,agentconfig.yaml,kelos-workers.yaml,kelos-reviewer.yaml(new security checklist item).2. Fail fast on invalid configuration
AGENTS.md,agentconfig.yaml,kelos-workers.yaml,kelos-reviewer.yaml(new correctness checklist item).3. Keep API surfaces minimal
AGENTS.md,agentconfig.yaml,kelos-workers.yaml,kelos-api-reviewer.yaml(new compatibility checklist item).4. API changes must preserve backward compatibility for existing manifests (new)
bodyContains: "/kelos"(scalar) would fail Kubernetes structural-schema validation after the CRD update; the repo itself had at least 9 YAMLs inself-development/andexamples/still using the old scalar form.+kubebuilder:validation:MinLength=1allow empty BodyPattern?" and "I just want to make sure that the existing YAMLs that don't have bodyPattern (because it's a newly introduced field) can be applied. can we just remove minLength here?"+deprecatedrather than remove it ("Why don't we add BodyPattern and ExcludeBodyPatterns and mark BodyContains deprecated here so that I can remove BodyContains later?").AGENTS.md,agentconfig.yaml,kelos-workers.yaml,kelos-api-reviewer.yaml(two new bullets under "API compatibility and evolution": one on validation tightening / kind changes, one on sweeping stale YAMLs).5. Docs must match implementation, not aspiration
GenericSourcebranch ininternal/webhook/handler.gonever reads<SOURCE>_WEBHOOK_SECRET, inspectsX-Hub-Signature-256, or callsvalidateHMACSignature— giving users a false sense of security.PodOverrides.Enventries reusing reserved names are dropped so the built-in always wins, but the actual filter only drops collisions against names already populated onmainContainer.Env.AGENTS.md,agentconfig.yaml,kelos-workers.yaml,kelos-reviewer.yaml(new "Documentation accuracy" checklist subsection).6. TaskSpawner conventions
{{.Branch}}for issue events; designissue_commentprompts for both issue and PR contexts. PR Add API contract validation example (example 12) #974 — P2: "Remove the manual PR branch checkout instruction; Kelos already handles PR branch checkout automatically."agentconfig.yaml,kelos-workers.yaml. README template-variable table corrected from "Usually PR head branch" to "PR head branch; empty for issue events".Also fixes the
kelos-reviewerTaskSpawner branch field to use the safe{{with index . "Branch"}}{{.}}{{else}}main{{end}}fallback form instead of bare{{.Branch}}. Flagged P2 by Greptile in this PR's prior review (#786): the spawner listens onissue_comment, so a/kelos reviewtriggered on a plain issue would land on whatever default state Kelos falls back to rather thanmain.Which issue(s) this PR is related to:
N/A
Special notes for your reviewer:
This PR was rebased onto current main. All changes are documentation/configuration; no runtime code changes.
Does this PR introduce a user-facing change?