feat(ui): add Storybook design-token contract - #1354
Conversation
|
Warning Review limit reachedNext included review available in 58 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
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 |
|
@opencode-agent review current exact head |
|
Exact-current-head read-only review request for The candidate now validates every Storybook token alias against @coderabbitai review Review read-only. Do not mutate the branch, synthesize author approval, weaken checks, or merge outside normal protection. |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="c14c4912149e65af520843b1321b654d08469e24"
head="b689a6026e8d0900dc9b992347940ad9f34b0001"
echo "== Checked-out commit =="
git rev-parse HEAD
echo "== Base and head objects =="
git cat-file -t "$base"
git cat-file -t "$head"
echo "== Changed files and status =="
git diff --name-status "$base" "$head"
echo "== Diff statistics =="
git diff --stat "$base" "$head"
echo "== Candidate file locations =="
fd -a '^(storybook-design-tokens(\.test)?\.ts|globals\.css)$' frontend 2>/dev/null || true
echo "== Adapter and test outlines =="
ast-grep outline frontend/src/app/storybook-design-tokens.test.ts --items all 2>/dev/null || true
echo "-- adapter --"
cat -n frontend/src/app/storybook-design-tokens.css 2>/dev/null || true
echo "-- test --"
cat -n frontend/src/app/storybook-design-tokens.test.ts 2>/dev/null || true
echo "== Production CSS token declarations/references =="
rg -n -C2 --glob 'globals.css' '(--[A-Za-z0-9_-]+:|var\(--[A-Za-z0-9_-]+\))' frontend/src 2>/dev/null || true
echo "== Documentation files in exact diff =="
git diff --name-only "$base" "$head" | while IFS= read -r path; do
case "$path" in
*.md|*.mdx|*.txt)
echo "-- $path --"
git show "$head:$path" | cat -n
;;
esac
done
echo "== Package and lockfile changes =="
git diff --name-only "$base" "$head" | rg '(^|/)(package\.json|pnpm-lock\.yaml|package-lock\.json|yarn\.lock)$' || true
echo "== GitHub PR and exact-head checks =="
gh pr view 1354 --repo ContextualWisdomLab/naruon --json number,headRefOid,baseRefOid,reviewDecision,mergeStateStatus,statusCheckRollupLength of output: 47346 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== Frontend package and test configuration candidates =="
fd -a '^(package\.json|vitest\.config\.(ts|js|mts|mjs|cts|cjs)|vite\.config\.(ts|js|mts|mjs|cts|cjs)|pnpm-workspace\.yaml)$' . \
-E node_modules -E .git | sort
echo "== Frontend package scripts and Vitest configuration =="
for path in \
frontend/package.json \
frontend/vitest.config.ts \
frontend/vite.config.ts \
package.json \
pnpm-workspace.yaml
do
if [ -f "$path" ]; then
echo "-- $path --"
cat -n "$path"
fi
done
echo "== Test-location and test-pattern references =="
rg -n -C2 --glob '!node_modules/**' \
'(include|exclude|testMatch|testRegex|vitest|\.test\.(ts|tsx|js|jsx))' \
frontend package.json pnpm-workspace.yaml 2>/dev/null || true
echo "== Static token-contract evaluation =="
python3 - <<'PY'
from pathlib import Path
import re, sys
adapter = Path("frontend/src/app/storybook-design-tokens.css").read_text()
runtime = Path("frontend/src/app/globals.css").read_text()
categories = [
"Naruon Colors", "Naruon Sidebar Colors", "Naruon Typography",
"Naruon Font Sizes", "Naruon Line Heights", "Naruon Spacing",
"Naruon Radius", "Naruon Elevation",
]
names = re.findall(r"^\s*(--naruon-token-[a-z0-9-]+)\s*:", adapter, re.I | re.M)
aliases = re.findall(
r"^\s*--naruon-token-[a-z0-9-]+\s*:\s*var\((--[a-z0-9-]+)\)\s*;",
adapter, re.I | re.M,
)
live = set(re.findall(r"^\s*(--[a-z0-9-]+)\s*:", runtime, re.I | re.M))
remote_patterns = [
r"`@import`\s+url\(",
r"url\s*\(\s*[\"']?\s*(?:https?:)?//",
r"https?://",
]
print(f"token names: {len(names)}; unique: {len(set(names))}")
print(f"category annotations: {[c for c in categories if '`@tokens` ' + c in adapter]}")
print(f"presenter annotations: {len(re.findall(r'`@presenter` ', adapter))}")
print(f"direct aliases: {len(aliases)}; unresolved: {sorted(set(aliases) - live)}")
print(f"remote-pattern matches: {[p for p in remote_patterns if re.search(p, adapter, re.I)]}")
if len(names) != len(set(names)) or set(aliases) - live or any(re.search(p, adapter, re.I) for p in remote_patterns):
sys.exit(1)
PY
echo "== Exact diff for review =="
git diff --check c14c4912149e65af520843b1321b654d08469e24 b689a6026e8d0900dc9b992347940ad9f34b0001
git diff --unified=30 c14c4912149e65af520843b1321b654d08469e24 b689a6026e8d0900dc9b992347940ad9f34b0001 -- \
frontend/src/app/storybook-design-tokens.css \
frontend/src/app/storybook-design-tokens.test.tsLength of output: 116142 🤖 web_search executed:
Length of output: 8573 🤖 web_search executed:
Length of output: 9627 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== Current PR review threads =="
gh api graphql \
-F owner="ContextualWisdomLab" \
-F name="naruon" \
-F number=1354 \
-f query='
query($owner: String!, $name: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
headRefOid
isDraft
reviewDecision
reviews(first: 100) {
nodes { author { login } state commit { oid } submittedAt }
}
reviewThreads(first: 100) {
nodes { isResolved isOutdated comments(first: 1) { nodes { author { login } body path line } } }
}
}
}
}' \
--jq '.data.repository.pullRequest'
echo "== Current exact-head check summary =="
gh pr view 1354 --repo ContextualWisdomLab/naruon \
--json headRefOid,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{headRefOid, mergeStateStatus, reviewDecision, checks: [.statusCheckRollup[] | {name, status, conclusion: (.conclusion // .state // "")}]}'Length of output: 3787 🤖 web_search executed:
Length of output: 10689
The static implementation is correct within the stated boundary.
Please correct these documentation claims before approval:
The required exact-head checks remain queued or in progress. They are not passing evidence. The pull request remains
|
|
Exact-current-head read-only design-system review request for All exact-head repository CI, Docker, dependency, security, Bandit, and Semgrep workflows are terminal-success. Review the production-alias versus @opencode-agent review Review read-only. Do not mutate the branch, synthesize author approval, bypass protection, or merge. |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="c14c4912149e65af520843b1321b654d08469e24"
head="22d1857e2b489eb332923f781e5163d78bcfbe82"
repo="ContextualWisdomLab/naruon"
echo "== Commit identity =="
printf "checked_out="; git rev-parse HEAD
printf "base="; git rev-parse "$base"
printf "head="; git rev-parse "$head"
echo "== Changed files =="
git diff --name-status "$base" "$head"
echo "== Diff check =="
git diff --check "$base" "$head"
echo "== Package and lockfile changes =="
git diff --name-only "$base" "$head" | rg '(^|/)(package\.json|pnpm-lock\.yaml|package-lock\.json|yarn\.lock)$' || true
echo "== Exact diff =="
git diff --unified=20 "$base" "$head"
echo "== Relevant production CSS files =="
fd -a '^globals\.css$' frontend 2>/dev/null || true
echo "== globals.css token declarations and references =="
rg -n -C2 --glob 'globals.css' '(--[A-Za-z0-9_-]+\s*:|var\(--[A-Za-z0-9_-]+\))' frontend/src 2>/dev/null || true
echo "== Source and test outlines =="
ast-grep outline frontend/src/app/storybook-design-tokens.test.ts --items all 2>/dev/null || true
echo "== Test and adapter contents =="
for p in frontend/src/app/storybook-design-tokens.css frontend/src/app/storybook-design-tokens.test.ts; do
if [ -f "$p" ]; then
echo "-- $p --"
cat -n "$p"
fi
done
echo "== Frontend test configuration =="
for p in frontend/package.json frontend/vitest.config.ts frontend/vite.config.ts package.json pnpm-workspace.yaml; do
if [ -f "$p" ]; then
echo "-- $p --"
cat -n "$p"
fi
done
echo "== GitHub exact-head status and review state =="
gh pr view 1354 --repo "$repo" \
--json headRefOid,baseRefOid,isDraft,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{headRefOid,baseRefOid,isDraft,mergeStateStatus,reviewDecision,checks:[.statusCheckRollup[] | {name,status,conclusion:(.conclusion // .state // "")}]}'
echo "== Review threads =="
gh api graphql \
-F owner="ContextualWisdomLab" -F name="naruon" -F number=1354 \
-f query='
query($owner: String!, $name: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
reviewThreads(first: 100) {
nodes {
isResolved
isOutdated
comments(first: 1) { nodes { author { login } body path line } }
}
}
}
}
}' --jq '.data.repository.pullRequest.reviewThreads.nodes'Length of output: 55275 🏁 Script executed: #!/bin/bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import re
adapter = Path("frontend/src/app/storybook-design-tokens.css").read_text()
runtime = Path("frontend/src/app/globals.css").read_text()
required_categories = {
"Naruon Colors",
"Naruon Sidebar Colors",
"Naruon Typography",
"Naruon Candidate Font Sizes",
"Naruon Candidate Line Heights",
"Naruon Candidate Spacing",
"Naruon Radius",
"Naruon Candidate Elevation",
}
names = re.findall(r"^\s*(--naruon-token-[a-z0-9-]+)\s*:", adapter, re.I | re.M)
aliases = re.findall(
r"^\s*--naruon-token-[a-z0-9-]+\s*:\s*var\((--[a-z0-9-]+)\)\s*;",
adapter, re.I | re.M,
)
live = set(re.findall(r"^\s*(--[a-z0-9-]+)\s*:", runtime, re.I | re.M))
blocks = re.findall(
r"/\*\*\s*\n\s*\*\s*`@tokens` ([^\n]+)\n([\s\S]*?)\*/\s*((?:\s*--naruon-token-[a-z0-9-]+\s*:[^;]+;)+)",
adapter, re.I | re.M,
)
categories = {name.strip() for name, _, _ in blocks}
literal_categories = [
name.strip() for name, metadata, declarations in blocks
if any("var(" not in line for line in declarations.splitlines() if "--naruon-token-" in line)
]
candidate_literals = [
name.strip() for name, metadata, declarations in blocks
if any("var(" not in line for line in declarations.splitlines() if "--naruon-token-" in line)
and re.search(r"`@status`\s+candidate\b", metadata, re.I)
]
remote_patterns = {
"import-url": r"`@import`\s+url\(",
"protocol-or-protocol-relative-url": r"url\s*\(\s*[\"']?\s*(?:https?:)?//",
"http-url": r"https?://",
}
print("token_count=", len(names))
print("unique_token_count=", len(set(names)))
print("categories=", sorted(categories))
print("missing_required_categories=", sorted(required_categories - categories))
print("extra_categories=", sorted(categories - required_categories))
print("alias_count=", len(aliases))
print("unresolved_aliases=", sorted(set(aliases) - live))
print("literal_categories=", literal_categories)
print("candidate_labeled_literal_categories=", candidate_literals)
print("uncategorized_or_unlabeled_literals=", sorted(set(literal_categories) - set(candidate_literals)))
print("presenter_count=", len(re.findall(r"^\s*\*\s*`@presenter`\s+\S+", adapter, re.M)))
print("remote_matches=", [
name for name, pattern in remote_patterns.items() if re.search(pattern, adapter, re.I)
])
PY
echo "== Documentation claims requiring external validation =="
rg -n -C2 \
'(Storybook 10\.5|`@storybook/nextjs-vite`|storybook-design-token|DTCG|Design Tokens|WCAG|axe-core|57%)' \
docs/doctoring/storybook-design-token-contract.md \
docs/ui-ux/storybook-design-token-contract.md \
docs/plans/2026-08-15-storybook-design-token-library.mdLength of output: 21730 🤖 web_search executed:
Length of output: 13217
The static token contract is correct.
One documentation correction is still required.
The DTCG reference is now consistent with the Final Community Group Report dated 28 October 2025. The report states that it is stable and not on the W3C Standards Track. The GitHub status snapshot does not yet support the terminal-success assertion.
|
|
PR governance metadata gate is not ready for
|
|
@opencode-agent review Review exact head |
|
Exact-current-head design-system review request for The protected-base diff is still the five declared additive Storybook/token-contract files. Application CI, container build, dependency review, Bandit, Security Scan, and Semgrep are terminal-success; no review submission or inline thread exists on this head. Review the production-token authority versus candidate-scale boundary, alias resolution, no-remote-resource contract, DTCG/Figma separation, and next-slice Storybook compatibility plan. @opencode-agent review Read-only review. Do not update the branch, change the reviewer or credential chain, promote candidate tokens, add dependencies, weaken checks, synthesize author approval, or merge. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
base="bc98789521d21271e84789888413c182aa111b4d"
head="3cc9716232a53dca07b94f610e14816070f1f842"
repo="ContextualWisdomLab/naruon"
echo "== Commit identity =="
printf "checked_out="; git rev-parse HEAD
printf "base="; git rev-parse "$base"
printf "head="; git rev-parse "$head"
echo "== Changed files =="
git diff --name-status "$base" "$head"
echo "== Diff check =="
git diff --check "$base" "$head"
echo "== Manifest and lockfile changes =="
git diff --name-only "$base" "$head" |
rg '(^|/)(package\.json|pnpm-lock\.yaml|package-lock\.json|yarn\.lock)$' || true
echo "== Relevant file map =="
fd -a '^(storybook-design-tokens(\.test)?\.ts|globals\.css)$' frontend 2>/dev/null || true
echo "== Test outline =="
ast-grep outline frontend/src/app/storybook-design-tokens.test.ts --items all 2>/dev/null || true
echo "== Adapter, test, and relevant documentation =="
for path in \
frontend/src/app/storybook-design-tokens.css \
frontend/src/app/storybook-design-tokens.test.ts \
docs/doctoring/storybook-design-token-contract.md \
docs/ui-ux/storybook-design-token-contract.md \
docs/plans/2026-08-15-storybook-design-token-library.md
do
if git cat-file -e "$head:$path" 2>/dev/null; then
echo "-- $path --"
git show "$head:$path" | cat -n
fi
done
echo "== Static token-contract evaluation =="
HEAD_SHA="$head" python3 - <<'PY'
from pathlib import Path
import re, subprocess, os, sys
head = os.environ["HEAD_SHA"]
def show(path):
return subprocess.check_output(["git", "show", f"{head}:{path}"], text=True)
adapter = show("frontend/src/app/storybook-design-tokens.css")
runtime = show("frontend/src/app/globals.css")
required = {
"Naruon Colors", "Naruon Sidebar Colors", "Naruon Typography",
"Naruon Candidate Font Sizes", "Naruon Candidate Line Heights",
"Naruon Candidate Spacing", "Naruon Radius", "Naruon Candidate Elevation",
}
names = re.findall(r"^\s*(--naruon-token-[a-z0-9-]+)\s*:", adapter, re.I | re.M)
aliases = re.findall(r"^\s*--naruon-token-[a-z0-9-]+\s*:\s*var\((--[a-z0-9-]+)\)\s*;", adapter, re.I | re.M)
live = set(re.findall(r"^\s*(--[a-z0-9-]+)\s*:", runtime, re.I | re.M))
blocks = re.findall(r"/\*\*\s*\n\s*\*\s*`@tokens` ([^\n]+)\n([\s\S]*?)\*/\s*((?:\s*--naruon-token-[a-z0-9-]+\s*:[^;]+;)+)", adapter, re.I | re.M)
categories = {name.strip() for name, _, _ in blocks}
literal = [name.strip() for name, meta, decl in blocks if any("var(" not in x for x in decl.splitlines() if "--naruon-token-" in x)]
candidate = [name.strip() for name, meta, decl in blocks if any("var(" not in x for x in decl.splitlines() if "--naruon-token-" in x) and re.search(r"`@status`\s+candidate\b", meta, re.I)]
remote = [p for p in [r"`@import`\s+url\(", r"url\s*\(\s*[\"']?\s*(?:https?:)?//", r"https?://"] if re.search(p, adapter, re.I)]
print("token_count=", len(names))
print("unique_token_count=", len(set(names)))
print("missing_categories=", sorted(required - categories))
print("unresolved_aliases=", sorted(set(aliases) - live))
print("literal_categories=", literal)
print("literal_categories_without_candidate_status=", sorted(set(literal) - set(candidate)))
print("presenter_count=", len(re.findall(r"^\s*\*\s*`@presenter`\s+\S+", adapter, re.M)))
print("remote_patterns=", remote)
if len(names) != len(set(names)) or required - categories or set(aliases) - live or set(literal) - set(candidate) or remote:
sys.exit(1)
PY
echo "== Exact-head pull request state and reviews =="
gh pr view 1354 --repo "$repo" \
--json headRefOid,baseRefOid,isDraft,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{headRefOid,baseRefOid,isDraft,mergeStateStatus,reviewDecision,checks:[.statusCheckRollup[]|{name,status,conclusion:(.conclusion // .state // "")}]}'
gh api graphql \
-F owner="ContextualWisdomLab" -F name="naruon" -F number=1354 \
-f query='
query($owner: String!, $name: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
reviewThreads(first: 100) {
nodes {
isResolved
isOutdated
comments(first: 1) { nodes { author { login } body path line } }
}
}
reviews(first: 100) {
nodes { author { login } state commit { oid } submittedAt }
}
}
}
}' --jq '.data.repository.pullRequest'Length of output: 36503 🤖 web_search executed:
Length of output: 7132 🏁 Script executed: #!/bin/bash
set -euo pipefail
head="3cc9716232a53dca07b94f610e14816070f1f842"
repo="ContextualWisdomLab/naruon"
echo "== Static contract =="
git show "$head:frontend/src/app/storybook-design-tokens.css" |
python3 -c '
import re, sys
s=sys.stdin.read()
names=re.findall(r"^\s*(--naruon-token-[a-z0-9-]+)\s*:", s, re.I|re.M)
blocks=re.findall(r"/\*\*\s*\n\s*\*\s*`@tokens` ([^\n]+)\n([\s\S]*?)\*/\s*((?:\s*--naruon-token-[a-z0-9-]+\s*:[^;]+;)+)", s, re.I|re.M)
literal=[n.strip() for n,m,d in blocks if any("var(" not in x for x in d.splitlines() if "--naruon-token-" in x)]
candidate=[n.strip() for n,m,d in blocks if any("var(" not in x for x in d.splitlines() if "--naruon-token-" in x) and re.search(r"`@status`\s+candidate\b",m,re.I)]
print("tokens",len(names),"unique",len(set(names)))
print("categories",len(blocks),"presenters",len(re.findall(r"^\s*\*\s*`@presenter`\s+\S+",s,re.M)))
print("literal_without_candidate",sorted(set(literal)-set(candidate)))
print("remote",bool(re.search(r"`@import`\s+url\(|url\s*\(\s*[\"'\''']?\s*(?:https?:)?//|https?://",s,re.I)))
'
echo "== Alias closure =="
python3 - "$head" <<'PY'
import re, subprocess, sys
head=sys.argv[1]
get=lambda p: subprocess.check_output(["git","show",f"{head}:{p}"],text=True)
a=get("frontend/src/app/storybook-design-tokens.css")
g=get("frontend/src/app/globals.css")
aliases=set(re.findall(r"^\s*--naruon-token-[a-z0-9-]+\s*:\s*var\((--[a-z0-9-]+)\)\s*;",a,re.I|re.M))
live=set(re.findall(r"^\s*(--[a-z0-9-]+)\s*:",g,re.I|re.M))
print("aliases",len(aliases),"unresolved",sorted(aliases-live))
PY
echo "== Pull request exact-head status =="
gh pr view 1354 --repo "$repo" --json headRefOid,baseRefOid,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{headRefOid,baseRefOid,mergeStateStatus,reviewDecision,checks:[.statusCheckRollup[]|{name,status,conclusion:(.conclusion // .state // "")}]}'
echo "== Pull request review state =="
gh api graphql -F owner="ContextualWisdomLab" -F name="naruon" -F number=1354 -f query='
query($owner: String!, $name: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
reviewThreads(first: 100) { nodes { isResolved isOutdated } }
reviews(first: 100) { nodes { author { login } state commit { oid } } }
}
}
}' --jq '.data.repository.pullRequest'Length of output: 2713 🤖 web_search executed:
Length of output: 5523 🏁 Script executed: #!/bin/bash
set -euo pipefail
head="3cc9716232a53dca07b94f610e14816070f1f842"
repo="ContextualWisdomLab/naruon"
echo "== Static contract and alias closure =="
python3 - "$head" <<'PY'
import re
import subprocess
import sys
head = sys.argv[1]
def show(path):
return subprocess.check_output(["git", "show", f"{head}:{path}"], text=True)
adapter = show("frontend/src/app/storybook-design-tokens.css")
runtime = show("frontend/src/app/globals.css")
required = {
"Naruon Colors", "Naruon Sidebar Colors", "Naruon Typography",
"Naruon Candidate Font Sizes", "Naruon Candidate Line Heights",
"Naruon Candidate Spacing", "Naruon Radius", "Naruon Candidate Elevation",
}
names = re.findall(r"^\s*(--naruon-token-[a-z0-9-]+)\s*:", adapter, re.I | re.M)
aliases = set(re.findall(
r"^\s*--naruon-token-[a-z0-9-]+\s*:\s*var\((--[a-z0-9-]+)\)\s*;",
adapter, re.I | re.M,
))
live = set(re.findall(r"^\s*(--[a-z0-9-]+)\s*:", runtime, re.I | re.M))
blocks = re.findall(
r"/\*\*\s*\n\s*\*\s*`@tokens` ([^\n]+)\n([\s\S]*?)\*/\s*((?:\s*--naruon-token-[a-z0-9-]+\s*:[^;]+;)+)",
adapter, re.I | re.M,
)
categories = {name.strip() for name, _, _ in blocks}
literal = [
name.strip() for name, _, declarations in blocks
if any("var(" not in line for line in declarations.splitlines()
if "--naruon-token-" in line)
]
candidate = [
name.strip() for name, metadata, declarations in blocks
if any("var(" not in line for line in declarations.splitlines()
if "--naruon-token-" in line)
and re.search(r"`@status`\s+candidate\b", metadata, re.I)
]
remote = bool(re.search(
r"`@import`\s+url\(|url\s*\(\s*[\"']?\s*(?:https?:)?//|https?://",
adapter, re.I,
))
print("tokens=", len(names), "unique=", len(set(names)))
print("missing_categories=", sorted(required - categories))
print("presenters=", len(re.findall(r"^\s*\*\s*`@presenter`\s+\S+", adapter, re.M)))
print("aliases=", len(aliases), "unresolved=", sorted(aliases - live))
print("literal_categories_without_candidate_status=", sorted(set(literal) - set(candidate)))
print("has_remote_resource_pattern=", remote)
PY
echo "== Exact-head pull request status =="
gh pr view 1354 --repo "$repo" \
--json headRefOid,baseRefOid,mergeStateStatus,reviewDecision,statusCheckRollup \
--jq '{headRefOid,baseRefOid,mergeStateStatus,reviewDecision,checks:[.statusCheckRollup[]|{name,status,conclusion:(.conclusion // .state // "")}]}'
echo "== Exact-head review state =="
gh api graphql \
-F owner="ContextualWisdomLab" -F name="naruon" -F number=1354 \
-f query='
query($owner: String!, $name: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
reviewThreads(first: 100) { nodes { isResolved isOutdated } }
reviews(first: 100) { nodes { author { login } state commit { oid } } }
}
}
}' --jq '.data.repository.pullRequest'Length of output: 6852
The static design-token contract is correct within the declared boundary.
One documentation correction is required.
The exact-head status remains incomplete. You are interacting with an AI system. |
|
Exact-head semantic review requested for the bounded Storybook/design-token contract. Repository-native application, container, dependency, Bandit, security, and Semgrep workflows are terminal-success on @opencode-agent |
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
@opencode-agent review Review exact current head |
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 head952a6645eb860d4e618aa2c5f2deca62d396417c. -
Head SHA:
952a6645eb860d4e618aa2c5f2deca62d396417c -
Workflow run: 32123653704
-
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["Docs (3 files)"]
S1 --> I1["operator or user guidance"]
I1 --> R1["Review risk: Docs (3 files)"]
R1 --> V1["docs review"]
Evidence --> S2["Frontend (2 files)"]
S2 --> I2["browser runtime and bundle"]
I2 --> R2["Review risk: Frontend (2 files)"]
R2 --> V2["frontend tests"]
OpenCode Review Overview
Pull request overviewOpenCode cannot approve yet because required coverage evidence did not pass. Review outcome1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence
Coverage evidenceCoverage evidence job did not run or did not publish coverage evidence. Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Docs (3 files)"]
S1 --> I1["operator or user guidance"]
I1 --> R1["Review risk: Docs (3 files)"]
R1 --> V1["docs review"]
Evidence --> S2["Frontend (2 files)"]
S2 --> I2["browser runtime and bundle"]
I2 --> R2["Review risk: Frontend (2 files)"]
R2 --> V2["frontend tests"]
|
|
@coderabbitai review |
|
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 head3a59542d268c069a5b00851ce922fcae8722f3e7. -
Head SHA:
3a59542d268c069a5b00851ce922fcae8722f3e7 -
Workflow run: 32418989285
-
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["Docs (3 files)"]
S1 --> I1["operator or user guidance"]
I1 --> R1["Review risk: Docs (3 files)"]
R1 --> V1["docs review"]
Evidence --> S2["Frontend (2 files)"]
S2 --> I2["browser runtime and bundle"]
I2 --> R2["Review risk: Frontend (2 files)"]
R2 --> V2["frontend tests"]
Current-head review dispositionRestacked the Storybook design-token contract onto exact No current substantive review finding was present. Focused verification after restack: |
|
@opencode-agent @cwl-noema-review Please independently review exact current head |
Stale review: cited a coverage-evidence/required-check failure on an earlier commit; current head has been verified (gh pr checks) to pass coverage-evidence and all other non-metadata-gate required checks, with no current-head review from this reviewer. Dismissing as superseded per AGENTS.md stale-review guidance.
|
Caution Review failedAn error occurred during the review process. Please try again later. 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 |
1 similar comment
|
Caution Review failedAn error occurred during the review process. Please try again later. 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 |
Current-head review disposition
The informational thread is being resolved after this disposition; no approval or check is being fabricated. |
Description
This Ready PR is reconciled onto the current protected
developand remains a bounded five-file Storybook/design-token contract slice. Predecessor evidence does not transfer.develop@81c105645ca6e680f5f8c15ba9c33b67eb63c48b.84edbbf152d257cd05777bf0b007fcfec2ac1d18.feat/storybook-token-contract.developinto the existing feature lineage; no force-push, dummy commit, empty requeue, or product conflict is claimed.frontend/src/app/storybook-design-tokens.cssand its regression test. There is no package, lockfile,.storybookruntime, database, network, model, or credential delta.Buyer-visible/design-system outcome
Naruon already has broad UI surfaces, but repeated objects are still reviewed as product pages rather than through a reusable component/design-system contract. This slice establishes a tested Storybook-readable token adapter while keeping production CSS authoritative and preventing documentation-only values from being mistaken for accepted runtime tokens.
Customer next action: do not treat Storybook documentation scales as accepted production tokens. Production CSS remains runtime authority.
Implemented contract
frontend/src/app/storybook-design-tokens.cssexposes static@tokenscategories and presenter hints.@status candidate.frontend/src/app/storybook-design-tokens.test.tslocks category coverage, unique token names, mappings, complete alias resolution againstglobals.css, candidate labeling, and the no-remote-resource boundary..storybookconfig, DTCG JSON artifact, component story, or Figma mapping is introduced here.The follow-on dependency slice must pin an exactly compatible Storybook package set for the then-current Next.js/React toolchain, prove browser-test integration, add accessibility/interaction gates, audit or remove candidate scales before product/Figma consumption, and keep production tokens—not documentation CSS—as runtime authority.
Current exact-head verification
Repository-owned pull-request workflows on exact head
84edbbf152d257cd05777bf0b007fcfec2ac1d18are terminal-success:32471618625;32471618752;32471618640;32471618596;32471618586;32471618631.The current formal review inventory contains a Devin
COMMENTEDreview only. Its one current inline note observes that radius aliases resolve through Tailwind@theme inline; that note is informational for this static, non-imported adapter and does not identify a shipped runtime defect. The thread has been resolved after checking the exact token file andglobals.css. Dismissed OpenCodeREQUEST_CHANGESreviews belong to predecessor heads and are non-passing historical evidence.Repository protection still requires central contexts including coverage, OpenCode review, Strix, image validation, dependency/security scanners, and related live required workflows on the unchanged head. Repository-owned success alone is not merge authorization, and no qualifying independent non-author current-head approval is present.
Figma / Storybook authority boundary
Fresh design-source inspection on 2026-08-22 found that the repository's
design-qa.mdpoints to Figma file68b5XB58w8nwT2LYOOnikK, while the live file currently exposes only the top-levelSource Mappage. The repository document still describes additional Foundations, Components, Desktop, Mobile, and QA pages. This PR therefore makes no claim that Figma variables/components are synchronized or that those historical node references are currently authoritative.Likewise, this slice deliberately does not install a Storybook runtime. It is the static token-contract precursor. Figma ↔ Storybook executable synchronization remains follow-on work under the existing design-sync/product-gap tracking and must use a fresh live Figma file plus an exact-head Storybook build when implemented.
Standards and claim boundary
Merge gate
Do not merge from predecessor evidence. Merge only if the unchanged exact current head satisfies every live repository/organization required workflow, package/provenance and review-thread rule, has zero valid unresolved findings, and receives the qualifying independent current-head/latest-push non-author
APPROVEDreview required by protecteddevelop.No self-approval, branch-protection bypass, gate weakening, stale/predecessor/status-only/model-only evidence, or synthetic approval is acceptable. Issue #1371 remains the independent-review-path prerequisite.
Refs #1017, #1350, #1371.