Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions content/zh/activities/anniversary-2026/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SOFAStack 8周年:AI Agent PR 挑战赛任务池</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;600&display=swap" rel="stylesheet">
<style>
body { background-color: #0d1117; font-family: 'Fira Code', monospace; color: #e6edf3; -webkit-tap-highlight-color: transparent; }
.glass-card { background: rgba(22, 27, 34, 0.8); backdrop-filter: blur(10px); border: 1px solid #30363d; border-radius: 12px; display: flex; flex-direction: column; transition: all 0.2s ease; height: 100%; }
.glass-card:hover { border-color: #58a6ff; box-shadow: 0 0 15px rgba(88, 166, 255, 0.15); }
.tag-easy { background: #238636; }
.tag-medium { background: #9e6a03; }
.tag-hard, .tag-difficulty { background: #da3633; }
.tab-btn { position: relative; padding: 10px 16px; transition: color 0.3s; white-space: nowrap; color: #8b949e; font-size: 14px; flex-shrink: 0; }
.tab-btn.active { color: #58a6ff; font-weight: bold; }
.tab-btn.active::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 100%; height: 2px; background: #58a6ff; }
.no-scrollbar::-webkit-scrollbar { display: none; }
</style>
</head>
<body class="p-4 md:p-8">

<header class="text-center mb-8">
<h1 class="text-3xl font-bold mb-2 tracking-tight" style="text-shadow: 0 0-10px rgba(88,166,255,0.5)">🦐 养虾修代码</h1>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix CSS syntax error in text-shadow.

The value 0 0-10px is malformed — it's missing a space between 0 and -10px. Since blur-radius cannot be negative, this should likely be 0 0 10px.

🔧 Suggested fix
-        <h1 class="text-3xl font-bold mb-2 tracking-tight" style="text-shadow: 0 0-10px rgba(88,166,255,0.5)">🦐 养虾修代码</h1>
+        <h1 class="text-3xl font-bold mb-2 tracking-tight" style="text-shadow: 0 0 10px rgba(88,166,255,0.5)">🦐 养虾修代码</h1>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<h1 class="text-3xl font-bold mb-2 tracking-tight" style="text-shadow: 0 0-10px rgba(88,166,255,0.5)">🦐 养虾修代码</h1>
<h1 class="text-3xl font-bold mb-2 tracking-tight" style="text-shadow: 0 0 10px rgba(88,166,255,0.5)">🦐 养虾修代码</h1>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@content/zh/activities/anniversary-2026/index.html` at line 25, The inline
style on the H1 element with class "text-3xl font-bold mb-2 tracking-tight" has
a malformed text-shadow value ("0 0-10px ..."); update the text-shadow to use a
valid blur radius by replacing "0 0-10px" with "0 0 10px" so the style becomes
"text-shadow: 0 0 10px rgba(88,166,255,0.5)".

<p class="text-blue-400 font-semibold mb-2">SOFAStack 8th Anniversary PR Challenge</p>
<p class="text-[10px] text-gray-500 uppercase tracking-widest italic">32 Real Issues Waiting for Your AI Agent</p>
</header>

<nav class="flex overflow-x-auto gap-2 mb-6 border-b border-gray-800 no-scrollbar sticky top-0 bg-[#0d1117] z-10 py-2 justify-start md:justify-center px-2">
<button onclick="filterProject('all', this)" class="tab-btn active">全部项目 (32)</button>
<button onclick="filterProject('SOFA Registry', this)" class="tab-btn">SOFA Registry (7)</button>
<button onclick="filterProject('SOFA JRaft', this)" class="tab-btn">SOFA JRaft (6)</button>
Comment on lines +32 to +33

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical: Project names in buttons don't match issueData — filtering is broken.

The filter function uses strict equality (i.project === projectName), but:

  • Button passes 'SOFA Registry' (with space), data uses 'SOFARegistry' (no space)
  • Button passes 'SOFA JRaft' (with space), data uses 'SOFAJRaft' (no space)

Clicking these tabs will show zero results.

🐛 Suggested fix — align button values with data
-        <button onclick="filterProject('SOFA Registry', this)" class="tab-btn">SOFA Registry (7)</button>
-        <button onclick="filterProject('SOFA JRaft', this)" class="tab-btn">SOFA JRaft (6)</button>
+        <button onclick="filterProject('SOFARegistry', this)" class="tab-btn">SOFA Registry (7)</button>
+        <button onclick="filterProject('SOFAJRaft', this)" class="tab-btn">SOFA JRaft (6)</button>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@content/zh/activities/anniversary-2026/index.html` around lines 32 - 33, The
tab buttons pass project names with spaces that don't match issueData keys, so
filterProject (the onclick target) never finds matches; either change the button
arguments to the exact project identifiers used in issueData (e.g., use
"SOFARegistry" and "SOFAJRaft" in the two <button> elements) or update
filterProject to normalize both sides (e.g., strip spaces/compare
case-insensitively) before comparing i.project === projectName; reference
filterProject and issueData when making the change so the string comparison is
consistent.

<button onclick="filterProject('SOFARPC', this)" class="tab-btn">SOFARPC (10)</button>
<button onclick="filterProject('SOFABoot', this)" class="tab-btn">SOFABoot (9)</button>
Comment on lines +27 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix displayed issue counts: UI currently shows 32/10, but data is 33/11.

Line 27 and Lines 31–35 hardcode counts that don’t match issueData (Lines 66–76 shows 11 SOFARPC items; total is 33). This is a user-facing correctness issue.

🔧 Minimal fix
-        <p class="text-[10px] text-gray-500 uppercase tracking-widest italic">32 Real Issues Waiting for Your AI Agent</p>
+        <p class="text-[10px] text-gray-500 uppercase tracking-widest italic">33 Real Issues Waiting for Your AI Agent</p>

-        <button onclick="filterProject('all', this)" class="tab-btn active">全部项目 (32)</button>
+        <button onclick="filterProject('all', this)" class="tab-btn active">全部项目 (33)</button>
@@
-        <button onclick="filterProject('SOFARPC', this)" class="tab-btn">SOFARPC (10)</button>
+        <button onclick="filterProject('SOFARPC', this)" class="tab-btn">SOFARPC (11)</button>

Also applies to: 66-76

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@content/zh/activities/anniversary-2026/index.html` around lines 27 - 35, The
UI hardcodes issue counts ("32" in the header and numbers in the tab buttons)
that no longer match the actual issueData; update the header and each button
label (elements using the tab-btn class and onclick="filterProject(...)") to
derive counts from the issueData structure instead of literal numbers — e.g.,
compute total via issueData.length and per-project counts by filtering issueData
for project names like "SOFA Registry", "SOFA JRaft", "SOFARPC", "SOFABoot" and
inject those computed values into the header text and the button innerText so
the displayed counts always reflect the actual data.

</nav>

<div id="issue-grid" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 max-w-6xl mx-auto">
</div>

<footer class="mt-16 text-center pb-12 border-t border-gray-800 pt-8 text-gray-500">
<p class="text-sm tracking-widest">READY? LET'S HACK WITH AI! 🚀🦐</p>
<p class="text-[10px] mt-2 opacity-50">© 2026 SOFAStack Open Source Community</p>
</footer>

<script>
const issueData = [
// SOFARegistry (7 items)
{ project: 'SOFARegistry', level: 'Easy', title: '[docs] Session Auto-Batching Duration', desc: 'Session 自动控制攒批时长机制文档', url: 'https://github.com/sofastack/sofa-registry/issues/386' },
{ project: 'SOFARegistry', level: 'Easy', title: '[docs] Improve Documentation - Admin API', desc: '文档完善(Admin API 文档)', url: 'https://github.com/sofastack/sofa-registry/issues/385' },
{ project: 'SOFARegistry', level: 'Easy', title: 'Log4j2 Strings Util Dependency Fix', desc: '替换使用的 StringUtils 工具类', url: 'https://github.com/sofastack/sofa-registry/issues/345' },
{ project: 'SOFARegistry', level: 'Easy', title: 'CacheCountTask Memory Optimization', desc: '打印 Publisher 数量统计日志内存优化', url: 'https://github.com/sofastack/sofa-registry/issues/317' },
{ project: 'SOFARegistry', level: 'Easy', title: 'DataPos RegisterId WordCache', desc: 'BaseInfo setDataInfoId 使用 WordCache', url: 'https://github.com/sofastack/sofa-registry/issues/312' },
{ project: 'SOFARegistry', level: 'Hard', title: 'Session Watch provide_data Thread', desc: 'Session 到 Meta 查询配置的线程使用优化', url: 'https://github.com/sofastack/sofa-registry/issues/210' },
{ project: 'SOFARegistry', level: 'Easy', title: 'PublisherRegistration hashcode/equals', desc: '为 PublisherRegistration 增加基础方法', url: 'https://github.com/sofastack/sofa-registry/issues/47' },

// SOFAJRaft (6 items)
{ project: 'SOFAJRaft', level: 'Medium', title: 'Sync Recycler from Netty', desc: '修复内存泄漏,同步 Netty 实现', url: 'https://github.com/sofastack/sofa-jraft/issues/1240' },
{ project: 'SOFAJRaft', level: 'Medium', title: 'Critical Vulnerability Fix (CVE)', desc: '升级 hession/commons-* 跨大版本升级', url: 'https://github.com/sofastack/sofa-jraft/issues/1218' },
{ project: 'SOFAJRaft', level: 'Medium', title: 'Upgrade Third-party Libs', desc: '升级 RocksDB/protobuf/Disruptor 等', url: 'https://github.com/sofastack/sofa-jraft/issues/1211' },
{ project: 'SOFAJRaft', level: 'Easy', title: 'Proposal: Cleanup unused imports', desc: '全项目清理 unused 代码', url: 'https://github.com/sofastack/sofa-jraft/issues/1173' },
{ project: 'SOFAJRaft', level: 'Medium', title: 'AssertionError in AppendEntries', desc: '并发 shutdown 下的 null 检查与降级', url: 'https://github.com/sofastack/sofa-jraft/issues/1091' },
{ project: 'SOFAJRaft', level: 'Medium', title: 'jraft-rheakv gRPC Communication', desc: 'rheakv 支持直接使用 grpc 进行通信', url: 'https://github.com/sofastack/sofa-jraft/issues/885' },

// SOFARPC (10 items)
{ project: 'SOFARPC', level: 'Easy', title: 'Serialization Type in Tracelog', desc: '在 tracelog 中记录序列化类型', url: 'https://github.com/sofastack/sofa-rpc/issues/1552' },
{ project: 'SOFARPC', level: 'Medium', title: 'Support Server Async Capability', desc: '支持服务端返回 CompletableFuture 模型', url: 'https://github.com/sofastack/sofa-rpc/issues/1550' },
{ project: 'SOFARPC', level: 'Easy', title: 'AI Assisted Documentation Optimization', desc: '使用 AI 优化和翻译文档,支持中英双语', url: 'https://github.com/sofastack/sofa-rpc/issues/1547' },
{ project: 'SOFARPC', level: 'Difficulty', title: 'Support TripleX - Multi-Transports', desc: 'Triple 协议支持 H1/H2/H3 传输层', url: 'https://github.com/sofastack/sofa-rpc/issues/1545' },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Inconsistent difficulty level: 'Difficulty' instead of 'Hard'.

All other items use Easy, Medium, or Hard, but this entry uses 'Difficulty'. While the CSS handles it (.tag-difficulty), this inconsistency may confuse maintainers and breaks the semantic pattern.

🔧 Suggested fix
-            { project: 'SOFARPC', level: 'Difficulty', title: 'Support TripleX - Multi-Transports', desc: 'Triple 协议支持 H1/H2/H3 传输层', url: 'https://github.com/sofastack/sofa-rpc/issues/1545' },
+            { project: 'SOFARPC', level: 'Hard', title: 'Support TripleX - Multi-Transports', desc: 'Triple 协议支持 H1/H2/H3 传输层', url: 'https://github.com/sofastack/sofa-rpc/issues/1545' },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{ project: 'SOFARPC', level: 'Difficulty', title: 'Support TripleX - Multi-Transports', desc: 'Triple 协议支持 H1/H2/H3 传输层', url: 'https://github.com/sofastack/sofa-rpc/issues/1545' },
{ project: 'SOFARPC', level: 'Hard', title: 'Support TripleX - Multi-Transports', desc: 'Triple 协议支持 H1/H2/H3 传输层', url: 'https://github.com/sofastack/sofa-rpc/issues/1545' },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@content/zh/activities/anniversary-2026/index.html` at line 69, The listed
activity object has an incorrect level value: change the level property from
'Difficulty' to 'Hard' in the activity entry with title 'Support TripleX -
Multi-Transports' (the object containing project: 'SOFARPC', title: 'Support
TripleX - Multi-Transports', url:
'https://github.com/sofastack/sofa-rpc/issues/1545') so it matches the
established 'Easy'/'Medium'/'Hard' pattern and maintains semantic consistency.

{ project: 'SOFARPC', level: 'Medium', title: 'Support Apache Fury Serialization', desc: '迁移模块到 Apache Fury 并保持兼容', url: 'https://github.com/sofastack/sofa-rpc/issues/1544' },
{ project: 'SOFARPC', level: 'Medium', title: 'AddressHolder/ConnectionHolder Update', desc: '修复提供者列表更新顺序导致的异常', url: 'https://github.com/sofastack/sofa-rpc/issues/1490' },
{ project: 'SOFARPC', level: 'Easy', title: 'Fix Fury instance FGC issue', desc: 'ThreadLocalFury 导致的内存与 FGC 问题', url: 'https://github.com/sofastack/sofa-rpc/issues/1424' },
{ project: 'SOFARPC', level: 'Easy', title: 'Javassist Interface Method Issue', desc: '处理接口重复方法,建议改用 Bytebuddy', url: 'https://github.com/sofastack/sofa-rpc/issues/1384' },
{ project: 'SOFARPC', level: 'Medium', title: 'Support custom exception retry', desc: '允许用户灵活控制哪些异常可以重试', url: 'https://github.com/sofastack/sofa-rpc/issues/1362' },
{ project: 'SOFARPC', level: 'Easy', title: 'Dubbo ProtocolConfig Fix', desc: '解决 Dubbo 协议注册中心地址错误问题', url: 'https://github.com/sofastack/sofa-rpc/issues/1119' },
{ project: 'SOFARPC', level: 'Easy', title: 'ServerConfig Random Port Fix', desc: '解决随机端口下 getPort() 返回 0 的问题', url: 'https://github.com/sofastack/sofa-rpc/issues/1022' },

// SOFABoot (9 items)
{ project: 'SOFABoot', level: 'Medium', title: '[Performance] Add Reflection Cache', desc: '添加反射缓存以提升运行时性能', url: 'https://github.com/sofastack/sofa-boot/issues/1409' },
{ project: 'SOFABoot', level: 'Hard', title: '[Performance] Optimize Bean Async Init', desc: '智能分析优化 Bean 异步初始化', url: 'https://github.com/sofastack/sofa-boot/issues/1408' },
{ project: 'SOFABoot', level: 'Medium', title: '[Feature] SofaDiagnosticEndpoint', desc: '添加用于运行时诊断的 Endpoint', url: 'https://github.com/sofastack/sofa-boot/issues/1406' },
{ project: 'SOFABoot', level: 'Easy', title: '[Validation] Add @Validated Support', desc: '为配置属性添加校验框架支持', url: 'https://github.com/sofastack/sofa-boot/issues/1405' },
{ project: 'SOFABoot', level: 'Easy', title: '[UX] Configuration Metadata Support', desc: '添加元数据以支持 IDE 自动补全', url: 'https://github.com/sofastack/sofa-boot/issues/1404' },
{ project: 'SOFABoot', level: 'Medium', title: '[Feature] ProblemDetail (RFC 7807)', desc: '支持标准化错误响应', url: 'https://github.com/sofastack/sofa-boot/issues/1403' },
{ project: 'SOFABoot', level: 'Medium', title: '[Feature] Structured Logging', desc: '支持 Spring Boot 结构化日志', url: 'https://github.com/sofastack/sofa-boot/issues/1402' },
{ project: 'SOFABoot', level: 'Easy', title: '[Refactor] Migrate spring.factories', desc: '迁移至 AutoConfiguration.imports', url: 'https://github.com/sofastack/sofa-boot/issues/1401' },
{ project: 'SOFABoot', level: 'Easy', title: '[Dependency] Upgrade Boot to 3.5.12', desc: '升级 Spring Boot 核心版本', url: 'https://github.com/sofastack/sofa-boot/issues/1400' }
];

function filterProject(projectName, el) {
document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
el.classList.add('active');

const container = document.getElementById('issue-grid');
container.innerHTML = '';

const filtered = projectName === 'all'
? issueData
: issueData.filter(i => i.project === projectName);

filtered.forEach(item => {
const div = document.createElement('div');
div.className = 'glass-card p-5';
const lvl = item.level.toLowerCase();

div.innerHTML = `
<div class="flex-grow mb-4">
<div class="flex justify-between items-start mb-3">
<span class="text-[9px] font-bold text-blue-400 bg-blue-500/10 px-1.5 py-0.5 rounded border border-blue-500/20 uppercase tracking-tighter">${item.project}</span>
<span class="px-1.5 py-0.5 rounded text-[8px] font-bold uppercase tag-${lvl}">${item.level}</span>
</div>
<h3 class="text-sm font-bold mb-2 leading-tight min-h-[2.5rem]">${item.title}</h3>
<p class="text-gray-500 text-[11px] leading-relaxed line-clamp-2">${item.desc}</p>
</div>
<a href="${item.url}" target="_blank" class="block text-center w-full py-2.5 rounded bg-blue-600 hover:bg-blue-500 text-[11px] font-bold transition-all active:scale-95">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Add rel="noopener noreferrer" to external links opened in new tabs.

Line 115 uses target="_blank" without rel, which leaves a reverse-tabnabbing/security gap.

🔒 Suggested fix
-                    <a href="${item.url}" target="_blank" class="block text-center w-full py-2.5 rounded bg-blue-600 hover:bg-blue-500 text-[11px] font-bold transition-all active:scale-95">
+                    <a href="${item.url}" target="_blank" rel="noopener noreferrer" class="block text-center w-full py-2.5 rounded bg-blue-600 hover:bg-blue-500 text-[11px] font-bold transition-all active:scale-95">
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<a href="${item.url}" target="_blank" class="block text-center w-full py-2.5 rounded bg-blue-600 hover:bg-blue-500 text-[11px] font-bold transition-all active:scale-95">
<a href="${item.url}" target="_blank" rel="noopener noreferrer" class="block text-center w-full py-2.5 rounded bg-blue-600 hover:bg-blue-500 text-[11px] font-bold transition-all active:scale-95">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@content/zh/activities/anniversary-2026/index.html` at line 115, The anchor
element that renders external links (the <a> tag with href="${item.url}" and
target="_blank") is missing a rel attribute; update that anchor to include
rel="noopener noreferrer" so external links opened in a new tab are protected
from reverse-tabnabbing and prevent the opened page from accessing
window.opener.

VIEW ISSUE & CLAIM
</a>
`;
container.appendChild(div);
});
}

// Initialize
filterProject('all', document.querySelector('.tab-btn'));
</script>
</body>
</html>