Skip to content

Commit ca47cf6

Browse files
JihaoXinclaude
andcommitted
Release v0.1.2: verified venues, launch confirmation modal
- Reorder Venue dropdown: ICML, NeurIPS, EuroMLSys first with [Verified] tag; ICML marked (Default). Other venues unchanged in order. - Add launch confirmation modal before submitting Launch Research: closed-beta disclosure (ROCS testbed, third-party LLMs, telemetry, confidentiality). Required checkbox, no remember-choice, en/zh/ar. Restart flow unchanged. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 496ffd2 commit ca47cf6

File tree

2 files changed

+81
-23
lines changed

2 files changed

+81
-23
lines changed

ark/webapp/routes.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,15 +1429,16 @@ async def event_generator():
14291429
async def api_venues():
14301430
"""Return supported venues list."""
14311431
venues = [
1432+
# Verified
1433+
{"name": "ICML", "format": "icml", "pages": 9, "year": 2025, "tag": "[Verified] (Default)"},
1434+
{"name": "NeurIPS", "format": "neurips", "pages": 9, "year": 2025, "tag": "[Verified]"},
1435+
{"name": "EuroMLSys", "format": "euromlsys", "pages": 6, "year": 2025, "tag": "[Verified]"},
14321436
# ML / AI
1433-
{"name": "NeurIPS", "format": "neurips", "pages": 9, "year": 2025},
1434-
{"name": "ICML", "format": "icml", "pages": 9, "year": 2025},
14351437
{"name": "ICLR", "format": "iclr", "pages": 9, "year": 2026},
14361438
{"name": "ACL", "format": "acl", "pages": 8, "year": 2025},
14371439
{"name": "EMNLP", "format": "emnlp", "pages": 8, "year": 2025},
14381440
{"name": "CVPR", "format": "cvpr", "pages": 8, "year": 2025},
14391441
{"name": "MLSys", "format": "mlsys", "pages": 8, "year": 2026},
1440-
{"name": "EuroMLSys", "format": "euromlsys", "pages": 6, "year": 2025},
14411442
# Systems
14421443
{"name": "SOSP", "format": "sosp", "pages": 14, "year": 2025},
14431444
{"name": "EuroSys", "format": "sosp", "pages": 12, "year": 2026},

ark/webapp/static/app.html

Lines changed: 77 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,21 @@ <h3>Restart Project</h3>
10591059
</div>
10601060
</div>
10611061

1062+
<div class="modal-backdrop" id="modal-launch-confirm">
1063+
<div class="modal" style="max-width:600px">
1064+
<h3 data-i18n="launch_confirm_title">Before you launch</h3>
1065+
<div data-i18n-html="launch_confirm_body" style="font-size:.92rem;line-height:1.55;color:var(--text-second)"></div>
1066+
<label style="display:flex;align-items:flex-start;gap:8px;margin-top:14px;cursor:pointer">
1067+
<input type="checkbox" id="launch-confirm-checkbox" onchange="launchConfirmToggle(this)" style="margin-top:3px;flex-shrink:0"/>
1068+
<span data-i18n="launch_confirm_ack">I understand and agree to proceed.</span>
1069+
</label>
1070+
<div class="modal-footer">
1071+
<button type="button" class="btn-secondary" onclick="launchConfirmCancel()" data-i18n="launch_confirm_cancel">Cancel</button>
1072+
<button type="button" class="btn-primary" id="launch-confirm-proceed" disabled onclick="launchConfirmProceed()" data-i18n="launch_confirm_proceed">Confirm &amp; Launch</button>
1073+
</div>
1074+
</div>
1075+
</div>
1076+
10621077
<!-- ADMIN EDIT MODAL -->
10631078
<div class="modal-backdrop" id="modal-admin-edit">
10641079
<div class="modal" style="max-width:620px">
@@ -1164,6 +1179,11 @@ <h3 data-i18n="edit_project">Edit Project</h3>
11641179
instructions_label: 'Instructions for ARK <span style="font-weight:400;color:var(--text-muted)">(optional)</span>',
11651180
model: 'Model',
11661181
launch_research: 'Launch Research',
1182+
launch_confirm_title: 'Before you launch',
1183+
launch_confirm_body: '<p>ARK is currently in <strong>closed beta</strong>. By launching this research run, you acknowledge the following:</p><ul style="padding-left:18px;margin:10px 0"><li><strong>Where it runs.</strong> Your idea, attached files, and all generated artifacts will execute on ARK\'s research infrastructure (the <strong>ROCS testbed</strong>) and are accessible to the ARK team.</li><li><strong>How it\'s used.</strong> Your idea is forwarded to third-party language models (e.g. <strong>Claude Code</strong>, <strong>Gemini</strong>) as part of the research pipeline. Standard provider terms apply.</li><li><strong>Telemetry.</strong> During the beta, the ARK team reviews execution logs and intermediate outputs to diagnose issues and improve the framework.</li><li><strong>Confidentiality.</strong> The ARK team will <strong>not</strong> publish your idea or share it outside the team.</li></ul><p>If your idea is subject to NDA, embargo, or other confidentiality obligations, please do not submit it during the beta.</p>',
1184+
launch_confirm_ack: 'I understand and agree to proceed.',
1185+
launch_confirm_cancel: 'Cancel',
1186+
launch_confirm_proceed: 'Confirm & Launch',
11671187
placeholder_idea: 'Describe your research idea… or drop files here',
11681188
placeholder_auto_title: 'Auto-generated if blank',
11691189
placeholder_instructions: 'e.g. Focus on comparing against baseline X, use PyTorch, run on 2 GPUs, write in a formal style…',
@@ -1274,6 +1294,11 @@ <h3 data-i18n="edit_project">Edit Project</h3>
12741294
instructions_label: 'تعليمات لـ ARK <span style="font-weight:400;color:var(--text-muted)">(اختياري)</span>',
12751295
model: 'النموذج',
12761296
launch_research: 'إطلاق البحث',
1297+
launch_confirm_title: 'قبل الإطلاق',
1298+
launch_confirm_body: '<p>ARK حالياً في <strong>إصدار تجريبي مغلق</strong>. بإطلاق هذه التجربة، فإنك تُقرّ بما يلي:</p><ul style="padding-right:18px;padding-left:0;margin:10px 0"><li><strong>مكان التشغيل.</strong> ستُنفَّذ فكرتك والملفات المرفقة وجميع المخرجات على البنية البحثية الخاصة بـ ARK (<strong>ROCS testbed</strong>)، ويمكن لفريق ARK الاطلاع عليها.</li><li><strong>طريقة الاستخدام.</strong> تُمرَّر فكرتك إلى نماذج لغوية تابعة لجهات خارجية (مثل <strong>Claude Code</strong> و<strong>Gemini</strong>) ضمن خط الأنابيب البحثي، وتسري عليها شروط مزوّدي الخدمة.</li><li><strong>سجلات التشغيل.</strong> خلال الإصدار التجريبي، يراجع فريق ARK سجلات التنفيذ والمخرجات الوسيطة لتشخيص المشكلات وتحسين الإطار.</li><li><strong>السرية.</strong> <strong>لن</strong> ينشر فريق ARK فكرتك ولن يشاركها خارج الفريق.</li></ul><p>إذا كانت فكرتك خاضعة لاتفاقية عدم إفشاء أو حظر نشر، فيُرجى عدم تقديمها خلال فترة الإصدار التجريبي.</p>',
1299+
launch_confirm_ack: 'لقد قرأت ووافقت على المتابعة.',
1300+
launch_confirm_cancel: 'إلغاء',
1301+
launch_confirm_proceed: 'تأكيد وإطلاق',
12771302
placeholder_idea: 'صِف فكرتك البحثية… أو اسحب الملفات هنا',
12781303
placeholder_auto_title: 'يُولَّد تلقائياً إن تُرك فارغاً',
12791304
placeholder_instructions: 'مثال: ركّز على المقارنة مع الخط الأساسي X، استخدم PyTorch، شغّل على وحدتَي GPU…',
@@ -1370,6 +1395,11 @@ <h3 data-i18n="edit_project">Edit Project</h3>
13701395
instructions_label: '给 ARK 的指令 <span style="font-weight:400;color:var(--text-muted)">(可选)</span>',
13711396
model: '模型',
13721397
launch_research: '启动研究',
1398+
launch_confirm_title: '启动前请确认',
1399+
launch_confirm_body: '<p>ARK 目前处于<strong>封闭内测阶段</strong>。点击启动即表示你了解并同意以下事项:</p><ul style="padding-left:18px;margin:10px 0"><li><strong>运行位置。</strong>你的 idea、附件以及所有生成内容将在 ARK 的科研基础设施(<strong>ROCS testbed</strong>)上运行,ARK 团队可访问这些数据。</li><li><strong>使用方式。</strong>你的 idea 会作为研究流程的一部分被转发到第三方大语言模型(例如 <strong>Claude Code</strong>、<strong>Gemini</strong>),并受相应服务条款约束。</li><li><strong>遥测与日志。</strong>内测期间,ARK 团队会查看运行日志和中间产物,用于排查问题、优化框架。</li><li><strong>保密承诺。</strong>ARK 团队<strong>不会</strong>主动公开你的 idea,也不会在团队外分享。</li></ul><p>如你的 idea 涉及 NDA、禁发期或其他保密义务,请勿在内测期间提交。</p>',
1400+
launch_confirm_ack: '我已阅读并同意以上事项。',
1401+
launch_confirm_cancel: '取消',
1402+
launch_confirm_proceed: '确认并启动',
13731403
placeholder_idea: '描述你的研究想法… 或拖拽文件到这里',
13741404
placeholder_auto_title: '留空则自动生成',
13751405
placeholder_instructions: '例如:重点与基线 X 进行比较,使用 PyTorch,用 2 张 GPU 跑实验…',
@@ -2272,7 +2302,7 @@ <h3 data-i18n="edit_project">Edit Project</h3>
22722302
const sel = document.getElementById('hero-venue-select');
22732303
if (!sel) return;
22742304
sel.innerHTML = venues.map(v =>
2275-
`<option value="${v.name}" data-format="${v.format}" data-pages="${v.pages}">${v.name}(${v.year || 2025})</option>`
2305+
`<option value="${v.name}" data-format="${v.format}" data-pages="${v.pages}">${v.name}(${v.year || 2025})${v.tag ? ' ' + v.tag : ''}</option>`
22762306
).join('') + '<option value="Customized" data-format="custom" data-pages="9">Customized</option>';
22772307
heroVenueChanged(sel);
22782308
}
@@ -2397,16 +2427,58 @@ <h3 data-i18n="edit_project">Edit Project</h3>
23972427
// ══════════════════════════════════════════════════════
23982428
// Hero form — submit
23992429
// ══════════════════════════════════════════════════════
2430+
let _pendingHeroForm = null;
2431+
24002432
async function submitNewProject(e) {
24012433
e.preventDefault();
24022434
const form = e.target;
2435+
const fd = new FormData(form);
2436+
2437+
// Basic validation before showing the confirmation modal
2438+
const idea = (fd.get('idea') || '').trim();
2439+
if (!idea && !selectedFiles.length) {
2440+
alert(t('alert_idea_required'));
2441+
return;
2442+
}
2443+
if (fd.get('venue') === 'Customized' && !customTplFile) {
2444+
alert('Please upload a template ZIP file for the Customized venue.');
2445+
return;
2446+
}
2447+
2448+
// Stash form, open confirmation modal
2449+
_pendingHeroForm = form;
2450+
const cb = document.getElementById('launch-confirm-checkbox');
2451+
const proceedBtn = document.getElementById('launch-confirm-proceed');
2452+
if (cb) cb.checked = false;
2453+
if (proceedBtn) proceedBtn.disabled = true;
2454+
document.getElementById('modal-launch-confirm').classList.add('open');
2455+
}
2456+
2457+
function launchConfirmToggle(checkbox) {
2458+
const proceedBtn = document.getElementById('launch-confirm-proceed');
2459+
if (proceedBtn) proceedBtn.disabled = !checkbox.checked;
2460+
}
2461+
2462+
function launchConfirmCancel() {
2463+
closeModal('modal-launch-confirm');
2464+
_pendingHeroForm = null;
2465+
}
2466+
2467+
async function launchConfirmProceed() {
2468+
const form = _pendingHeroForm;
2469+
_pendingHeroForm = null;
2470+
closeModal('modal-launch-confirm');
2471+
if (!form) return;
2472+
await performLaunch(form);
2473+
}
2474+
2475+
async function performLaunch(form) {
24032476
const btn = document.getElementById('hero-submit-btn');
24042477
const label = document.getElementById('hero-submit-label');
24052478
btn.disabled = true;
24062479
label.innerHTML = '<span class="spinner"></span>';
24072480

24082481
const fd = new FormData(form);
2409-
// Remove the hidden name="idea" textarea value (already in fd), append files
24102482
// Send the first PDF as pdf_file (backend expects this field name)
24112483
const pdfIdx = selectedFiles.findIndex(f => f.name.toLowerCase().endsWith('.pdf'));
24122484
if (pdfIdx !== -1) {
@@ -2415,26 +2487,11 @@ <h3 data-i18n="edit_project">Edit Project</h3>
24152487
selectedFiles.forEach(f => fd.append('attachments', f));
24162488

24172489
// Handle custom template
2418-
const isCustom = fd.get('venue') === 'Customized';
2419-
if (isCustom) {
2420-
if (!customTplFile) {
2421-
alert('Please upload a template ZIP file for the Customized venue.');
2422-
btn.disabled = false;
2423-
label.textContent = t('launch_research');
2424-
return;
2425-
}
2490+
if (fd.get('venue') === 'Customized') {
24262491
fd.append('template_zip', customTplFile);
24272492
fd.set('venue_pages', document.getElementById('custom-tpl-pages').value || '9');
24282493
}
24292494

2430-
const idea = (fd.get('idea') || '').trim();
2431-
if (!idea && !selectedFiles.length) {
2432-
alert(t('alert_idea_required'));
2433-
btn.disabled = false;
2434-
label.textContent = t('launch_research');
2435-
return;
2436-
}
2437-
24382495
try {
24392496
const res = await fetch('/api/projects', { method: 'POST', body: fd });
24402497
if (!res.ok) {
@@ -2720,15 +2777,15 @@ <h3 data-i18n="edit_project">Edit Project</h3>
27202777
const sel = document.getElementById('edit-venue-select');
27212778
if (sel && sel.options.length <= 1) {
27222779
sel.innerHTML = venues.map(v =>
2723-
`<option value="${v.name}" data-format="${v.format}" data-pages="${v.pages}">${v.name}${v.pages ? ' (' + v.pages + ' pages)' : ''}</option>`
2780+
`<option value="${v.name}" data-format="${v.format}" data-pages="${v.pages}">${v.name}${v.pages ? ' (' + v.pages + ' pages)' : ''}${v.tag ? ' ' + v.tag : ''}</option>`
27242781
).join('');
27252782
}
27262783
} else {
27272784
await loadVenues();
27282785
const sel = document.getElementById('edit-venue-select');
27292786
if (sel && sel.options.length <= 1) {
27302787
sel.innerHTML = venues.map(v =>
2731-
`<option value="${v.name}" data-format="${v.format}" data-pages="${v.pages}">${v.name}${v.pages ? ' (' + v.pages + ' pages)' : ''}</option>`
2788+
`<option value="${v.name}" data-format="${v.format}" data-pages="${v.pages}">${v.name}${v.pages ? ' (' + v.pages + ' pages)' : ''}${v.tag ? ' ' + v.tag : ''}</option>`
27322789
).join('');
27332790
}
27342791
}

0 commit comments

Comments
 (0)