tidwright ເພີ່ມ data-testid ໃຫ້ໂຄດຂອງທ່ານຕາມມາດຕະຖານດຽວ ໂດຍເຄື່ອງມືເຮັດການແກ້ໄຂຊຸດທີ່ປອດໄພ ສ່ວນທີ່ເຫຼືອ AI ຕັດສິນຜ່ານ plan ທີ່ຜ່ານການກວດສອບ parser ເປັນຜູ້ກຳນົດຕຳແໜ່ງການແກ້ໄຂທຸກຈຸດ build ຕ້ອງຜ່ານ ບໍ່ດັ່ງນັ້ນໄຟລ໌ທັງໝົດຈະຖືກຄືນສະພາບ ແລະ ບໍ່ມີການຂຽນໄຟລ໌ຖ້າຍັງບໍ່ໄດ້ຮັບການອະນຸມັດ ຈາກນັ້ນ QA ຂຽນ Playwright test ເທິງ id ເຫຼົ່ານັ້ນ
01ປຽບທຽບ
ຄວາມແຕກຕ່າງລະຫວ່າງການໃຊ້ ແລະ ບໍ່ໃຊ້
ປຽບທຽບວິທີເຮັດວຽກຂອງທີມ ກ່ອນ ແລະ ຫຼັງມີມາດຕະຖານ
btn1, submitBtn) ເຮັດໃຫ້ test ພັງທຸກຄັ້ງທີ່ refactor<area>-<element>-<type> ເຊັ່ນ login-submit-button ແລະ lint ບັງຄັບໃຊ້e2e/TESTIDS.md ທີ່ສ້າງໃຫ້ ແລະ ໃຊ້ getByTestId ເທົ່ານັ້ນ/tidwright:audit ກວດພົບກ່ອນຣັນ ພ້ອມກວດ sleep, .only ແລະ credential ໃນ specຕົວຢ່າງກ່ອນ ແລະ ຫຼັງ
- <button onClick={save}>Save</button> + <button data-testid="order-form-save-button" onClick={save}>Save</button> - <input name="customerName" /> + <input data-testid="order-form-customer-name-input" name="customerName" />
ຜົນລັບຈິງຂອງ scan --write ກັບໄຟລ໌ OrderForm.tsx ປຸ່ມ Save ທີ່ຊື່ມາຈາກຂໍ້ຄວາມເທົ່ານັ້ນ ຈະຖືກສະແດງເພື່ອໃຫ້ກວດສອບ ເວັ້ນແຕ່ລະບຸ --accept-text
02ຂັ້ນຕອນການເຮັດວຽກ
ຂັ້ນຕອນການເຮັດວຽກ
ຫ້າຂັ້ນຕອນ ແລະ ຈະບໍ່ມີການຂຽນໄຟລ໌ຖ້າຍັງບໍ່ໄດ້ຮັບການອະນຸມັດ
- Scanparser ຂອງໂປຣເຈັກລະບຸຕຳແໜ່ງຂອງທຸກ element ທີ່ test ຈະໃຊ້ (ປຸ່ມ ລິ້ງ ຊ່ອງປ້ອນຂໍ້ມູນ ຟອມ) ແລະ ສະເໜີຊື່ມາດຕະຖານ ມີພຽງຊຸດຍ່ອຍທີ່ຈຳກັດເທົ່ານັ້ນທີ່ຖືກຈັດວ່າປອດໄພ ສ່ວນທີ່ເຫຼືອເປັນຄິວກວດສອບພ້ອມເຫດຜົນກຳກັບທຸກລາຍການ
- ເພີ່ມ idເຄື່ອງມືຂຽນຊຸດທີ່ປອດໄພ ສ່ວນທີ່ເຫຼືອ AI ເປັນຜູ້ຕັດສິນຜ່ານ plan ທີ່ຜ່ານການກວດສອບ (element ໃນ loop ຈະໄດ້
${key}ທີ່ຄົງທີ່) ແລະ ຕ້ອງມີຜູ້ອະນຸມັດກ່ອນຂຽນທຸກຄັ້ງ - ກວດສອບໃນ transaction ດຽວໄຟລ໌ທີ່ແກ້ໄຂຖືກ parse ຄືນ typecheck/build ຕ້ອງຜ່ານ ແລະ ຖ້າລະບຸ
--smokeຈະມີການກວດໃນບຣາວເຊີວ່າ id ບໍ່ຊ້ຳ ແລະ ຄົບຖ້ວນ ຖ້າຂັ້ນຕອນໃດທີ່ຣັນລົ້ມເຫຼວ ໄຟລ໌ທັງໝົດຈະຖືກຄືນສະພາບ - Catalogໄຟລ໌
e2e/TESTIDS.mdຖືກສ້າງໃຫ້ QA ທຸກຄັ້ງທີ່ຂຽນ ໂດຍລະບຸວິທີກຳນົດຂອງແຕ່ລະ id - QA ຂຽນ testspec ໃຊ້
getByTestIdແລະ ການ audit ກວດພົບ id ທີ່ spec ໃຊ້ແຕ່ source ບໍ່ມີແລ້ວ
03ປະໂຫຍດທີ່ໄດ້ຮັບ
ປະໂຫຍດທີ່ໄດ້ຮັບ
ສິ່ງທີ່ທີມໄດ້ເພີ່ມເຕີມຈາກທີ່ບໍ່ເຄີຍມີມາກ່ອນ
ມາດຕະຖານ ແລະ lint
ລາຍການ type ແບບປິດ (button input select row modal toast page ແລະອື່ນໆ) ຫ້າມໃຊ້ຄຳຄຸມເຄືອ ເຊັ່ນ btn div red ແລະ ຫ້າມໃຊ້ຕົວເລກລອຍ ໃຫ້ໃຊ້ business id ແທນ
ສູດສຳລັບແຕ່ລະ component
recipe modal orders-delete ໃຫ້ຊຸດ id ທີ່ກຳນົດໄວ້ສຳລັບ modal, table, form, tabs ແລະ toast ບໍ່ຕ້ອງອອກແບບໃໝ່ທຸກໜ້າ
Locator helper
modal(page,"orders-delete").confirm ແລະ table(page,"orders").row(id) ສອດຄ່ອງກັບສູດທີ່ກຳນົດ
Guard ກວດ id ຊ້ຳ
template ສຳລັບ vitest/jest ແລະ Playwright fixture ທີ່ເຮັດໃຫ້ test ລົ້ມເຫຼວເມື່ອ data-testid ດຽວກັນປາກົດໃນ DOM ຫຼາຍກວ່າໜຶ່ງບ່ອນ
Auditor
ກວດພົບ sleep, .only, credential ທີ່ຂຽນຕົງໆ, selector ແບບ CSS/XPath/ຂໍ້ຄວາມ ແລະ id ທີ່ source ບໍ່ໄດ້ກຳນົດ
ຄວາມປອດໄພດ້ານ host
template playwright.config.ts ປະຕິເສດ host ທີ່ບໍ່ແມ່ນ local ເວັ້ນແຕ່ຢູ່ໃນ allow list ປ້ອງກັນການຣັນກັບ production ໂດຍບໍ່ຕັ້ງໃຈ
04ມາດຕະຖານ id
ມາດຕະຖານ id
<area>-<element>-<type> · kebab-case ຕົວອັກສອນ ASCII · ສ່ວນທ້າຍເປັນ type ຈາກລາຍການແບບປິດ · ແຕ່ລະ id ກຳນົດໄດ້ຄັ້ງດຽວ (ລວມທັງ id ແບບ dynamic)
<n> = ຊື່ທີ່ຕັ້ງ)<n>-modal · -title-text · -close-button · -confirm-button · -cancel-button · -error-banner<n>-form · -submit-button · <form>-<field>-input · …-error<n>-table · -row-${id} · -cell-${id}-${col} · -sort-button-${col} · -empty · -loading · -error<n>-tab-${key} / -panel-${key} · -trigger-button / -item-${key} · -prev-button / -next-button · <action>-success-toast05ຄວາມປອດໄພ
ຄວາມປອດໄພທີ່ອອກແບບໄວ້
ບໍ່ຂຽນໄຟລ໌ຖ້າບໍ່ໄດ້ສັ່ງ
scan ອ່ານຢ່າງດຽວ ການຂຽນຕ້ອງໃຊ້ --write ແລະ ຂັ້ນຕອນຂອງ AI ຈະສະແດງ dry run ແລະ ຂໍອະນຸມັດກ່ອນສະເໝີ ໄຟລ໌ທີ່ມີການແກ້ໄຂຄ້າງຢູ່ໃນ git ຈະຖືກຂ້າມ
ຊຸດອັດຕະໂນມັດທີ່ຈຳກັດໂດຍເຈດຕະນາ
ເພີ່ມສະເພາະ native element ທີ່ມີຊື່ໜ້າເຊື່ອຖື ບໍ່ຊ້ຳ ບໍ່ມີ spread ແລະ ສະແດງຜົນຈິງ ສ່ວນທີ່ເຫຼືອສະແດງເປັນລາຍການພ້ອມເຫດຜົນ
ຕຳແໜ່ງມາຈາກ parser
ໃຊ້ parser ຂອງໂປຣເຈັກເອງ (TypeScript, Vue, Svelte, Angular, parse5) ຈຶ່ງບໍ່ເຂົ້າໃຈຜິດວ່າ string, regex ຫຼື comment ເປັນ element ຖ້າບໍ່ມີ parser ຈະສະແດງລາຍການເທົ່ານັ້ນ ບໍ່ຂຽນ
build ຕ້ອງຜ່ານ ບໍ່ດັ່ງນັ້ນຄືນໄຟລ໌
--write ບັງຄັບ --verify ເຊິ່ງຕ້ອງຜ່ານທັງກ່ອນ ແລະ ຫຼັງ ຖ້າບໍ່ໄດ້ຣັນການກວດໃນບຣາວເຊີ ລາຍງານຈະລະບຸວ່າ NOT run
repo ທີ່ clone ມາສັ່ງຣັນຄຳສັ່ງເອງບໍ່ໄດ້
ຄຳສັ່ງ verify ທີ່ມາຈາກໄຟລ໌ໃນ repository ເທົ່ານັ້ນຈະບໍ່ຖືກຣັນຈົນກວ່າຜູ້ໃຊ້ຈະອະນຸມັດ
ນຳໄປໃຊ້ກັບໂຄດເດີມໄດ້
lint --write-baseline ຍອມຮັບບັນຫາທີ່ມີຢູ່ໃນປັດຈຸບັນ ຈາກນັ້ນ CI ຈະລົ້ມເຫຼວສະເພາະບັນຫາໃໝ່
06ຫຼັກຖານ
ຫຼັກຖານ
ຣັນຊ້ຳໄດ້ດ້ວຍ node tools/corpus-check.mjs ເທິງແອັບໂອເພນຊອດ 9 ໂຕທີ່ລະບຸ commit ໄວ້ (RealWorld Conduit ໃນ Vue / SvelteKit / Angular / React, elk, ngx-admin, shadcn-svelte, excalidraw, vercel/commerce)
- ເຄື່ອງມືຣັນເທິງໂຄດຈິງໄດ້ໂດຍບໍ່ລົ້ມ
- ສິ່ງທີ່ຂຽນເປັນການແຊກ attribute ລ້ວນ (ເມື່ອລຶບ attribute ທີ່ເພີ່ມອອກຈະໄດ້ໄຟລ໌ເດີມທຸກໄບຕ໌)
- id ທີ່ເພີ່ມເປັນໄປຕາມມາດຕະຖານ ແລະ ບໍ່ຊົນກັນ
- ວ່າແອັບທີ່ແກ້ໄຂແລ້ວຍັງ compile ໄດ້ (ໃຊ້
--verifyໃນໂປຣເຈັກຂອງທ່ານ) - ວ່າຊື່ທີ່ສະເໜີເປັນຊື່ທີ່ດີທີ່ສຸດ
- ວ່າ test ທີ່ຂຽນເທິງ id ເຫຼົ່ານີ້ບໍ່ໝັ້ນຄົງໜ້ອຍລົງ
07ຂໍ້ຈຳກັດ
ຂໍ້ຈຳກັດ
- ຊື່ມາຈາກ attribute, i18n key, route ແລະ handler ບໍ່ໄດ້ມາຈາກຄວາມຮູ້ທາງທຸລະກິດ ສິ່ງທີ່ບໍ່ມີຊື່ໜ້າເຊື່ອຖືຈະສົ່ງໃຫ້ AI ຫຼື ຜູ້ໃຊ້ຕັດສິນ ຄວນ dry-run ເທື່ອລະໂຟນເດີຟີເຈີ ແລະ ອ່ານ diff ກ່ອນ
--write - ຕ້ອງມີ parser ຂອງໂປຣເຈັກ ຖ້າບໍ່ມີ ເຄື່ອງມືຈະສະແດງລາຍການເທົ່ານັ້ນ ແລະ ບໍ່ຂຽນ
- ສິ່ງທີ່ static analysis ບໍ່ສາມາດຮູ້ໄດ້ (portal, conditional branch, dynamic component) ຕ້ອງອາໄສການກວດໃນບຣາວເຊີ ແລະ ຜູ້ອ່ານ diff
- ຍັງບໍ່ມີ benchmark ທີ່ສະແດງວ່າດີກວ່າ skill ຕົ້ນແບບທັງສາມໂຕ ຫຼື ວ່າ test ທີ່ຂຽນເທິງ id ເຫຼົ່ານີ້ບໍ່ໝັ້ນຄົງໜ້ອຍລົງ
- ໃຊ້ກັບ Codex ແລະ Cursor ໄດ້ຜ່ານ
AGENTS.mdແຕ່ຍັງບໍ່ເຄີຍທົດສອບໃນ Codex ຫຼື Cursor ຈິງ
08ເລີ່ມຕົ້ນໃຊ້ງານ
ເລີ່ມຕົ້ນໃຊ້ງານ
ຂັ້ນຕອນສະບັບເຕັມຂອງແຕ່ລະເອເຈນຢູ່ໃນ README ຂອງ repository (ຂໍ URL ຂອງ repository ໄດ້ຈາກທີມ)
Claude Code
ຕິດຕັ້ງ plugin ແລ້ວໃຊ້ສາມຄຳສັ່ງດ້ານລຸ່ມ
Codex
ອ່ານ AGENTS.md ທີ່ຮາກຂອງໂປຣເຈັກ ເຊິ່ງມີຂັ້ນຕອນ ແລະ ຄຳສັ່ງທີ່ຖືກຕ້ອງ
Cursor
ສຳເນົາ .cursor/rules/tidwright.mdc ເຊິ່ງຊີ້ເອເຈນໄປຍັງ AGENTS.md
# ຕິດຕັ້ງ /plugin install tidwright@tidwright-marketplace # ສຳຫຼວດ repo → ຂຽນ profile → scaffold (ຕ້ອງອະນຸມັດ) /tidwright:init # ເພີ່ມ id ໃຫ້ໜຶ່ງຟີເຈີ ແລ້ວເຜີຍແຜ່ catalog /tidwright:testid src/features/orders # ກວດ spec /tidwright:audit