-
Notifications
You must be signed in to change notification settings - Fork 10
feat(code-review): detect 8 issue classes that slipped past review #182
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,6 +6,8 @@ Focus areas: | |
| - State management: race conditions, stale closures, double-trigger patterns | ||
| - Error handling: missing try-catch on async, unhandled promise rejections | ||
| - Data transformations: off-by-one, incorrect parsing, wrong parameter types | ||
| - Migration prefix contiguity (CI-blocking): when the diff adds a directory under a `prisma/migrations/` (or equivalent numbered-migration) tree, list the existing sibling prefixes and compute the next contiguous index; if the added prefix skips or reuses a slot (e.g. `0026_*` added when `0025` is the next free one), a committed-migration-name guard test fails CI — flag the mismatch as BLOCKING. | ||
| - Read-only-bridge / write-path mismatch: when a change newly routes a write (POST/PATCH/DELETE, or any request carrying a body) through a transport/bridge/proxy/IPC layer, read that layer's method allowlist (e.g. an `ALLOWED_METHODS` set) and body handling before trusting it; a GET-only bridge silently turns every write into a network/status-0 error that read paths won't reveal. Flag only after confirming the method/body is not permitted. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same |
||
|
|
||
| For each potential finding, complete this reasoning certificate in your <thinking> before including it: | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -59,6 +59,7 @@ A **deep** module has a simple interface over a powerful implementation; a **sha | |
| ### Step 7 — Testability & consistency | ||
| - **Humble Object:** branching/calculation/validation/formatting embedded in a hard-to-test shell (a view, JSX/React component, controller action, template, framework callback, `main()`) instead of an extractable, framework-free Presenter/ViewModel/use case. The tell: the new logic can only be exercised by rendering the component, starting the server, or hitting the DB. | ||
| - **Consistency:** changed code that diverges from established sibling conventions (a different naming style, a hand-rolled solution where a shared helper exists, a new ad-hoc error type beside an established hierarchy, a parallel API with a divergent return contract, an invariant maintained on one path but dropped on a newly-added parallel one). A lone "improvement" to a convention is itself a cost. | ||
| - **Parity divergence across "same-surface" paths:** when two code paths compute the same user-facing surface (e.g. desktop-SQLite vs cloud-Postgres, or a fast-path vs a hydrate-path), diff the fields they populate and the predicates they filter on. Flag a path that zeroes/omits a field the other sums, or filters a population differently — it makes the numbers change for non-data reasons when the user flips surfaces. Cite both paths' file:line before flagging. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i have no idea what this is even talking about |
||
|
|
||
| ## Reasoning per finding (complete in <thinking> before emitting) | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -128,6 +128,22 @@ internal to a function body. Specifically, flag: | |
| renames a column. | ||
| - **Deletions**: any exported symbol whose declaration disappears. | ||
| These are the highest-confidence breakages — they always break. | ||
| - **Error-handling semantics in a SHARED module**: a parser/harness/core | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this makes sense but the language is too specific to our repo |
||
| lib consumed by BOTH a desktop/Electron surface and a cloud surface | ||
| where the diff changes throw/catch/return semantics (e.g. swallowing an | ||
| error that previously threw). This is a `behavioral_change` — trace ALL | ||
| consumers, not just the one the PR body names, and check whether any | ||
| downstream quarantine/skip/defer/import path relied on the old behavior | ||
| (e.g. a flip from "quarantine/defer" to "import with dropped data"). | ||
| Treat "PR body says cloud-only" as a claim to verify against the | ||
| consumer list, not a fact. | ||
| - **New unconditional data dependency in a shared component**: a | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is react specific, but that may be okay. |
||
| previously-presentational shared component that now calls a hook | ||
| requiring a provider (API/query client, context) unconditionally. Every | ||
| existing mount site is a consumer — enumerate them (especially Storybook | ||
| stories and the global Storybook preview) and flag any that does not | ||
| supply the provider; the unconditional hook call throws on mount where | ||
| the component used to be pure. | ||
|
|
||
| Ignore symbols that are clearly **internal** (private/unexported, | ||
| underscored, inside `__init__` blocks not in `__all__`, etc.). Ignore | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this line is very specific to our monorepo and belongs in a CLAUDE/AGENTS.md file.