两道网页复刻任务
给模型一个可操作的参考网站,要求它交付自己编写、能够运行并通过验收的 Web App。
TodoMVC
Desmos
展示的均为已通过验收的复刻应用。点击截图可查看完整原图;每道题另附可选择的横向操作时间线。
参考站可观察,自己的实现可编写、运行和调试。
公开题面与参考入口
知道要复刻的功能、交付要求和参考网站。原站通过浏览器画面观察。
可视浏览器
查看截图,用坐标鼠标、键盘、滚动操作原站和复刻站。固定桌面视口。
独立实现环境
Linux 隔离工作区、终端与文件编辑,配有独立 Conda、Python、Node 和离线依赖。
可启动的网站
提交自己的源码和启动入口。在本地启动后,由浏览器实际操作并验收。
观察边界:原站源码、DOM、接口响应和隐藏状态不提供给模型。模型可以读写自己的代码;独立验收的私有细则不进入盲解输入。
TodoMVC
已通过给模型一个可操作的 TodoMVC 参考站。模型需要自己编写并启动一个网站,复现任务列表的外观、状态变化和完整操作。
题面要求模型完成什么
- 新增连续任务,空输入不产生空任务。
- 双击编辑;单条或全部完成,并能恢复为未完成。
- All / Active / Completed 筛选与剩余计数一致。
- 删除单条、清除已完成;重开后保留文字与状态。
参考界面与通过示例
同类可见状态,便于对照;点击可查看原图。
两条未完成任务
同样的两条未完成任务
沿横轴回看实际操作
精选步骤等距排列;T+ 从首次打开复刻站计时。可切换操作前后。
打开空列表
打开复刻站
输入框、标题和页脚正常显示。
画面来自已通过提交的独立验收轨迹。原图与事件编号可在放大视图中核对。
14 项全部通过,Harbor 得分 1.00。展示的是交付实现的实际运行画面。
查看全部 14 项验收结果全部通过
新增任务create
Functional: With a fully loaded empty list and All selected at 1280x900, enter Buy milk and press Enter, then enter Read book and press Enter. Show two separate active rows in insertion order, preserve the first task, and clear the entry after each submission. Control: typing without Enter must leave the text in the entry rather than create a row. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
空输入保护empty-submit
Functional control: With two active tasks visible and the new-task entry empty, press Enter. The same two rows remain and no blank task is added. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
完成与恢复individual-toggle
Functional: With Buy milk and Read book active in All, click Buy milk’s completion control. Buy milk becomes completed while Read book remains active. Click the same control again after returning to All: Buy milk becomes active again without removing either task. The reverse action is the control against a one-way or inert toggle. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
三种筛选filter-membership
Functional: With Buy milk completed and Read book active, select Active, Completed, then All using the visible filters. Active shows only Read book; Completed shows only Buy milk; All restores both with their existing states. These contrasting memberships control against an unchanged list and against deleting hidden tasks. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
双击编辑edit-commit
Functional: With Buy milk and Read book active in All, double-click Read book’s label, select and replace its text with Read novel, and press Enter. A normal row now reads Read novel; Read book is absent, Buy milk is unchanged, and there are still exactly two tasks. The unchanged first task and row total control against creation or editing the wrong row. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
剩余数量remaining-count
Functional: Starting with no tasks, create two active tasks, complete one, reactivate it, then use toggle-all in both directions. The visible remaining count follows 1, 2, 1, 2, 0, 2 as those states are reached. With one active task and one completed task, switching to Active or Completed keeps the count at 1; it counts active tasks overall rather than visible rows or all tasks. Use singular item at 1 and plural items at 0 and 2. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
批量完成toggle-all
Functional: With two active tasks visible in All, activate the top toggle-all control. Both tasks become completed and neither disappears. Activate it again: both become active with their text preserved. The second activation controls against a one-way bulk action. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
空列表外观visual-empty
Visual fidelity: At 1280x900 with no tasks, open the fully loaded page and compare its screenshot to the empty reference. Match the light gray page, centered approximately 550px-wide column, yellow demo banner at the top, very large pale pink todos heading, white entry panel around y=175 with a light italic placeholder and soft shadow, and the three small pale centered footer lines below. Task rows and the count/filter bar are absent in this empty state; the entry remains visible. Judge rendered appearance, not source structure. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
列表外观visual-populated
Visual fidelity: At 1280x900, create two active tasks in All and inspect the resulting screenshot. Match the white panel, approximately 60px-high separated rows, large gray left-aligned labels, circular completion controls on the left, top chevron, bottom count on the left, centered filter links with a thin pale selected border, layered lower edges and shadow, and footer moving below the taller panel. Use equivalent visible task state; reference click coordinates are not implementation requirements. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
完成与筛选外观visual-completed-filters
Visual fidelity: With one completed and one active task, view All, Active, and Completed and inspect each screenshot. Completed labels are pale gray and struck through with a greenish check in the circular control; active labels remain dark and unchecked. Match the selected filter outline and Clear completed control at the footer’s right; the panel contracts to fit filtered rows. This criterion judges styling and placement separately from filter membership. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
编辑状态外观visual-edit
Visual fidelity: With two active tasks visible, double-click the second label and inspect edit mode. Match the bordered inset editing field spanning the row to the right of the completion-control gutter, its large text, row alignment, and retained surrounding panel/footer. Leaving the ordinary label unchanged is not this editing appearance. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
清除已完成clear-completed
Functional: With Buy milk completed and Read novel active in All at 1280x900, click Clear completed. Buy milk disappears, Read novel stays active, the remaining count stays at 1, and Clear completed is no longer shown. The surviving active task controls against clearing everything, and disappearance of the completed row controls against doing nothing. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
单条删除delete-individual
Functional: With Read novel and Temporary task active in All at 1280x900, point at or click within the Temporary task row to reveal its right-side cross, then click that cross. Only Temporary task disappears; Read novel remains active and the count changes from 2 to 1. Then reveal and activate Read novel’s cross: the final row and list footer disappear while the task-entry field remains. The first surviving row controls against deleting the whole list; the final deletion controls the empty-state transition. Reference validation status: observed; the cited screenshots show the stated outcomes and any described controls.
重开后保留persist-on-reopen
Functional: With Buy milk completed and the committed edit Read novel active in All, reopen the same website in the same browser context, wait for its task interface to load, and inspect the result. Both labels and their completion states remain, with 1 item left; Read book must not reappear. Observed reference validation used browser_open, with the established mixed state visible again in event 000031. This grades persistence on reopening. A literal reload shortcut was rejected by the visual tool in event 000028, so the separate direct-reload control remains pending and must not be reported as validated.
每项可展开查看交付包中的原始验收条件;分数由冻结规则计算。
查看交付题面原文(英文)
Reconstruct the reference TodoMVC application as an independent local website using your own code. Put the implementation in `/workspace` and serve it on port **3000**. Keep existing attempts intact and provide the command needed to start the website.
Explore the configured reference through the screenshot browser interface. Reproduce the visible layout at **1280 × 900**, including the demo banner, large pale `todos` heading, centered white task panel, typography, spacing, shadows, task controls, filters, remaining count, and small footer. Match the empty, populated, completed, filtered, and editing states. Use the fully loaded task interface as the reference.
Make these workflows functional with user-entered task text:
- Create tasks by typing in the entry field and pressing Enter. Add successive tasks without replacing existing ones, clear the entry after submission, and ignore an empty submission.
- Double-click a task label to edit it in place, replace its text, and commit with Enter without creating an extra task or changing other tasks.
- Complete individual tasks and return them to active. Show a checked control and muted, struck-through label for completed tasks.
- Switch between All, Active, and Completed. Show the appropriate tasks, visibly indicate the selected filter, and preserve tasks when switching views.
- Delete an individual task with its row's delete control while preserving the others.
- Clear completed tasks while keeping active tasks.
- Keep the remaining-task count equal to the number of active tasks, including when viewing a filtered list.
- Use toggle-all to complete every task and to return all tasks to active.
- Preserve task text, committed edits, and completion state across page reload and reopening the same page in the same browser, and keep removed tasks removed.
An empty list must still allow creation of a new task. All interactions must work through the visible website; a static screenshot is insufficient. No particular framework, internal structure, storage mechanism, or filter URL format is required.
## Controller scope and delivery contract
Reconstruct the TodoMVC application as an independent local website. Through your own screenshot-only exploration, reproduce task creation, editing, completion toggles, All/Active/Completed filtering, individual deletion, clearing completed tasks, remaining-task count, toggle-all and persistence across page reload. Match the visible layout and task states at a 1280x900 viewport. Use your own code, serve port 3000, and make all stated workflows functional.
Observe the configured reference through screenshots and coordinate browser actions. Implement your own local website; reference source, DOM, accessibility, storage and network inspection are unavailable. Serve on 0.0.0.0:3000. Deliver submission.json with a foreground start_command and port 3000. Use only supplied runtime dependencies or the permitted offline package inventory.
Desmos
已通过给模型一个免登录的四则计算器参考站。模型需要自己实现数学输入、实时结果、历史记录和错误提示,并复现键盘与页面布局。
题面要求模型完成什么
- 键盘和屏幕按键输入:四则、小数、括号与运算优先级。
- 实时预览;Enter 或蓝色箭头提交并保留历史。
- 平方根、Ans、退格;区分 clear 与 clear all。
- 缺少答案、不完整算式、除零和负数开根要有可见反馈。
参考界面与通过示例
同类可见状态,便于对照;点击可查看原图。
参考站的计算历史
复刻站显示 30、37、9
沿横轴回看实际操作
精选步骤等距排列;T+ 从首次打开复刻站计时。可切换操作前后。
打开计算器
无需登录,打开复刻站
输入框与键盘可用,历史为空。
画面来自已通过提交的独立验收轨迹。原图与事件编号可在放大视图中核对。
18 项全部通过,Harbor 得分 1.00。展示的是交付实现的实际运行画面。
查看全部 18 项验收结果全部通过
免登录初态F01
Functional outcome; precondition: a fresh calculator at 1280×900. Action: open the app without signing in. Expected: usable arithmetic input and keypad appear with empty expression and history; no account step blocks calculation. For subsequent isolated journeys, reset visibly using clear on a nonempty active row followed by clear all on a blank row; do not assume reload persistence.
实时求值与优先级F02
Functional outcome; precondition: empty focused expression and empty history. Action: enter (12.5+3.5)*2-8/4 by keyboard. Expected before submission: the complete expression is visible and its live result is 30, respecting decimals, parentheses and multiplication/division precedence; history is still empty. Judge the displayed expression/result, independently of the editor implementation.
Enter 入历史F03
Functional outcome; precondition: (12.5+3.5)*2-8/4 is visibly entered with result 30 and no history. Action: press Enter. Expected: one history row contains that expression and result 30, and the active row becomes blank and ready for another expression. The calculation must visibly move to history rather than merely remain as an input preview.
空提交不重复F04
Functional outcome / empty-submission control; precondition: empty active row, first with no history and separately after a calculation has been submitted. Action: press Enter. Expected: no blank history entry, repeated answer or duplicate prior calculation is added; existing history remains unchanged.
Ans 与箭头提交F05
Functional outcome; precondition: latest submitted answer is 30 and active row is blank. Action: click ans, append +7, then click the blue bent-arrow submit control. Expected: ans visibly supplies 30, the expression previews 37, and submission appends an expression/result row ending in 37 below the earlier result 30 while restoring blank input. Judge arrow submission separately from Enter submission.
平方根F06
Functional outcome; precondition: blank active row with earlier history retained. Action: click √, then keypad 8 and 1, then the blue submit arrow. Expected: √81 visibly previews 9, then a √81 = 9 history entry is appended and active input becomes blank. The digits must populate the radicand, not appear as an unrelated number.
Ans 取最新答案F07
Functional outcome / latest-answer control; precondition: history contains results 30, 37, then √81 = 9 in that order and active row is blank. Action: click ans. Expected: the inserted answer is 9, with existing history unchanged; it must not keep using the older 30 or 37.
只清当前输入F08
Functional outcome / clear-versus-clear-all control; precondition: history contains the three calculations ending in √81 = 9 and the active row contains an ans token for 9. Action: click toolbar clear. Expected: active expression and its preview disappear immediately, all three history rows remain, and the toolbar offers clear all. No confirmation step is required.
清空全部历史F09
Functional outcome / destructive-reset control; precondition: nonempty visible history and blank active input. Action: click clear all, then click it again on the empty calculator. Expected: the first click immediately removes every history row and leaves input empty; the repeated click keeps it empty without adding an entry or showing a confirmation dialog.
退格编辑F10
Functional outcome; precondition: an existing history row and blank active expression. Action: click keypad 4, then 2, then the visible toolbar backspace icon. Expected: the active expression changes from 42 to 4, and the prior history remains unchanged. Removing the whole input or doing nothing does not meet this outcome.
缺失答案警告F11
Functional outcome / missing-answer control; precondition: clear all has left history and input empty. Action: click ans. Expected: an inserted ans item visibly indicates an unavailable answer with a warning instead of fabricating a numeric result. No exact error wording or behavior after invalid history is required.
不完整式子提示F12
Functional outcome / incomplete-expression control; precondition: blank active row with valid earlier history. Action: click keypad 7 and +, press Enter, then click the resulting warning indicator. Expected: 7+ is recorded as an invalid expression with a visible warning and blank new input; opening the warning explains that the + operation is missing an operand. It must not show an ordinary numeric answer. Exact explanatory wording is not required.
除零 undefinedF13
Functional outcome / undefined-division control; precondition: calculator reset to empty history/input. Action: click keypad 1, ÷, 0, then blue submit arrow. Expected: 1 ÷ 0 previews undefined and is recorded with result undefined in history, followed by blank input. It must not produce a finite number or retain a stale previous answer.
负根号 undefinedF14
Functional outcome / negative-root control; precondition: empty active expression. Action: click √, −, 9, then blue submit arrow. Expected: the radical covers −9, its result is undefined, and submission records that expression with undefined above a blank input. This distinguishes the negative radicand from a positive square root or a stale numeric answer.
主体布局V01
Visual fidelity; precondition: fresh empty calculator at 1280×900, default appearance. Action: open the app and allow the header to settle. Expected: preserve the reference composition: white page, centered narrow calculator approximately 400×550 at x440–840/y175–725, thin gray outer border, tall white history region, active expression strip immediately above a light-gray toolbar and keypad. Focused input has a thin blue outline. Assess overall proportions and alignment, not exact click coordinates or internal structure.
工具栏与键盘V02
Visual fidelity; precondition: empty calculator at 1280×900. Action: inspect the toolbar and keypad. Expected: toolbar order is undo, redo, clear all, backspace and wrench; the four-column/five-row keypad is ( | ) | √ | ÷; 7 | 8 | 9 | ×; 4 | 5 | 6 | −; 1 | 2 | 3 | +; 0 | . | ans | blue bent-arrow submit. Match compact rectangular keys, narrow gaps, gray number/decimal keys, pale function keys and blue submit styling. This criterion grades appearance; undo/redo/settings behavior is not required.
历史与数学样式V03
Visual fidelity; precondition: the arithmetic result 30, ans+7 result 37 and √81 result 9 have been submitted using the visible controls. Action: inspect the resulting calculator. Expected: separated white history rows accumulate directly above the active row with expressions on the left and equals/results on the right, using reference-like mathematical typography and ×/÷/− symbols. The radical has an overbar; ans is a compact blue outlined value token with a small ans label. Preserve thin row separators, readable spacing and the focused blue active row without overlapping keypad or results. Numerical correctness is graded by the functional criteria.
页眉与页脚V04
Visual fidelity; precondition: default page at 1280×900. Action: inspect the surrounding page after it settles. Expected: light-gray full-width top bar with gray desmos wordmark left, Math Tools / Resources / Partnerships near the middle, Log In / blue Sign Up / globe / print controls right, plus bottom-centered Terms of Service / Privacy Policy / Help links. Match hierarchy, muted colors and whitespace. External navigation, account, print, help and language services are not required.
每项可展开查看交付包中的原始验收条件;分数由冻结规则计算。
查看交付题面原文(英文)
Reconstruct the visible Desmos-style four-function calculator as a runnable local web app in `/workspace`. It must work without login. Use the reference App and its supplied screenshots to reproduce the appearance and visible calculator behavior at the supplied **1280 × 900** viewport.
Support ordinary arithmetic through keyboard entry and the visible keypad: digits, decimal numbers, parentheses, addition, subtraction, multiplication and division, with normal precedence. Render readable mathematical notation, including ×, ÷ and −, and show a live result alongside a complete expression. For example, `(12.5+3.5)*2-8/4` evaluates to `30`.
Both Enter and the blue bent-arrow button must submit the active expression. Submission displays the expression and result together in history above a new blank input. Consecutive calculations retain earlier entries in order, with the latest nearest the input. Pressing Enter on a blank expression must leave history unchanged, including immediately after a submission.
The √ button must insert a radical that accepts a radicand, previews its square root and can be submitted to history; √81 gives 9. The `ans` button must insert the latest submitted answer as a visible answer token that can participate in a new calculation: after 30, `ans + 7` gives 37; after √81 has been submitted, `ans` supplies 9. Match the reference token's blue outline, numeric value and small ans label.
Provide the visible editing and clearing controls. The backspace icon removes the final entered character, such as changing 42 to 4, without clearing history. When history and an active expression are present, `clear` removes the active expression and its preview while retaining history; the toolbar then offers `clear all`. With blank input, `clear all` immediately empties history. Repeating it on an empty calculator leaves the calculator empty. These clear actions do not require a confirmation dialog.
Handle the bounded invalid cases visibly: `ans` without any submitted answer displays an unavailable-answer warning rather than a number; submitting `7+` records an invalid expression with a warning that can be opened to explain the missing operand; `1 ÷ 0` and the square root of −9 display `undefined` in their previews and submitted history. Explanatory error text may use equivalent wording.
Preserve the reference layout and styling: a white page with a narrow centered calculator, tall white history area, thin gray borders, blue outline around the focused input, light-gray toolbar, and compact four-column keypad. Keep the keypad arranged as follows:
| | | | |
| --- | --- | --- | --- |
| ( | ) | √ | ÷ |
| 7 | 8 | 9 | × |
| 4 | 5 | 6 | − |
| 1 | 2 | 3 | + |
| 0 | . | ans | blue submit arrow |
Match the gray number and decimal keys, pale function keys, blue submit key, mathematical typography, right-aligned results, divided history rows, spacing and surrounding whitespace. Include the visible undo, redo, clear, backspace and wrench toolbar controls. Match the top gray navigation bar with the desmos wordmark, central navigation, account buttons and globe/print icons, and the small legal/help links centered at the bottom. The supplied empty-state and populated-history screenshots establish the visual appearance:
- Empty state: event `dc46f279-09cb-4aee-a77a-a7523e404cd3-000002`, screenshot `/input/reference/browser/images/dc46f279-09cb-4aee-a77a-a7523e404cd3-000002-after.png`.
- Populated history: event `dc46f279-09cb-4aee-a77a-a7523e404cd3-000015`, screenshot `/input/reference/browser/images/dc46f279-09cb-4aee-a77a-a7523e404cd3-000015-after.png`.
Optional account, sign-up, help, language, print and navigation destinations do not need external services. Undo/redo and settings options need only their visible controls for this task. Refresh persistence, alternative viewport layouts and advanced calculator features are outside the delivery requirements.
Deliver the runnable implementation in `/workspace` with concise setup/start instructions so it can be served at the configured replica target. Use any suitable framework or source structure, keep existing attempts intact, and ensure the required calculator interactions run locally without relying on external account services. Observe the reference through the permitted screenshot browser only; do not retrieve its source, DOM or other hidden state.
## Controller scope and delivery contract
Reconstruct the visible no-login four-function calculator: enter arithmetic expressions with parentheses, decimals, addition, subtraction, multiplication and division; submit with Enter or the blue arrow; show an expression and result in history; support square root and an answer-history control; clear the expression/history with visible controls; preserve the observed calculator layout at the supplied viewport. Optional account, sign-up, help and language controls do not need external services. Determine all behavior by your own visual experiments; do not read original source or DOM.
Observe the configured reference through screenshots and coordinate browser actions. Implement your own local website; reference source, DOM, accessibility, storage and network inspection are unavailable. Serve on 0.0.0.0:3000. Deliver submission.json with a foreground start_command and port 3000. Use only supplied runtime dependencies or the permitted offline package inventory.
题目、运行环境、评分依据和通过证据放在一起。
题目定义
公开题面、交付要求、功能边界与逐项评分标准。
Harbor 运行包
任务配置、运行时、浏览器适配器和可启动的隔离环境。
独立验收
实际启动提交的 App,操作其界面,再计算 rubric 分数。
通过示例与轨迹
复刻源码、完整盲解记录、截图、回放和带图片的 SFT 数据。
复跑条件与包内文件
运行要求:Linux x86_64、Docker、bwrap、Harbor 0.3.0,以及包内附带的 Codex SDK 适配器。运行时包含 Chromium、Node 22、Python 3.12 与 Conda 环境。应用在固定 1280 × 900 视口下验收,提交入口使用端口 3000。
原站是在线依赖,模型 API 也需要联网。原站没有被封装成离线镜像。本次使用 gpt-6.1-sol 与 Codex SDK;评分是独立视觉 Judge 按冻结 rubric 作出的判断。
解包请保留文件权限:tar --same-permissions -xzf <包名>。进入 harbor/ 后运行包内 setup-runtime.sh 与 run-harbor.sh;模型凭据由外部环境注入。