🎨 Palette: [UX improvement] Add keyboard navigation and delete confirmation to Edit Edge modal#539
🎨 Palette: [UX improvement] Add keyboard navigation and delete confirmation to Edit Edge modal#539seonghobae wants to merge 14 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. |
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 headf4b0c76e452edaa06cc301aaafe3d1fb12825e93. -
Head SHA:
f4b0c76e452edaa06cc301aaafe3d1fb12825e93 -
Workflow run: 29201575736
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
f4b0c76e452edaa06cc301aaafe3d1fb12825e93 - Required test evidence: supported repository test suites must pass.
- Required docstring evidence: repository-owned docstring gates must pass when configured; otherwise docstring coverage is advisory.
Implementation completeness scan
$ python3 /home/runner/work/pg-erd-cloud/pg-erd-cloud/scripts/ci/implementation_completeness_scan.py --repo-root . --changed-files /tmp/tmp.4q50EsomFW
# Implementation Completeness Scan
- Checked runtime source files: 0
- Declaration handling: typing.Protocol, abc.ABC, @abstractmethod, and @overload placeholders are treated as contracts, not executable missing implementations.
- Result: PASS
- Reason: no executable placeholder implementations were found in changed runtime source files.
- Result: PASS
JavaScript/TypeScript package (frontend)
JavaScript/TypeScript dependencies (pnpm install)
$ pnpm install --frozen-lockfile
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
? Verifying lockfile against supply-chain policies (185 entries)...
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +154
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 154, reused 0, downloaded 101, added 4
Progress: resolved 154, reused 0, downloaded 154, added 154, done
✓ Lockfile passes supply-chain policies (185 entries in 2.2s)
dependencies:
+ @xyflow/react 12.11.1
+ react 19.2.7
+ react-dom 19.2.7
devDependencies:
+ @testing-library/jest-dom 6.9.1
+ @testing-library/react 16.3.2
+ @testing-library/user-event 14.6.1
+ @types/react 19.2.17
+ @types/react-dom 19.2.3
+ @vitest/coverage-v8 4.1.9
+ fast-check 4.8.0
+ jsdom 29.1.1
+ typescript 6.0.3
+ vite 8.1.1
+ vitest 4.1.9
Done in 2.9s using pnpm v11.12.0
- Result: PASS
JavaScript/TypeScript docstring coverage
- Result: PASS
- Reason: package.json exists, but no check:python-docstrings, docstring:coverage, or docs:coverage script is defined; docstring coverage is advisory.
JavaScript/TypeScript test coverage
$ pnpm test -- --coverage
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
$ vitest run -- --coverage
�[1m�[30m�[46m RUN �[49m�[39m�[22m �[36mv4.1.9 �[39m�[90m/home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.test.ts �[2m(�[22m�[2m17 tests�[22m�[2m)�[22m�[32m 13�[2mms�[22m�[39m
�[32m✓�[39m src/erd/convert.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 14�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/export.test.ts �[2m(�[22m�[2m24 tests�[22m�[2m)�[22m�[32m 67�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/autoInfer.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 10�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/mermaid.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/exportDataDictionary.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/dbml.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 6�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/TableNode.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 324�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ExportModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 695�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m separates project share links from export artifacts �[33m 393�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/businessGroups.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[32m 12�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/DialogAccessibility.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 595�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m closes with Escape and restores focus to the opener �[33m 378�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/App.editTable.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 710�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders compact visual labels while preserving toolbar accessible names �[33m 529�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality_extra.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 11�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/search.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/types.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 10�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.fuzz.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 73�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNode.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 21�[2mms�[22m�[39m
�[32m✓�[39m src/erd/handleUtils.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/GroupModal.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 89�[2mms�[22m�[39m
�[32m✓�[39m src/api.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 4�[2mms�[22m�[39m
�[2m Test Files �[22m �[1m�[32m20 passed�[39m�[22m�[90m (20)�[39m
�[2m Tests �[22m �[1m�[32m126 passed�[39m�[22m�[90m (126)�[39m
�[2m Start at �[22m 17:14:20
�[2m Duration �[22m 11.69s�[2m (transform 1.16s, setup 0ms, import 3.88s, tests 2.68s, environment 23.33s)�[22m
- Result: PASS
JavaScript/TypeScript coverage threshold
- Result: FAIL
- Reason: JavaScript/TypeScript coverage ran, but no coverage summary files were produced.
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["Frontend: EditEdgeModal.tsx"]
S1 --> I1["browser runtime and bundle"]
I1 --> R1["Review risk: Frontend: EditEdgeModal.tsx"]
R1 --> V1["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
Implementation completeness scan
JavaScript/TypeScript package (frontend)JavaScript/TypeScript dependencies (pnpm install)
JavaScript/TypeScript docstring coverage
JavaScript/TypeScript coverage script |
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 head301452beababaa7fc848794430f1011048edeeac. -
Head SHA:
301452beababaa7fc848794430f1011048edeeac -
Workflow run: 29202017231
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
301452beababaa7fc848794430f1011048edeeac - Required test evidence: supported repository test suites must pass.
- Required docstring evidence: repository-owned docstring gates must pass when configured; otherwise docstring coverage is advisory.
Implementation completeness scan
$ python3 /home/runner/work/pg-erd-cloud/pg-erd-cloud/scripts/ci/implementation_completeness_scan.py --repo-root . --changed-files /tmp/tmp.8y1UdpvQCK
# Implementation Completeness Scan
- Checked runtime source files: 0
- Declaration handling: typing.Protocol, abc.ABC, @abstractmethod, and @overload placeholders are treated as contracts, not executable missing implementations.
- Result: PASS
- Reason: no executable placeholder implementations were found in changed runtime source files.
- Result: PASS
JavaScript/TypeScript package (frontend)
JavaScript/TypeScript dependencies (pnpm install)
$ pnpm install --frozen-lockfile
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
? Verifying lockfile against supply-chain policies (185 entries)...
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +154
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 154, reused 0, downloaded 146, added 8
Progress: resolved 154, reused 0, downloaded 154, added 154, done
✓ Lockfile passes supply-chain policies (185 entries in 1.8s)
dependencies:
+ @xyflow/react 12.11.1
+ react 19.2.7
+ react-dom 19.2.7
devDependencies:
+ @testing-library/jest-dom 6.9.1
+ @testing-library/react 16.3.2
+ @testing-library/user-event 14.6.1
+ @types/react 19.2.17
+ @types/react-dom 19.2.3
+ @vitest/coverage-v8 4.1.9
+ fast-check 4.8.0
+ jsdom 29.1.1
+ typescript 6.0.3
+ vite 8.1.1
+ vitest 4.1.9
Done in 2.5s using pnpm v11.12.0
- Result: PASS
JavaScript/TypeScript docstring coverage
- Result: PASS
- Reason: package.json exists, but no check:python-docstrings, docstring:coverage, or docs:coverage script is defined; docstring coverage is advisory.
JavaScript/TypeScript coverage script
$ pnpm run coverage
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
$ vitest run --coverage
�[1m�[30m�[46m RUN �[49m�[39m�[22m �[36mv4.1.9 �[39m�[90m/home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend�[39m
�[2mCoverage enabled with �[22m�[33mv8�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.test.ts �[2m(�[22m�[2m17 tests�[22m�[2m)�[22m�[32m 20�[2mms�[22m�[39m
�[32m✓�[39m src/erd/convert.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 10�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/export.test.ts �[2m(�[22m�[2m24 tests�[22m�[2m)�[22m�[32m 45�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/mermaid.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 6�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/autoInfer.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/exportDataDictionary.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/dbml.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 5�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/TableNode.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 222�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ExportModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 648�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m separates project share links from export artifacts �[33m 331�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/businessGroups.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/DialogAccessibility.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 510�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m closes with Escape and restores focus to the opener �[33m 320�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/App.editTable.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 632�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders compact visual labels while preserving toolbar accessible names �[33m 442�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality_extra.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 11�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/search.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 5�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.fuzz.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 63�[2mms�[22m�[39m
�[32m✓�[39m src/types.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNode.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 19�[2mms�[22m�[39m
�[32m✓�[39m src/erd/handleUtils.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 5�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/GroupModal.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 117�[2mms�[22m�[39m
�[32m✓�[39m src/api.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 4�[2mms�[22m�[39m
�[2m Test Files �[22m �[1m�[32m20 passed�[39m�[22m�[90m (20)�[39m
�[2m Tests �[22m �[1m�[32m126 passed�[39m�[22m�[90m (126)�[39m
�[2m Start at �[22m 17:30:48
�[2m Duration �[22m 9.51s�[2m (transform 799ms, setup 0ms, import 3.12s, tests 2.35s, environment 16.89s)�[22m
�[34m % �[39m�[2mCoverage report from �[22m�[33mv8�[39m
-------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------|---------|----------|---------|---------|-------------------
All files | 61.46 | 57.96 | 47 | 64.36 |
src | 29.06 | 27.96 | 23.83 | 31.69 |
App.tsx | 31.22 | 30.54 | 23.87 | 33.97 | ...1367-1387,1743
api.ts | 11.23 | 11.26 | 7.14 | 13.15 | 80-86,100-255
types.ts | 100 | 100 | 100 | 100 |
...ponents/modals | 59.39 | 61.87 | 40 | 59.73 |
...ableModal.tsx | 50 | 50 | 33.33 | 42.85 | 47-68
...lityModal.tsx | 16.66 | 11.42 | 11.11 | 11.76 | 54-227
...EdgeModal.tsx | 30 | 16.66 | 25 | 22.22 | 26-88
...ableModal.tsx | 9.37 | 16.66 | 6.66 | 7.4 | 29-216
ExportModal.tsx | 100 | 87.5 | 100 | 100 | 60,65,73,170,180
GroupModal.tsx | 50 | 83.33 | 33.33 | 45.45 | 66,82-112,136-141
index.ts | 0 | 0 | 0 | 0 |
...essibility.ts | 92 | 87.14 | 100 | 95.65 | 125-127
src/erd | 94.87 | 81.49 | 95.55 | 96.7 |
TableNode.tsx | 40.9 | 50.64 | 71.42 | 51.51 | 49,228-257
autoInfer.ts | 100 | 86.66 | 100 | 100 | 22,55,78-83
...nessGroups.ts | 100 | 100 | 100 | 100 |
cardinality.ts | 100 | 97.29 | 100 | 100 | 121
convert.ts | 100 | 97.22 | 100 | 100 | 34
dbml.ts | 96.66 | 81.25 | 100 | 100 | ...56,73-80,92-97
export.ts | 98.53 | 83.81 | 92.59 | 98.49 | 81-82,87
...Dictionary.ts | 100 | 81.48 | 100 | 100 | ...-96,98,136,138
handleUtils.ts | 100 | 75 | 100 | 100 | 3
...tConstants.ts | 100 | 100 | 100 | 100 |
mermaid.ts | 100 | 96 | 100 | 100 | 34
search.ts | 95.65 | 93.75 | 100 | 100 | 16
securityUtils.ts | 100 | 100 | 100 | 100 |
-------------------|---------|----------|---------|---------|-------------------
- Result: PASS
JavaScript/TypeScript coverage threshold
$ python3 /home/runner/work/_temp/check-javascript-coverage.py /home/runner/work/_temp/javascript-coverage-summaries.txt
coverage/coverage-final.json:
statements: 61.46%
branches: 57.97%
functions: 47.0%
lines: 64.36%
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/App.tsx:77,101,105,106,107,109,114,115,116,202,203,204,221,224,237,244,245,246,257,263,264,265,266,267,268,269,290,292,295,302,311,312,314,315,316,317,318,320,324,326,356,375,405,406,419,421,423,424,425,427,428,429,437,438,439,440,447,448,449,456,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/api.ts:80,84,85,86,100,103,105,106,107,109,113,120,121,123,124,125,129,130,131,132,136,137,141,142,143,144,146,152,153,157,158,159,160,164,165,169,173,174,176,177,183,184,188,189,190,191,195,196,201,205,206,208,214,215,219,220,228,233,235,236,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/AddTableModal.tsx:47,48,49,68
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/CardinalityModal.tsx:54,83,87,102,103,104,123,127,134,135,146,175,203,205,227
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/EditEdgeModal.tsx:26,69,71,72,73,87,88
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/EditTableModal.tsx:29,64,65,66,67,83,86,87,88,112,148,149,150,151,152,156,160,163,164,165,169,198,199,212,216
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/GroupModal.tsx:66,82,103,112,136,141
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/useDialogAccessibility.ts:101,112,121,125,126,127
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/TableNode.tsx:49,228,229,232,237,238,239,240,241,242,243,244,245,247,251,257
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/dbml.ts:5,10
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/export.ts:81,82,87
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/search.ts:16
Coverage below 100%:
- coverage/coverage-final.json statements=61.46%
- coverage/coverage-final.json branches=57.97%
- coverage/coverage-final.json functions=47.0%
- coverage/coverage-final.json lines=64.36%
- Result: FAIL (exit 1)
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["Frontend (2 files)"]
S1 --> I1["browser runtime and bundle"]
I1 --> R1["Review risk: Frontend (2 files)"]
R1 --> V1["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 headc1ac813b59dad994b3c48687ab2cb19f5c084bc6. -
Head SHA:
c1ac813b59dad994b3c48687ab2cb19f5c084bc6 -
Workflow run: 29202651083
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
c1ac813b59dad994b3c48687ab2cb19f5c084bc6 - Required test evidence: supported repository test suites must pass.
- Required docstring evidence: repository-owned docstring gates must pass when configured; otherwise docstring coverage is advisory.
Implementation completeness scan
$ python3 /home/runner/work/pg-erd-cloud/pg-erd-cloud/scripts/ci/implementation_completeness_scan.py --repo-root . --changed-files /tmp/tmp.4s8fVARO6Q
# Implementation Completeness Scan
- Checked runtime source files: 0
- Declaration handling: typing.Protocol, abc.ABC, @abstractmethod, and @overload placeholders are treated as contracts, not executable missing implementations.
- Result: PASS
- Reason: no executable placeholder implementations were found in changed runtime source files.
- Result: PASS
JavaScript/TypeScript package (frontend)
JavaScript/TypeScript dependencies (pnpm install)
$ pnpm install --frozen-lockfile
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
? Verifying lockfile against supply-chain policies (185 entries)...
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +154
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 154, reused 0, downloaded 85, added 4
Progress: resolved 154, reused 0, downloaded 154, added 154, done
✓ Lockfile passes supply-chain policies (185 entries in 2.2s)
dependencies:
+ @xyflow/react 12.11.1
+ react 19.2.7
+ react-dom 19.2.7
devDependencies:
+ @testing-library/jest-dom 6.9.1
+ @testing-library/react 16.3.2
+ @testing-library/user-event 14.6.1
+ @types/react 19.2.17
+ @types/react-dom 19.2.3
+ @vitest/coverage-v8 4.1.9
+ fast-check 4.8.0
+ jsdom 29.1.1
+ typescript 6.0.3
+ vite 8.1.1
+ vitest 4.1.9
Done in 3.2s using pnpm v11.12.0
- Result: PASS
JavaScript/TypeScript docstring coverage
- Result: PASS
- Reason: package.json exists, but no check:python-docstrings, docstring:coverage, or docs:coverage script is defined; docstring coverage is advisory.
JavaScript/TypeScript coverage script
$ pnpm run coverage
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
$ vitest run --coverage
�[1m�[30m�[46m RUN �[49m�[39m�[22m �[36mv4.1.9 �[39m�[90m/home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend�[39m
�[2mCoverage enabled with �[22m�[33mv8�[39m
�[32m✓�[39m src/erd/convert.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 14�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.test.ts �[2m(�[22m�[2m17 tests�[22m�[2m)�[22m�[32m 29�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/export.test.ts �[2m(�[22m�[2m24 tests�[22m�[2m)�[22m�[32m 85�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/mermaid.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/autoInfer.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 25�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/exportDataDictionary.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 21�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/dbml.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/TableNode.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 322�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ExportModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 909�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m separates project share links from export artifacts �[33m 503�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/businessGroups.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[32m 11�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/DialogAccessibility.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 545�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m closes with Escape and restores focus to the opener �[33m 310�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality_extra.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 15�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/App.editTable.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 832�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders compact visual labels while preserving toolbar accessible names �[33m 571�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/EditEdgeModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 647�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders correctly when editingEdge is provided �[33m 303�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/search.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.fuzz.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 66�[2mms�[22m�[39m
�[32m✓�[39m src/types.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNode.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 26�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/GroupModal.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 124�[2mms�[22m�[39m
�[32m✓�[39m src/erd/handleUtils.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/api.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 6�[2mms�[22m�[39m
�[2m Test Files �[22m �[1m�[32m21 passed�[39m�[22m�[90m (21)�[39m
�[2m Tests �[22m �[1m�[32m132 passed�[39m�[22m�[90m (132)�[39m
�[2m Start at �[22m 17:51:38
�[2m Duration �[22m 13.20s�[2m (transform 914ms, setup 0ms, import 4.03s, tests 3.72s, environment 23.05s)�[22m
�[34m % �[39m�[2mCoverage report from �[22m�[33mv8�[39m
-------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------|---------|----------|---------|---------|-------------------
All files | 62.02 | 58.5 | 47.94 | 64.91 |
src | 29.06 | 27.96 | 23.83 | 31.69 |
App.tsx | 31.22 | 30.54 | 23.87 | 33.97 | ...1367-1387,1743
api.ts | 11.23 | 11.26 | 7.14 | 13.15 | 80-86,100-255
types.ts | 100 | 100 | 100 | 100 |
...ponents/modals | 64.24 | 65.19 | 45.45 | 64.42 |
...ableModal.tsx | 50 | 50 | 33.33 | 42.85 | 47-68
...lityModal.tsx | 16.66 | 11.42 | 11.11 | 11.76 | 54-227
...EdgeModal.tsx | 100 | 100 | 100 | 100 |
...ableModal.tsx | 9.37 | 16.66 | 6.66 | 7.4 | 29-216
ExportModal.tsx | 100 | 87.5 | 100 | 100 | 60,65,73,170,180
GroupModal.tsx | 50 | 83.33 | 33.33 | 45.45 | 66,82-112,136-141
index.ts | 0 | 0 | 0 | 0 |
...essibility.ts | 93.33 | 88.57 | 100 | 95.65 | 125-127
src/erd | 94.87 | 81.49 | 95.55 | 96.7 |
TableNode.tsx | 40.9 | 50.64 | 71.42 | 51.51 | 49,228-257
autoInfer.ts | 100 | 86.66 | 100 | 100 | 22,55,78-83
...nessGroups.ts | 100 | 100 | 100 | 100 |
cardinality.ts | 100 | 97.29 | 100 | 100 | 121
convert.ts | 100 | 97.22 | 100 | 100 | 34
dbml.ts | 96.66 | 81.25 | 100 | 100 | ...56,73-80,92-97
export.ts | 98.53 | 83.81 | 92.59 | 98.49 | 81-82,87
...Dictionary.ts | 100 | 81.48 | 100 | 100 | ...-96,98,136,138
handleUtils.ts | 100 | 75 | 100 | 100 | 3
...tConstants.ts | 100 | 100 | 100 | 100 |
mermaid.ts | 100 | 96 | 100 | 100 | 34
search.ts | 95.65 | 93.75 | 100 | 100 | 16
securityUtils.ts | 100 | 100 | 100 | 100 |
-------------------|---------|----------|---------|---------|-------------------
- Result: PASS
JavaScript/TypeScript coverage threshold
$ python3 /home/runner/work/_temp/check-javascript-coverage.py /home/runner/work/_temp/javascript-coverage-summaries.txt
coverage/coverage-final.json:
statements: 62.03%
branches: 58.51%
functions: 47.95%
lines: 64.91%
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/App.tsx:77,101,105,106,107,109,114,115,116,202,203,204,221,224,237,244,245,246,257,263,264,265,266,267,268,269,290,292,295,302,311,312,314,315,316,317,318,320,324,326,356,375,405,406,419,421,423,424,425,427,428,429,437,438,439,440,447,448,449,456,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/api.ts:80,84,85,86,100,103,105,106,107,109,113,120,121,123,124,125,129,130,131,132,136,137,141,142,143,144,146,152,153,157,158,159,160,164,165,169,173,174,176,177,183,184,188,189,190,191,195,196,201,205,206,208,214,215,219,220,228,233,235,236,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/AddTableModal.tsx:47,48,49,68
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/CardinalityModal.tsx:54,83,87,102,103,104,123,127,134,135,146,175,203,205,227
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/EditTableModal.tsx:29,64,65,66,67,83,86,87,88,112,148,149,150,151,152,156,160,163,164,165,169,198,199,212,216
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/GroupModal.tsx:66,82,103,112,136,141
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/useDialogAccessibility.ts:101,112,125,126,127
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/TableNode.tsx:49,228,229,232,237,238,239,240,241,242,243,244,245,247,251,257
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/dbml.ts:5,10
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/export.ts:81,82,87
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/search.ts:16
Coverage below 100%:
- coverage/coverage-final.json statements=62.03%
- coverage/coverage-final.json branches=58.51%
- coverage/coverage-final.json functions=47.95%
- coverage/coverage-final.json lines=64.91%
- Result: FAIL (exit 1)
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["Frontend (3 files)"]
S1 --> I1["browser runtime and bundle"]
I1 --> R1["Review risk: Frontend (3 files)"]
R1 --> V1["frontend tests"]
Evidence --> S2["Changed file: pr_body.txt"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: pr_body.txt"]
R2 --> V2["required checks"]
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 head23504b0129348504e8194c73061ac1c4dd4519a6. -
Head SHA:
23504b0129348504e8194c73061ac1c4dd4519a6 -
Workflow run: 29208943300
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
23504b0129348504e8194c73061ac1c4dd4519a6 - Required test evidence: supported repository test suites must pass.
- Required docstring evidence: repository-owned docstring gates must pass when configured; otherwise docstring coverage is advisory.
Implementation completeness scan
$ python3 /home/runner/work/pg-erd-cloud/pg-erd-cloud/scripts/ci/implementation_completeness_scan.py --repo-root . --changed-files /tmp/tmp.ph9NMFZPid
# Implementation Completeness Scan
- Checked runtime source files: 0
- Declaration handling: typing.Protocol, abc.ABC, @abstractmethod, and @overload placeholders are treated as contracts, not executable missing implementations.
- Result: PASS
- Reason: no executable placeholder implementations were found in changed runtime source files.
- Result: PASS
JavaScript/TypeScript package (frontend)
JavaScript/TypeScript dependencies (pnpm install)
$ pnpm install --frozen-lockfile
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
? Verifying lockfile against supply-chain policies (185 entries)...
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +154
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 154, reused 0, downloaded 143, added 12
Progress: resolved 154, reused 0, downloaded 154, added 154, done
✓ Lockfile passes supply-chain policies (185 entries in 2.1s)
dependencies:
+ @xyflow/react 12.11.1
+ react 19.2.7
+ react-dom 19.2.7
devDependencies:
+ @testing-library/jest-dom 6.9.1
+ @testing-library/react 16.3.2
+ @testing-library/user-event 14.6.1
+ @types/react 19.2.17
+ @types/react-dom 19.2.3
+ @vitest/coverage-v8 4.1.9
+ fast-check 4.8.0
+ jsdom 29.1.1
+ typescript 6.0.3
+ vite 8.1.1
+ vitest 4.1.9
Done in 2.9s using pnpm v11.12.0
- Result: PASS
JavaScript/TypeScript docstring coverage
- Result: PASS
- Reason: package.json exists, but no check:python-docstrings, docstring:coverage, or docs:coverage script is defined; docstring coverage is advisory.
JavaScript/TypeScript coverage script
$ pnpm run coverage
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
$ vitest run --coverage
�[1m�[30m�[46m RUN �[49m�[39m�[22m �[36mv4.1.9 �[39m�[90m/home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend�[39m
�[2mCoverage enabled with �[22m�[33mv8�[39m
�[32m✓�[39m src/erd/convert.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 18�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.test.ts �[2m(�[22m�[2m17 tests�[22m�[2m)�[22m�[32m 19�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/export.test.ts �[2m(�[22m�[2m24 tests�[22m�[2m)�[22m�[32m 64�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/exportDataDictionary.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/mermaid.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/autoInfer.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 11�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/dbml.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/TableNode.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 250�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ExportModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 814�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m separates project share links from export artifacts �[33m 420�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/DialogAccessibility.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 555�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m closes with Escape and restores focus to the opener �[33m 350�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/businessGroups.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[32m 10�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/App.editTable.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 677�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders compact visual labels while preserving toolbar accessible names �[33m 476�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality_extra.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 10�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/EditEdgeModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 535�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/search.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.fuzz.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 66�[2mms�[22m�[39m
�[32m✓�[39m src/types.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 17�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNode.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 15�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/GroupModal.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 130�[2mms�[22m�[39m
�[32m✓�[39m src/erd/handleUtils.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 6�[2mms�[22m�[39m
�[32m✓�[39m src/api.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 5�[2mms�[22m�[39m
�[2m Test Files �[22m �[1m�[32m21 passed�[39m�[22m�[90m (21)�[39m
�[2m Tests �[22m �[1m�[32m132 passed�[39m�[22m�[90m (132)�[39m
�[2m Start at �[22m 21:35:04
�[2m Duration �[22m 10.94s�[2m (transform 915ms, setup 0ms, import 3.61s, tests 3.24s, environment 19.01s)�[22m
�[34m % �[39m�[2mCoverage report from �[22m�[33mv8�[39m
-------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------|---------|----------|---------|---------|-------------------
All files | 62.02 | 58.5 | 47.94 | 64.91 |
src | 29.06 | 27.96 | 23.83 | 31.69 |
App.tsx | 31.22 | 30.54 | 23.87 | 33.97 | ...1367-1387,1743
api.ts | 11.23 | 11.26 | 7.14 | 13.15 | 80-86,100-255
types.ts | 100 | 100 | 100 | 100 |
...ponents/modals | 64.24 | 65.19 | 45.45 | 64.42 |
...ableModal.tsx | 50 | 50 | 33.33 | 42.85 | 47-68
...lityModal.tsx | 16.66 | 11.42 | 11.11 | 11.76 | 54-227
...EdgeModal.tsx | 100 | 100 | 100 | 100 |
...ableModal.tsx | 9.37 | 16.66 | 6.66 | 7.4 | 29-216
ExportModal.tsx | 100 | 87.5 | 100 | 100 | 60,65,73,170,180
GroupModal.tsx | 50 | 83.33 | 33.33 | 45.45 | 66,82-112,136-141
index.ts | 0 | 0 | 0 | 0 |
...essibility.ts | 93.33 | 88.57 | 100 | 95.65 | 125-127
src/erd | 94.87 | 81.49 | 95.55 | 96.7 |
TableNode.tsx | 40.9 | 50.64 | 71.42 | 51.51 | 49,228-257
autoInfer.ts | 100 | 86.66 | 100 | 100 | 22,55,78-83
...nessGroups.ts | 100 | 100 | 100 | 100 |
cardinality.ts | 100 | 97.29 | 100 | 100 | 121
convert.ts | 100 | 97.22 | 100 | 100 | 34
dbml.ts | 96.66 | 81.25 | 100 | 100 | ...56,73-80,92-97
export.ts | 98.53 | 83.81 | 92.59 | 98.49 | 81-82,87
...Dictionary.ts | 100 | 81.48 | 100 | 100 | ...-96,98,136,138
handleUtils.ts | 100 | 75 | 100 | 100 | 3
...tConstants.ts | 100 | 100 | 100 | 100 |
mermaid.ts | 100 | 96 | 100 | 100 | 34
search.ts | 95.65 | 93.75 | 100 | 100 | 16
securityUtils.ts | 100 | 100 | 100 | 100 |
-------------------|---------|----------|---------|---------|-------------------
- Result: PASS
JavaScript/TypeScript coverage threshold
$ python3 /home/runner/work/_temp/check-javascript-coverage.py /home/runner/work/_temp/javascript-coverage-summaries.txt
coverage/coverage-final.json:
statements: 62.03%
branches: 58.51%
functions: 47.95%
lines: 64.91%
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/App.tsx:77,101,105,106,107,109,114,115,116,202,203,204,221,224,237,244,245,246,257,263,264,265,266,267,268,269,290,292,295,302,311,312,314,315,316,317,318,320,324,326,356,375,405,406,419,421,423,424,425,427,428,429,437,438,439,440,447,448,449,456,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/api.ts:80,84,85,86,100,103,105,106,107,109,113,120,121,123,124,125,129,130,131,132,136,137,141,142,143,144,146,152,153,157,158,159,160,164,165,169,173,174,176,177,183,184,188,189,190,191,195,196,201,205,206,208,214,215,219,220,228,233,235,236,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/AddTableModal.tsx:47,48,49,68
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/CardinalityModal.tsx:54,83,87,102,103,104,123,127,134,135,146,175,203,205,227
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/EditTableModal.tsx:29,64,65,66,67,83,86,87,88,112,148,149,150,151,152,156,160,163,164,165,169,198,199,212,216
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/GroupModal.tsx:66,82,103,112,136,141
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/useDialogAccessibility.ts:101,112,125,126,127
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/TableNode.tsx:49,228,229,232,237,238,239,240,241,242,243,244,245,247,251,257
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/dbml.ts:5,10
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/export.ts:81,82,87
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/search.ts:16
Coverage below 100%:
- coverage/coverage-final.json statements=62.03%
- coverage/coverage-final.json branches=58.51%
- coverage/coverage-final.json functions=47.95%
- coverage/coverage-final.json lines=64.91%
- Result: FAIL (exit 1)
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["Frontend (3 files)"]
S1 --> I1["browser runtime and bundle"]
I1 --> R1["Review risk: Frontend (3 files)"]
R1 --> V1["frontend tests"]
Evidence --> S2["Changed file: pr_body.txt"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: pr_body.txt"]
R2 --> V2["required checks"]
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 head13626c558ee12d8f65017b1c4e28146b991b8811. -
Head SHA:
13626c558ee12d8f65017b1c4e28146b991b8811 -
Workflow run: 29212971166
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
13626c558ee12d8f65017b1c4e28146b991b8811 - Required test evidence: supported repository test suites must pass.
- Required docstring evidence: repository-owned docstring gates must pass when configured; otherwise docstring coverage is advisory.
Implementation completeness scan
$ python3 /home/runner/work/pg-erd-cloud/pg-erd-cloud/scripts/ci/implementation_completeness_scan.py --repo-root . --changed-files /tmp/tmp.knsilNL5eM
# Implementation Completeness Scan
- Checked runtime source files: 0
- Declaration handling: typing.Protocol, abc.ABC, @abstractmethod, and @overload placeholders are treated as contracts, not executable missing implementations.
- Result: PASS
- Reason: no executable placeholder implementations were found in changed runtime source files.
- Result: PASS
JavaScript/TypeScript package (frontend)
JavaScript/TypeScript dependencies (pnpm install)
$ pnpm install --frozen-lockfile
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
? Verifying lockfile against supply-chain policies (185 entries)...
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +154
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 154, reused 0, downloaded 152, added 151
Progress: resolved 154, reused 0, downloaded 154, added 154, done
✓ Lockfile passes supply-chain policies (185 entries in 1.6s)
dependencies:
+ @xyflow/react 12.11.1
+ react 19.2.7
+ react-dom 19.2.7
devDependencies:
+ @testing-library/jest-dom 6.9.1
+ @testing-library/react 16.3.2
+ @testing-library/user-event 14.6.1
+ @types/react 19.2.17
+ @types/react-dom 19.2.3
+ @vitest/coverage-v8 4.1.9
+ fast-check 4.8.0
+ jsdom 29.1.1
+ typescript 6.0.3
+ vite 8.1.1
+ vitest 4.1.9
Done in 2.3s using pnpm v11.12.0
- Result: PASS
JavaScript/TypeScript docstring coverage
- Result: PASS
- Reason: package.json exists, but no check:python-docstrings, docstring:coverage, or docs:coverage script is defined; docstring coverage is advisory.
JavaScript/TypeScript coverage script
$ pnpm run coverage
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
$ vitest run --coverage
�[1m�[30m�[46m RUN �[49m�[39m�[22m �[36mv4.1.9 �[39m�[90m/home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend�[39m
�[2mCoverage enabled with �[22m�[33mv8�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.test.ts �[2m(�[22m�[2m17 tests�[22m�[2m)�[22m�[32m 15�[2mms�[22m�[39m
�[32m✓�[39m src/erd/convert.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 15�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/export.test.ts �[2m(�[22m�[2m24 tests�[22m�[2m)�[22m�[32m 51�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/autoInfer.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/mermaid.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/exportDataDictionary.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/dbml.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 18�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/TableNode.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 236�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ExportModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 656�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m separates project share links from export artifacts �[33m 381�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/businessGroups.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[32m 17�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/DialogAccessibility.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 526�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m closes with Escape and restores focus to the opener �[33m 327�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality_extra.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/App.editTable.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 646�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders compact visual labels while preserving toolbar accessible names �[33m 446�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/EditEdgeModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 472�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/search.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 5�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.fuzz.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 52�[2mms�[22m�[39m
�[32m✓�[39m src/types.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNode.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 15�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/GroupModal.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 81�[2mms�[22m�[39m
�[32m✓�[39m src/erd/handleUtils.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/api.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 4�[2mms�[22m�[39m
�[2m Test Files �[22m �[1m�[32m21 passed�[39m�[22m�[90m (21)�[39m
�[2m Tests �[22m �[1m�[32m132 passed�[39m�[22m�[90m (132)�[39m
�[2m Start at �[22m 23:17:40
�[2m Duration �[22m 9.72s�[2m (transform 881ms, setup 0ms, import 3.24s, tests 2.86s, environment 16.67s)�[22m
�[34m % �[39m�[2mCoverage report from �[22m�[33mv8�[39m
-------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------|---------|----------|---------|---------|-------------------
All files | 62.02 | 58.5 | 47.94 | 64.91 |
src | 29.06 | 27.96 | 23.83 | 31.69 |
App.tsx | 31.22 | 30.54 | 23.87 | 33.97 | ...1367-1387,1743
api.ts | 11.23 | 11.26 | 7.14 | 13.15 | 80-86,100-255
types.ts | 100 | 100 | 100 | 100 |
...ponents/modals | 64.24 | 65.19 | 45.45 | 64.42 |
...ableModal.tsx | 50 | 50 | 33.33 | 42.85 | 47-68
...lityModal.tsx | 16.66 | 11.42 | 11.11 | 11.76 | 54-227
...EdgeModal.tsx | 100 | 100 | 100 | 100 |
...ableModal.tsx | 9.37 | 16.66 | 6.66 | 7.4 | 29-216
ExportModal.tsx | 100 | 87.5 | 100 | 100 | 60,65,73,170,180
GroupModal.tsx | 50 | 83.33 | 33.33 | 45.45 | 66,82-112,136-141
index.ts | 0 | 0 | 0 | 0 |
...essibility.ts | 93.33 | 88.57 | 100 | 95.65 | 125-127
src/erd | 94.87 | 81.49 | 95.55 | 96.7 |
TableNode.tsx | 40.9 | 50.64 | 71.42 | 51.51 | 49,228-257
autoInfer.ts | 100 | 86.66 | 100 | 100 | 22,55,78-83
...nessGroups.ts | 100 | 100 | 100 | 100 |
cardinality.ts | 100 | 97.29 | 100 | 100 | 121
convert.ts | 100 | 97.22 | 100 | 100 | 34
dbml.ts | 96.66 | 81.25 | 100 | 100 | ...56,73-80,92-97
export.ts | 98.53 | 83.81 | 92.59 | 98.49 | 81-82,87
...Dictionary.ts | 100 | 81.48 | 100 | 100 | ...-96,98,136,138
handleUtils.ts | 100 | 75 | 100 | 100 | 3
...tConstants.ts | 100 | 100 | 100 | 100 |
mermaid.ts | 100 | 96 | 100 | 100 | 34
search.ts | 95.65 | 93.75 | 100 | 100 | 16
securityUtils.ts | 100 | 100 | 100 | 100 |
-------------------|---------|----------|---------|---------|-------------------
- Result: PASS
JavaScript/TypeScript coverage threshold
$ python3 /home/runner/work/_temp/check-javascript-coverage.py /home/runner/work/_temp/javascript-coverage-summaries.txt
coverage/coverage-final.json:
statements: 62.03%
branches: 58.51%
functions: 47.95%
lines: 64.91%
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/App.tsx:77,101,105,106,107,109,114,115,116,202,203,204,221,224,237,244,245,246,257,263,264,265,266,267,268,269,290,292,295,302,311,312,314,315,316,317,318,320,324,326,356,375,405,406,419,421,423,424,425,427,428,429,437,438,439,440,447,448,449,456,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/api.ts:80,84,85,86,100,103,105,106,107,109,113,120,121,123,124,125,129,130,131,132,136,137,141,142,143,144,146,152,153,157,158,159,160,164,165,169,173,174,176,177,183,184,188,189,190,191,195,196,201,205,206,208,214,215,219,220,228,233,235,236,...
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/AddTableModal.tsx:47,48,49,68
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/CardinalityModal.tsx:54,83,87,102,103,104,123,127,134,135,146,175,203,205,227
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/EditTableModal.tsx:29,64,65,66,67,83,86,87,88,112,148,149,150,151,152,156,160,163,164,165,169,198,199,212,216
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/GroupModal.tsx:66,82,103,112,136,141
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/components/modals/useDialogAccessibility.ts:101,112,125,126,127
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/TableNode.tsx:49,228,229,232,237,238,239,240,241,242,243,244,245,247,251,257
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/dbml.ts:5,10
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/export.ts:81,82,87
missing lines: /home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend/src/erd/search.ts:16
Coverage below 100%:
- coverage/coverage-final.json statements=62.03%
- coverage/coverage-final.json branches=58.51%
- coverage/coverage-final.json functions=47.95%
- coverage/coverage-final.json lines=64.91%
- Result: FAIL (exit 1)
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["Frontend (3 files)"]
S1 --> I1["browser runtime and bundle"]
I1 --> R1["Review risk: Frontend (3 files)"]
R1 --> V1["frontend tests"]
Evidence --> S2["Changed file: pr_body.txt"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: pr_body.txt"]
R2 --> V2["required checks"]
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 headdcecd2aa61c3c35d5403f5ea790ead5ebfbb93f2. -
Head SHA:
dcecd2aa61c3c35d5403f5ea790ead5ebfbb93f2 -
Workflow run: 29213679338
-
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 (4 files)"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file (4 files)"]
R1 --> V1["required checks"]
Evidence --> S2["Backend (2 files)"]
S2 --> I2["API and service runtime"]
I2 --> R2["Review risk: Backend (2 files)"]
R2 --> V2["backend tests"]
Evidence --> S3["Frontend (22 files)"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend (22 files)"]
R3 --> V3["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 headcaef574d0c3d3cc65b7de56f19b8188c5ada05be. -
Head SHA:
caef574d0c3d3cc65b7de56f19b8188c5ada05be -
Workflow run: 29214210221
-
Workflow attempt: 1
Coverage evidence
Coverage Evidence
- Head SHA:
caef574d0c3d3cc65b7de56f19b8188c5ada05be - Required test evidence: supported repository test suites must pass.
- Required docstring evidence: repository-owned docstring gates must pass when configured; otherwise docstring coverage is advisory.
Implementation completeness scan
$ python3 /home/runner/work/pg-erd-cloud/pg-erd-cloud/scripts/ci/implementation_completeness_scan.py --repo-root . --changed-files /tmp/tmp.vXXsRtxiG3
# Implementation Completeness Scan
- Checked runtime source files: 0
- Declaration handling: typing.Protocol, abc.ABC, @abstractmethod, and @overload placeholders are treated as contracts, not executable missing implementations.
- Result: PASS
- Reason: no executable placeholder implementations were found in changed runtime source files.
- Result: PASS
JavaScript/TypeScript package (frontend)
JavaScript/TypeScript dependencies (pnpm install)
$ pnpm install --frozen-lockfile
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
? Verifying lockfile against supply-chain policies (185 entries)...
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +154
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 154, reused 0, downloaded 92, added 4
Progress: resolved 154, reused 0, downloaded 154, added 154, done
✓ Lockfile passes supply-chain policies (185 entries in 2.1s)
dependencies:
+ @xyflow/react 12.11.1
+ react 19.2.7
+ react-dom 19.2.7
devDependencies:
+ @testing-library/jest-dom 6.9.1
+ @testing-library/react 16.3.2
+ @testing-library/user-event 14.6.1
+ @types/react 19.2.17
+ @types/react-dom 19.2.3
+ @vitest/coverage-v8 4.1.9
+ fast-check 4.8.0
+ jsdom 29.1.1
+ typescript 6.0.3
+ vite 8.1.1
+ vitest 4.1.9
Done in 3.1s using pnpm v11.12.0
- Result: PASS
JavaScript/TypeScript docstring coverage
- Result: PASS
- Reason: package.json exists, but no check:python-docstrings, docstring:coverage, or docs:coverage script is defined; docstring coverage is advisory.
JavaScript/TypeScript coverage script
$ pnpm run coverage
[WARN] Unsupported engine: wanted: {"node":">=26 <27"} (current: {"node":"v22.23.1","pnpm":"11.12.0"})
$ vitest run --coverage
�[1m�[30m�[46m RUN �[49m�[39m�[22m �[36mv4.1.9 �[39m�[90m/home/runner/work/pg-erd-cloud/pg-erd-cloud/pr-head/frontend�[39m
�[2mCoverage enabled with �[22m�[33mv8�[39m
�[32m✓�[39m src/erd/__tests__/export.test.ts �[2m(�[22m�[2m24 tests�[22m�[2m)�[22m�[32m 99�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ModalCoverage.test.tsx �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 897�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m covers AddTableModal visibility, input, validation, cancel, and submit �[33m 327�[2mms�[22m�[39m
�[32m✓�[39m src/api.coverage.test.ts �[2m(�[22m�[2m19 tests�[22m�[2m)�[22m�[32m 89�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/coverageEdges.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 20�[2mms�[22m�[39m
�[32m✓�[39m src/erd/convert.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 17�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.test.ts �[2m(�[22m�[2m17 tests�[22m�[2m)�[22m�[32m 34�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/mermaid.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[32m 19�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/autoInfer.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 12�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/DialogAccessibility.test.tsx �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[33m 686�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m closes with Escape and restores focus to the opener �[33m 328�[2mms�[22m�[39m
�[31m❯�[39m src/App.coverage.test.tsx �[2m(�[22m�[2m17 tests�[22m�[2m | �[22m�[31m1 failed�[39m�[2m)�[22m�[33m 7850�[2mms�[22m�[39m
�[32m✓�[39m shows loading and explicit authentication failure�[32m 272�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m navigates dashboard, project, and diagram states including empty/search branches �[33m 516�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m creates projects, validates and creates connections, and starts a snapshot �[33m 620�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m polls a terminal snapshot, builds graph state, and exercises editor handlers �[33m 501�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m adds nodes and exercises groups, cardinality, exports, inference, and clearing �[33m 889�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m covers guarded editor actions, navigation callbacks, and form selectors �[33m 1953�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m clears replacement copy timers and pending timers during close and unmount �[33m 528�[2mms�[22m�[39m
�[32m✓�[39m ignores authentication completions after unmount�[32m 12�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m logs auto-layout failures and preserves nodes added after the undo snapshot �[33m 578�[2mms�[22m�[39m
�[32m✓�[39m shows terminal refresh failures from the polling loop�[32m 165�[2mms�[22m�[39m
�[32m✓�[39m ignores stale project metadata failures after changing projects�[32m 132�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders snapshot failures and polls without a selected project �[33m 333�[2mms�[22m�[39m
�[32m✓�[39m renders user identity fallbacks and a diagram list without a project label�[32m 116�[2mms�[22m�[39m
�[32m✓�[39m ignores duplicate share creation while a request is pending�[32m 231�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m preserves positions across graph refresh and applies recommendations with sibling nodes �[32m 300�[2mms�[22m�[39m
�[31m �[31m�[31m falls back to node ids when auto-layout receives legacy nodes without titles�[39m�[32m 209�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m reports API effect failures, snapshot polling failures, share failures, and clipboard failures �[33m 493�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/ExportModal.test.tsx �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[33m 1241�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m separates project share links from export artifacts �[33m 477�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/exportDataDictionary.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 12�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/dbml.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[32m 8�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/TableNode.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 339�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNodeCoverage.test.tsx �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 826�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders truncation, empty metadata, falsy examples, badges, and overflow summaries �[33m 410�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m exercises every rendered-field memo comparison and the 25-column boundary �[33m 413�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/App.editTable.test.tsx �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 824�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders compact visual labels while preserving toolbar accessible names �[33m 578�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/businessGroups.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[32m 10�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality_extra.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 12�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/EditEdgeModal.test.tsx �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 526�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m renders correctly when editingEdge is provided �[33m 301�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/search.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[32m 9�[2mms�[22m�[39m
�[32m✓�[39m src/erd/__tests__/cardinality.fuzz.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 96�[2mms�[22m�[39m
�[32m✓�[39m src/types.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/erd/TableNode.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 23�[2mms�[22m�[39m
�[32m✓�[39m src/components/modals/GroupModal.test.tsx �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[32m 116�[2mms�[22m�[39m
�[32m✓�[39m src/erd/handleUtils.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[32m 7�[2mms�[22m�[39m
�[32m✓�[39m src/api.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[32m 5�[2mms�[22m�[39m
�[31m⎯⎯⎯⎯⎯⎯⎯�[39m�[1m�[41m Failed Tests 1 �[49m�[22m�[31m⎯⎯⎯⎯⎯⎯⎯�[39m
�[41m�[1m FAIL �[22m�[49m src/App.coverage.test.tsx�[2m > �[22mApp orchestration coverage�[2m > �[22mfalls back to node ids when auto-layout receives legacy nodes without titles
�[31m�[1mTestingLibraryElementError�[22m�[39m: Unable to find an accessible element with the role "button" and name "열기"
Here are the accessible roles:
link:
Name "본문 바로가기":
�[36m<a�[39m
�[33mclass�[39m=�[32m"skip-link"�[39m
�[33mhref�[39m=�[32m"#main"�[39m
�[36m/>�[39m
--------------------------------------------------
complementary:
Name "":
�[36m<aside�[39m
�[33mclass�[39m=�[32m"sidebar"�[39m
�[36m/>�[39m
--------------------------------------------------
heading:
Name "Cloud ERD":
�[36m<h2 />�[39m
Name "다이어그램":
�[36m<h1�[39m
�[33mid�[39m=�[32m"diagrams-title"�[39m
�[36m/>�[39m
--------------------------------------------------
navigation:
Name "주요 화면":
�[36m<nav�[39m
�[33maria-label�[39m=�[32m"주요 화면"�[39m
�[33mclass�[39m=�[32m"workspaceNav"�[39m
�[36m/>�[39m
--------------------------------------------------
button:
Name "대시보드":
�[36m<button�[39m
�[33mclass�[39m=�[32m"workspaceNav__item"�[39m
�[33mtype�[39m=�[32m"button"�[39m
�[36m/>�[39m
Name "프로젝트":
�[36m<button�[39m
�[33mclass�[39m=�[32m"workspaceNav__item"�[39m
�[33mtype�[39m=�[32m"button"�[39m
�[36m/>�[39m
Name "다이어그램":
�[36m<button�[39m
�[33maria-current�[39m=�[32m"page"�[39m
�[33mclass�[39m=�[32m"workspaceNav__item workspaceNav__item--active"�[39m
�[33mtype�[39m=�[32m"button"�[39m
�[36m/>�[39m
Name "편집기":
�[36m<button�[39m
�[33mclass�[39m=�[32m"workspaceNav__item"�[39m
�[33mtype�[39m=�[32m"button"�[39m
�[36m/>�[39m
Name "편집기로 이동":
�[36m<button�[39m
�[33mtype�[39m=�[32m"button"�[39m
�[36m/>�[39m
Name "편집기 열기":
�[36m<button�[39m
�[33mtype�[39m=�[32m"button"�[39m
�[36m/>�[39m
--------------------------------------------------
strong:
... output truncated: showing first 140 and last 180 of 343 lines ...
�[33mclass�[39m=�[32m"workspaceScreen"�[39m
�[36m/>�[39m
--------------------------------------------------
paragraph:
Name "":
�[36m<p />�[39m
--------------------------------------------------
searchbox:
Name "다이어그램 검색":
�[36m<input�[39m
�[33maria-label�[39m=�[32m"다이어그램 검색"�[39m
�[33mplaceholder�[39m=�[32m"다이어그램 검색"�[39m
�[33mtype�[39m=�[32m"search"�[39m
�[33mvalue�[39m=�[32m""�[39m
�[36m/>�[39m
--------------------------------------------------
Ignored nodes: comments, script, style
�[36m<body>�[39m
�[36m<div>�[39m
�[36m<div�[39m
�[33mclass�[39m=�[32m"layout"�[39m
�[36m>�[39m
�[36m<a�[39m
## Changed-File Evidence Map
```mermaid
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Frontend (5 files)"]
S1 --> I1["browser runtime and bundle"]
I1 --> R1["Review risk: Frontend (5 files)"]
R1 --> V1["frontend tests"]
Evidence --> S2["Changed file: pr_body.txt"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file: pr_body.txt"]
R2 --> V2["required checks"]
|
Closing this broader UX modal bundle because it remains changes-requested and is not the minimal safe path for the current cleanup queue. |
Understood. Acknowledging that this work is now obsolete and stopping work on this task. |
There was a problem hiding this comment.
Pull request overview
OpenCode model providers were unavailable for this same-head run, but deterministic current-head evidence is clean: coverage evidence passed, peer GitHub Checks are complete, medium-or-higher code-scanning alerts are clear, mergeability is clean, and reviewer threads are resolved or outdated.
Findings
No blocking findings.
Evidence
- Result: APPROVE
- Reason: current-head model-unavailable evidence fallback; coverage, docstring, peer GitHub Checks, code-scanning alerts, mergeability, and review threads were clear for current head.
- Scope:
unsupported - Changed files:
0 - Model-pool outcome:
exhausted - Head SHA:
00f92078c6702428fce0ede1fb310639ef2ada5f - Workflow run: 29216674643
- Workflow attempt: 1
This fallback does not suppress failed checks, medium-or-higher code-scanning alerts, merge conflicts, unresolved reviewer threads, or failed coverage evidence; any of those conditions still publish REQUEST_CHANGES or leave the approval state unchanged.
💡 What
Added keyboard submission (
Enterkey) and a delete confirmation dialog to theEditEdgeModalcomponent.🎯 Why
<form>elements inherently lack keyboard submission support, forcing users to switch from keyboard to mouse just to complete simple forms.📸 Before/After
window.confirmdialog to prevent accidental deletion.♿ Accessibility
aria-label="관계 삭제"to the delete button, providing better context for screen reader users compared to just the visible text ("삭제").PR created automatically by Jules for task 564009777686288305 started by @seonghobae