{"owner":"microsoft","repo":"playwright-python","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":748,"categories":["anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":[".claude/skills/playwright-roll/SKILL.md"],"skills":{".claude/skills/playwright-roll/SKILL.md":"---\nname: playwright-roll\ndescription: Roll Playwright Python to a new microsoft/playwright commit. Pins the commit, generates the API and builds the driver from it, and ports the upstream diff of the client and the tests.\n---\n\n# Rolling Playwright\n\nRead `AGENTS.md` first. A roll moves `DRIVER_VERSION` to a new upstream commit and\nports everything that changed in between.\n\n## 1. Pin\n\n```sh\npython scripts/upstream.py pin main      # or a branch, a tag, a commit\npython scripts/update_node_version.py\nold=$(git show HEAD:DRIVER_VERSION)\nnew=$(cat DRIVER_VERSION)\n```\n\n## 2. Generate\n\n```sh\n./scripts/update_api.sh\nmypy playwright\n```\n\nThe mypy errors are the to-do list: new members, options and protocol parameters that\n`_impl/` does not have yet. Until they are ported, the client may not work with the new\ndriver. To see what changed in the public API:\n\n```sh\ngit show HEAD:playwright/async_api/_generated.py > /tmp/old.py\npython scripts/codegen/compare_api.py /tmp/old.py playwright/async_api/_generated.py --show all\n```\n\n## 3. Build\n\n```sh\npython -m build --wheel\nplaywright install chromium firefox webkit\n```\n\n## 4. Port\n\n```sh\npython scripts/upstream.py changes\n```\n\nIt lists each changed upstream file with the Python file to port it to. For each one,\nread `git -C .upstream diff $old $new -- <file>` and port it hunk by hunk:\n\n- client code: into the module it names; `(no Python port yet)` is a new module;\n- tests: into the async and the sync file it names. New test names come from\n  `python scripts/check_test_registry.py --missing <id>`;\n- test assets and snapshot images: copy them to the place it names;\n- the \"Generated\" group: step 2 did it.\n\nChanges in the server or in the injected scripts need nothing: they come with the new\ndriver. A test marked `xfail(reason=\"driver: ...\")` may pass now; remove the mark then.\n\nRun each changed test file on the three browsers. Then run `mypy playwright` until it\nis clean.\n\n## 5. Check\n\n```sh\n./test.sh\npython scripts/update_versions.py        # the browser versions in README.md\n./scripts/lint.sh                        # last: the roll is done when it passes\n```\n\nA failure in a file that the roll did not change may be a flake, or older than the\nroll. Find out which, and say so in the PR.\n\nTitle the PR `chore: roll Playwright to <version> (<first 10 characters of $new>)`, with\nthe version from `.upstream/packages/playwright-core/package.json`. In the description,\nlist what you ported and what is left, and put the output of\n`python scripts/upstream.py log` in a `<details>` block. The roll workflow adds that\nlist itself.\n\n## When it breaks\n\n- `missing ... argument`, or `Protocol violations` at the end of a test: a protocol change\n  that the client does not follow yet. Port its hunk.\n- `timeout: expected float, got undefined` at launch: `playwright/driver/` is older\n  than the pin. Build again.\n- `.upstream/ is not at ...`: `python scripts/upstream.py checkout`.\n"},"files":{".claude/skills/playwright-roll/SKILL.md":"---\nname: playwright-roll\ndescription: Roll Playwright Python to a new microsoft/playwright commit. Pins the commit, generates the API and builds the driver from it, and ports the upstream diff of the client and the tests.\n---\n\n# Rolling Playwright\n\nRead `AGENTS.md` first. A roll moves `DRIVER_VERSION` to a new upstream commit and\nports everything that changed in between.\n\n## 1. Pin\n\n```sh\npython scripts/upstream.py pin main      # or a branch, a tag, a commit\npython scripts/update_node_version.py\nold=$(git show HEAD:DRIVER_VERSION)\nnew=$(cat DRIVER_VERSION)\n```\n\n## 2. Generate\n\n```sh\n./scripts/update_api.sh\nmypy playwright\n```\n\nThe mypy errors are the to-do list: new members, options and protocol parameters that\n`_impl/` does not have yet. Until they are ported, the client may not work with the new\ndriver. To see what changed in the public API:\n\n```sh\ngit show HEAD:playwright/async_api/_generated.py > /tmp/old.py\npython scripts/codegen/compare_api.py /tmp/old.py playwright/async_api/_generated.py --show all\n```\n\n## 3. Build\n\n```sh\npython -m build --wheel\nplaywright install chromium firefox webkit\n```\n\n## 4. Port\n\n```sh\npython scripts/upstream.py changes\n```\n\nIt lists each changed upstream file with the Python file to port it to. For each one,\nread `git -C .upstream diff $old $new -- <file>` and port it hunk by hunk:\n\n- client code: into the module it names; `(no Python port yet)` is a new module;\n- tests: into the async and the sync file it names. New test names come from\n  `python scripts/check_test_registry.py --missing <id>`;\n- test assets and snapshot images: copy them to the place it names;\n- the \"Generated\" group: step 2 did it.\n\nChanges in the server or in the injected scripts need nothing: they come with the new\ndriver. A test marked `xfail(reason=\"driver: ...\")` may pass now; remove the mark then.\n\nRun each changed test file on the three browsers. Then run `mypy playwright` until it\nis clean.\n\n## 5. Check\n\n```sh\n./test.sh\npython scripts/update_versions.py        # the browser versions in README.md\n./scripts/lint.sh                        # last: the roll is done when it passes\n```\n\nA failure in a file that the roll did not change may be a flake, or older than the\nroll. Find out which, and say so in the PR.\n\nTitle the PR `chore: roll Playwright to <version> (<first 10 characters of $new>)`, with\nthe version from `.upstream/packages/playwright-core/package.json`. In the description,\nlist what you ported and what is left, and put the output of\n`python scripts/upstream.py log` in a `<details>` block. The roll workflow adds that\nlist itself.\n\n## When it breaks\n\n- `missing ... argument`, or `Protocol violations` at the end of a test: a protocol change\n  that the client does not follow yet. Port its hunk.\n- `timeout: expected float, got undefined` at launch: `playwright/driver/` is older\n  than the pin. Build again.\n- `.upstream/ is not at ...`: `python scripts/upstream.py checkout`.\n"},"items":[{"name":"SKILL.md","path":".claude/skills/playwright-roll/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/playwright-python/HEAD/.claude/skills/playwright-roll/SKILL.md","title":"playwright-roll","category":"anthropic-skill","format":"markdown","content":"---\nname: playwright-roll\ndescription: Roll Playwright Python to a new microsoft/playwright commit. Pins the commit, generates the API and builds the driver from it, and ports the upstream diff of the client and the tests.\n---\n\n# Rolling Playwright\n\nRead `AGENTS.md` first. A roll moves `DRIVER_VERSION` to a new upstream commit and\nports everything that changed in between.\n\n## 1. Pin\n\n```sh\npython scripts/upstream.py pin main      # or a branch, a tag, a commit\npython scripts/update_node_version.py\nold=$(git show HEAD:DRIVER_VERSION)\nnew=$(cat DRIVER_VERSION)\n```\n\n## 2. Generate\n\n```sh\n./scripts/update_api.sh\nmypy playwright\n```\n\nThe mypy errors are the to-do list: new members, options and protocol parameters that\n`_impl/` does not have yet. Until they are ported, the client may not work with the new\ndriver. To see what changed in the public API:\n\n```sh\ngit show HEAD:playwright/async_api/_generated.py > /tmp/old.py\npython scripts/codegen/compare_api.py /tmp/old.py playwright/async_api/_generated.py --show all\n```\n\n## 3. Build\n\n```sh\npython -m build --wheel\nplaywright install chromium firefox webkit\n```\n\n## 4. Port\n\n```sh\npython scripts/upstream.py changes\n```\n\nIt lists each changed upstream file with the Python file to port it to. For each one,\nread `git -C .upstream diff $old $new -- <file>` and port it hunk by hunk:\n\n- client code: into the module it names; `(no Python port yet)` is a new module;\n- tests: into the async and the sync file it names. New test names come from\n  `python scripts/check_test_registry.py --missing <id>`;\n- test assets and snapshot images: copy them to the place it names;\n- the \"Generated\" group: step 2 did it.\n\nChanges in the server or in the injected scripts need nothing: they come with the new\ndriver. A test marked `xfail(reason=\"driver: ...\")` may pass now; remove the mark then.\n\nRun each changed test file on the three browsers. Then run `mypy playwright` until it\nis clean.\n\n## 5. Check\n\n```sh\n./test.sh\npython scripts/update_versions.py        # the browser versions in README.md\n./scripts/lint.sh                        # last: the roll is done when it passes\n```\n\nA failure in a file that the roll did not change may be a flake, or older than the\nroll. Find out which, and say so in the PR.\n\nTitle the PR `chore: roll Playwright to <version> (<first 10 characters of $new>)`, with\nthe version from `.upstream/packages/playwright-core/package.json`. In the description,\nlist what you ported and what is left, and put the output of\n`python scripts/upstream.py log` in a `<details>` block. The roll workflow adds that\nlist itself.\n\n## When it breaks\n\n- `missing ... argument`, or `Protocol violations` at the end of a test: a protocol change\n  that the client does not follow yet. Port its hunk.\n- `timeout: expected float, got undefined` at launch: `playwright/driver/` is older\n  than the pin. Build again.\n- `.upstream/ is not at ...`: `python scripts/upstream.py checkout`.\n","frontmatter":{"name":"playwright-roll","description":"Roll Playwright Python to a new microsoft/playwright commit. Pins the commit, generates the API and builds the driver from it, and ports the upstream diff of the client and the tests."},"isInternal":false,"tokens":748,"sizeBytes":2940}],"systemPromptSnippet":"<yakaai_skills repo=\"microsoft/playwright-python\">\n<!-- File: .claude/skills/playwright-roll/SKILL.md (Tokens: ~748 | Category: anthropic-skill) -->\n---\nname: playwright-roll\ndescription: Roll Playwright Python to a new microsoft/playwright commit. Pins the commit, generates the API and builds the driver from it, and ports the upstream diff of the client and the tests.\n---\n\n# Rolling Playwright\n\nRead `AGENTS.md` first. A roll moves `DRIVER_VERSION` to a new upstream commit and\nports everything that changed in between.\n\n## 1. Pin\n\n```sh\npython scripts/upstream.py pin main      # or a branch, a tag, a commit\npython scripts/update_node_version.py\nold=$(git show HEAD:DRIVER_VERSION)\nnew=$(cat DRIVER_VERSION)\n```\n\n## 2. Generate\n\n```sh\n./scripts/update_api.sh\nmypy playwright\n```\n\nThe mypy errors are the to-do list: new members, options and protocol parameters that\n`_impl/` does not have yet. Until they are ported, the client may not work with the new\ndriver. To see what changed in the public API:\n\n```sh\ngit show HEAD:playwright/async_api/_generated.py > /tmp/old.py\npython scripts/codegen/compare_api.py /tmp/old.py playwright/async_api/_generated.py --show all\n```\n\n## 3. Build\n\n```sh\npython -m build --wheel\nplaywright install chromium firefox webkit\n```\n\n## 4. Port\n\n```sh\npython scripts/upstream.py changes\n```\n\nIt lists each changed upstream file with the Python file to port it to. For each one,\nread `git -C .upstream diff $old $new -- <file>` and port it hunk by hunk:\n\n- client code: into the module it names; `(no Python port yet)` is a new module;\n- tests: into the async and the sync file it names. New test names come from\n  `python scripts/check_test_registry.py --missing <id>`;\n- test assets and snapshot images: copy them to the place it names;\n- the \"Generated\" group: step 2 did it.\n\nChanges in the server or in the injected scripts need nothing: they come with the new\ndriver. A test marked `xfail(reason=\"driver: ...\")` may pass now; remove the mark then.\n\nRun each changed test file on the three browsers. Then run `mypy playwright` until it\nis clean.\n\n## 5. Check\n\n```sh\n./test.sh\npython scripts/update_versions.py        # the browser versions in README.md\n./scripts/lint.sh                        # last: the roll is done when it passes\n```\n\nA failure in a file that the roll did not change may be a flake, or older than the\nroll. Find out which, and say so in the PR.\n\nTitle the PR `chore: roll Playwright to <version> (<first 10 characters of $new>)`, with\nthe version from `.upstream/packages/playwright-core/package.json`. In the description,\nlist what you ported and what is left, and put the output of\n`python scripts/upstream.py log` in a `<details>` block. The roll workflow adds that\nlist itself.\n\n## When it breaks\n\n- `missing ... argument`, or `Protocol violations` at the end of a test: a protocol change\n  that the client does not follow yet. Port its hunk.\n- `timeout: expected float, got undefined` at launch: `playwright/driver/` is older\n  than the pin. Build again.\n- `.upstream/ is not at ...`: `python scripts/upstream.py checkout`.\n</yakaai_skills>"}