1. 01 5月, 2026 6 次提交
    • Vittorio's avatar
      支持连接器 · 427a845b
      Vittorio 提交于
      427a845b
    • Vittorio's avatar
      修改产品名称 · 99d0221f
      Vittorio 提交于
      99d0221f
    • Vittorio's avatar
      更换logo · d74517b0
      Vittorio 提交于
      d74517b0
    • Vittorio's avatar
      去掉广告,修改一些界面展示为中文 · d2955458
      Vittorio 提交于
      d2955458
    • keppo-bot[bot]'s avatar
      test: deflake setup and context E2E flows (#3319) · 30300641
      keppo-bot[bot] 提交于
      ## Summary
      - Deflake setup-flow E2E by clearing the fake OPENAI_API_KEY when a test
      explicitly wants the setup screen.
      - Update custom provider key setup to wait for the saved masked key UI
      instead of the raw secret text.
      - Wait for Smart Context settings persistence and give cloud sandbox
      undo enough time to finish snapshot reconciliation.
      
      ## Root cause
      Run: https://github.com/dyad-sh/dyad/actions/runs/25189808932
      
      The red setup-flow failure was caused by two test assumptions drifting
      from app behavior. The setup-screen fixture could inherit OPENAI_API_KEY
      from an earlier test in the same worker, causing the setup banner to
      disappear. The provider helper also waited for the full raw test API
      key, while the app now saves and renders the key masked as test...2345.
      
      Two retry-only flakes were separate E2E timing contracts: the Smart
      Context test sent the next dump prompt before the off setting was
      persisted, and cloud sandbox undo could still be syncing/restarting when
      the digest poll hit the LONG timeout.
      
      ## Why this fix is correct
      - Tests that opt into showSetupScreen now get an environment without the
      fake OpenAI key, matching the setup-screen contract.
      - The provider helper waits for the persisted saved-key state the UI
      actually exposes, without asserting raw secret text.
      - The Smart Context test waits on the settings file before sending the
      prompt that depends on it.
      - Cloud sandbox undo already uses EXTRA_LONG for preview startup;
      applying the same budget to undo reconciliation matches the slower cloud
      path seen in CI.
      
      ## Test plan
      - npm run fmt && npm run lint:fix && npm run ts
      - npm test
      - PYTHON=/usr/bin/python3 npm run build
      - PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/setup_flow.spec.ts
      - PLAYWRIGHT_HTML_OPEN=never npm run e2e --
      e2e-tests/context_manage.spec.ts e2e-tests/cloud_sandbox.spec.ts
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      
      ---------
      Co-authored-by: 's avatarWill Chen <7344640+wwwillchen@users.noreply.github.com>
      30300641
    • keppo-bot[bot]'s avatar
      Deflake CI E2E failures (#3311) · 971aca34
      keppo-bot[bot] 提交于
      ## Summary
      - Deflake CI E2E failures from
      https://github.com/dyad-sh/dyad/actions/runs/25126503338.
      - Await streamed token-usage persistence before token-count invalidation
      so the context-limit banner sees the real max token usage.
      - Harden E2E helpers around GitHub sync completion, already-applied
      proposals, queued Lexical submissions, visual-save button re-renders,
      and Windows line endings.
      - Update the component-tagger upgrade snapshot from 0.8.0 to 0.9.0.
      
      ## Root Cause
      The failing run had several independent races and one stale snapshot:
      - The context-limit banner could refetch token counts before the
      assistant message's max token usage had been saved, leaving
      actualMaxTokens null after a high-token stream.
      - GitHub assertions snapshotted the connected-repo panel while the sync
      button was still in its transient Syncing state.
      - Some E2E helpers used one-shot Lexical fills/clicks where Playwright
      can act during React or DOM replacement windows.
      - The code-editor assertion compared raw file contents, which fails on
      Windows CRLF output.
      - The select-component upgrade snapshot still expected the older
      component tagger version.
      
      ## Why This Fix Is Correct
      - Awaiting the existing max-token update makes the later chat/token
      invalidations observe the persisted usage instead of racing it.
      - GitHub sync waits now use the stable connected-repo panel state:
      Syncing hidden, Sync to GitHub enabled, and the panel-local success text
      visible.
      - Queued-message and visual-save actions now retry the exact UI contract
      the tests require: the queued row appears or the save button is visible,
      enabled, and clickable.
      - The editor test normalizes only line endings, preserving the
      file-content assertion while making it platform-independent.
      
      ## Test Plan
      - npm run fmt && npm run lint:fix && npm run ts
      - PYTHON=/usr/bin/python3 npm run build
      - PLAYWRIGHT_HTML_OPEN=never npm run e2e --
      e2e-tests/select_component.spec.ts --update-snapshots
      - PLAYWRIGHT_HTML_OPEN=never npm run e2e --
      e2e-tests/context_limit_banner.spec.ts e2e-tests/debugging_logs.spec.ts
      e2e-tests/edit_code.spec.ts e2e-tests/github.spec.ts
      e2e-tests/queued_message.spec.ts e2e-tests/visual_editing.spec.ts
      - First run: 21 passed, 6 GitHub helper strict-mode failures due
      duplicate success toast text.
      - PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/github.spec.ts
      - npm test
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3311"
      target="_blank">
        <picture>
      <source media="(prefers-color-scheme: dark)"
      srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
      <img
      src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
      alt="Open in Devin Review">
        </picture>
      </a>
      <!-- devin-review-badge-end -->
      
      ---------
      Co-authored-by: 's avatarWill Chen <7344640+wwwillchen@users.noreply.github.com>
      971aca34
  2. 30 4月, 2026 2 次提交
  3. 29 4月, 2026 9 次提交
  4. 28 4月, 2026 5 次提交
  5. 27 4月, 2026 2 次提交
  6. 24 4月, 2026 1 次提交
  7. 23 4月, 2026 12 次提交
  8. 22 4月, 2026 2 次提交
  9. 21 4月, 2026 1 次提交
    • keppo-bot[bot]'s avatar
      Add deflake-e2e-from-run skill (#3247) · 1ab2dfc1
      keppo-bot[bot] 提交于
      ## Summary
      
      Adds a new skill, `dyad:deflake-e2e-from-run`, for root-causing E2E
      failures from a specific CI run by reading the Playwright HTML report
      artifacts directly — traces, screenshots, error-context, and app
      stdout/stderr — instead of rebuilding and rerunning locally.
      
      This complements the existing `deflake-e2e` and
      `deflake-e2e-recent-commits` skills, which drive *discovery* by
      repeat-running tests. This new skill is for when you already have a
      failing run and want to root-cause fast.
      
      ## What the skill covers
      
      - Downloading the merged `html-report` artifact with `gh run download -R
      dyad-sh/dyad -n html-report`.
      - `jq` queries against `results.json` for `unexpected` vs `flaky` test
      buckets.
      - Matching trace `.zip` hashes (paths in `results.json` are CI-side;
      files are local in `/tmp/pw-report/data/`).
      - Reading `test.trace` as JSONL to extract the step timeline.
      - Correlating with app IPC logs that show up as `stderr`/`stdout` trace
      events (gold for race-condition root-causing — e.g. `(proposal_handlers)
      › IPC: get-proposal returned: …` at failure time).
      - A short playbook of common failure shapes (disabled-button-after-fill,
      navigation races, cross-test state) and their usual fixes.
      
      Derived from the workflow used to root-cause #3246.
      
      ## Test plan
      
      - [x] Skill file follows the same frontmatter format as existing skills
      in `.claude/skills/`.
      - [x] Verified via the use case in #3246 (full investigation done
      end-to-end using exactly these steps).
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3247"
      target="_blank">
        <picture>
      <source media="(prefers-color-scheme: dark)"
      srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
      <img
      src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
      alt="Open in Devin Review">
        </picture>
      </a>
      <!-- devin-review-badge-end -->
      Co-authored-by: 's avatarWill Chen <7344640+wwwillchen@users.noreply.github.com>
      Co-authored-by: 's avatarClaude Opus 4.7 (1M context) <noreply@anthropic.com>
      1ab2dfc1