⚡ Bolt: NetworkGraph 내 Array.from(map).slice O(N) 병목 최적화 - #1593
⚡ Bolt: NetworkGraph 내 Array.from(map).slice O(N) 병목 최적화#1593seonghobae wants to merge 32 commits into
Conversation
NetworkGraph 컴포넌트의 useMemo 내부에서 발생하는 O(N) Array.from(map).slice() 패턴을 for...of 루프 기반의 O(1) 조기 종료 패턴으로 최적화하여 렌더링 성능을 개선했습니다.
|
👋 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. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthrough
ChangesNetworkGraph optimization
Priority: ⬇️ Low — Defer this change because it narrowly optimizes bounded option generation in NetworkGraph without altering public behavior. Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: 🔵 Low · up to NetworkGraph option generation is bounded to five relationships and eight nodes, but the regression test can still miss an iterator that consumes extra entries. Tightening the test would better protect the intended performance behavior before merge. 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
NetworkGraph 컴포넌트의 useMemo 내부에서 발생하는 O(N) Array.from(map).slice() 패턴을 for...of 루프 기반의 O(1) 조기 종료 패턴으로 최적화하여 렌더링 성능을 개선했습니다.
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head product diff. Coverage is a separate gate.
Changed files
.jules/bolt.md— repository behaviorCHANGELOG.md— repository behaviorfrontend/src/components/NetworkGraph.tsx— browser runtime and bundle
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Repository file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Repository file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Frontend: NetworkGraph.tsx"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend: NetworkGraph.tsx"]
R3 --> V3["frontend tests"]
Findings
No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.
- Head SHA:
9b89f64fc2ffc620379ff56ad8b939479ef1488d - Workflow run: 34161807402
- Workflow attempt: 1
- Coverage gate:
failure
Review outcome
Coverage is a gate, not the review. This body reviews the changed product files.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Repository file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Repository file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Frontend: NetworkGraph.tsx"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend: NetworkGraph.tsx"]
R3 --> V3["frontend tests"]
OpenCode Review Overview
Coverage evidence did not pass, so approval is blocked. The formal pull-request review is the source-backed diff review, not this status comment. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
@coderabbitai review Please review exact head |
|
|
|
Canonical-owner coordination: fresh PR #1598 proposed wrapping |
Acknowledged. I will not introduce |
This reverts the memoization change per PR feedback as the `NetworkGraph` effect is already scoped and the change overlaps with #1593.
NetworkGraph 컴포넌트의 useMemo 내부에서 발생하는 O(N) Array.from(map).slice() 패턴을 for...of 루프 기반의 O(1) 조기 종료 패턴으로 최적화하여 렌더링 성능을 개선했습니다.
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head product diff. Coverage is a separate gate.
Changed files
.jules/bolt.md— repository behaviorCHANGELOG.md— repository behaviorfrontend/src/components/NetworkGraph.tsx— browser runtime and bundle
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Repository file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Repository file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Frontend: NetworkGraph.tsx"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend: NetworkGraph.tsx"]
R3 --> V3["frontend tests"]
Findings
No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.
- Head SHA:
e20685f4c9773b17b0b6c827bb79173462f648c3 - Workflow run: 34179070431
- Workflow attempt: 1
- Coverage gate:
failure
Review outcome
Coverage is a gate, not the review. This body reviews the changed product files.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Repository file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Repository file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Frontend: NetworkGraph.tsx"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend: NetworkGraph.tsx"]
R3 --> V3["frontend tests"]
NetworkGraph 컴포넌트의 useMemo 내부에서 발생하는 O(N) Array.from(map).slice() 패턴을 for...of 루프 기반의 O(1) 조기 종료 패턴으로 최적화하여 렌더링 성능을 개선했습니다.
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head product diff. Coverage is a separate gate.
Changed files
.jules/bolt.md— repository behaviorCHANGELOG.md— repository behaviorfrontend/src/components/NetworkGraph.tsx— browser runtime and bundle
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Repository file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Repository file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Frontend: NetworkGraph.tsx"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend: NetworkGraph.tsx"]
R3 --> V3["frontend tests"]
Findings
No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.
- Head SHA:
8df8332b27754cd661a90de3451752efbd0b14ee - Workflow run: 34183746352
- Workflow attempt: 1
- Coverage gate:
failure
Review outcome
Coverage is a gate, not the review. This body reviews the changed product files.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: bolt.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: bolt.md"]
R1 --> V1["required checks"]
Evidence --> S2["Repository file: CHANGELOG.md"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Repository file: CHANGELOG.md"]
R2 --> V2["required checks"]
Evidence --> S3["Frontend: NetworkGraph.tsx"]
S3 --> I3["browser runtime and bundle"]
I3 --> R3["Review risk: Frontend: NetworkGraph.tsx"]
R3 --> V3["frontend tests"]
|
현재 head gate evidence
|
코드 리뷰를 통해 확인해주셔서 감사합니다. 지침에 따라 추가적인 코드 수정이나 force push를 시도하지 않고, CodeQL 호환성 분석의 실패가 해결되고 재검증 결과가 나올 때까지 기다리겠습니다. CI 상태가 대기(wait) 상태인 것으로 확인되어 추가 작업 없이 본 PR 작업을 마무리하겠습니다. |
Recover the previously reviewed CodeRabbit regression that was lost during the security-owner restack. Count every populated Map iterator independently and enforce <=6 edge reads and <=9 node reads so rerenders cannot hide one unbounded iterator inside an aggregate total. Signed-off-by: Seongho Bae <me@seonghobae.me>
|
@coderabbitai review Please review exact head |
Ignoring this comment as it is explicitly directed at @coderabbitai for a review pass on the exact head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
head="ba857c45cafc36db2c6ea2971faebbe08ec33681"
echo "== Exact head identity =="
echo "checked_out=$(git rev-parse HEAD)"
git show -s --format='requested=%H%nparents=%P%nsubject=%s' "$head"
if git diff --quiet HEAD "$head"; then
echo "checked_out_head_matches_requested=true"
else
echo "checked_out_head_matches_requested=false"
fi
echo "== Exact-head changed paths =="
git diff-tree --no-commit-id --name-status -r "$head"
echo "== Available merge base and effective PR paths =="
base=""
for ref in origin/main origin/master main master; do
if git rev-parse --verify --quiet "$ref" >/dev/null; then
base="$(git merge-base "$ref" "$head")"
printf 'base_ref=%s\nbase_commit=%s\n' "$ref" "$base"
git diff --name-status "$base" "$head"
break
fi
done
echo "== Effective scoped diff =="
if [ -n "$base" ]; then
git diff --find-renames "$base" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
else
git diff --find-renames "${head}^" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
fi
echo "== Exact-head scoped diff =="
git diff --find-renames "${head}^" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Candidate paths =="
fd -a -t f \
'NetworkGraph\.tsx|NetworkGraph\.bounded-options\.test\.tsx|NetworkGraph\.test\.tsx|package\.json|vitest\.config\..*|vite\.config\..*|tsconfig.*\.json' \
. -E node_modules -E dist -E build
echo "== NetworkGraph outline =="
ast-grep outline frontend/src/components/NetworkGraph.tsx --items all
echo "== Bounded option construction and consumers =="
rg -n -C 20 \
'relationshipOptions|nodeOptions|edgeMap\.values|nodeInstanceMap\.values|for\s*\(\s*const|break;|Array\.from|slice\s*\(|firstGraphEntryById|handleRelationshipOptionChange|handleNodeOptionChange' \
frontend/src/components/NetworkGraph.tsx
echo "== Focused regression outline and source =="
ast-grep outline frontend/src/components/NetworkGraph.bounded-options.test.tsx --items all
cat -n frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Prototype patch, iterator instrumentation, and restoration paths =="
rg -n -C 16 \
'Map\.prototype\.values|originalMapValues|afterEach|beforeEach|try|finally|restore|flushAsyncWork|act\s*\(|throw|next\s*\(|iterator|readCount|relationship|node' \
frontend/src/components/NetworkGraph.bounded-options.test.tsx \
frontend/src/components/NetworkGraph.test.tsx 2>/dev/null || true
echo "== Test discovery configuration =="
fd -a -t f 'package.json|vitest.config.*|vite.config.*|tsconfig*.json' frontend . \
-E node_modules -E dist -E build \
-x sh -c 'echo "--- $1"; rg -n -C 3 "\"test\"|vitest|include|exclude" "$1" || true' sh {}Length of output: 95810
현재 요청 범위에서 회귀를 찾지 못했습니다.
이 sandbox에서는 repository test를 실행할 수 없었습니다. You are interacting with an AI system. |
|
@coderabbitai review 현재 canonical NetworkGraph performance head |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
head="ba857c45cafc36db2c6ea2971faebbe08ec33681"
echo "== Exact head identity =="
echo "checked_out=$(git rev-parse HEAD)"
git show -s --format='requested=%H%nparents=%P%nsubject=%s' "$head"
git diff --quiet HEAD "$head" && echo "checked_out_head_matches_requested=true" || echo "checked_out_head_matches_requested=false"
echo "== Effective PR paths =="
base=""
for ref in origin/main origin/master main master; do
if git rev-parse --verify --quiet "$ref" >/dev/null; then
base="$(git merge-base "$ref" "$head")"
printf 'base_ref=%s\nbase=%s\n' "$ref" "$base"
git diff --name-status "$base" "$head"
break
fi
done
echo "== Effective two-file diff =="
if [ -n "$base" ]; then
git diff --find-renames "$base" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
else
git diff --find-renames "${head}^" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
fi
echo "== Implementation outline =="
ast-grep outline frontend/src/components/NetworkGraph.tsx --items all
echo "== Bounded-option implementation, handlers, and performance claims =="
rg -n -C 18 \
'relationshipOptions|nodeOptions|edgeMap\.values|nodeInstanceMap\.values|for\s*\(\s*const|break;|Array\.from|slice\s*\(|firstGraphEntryById|O\(1\)|O\(min|bounded|performance' \
frontend/src/components/NetworkGraph.tsx
echo "== Regression test outline and complete source =="
ast-grep outline frontend/src/components/NetworkGraph.bounded-options.test.tsx --items all
cat -n frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Prototype patch, iterator categorization, bounds, and restoration =="
rg -n -C 15 \
'Map\.prototype\.values|originalMapValues|afterEach|try|finally|restore|iterator|next\s*\(|readCount|relationship|node|toBeLessThanOrEqual|toEqual' \
frontend/src/components/NetworkGraph.bounded-options.test.tsxLength of output: 27779
현재 요청 범위에서 회귀를 찾지 못했습니다.
이 sandbox에서는 repository test를 실행할 수 없었습니다. You are interacting with an AI system. |
Ignoring this comment as it is explicitly directed at @coderabbitai for a review pass on the new head. No action is required from my side. |
|
@coderabbitai review 현재 exact head |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
head="ba857c45cafc36db2c6ea2971faebbe08ec33681"
echo "== Exact head identity =="
echo "checked_out=$(git rev-parse HEAD)"
git show -s --format='requested=%H%nparents=%P%nsubject=%s' "$head"
git diff --quiet HEAD "$head" && echo "checked_out_head_matches_requested=true" || echo "checked_out_head_matches_requested=false"
echo "== Effective PR paths and scoped diff =="
base=""
for ref in origin/main origin/master main master; do
if git rev-parse --verify --quiet "$ref" >/dev/null; then
base="$(git merge-base "$ref" "$head")"
printf 'base_ref=%s\nbase=%s\n' "$ref" "$base"
git diff --name-status "$base" "$head"
git diff --find-renames "$base" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
break
fi
done
if [ -z "$base" ]; then
git diff --find-renames "${head}^" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
fi
echo "== Implementation structure =="
ast-grep outline frontend/src/components/NetworkGraph.tsx --items all
echo "== Bounded loops and related performance claims =="
rg -n -C 18 \
'relationshipOptions|nodeOptions|edgeMap\.values|nodeInstanceMap\.values|for\s*\(\s*const|break;|Array\.from|slice\s*\(|O\(1\)|O\(min|bounded|performance' \
frontend/src/components/NetworkGraph.tsx
echo "== Focused regression structure and complete source =="
ast-grep outline frontend/src/components/NetworkGraph.bounded-options.test.tsx --items all
cat -n frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Iterator instrumentation and cleanup =="
rg -n -C 15 \
'Map\.prototype\.values|originalMapValues|afterEach|try|finally|restore|iterator|next\s*\(|readCount|toBeLessThanOrEqual|toEqual' \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Broad performance claims in requested scope =="
rg -n -i -C 3 'O\(1\)|end.to.end|rendering performance|NetworkGraph.*performance|performance.*NetworkGraph' \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx || trueLength of output: 27834
현재 요청 범위에서 회귀를 찾지 못했습니다.
Sandbox 정책상 repository test는 실행하지 않았습니다.
|
Ignoring this comment as it is explicitly directed at @coderabbitai for a review pass on the exact head |
|
@codex review 현재 exact head |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Ignoring this comment as it is explicitly directed at @codex for a review pass on the new head. No action is required from my side. |
|
To use Codex here, create a Codex account and connect to github. |
Preserve the NetworkGraph two-file delta as first-parent history while adopting #1623's validated Vitest lock-presence regression as the second-parent security prerequisite. Signed-off-by: Seongho Bae <me@seonghobae.me>
|
@coderabbitai review Please review exact current head |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
head="d01a5362c51154757d6d919e721e3b5c94165941"
echo "== Exact head identity =="
echo "checked_out=$(git rev-parse HEAD)"
git show -s --format='requested=%H%nparents=%P%nsubject=%s' "$head"
git diff --quiet HEAD "$head" && echo "checked_out_head_matches_requested=true" || echo "checked_out_head_matches_requested=false"
echo "== Exact-head changes =="
git diff-tree --no-commit-id --name-status -r "$head"
git diff --find-renames "${head}^" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Effective PR paths and scoped diff =="
base=""
for ref in origin/main origin/master main master; do
if git rev-parse --verify --quiet "$ref" >/dev/null; then
base="$(git merge-base "$ref" "$head")"
printf 'base_ref=%s\nbase=%s\n' "$ref" "$base"
git diff --name-status "$base" "$head"
git diff --find-renames "$base" "$head" -- \
frontend/src/components/NetworkGraph.tsx \
frontend/src/components/NetworkGraph.bounded-options.test.tsx
break
fi
done
echo "== Candidate files =="
fd -a -t f \
'NetworkGraph\.tsx|NetworkGraph\.bounded-options\.test\.tsx|NetworkGraph\.test\.tsx|package\.json|vitest\.config\..*|vite\.config\..*|tsconfig.*\.json' \
. -E node_modules -E dist -E build
echo "== NetworkGraph outline =="
ast-grep outline frontend/src/components/NetworkGraph.tsx --items all
echo "== Bounded-option construction, consumers, and performance claims =="
rg -n -C 20 \
'relationshipOptions|nodeOptions|edgeMap\.values|nodeInstanceMap\.values|for\s*\(\s*const|break;|Array\.from|slice\s*\(|firstGraphEntryById|O\(1\)|O\(min|bounded|performance' \
frontend/src/components/NetworkGraph.tsx
echo "== Focused regression structure and source =="
ast-grep outline frontend/src/components/NetworkGraph.bounded-options.test.tsx --items all
cat -n frontend/src/components/NetworkGraph.bounded-options.test.tsx
echo "== Iterator instrumentation and cleanup paths =="
rg -n -C 16 \
'Map\.prototype\.values|originalMapValues|afterEach|try|finally|restore|iterator|next\s*\(|readCount|toBeLessThanOrEqual|toEqual|throw' \
frontend/src/components/NetworkGraph.bounded-options.test.tsx \
frontend/src/components/NetworkGraph.test.tsx 2>/dev/null || true
echo "== Test discovery configuration =="
fd -a -t f 'package.json|vitest.config.*|vite.config.*|tsconfig*.json' frontend . \
-E node_modules -E dist -E build \
-x sh -c 'echo "--- $1"; rg -n -C 3 "\"test\"|vitest|include|exclude" "$1" || true' sh {}Length of output: 50108
현재 요청 범위에서 회귀를 찾지 못했습니다.
이 sandbox에서는 repository test를 실행할 수 없었습니다. You are interacting with an AI system. |
Ignoring this comment as it is explicitly directed at @coderabbitai and @codex for a review pass on the exact head |
|
To use Codex here, create a Codex account and connect to github. |
Preserve the generated proposal as first-parent history while adopting the canonical #1593 NetworkGraph performance owner. Add a focused regression that rejects whole-array map/filter/slice work for the five-label text summary; current #1593 source is intentionally RED against this invariant. Signed-off-by: Seongho Bae <me@seonghobae.me>
Current authority — 2026-09-10
#1623@17a7618eda2b212b691f08fa936e042b34258fc99a299c0b665808ff1602624a996a1663c4fb0e74frontend/src/components/NetworkGraph.tsxandfrontend/src/components/NetworkGraph.bounded-options.test.tsx.The current head is an ordinary non-force successor that preserves the prior #1593 product delta while adopting the current #1623 security owner. Its accepted contract is narrow: relationship option materialization preserves insertion order with edge iterators capped at ≤6 reads for five accepted relationships; node option materialization is capped at ≤9 reads for eight accepted nodes; the regression restores process-global
Map.prototype.valueseven on failure.No end-to-end graph-rendering O(1) or buyer p95 claim is made. Full graph normalization, label escaping, maps, and vis-network rendering still scale with graph size.
A newly generated overlapping PR #1628 was repaired into a dependent successor instead of becoming a competing owner. #1628 now bases on this exact head and owns only the separate five-label text-summary bounded-work follow-up plus its focused regression. The generated CHANGELOG/meta delta and duplicated relationship/node-option ownership were removed from its effective diff.
Pre-restack checks/reviews are historical only. Keep Draft until this owner reaches protected ancestry with exact-head hosted evidence, qualifying independent review, and appropriate rendered/performance evidence.
UI Delivery Gate: FAIL
Intentionality and bounded-content scope are PASS. Functional completeness/resilience/evidence remain incomplete until exact-head hosted execution, real rendered graph evidence, keyboard/responsive checks, and qualifying current-head review are present.