docs/agent-skills/rag/<id>.md 2–4 файла на задачу. Один id = файл.
ADRПочему A, не B?
Решение, которое дорого откатывать.
docs/adr/NNN-*.md Skill ссылается. ≤ ~40 строк.
простой мир · чайник
Человек: «Сделай чай»
↓
Rule → не включать пустой; не оставлять без присмотра
Skill → вода до метки → кнопка → клик → чашка
RAG → на 4 этаже кнопка СЛЕВА; кипяток ≈ 100 °C
ADR → электрический, не самовар: скорость > ритуал
прогон e2e slice
Вы: «Прогони e2e»
↓
Rule → tags e2e, не full suite; не commit; всегда -Denv
Skill → qa-smoke-debug: app UP → Gradle → Allure → flaky
RAG → ci-gradle-args · cfg-stands · po-fluent
ADR → screenshot — slice, не @Layer (005)
мини-quiz · куда класть
Ситуация
Skill
Rule
RAG
ADR
Не коммитить без OK
✓
Порядок: слой → PO → прогон
✓
Селекторы только в Page Object
✓
Screenshot не ярус пирамиды
✓
401 JSON не новый e2e-клик
✓
DoD после прогона
✓
E2e = -DincludeTags=e2e
✓
Как агент это видит
В IDE rule включается сам. Skill читают фразой «прочитай SKILL.md». RAG — 2–4 пути, которые назвал skill. ADR — цитата «почему так».
Наращивание: skill → + rule → + RAG (занятие 3) → + ADR (занятие 4). Листы 10–13 — тот же сюжет с выключенными слоями. Живой login: 30–35 (Context — сцена, не слой). main — логин / items, без note. develop — заметка влита, ярусы takeaway 6/6.
QA.GURU
AI-first QA · takeaway Java / Gradle / Selenide
SkillRuleRAGADR
01 · skill
Skill — маршрутный лист на одну задачу
Не энциклопедия и не ПДД. Skill отвечает: когда вызывать, какие шаги, когда считать готовым. Имя: qa-<глагол>-<объект>. Раннер CI и Sonar — не имя skill, а RAG.
docs/agent-skills/qa-write-test/SKILL.md
Каркас
When — триггеры («напиши e2e», «покрой API»)
Do not — CSS в тесте, ChromeDriver (commit / URL — rule)
Steps — слой → стенды → PO → прогон
DoD — чеклист, не «ну вроде ок»
RAG (2–4 id) — факты рядом, не внутри
Промпт
Rules ON. Прочитай docs/agent-skills/qa-write-test/SKILL.md
и чанки po-locators, po-step, test-negative, cfg-stands.
Добавь автотест на неуспешный логин с неправильным паролем.
Укажи pipeline/stage/prod.
qa-make-full-pyramid — ярус за ярусом уже влитой фичи, потом STOP. Не план и не «один автотест».
qa-run-ci ≠ qa-run-stand: workflow/build vs Gradle на app.
DoWhen · якорь в проекте · RAG id · DoD. После смены skill — новый task.
Don'tТаблица HTTP-глаголов внутри generic skill (это RAG crud-http). Не «почини всё» одним skill.
QA.GURU
AI-first QA · takeaway Java / Gradle / Selenide
SkillRuleRAGADR
02 · rule
Rule — ПДД, которые всегда в силе
Rule не учит «как пройти маршрут». Он говорит: этого не делать / вот default. Короткий, always-on, срабатывает в каждом новом task, если toggle включён.
.clinerules/01-qa-java-gradle.md
## E2e slice
cd tests/java/tests-java-gradle-junit5-allure3-selenide
./gradlew test -Denv=ci -DincludeTags=e2e -DexcludeTags=screenshot,mock
## Запреты
- Не git commit без явной просьбы
- Не удалять allure-results
- Не ./gradlew test без -DincludeTags «на smoke»
Загрузка
.clinerules/*.md и AGENTS.md — авто, тумблер Rules в Cline.
Сменили rule или skill → новый task. Старый чат старый контекст не подхватит.
Размер
10–80 строк. Если появились шаги и DoD — это уже skill: вынесите.
пять rules takeaway
Файл
Лимит
Не путать с
01-qa-java-gradle
e2e-команда, не full suite; нет task testE2e
workflow Allure → skill qa-smoke-debug
02-git-safety
нет commit / push / reset --hard без OK
«закоммить вот это» — явная просьба
03-env-and-stand
всегда -Denv; URL не в Java; pipeline / stage / prod
факты стендов → RAG cfg-stands
04-one-task-one-layer
один task = один ярус
план дыр → skill qa-pyramid-plan
05-homework-check
self-check: таблица + статус, без commit
рубрика → RAG hw-check-*
DoЛимиты и канон-команда. @Tag("smoke") в rule — как предостережение: prod slice, не эта команда (ADR 005).
Don'tРоман на 200 строк. Не класть в rule таблицу CRUD или список всех skills — агент утонет, 7b выдумает testE2e.
QA.GURU
AI-first QA · takeaway Java / Gradle / Selenide
SkillRuleRAGADR
03 · rag
RAG — факт, не маршрут
Skill говорит как идти. RAG — карточка с полки: команда, селектор, стенд, контракт. Агент читает 2–4 файла, которые назвал skill. Не всю папку, не monorepo из ~96 чанков.
простой мир · библиотека
Человек: «Доклад про чайник»
↓
Skill → тема → 2–4 карточки → черновик
RAG → кнопка слева · 100 °C · 4 этаж
«Прочитай весь стеллаж» → 7b тонет
и ставит $("input") в *Tests.
кофемашина · глагол ≠ инструкция
Одна машина, разные действия. Не «skill DeLonghi» vs «skill Nespresso».
Что умеет?
qa-review-ci
Поставь и включи
qa-create-ci
Течёт / красный
qa-fix-ci
Ещё чашку / стоп
qa-run-ci / qa-stop-ci
Кнопки, YAML, job
RAG ci-github-actions / ci-jenkins
диета · docs/agent-skills/rag/<id>.md
Когда
id
Не это
Какой ярус / slice
test-pyramid · test-layers
JaCoCo 100% ≠ пирамида 100%
Пишешь e2e
po-fluent · po-locators · po-step
Селектор в классе *Tests
Стенд и URL
cfg-stands · cfg-env-profile · cfg-base-url
localhost в Java
Контракт HTTP
crud-http
Таблица глаголов в qa-write-test
CI YAML / Gradle
ci-github-actions · ci-gradle-args
Имя skill qa-*-github
DoSkill пишет: «прочитай docs/agent-skills/rag/po-fluent.md». Один чанк = один id = один файл.
Don'tКормить модель всей папкой «на всякий». SSOT паттернов преподавателя — docs/rag/ monorepo; студенту — диета в паке.
QA.GURU
AI-first QA · takeaway Java / Gradle / Selenide
SkillRuleRAGADR
04 · adr
ADR — почему выбрали A, а не B
Пишем, когда решение дорого откатывать: все этажи закупили один тип чайника. Не пишем: «сегодня Earl Grey» (это промпт) и «поставь JDK 21» (это RAG / rule).
каркас · ≤ 40 строк · docs/adr/NNN-*.md
# ADR NNN: короткий заголовок-решение
Статус: предложено | принято | отменено
Контекст: какая развилка (A vs B).
Решение: что выбрали (1–5 пунктов).
Последствия: что теперь нельзя / что стало проще.
RAG: id чанков, которые держат «как», не «почему».
Чайник
Электрический, не самовар: скорость важнее ритуала. Без ADR стажёр каждый раз спорит «а давайте самовар».
Автотест на логин
401 JSON — слой api, не новый e2e-клик. Это ADR 009. Факт селектора — RAG, не ADR.
005 · screenshot — slice, не слой
Хочется «ярус скриншотов». Пиксельный diff — тот же браузерный сценарий, другой отбор.
*ScreenshotTests остаются @Layer("e2e")
Отбор: @Tag("screenshot") + job mock/stage
@Tag("smoke") — тоже slice, не ярус
006 · одна заметка, HTTP как RFC
Продукт: одна заметка на пользователя, /api/note. Глаголы — как в RFC, таблица статусов — RAG crud-http.
Номер 006 — только пак takeaway. Не путать с monorepo ADR 006 (allurerc).
DoЯрус vs slice (005) · Rest Assured vs e2e на 401 (009) · DS header не форк (008). URL из properties — rule, не ADR.
Don'tДублировать skill внутри ADR. Не писать ADR на каждый новый тест. Не менять таблицу @Layer без ADR.
QA.GURU
AI-first QA · пример: login / wrong password
SkillRuleRAGADR
20 · login · сценарий
Один промпт — четыре слоя
Дальше четыре листа: что агент пишет без слоя и что — с ним. Сценарий один. В takeaway канон уже лежит, не выдумываем. Живой опыт с двумя вкладками и абляцией — листы 30–35.
Добавь автотест на неуспешный логин с неправильным паролем
Промпт тот же. Без skill агент изобретает драйвер и селекторы. Со skillqa-write-test — слой, PO, один метод, изолированный прогон.
без skill
@Test
void testWrongPassword() {
WebDriver d = new ChromeDriver(); // свой драйвер
d.findElement(By.cssSelector("input")) // CSS в *Tests
.sendKeys("user1");
d.findElement(By.cssSelector("input[type=password]"))
.sendKeys("wrong");
d.findElement(By.cssSelector("button")).click();
assertEquals("error",
d.findElement(By.className("err")).getText());
}
./gradlew test // нет -Dtest=Class#method
Без skill теряетWhen / шаги / DoD. Нет запрета на CSS в тесте и на новый ChromeDriver. Нет ответа «какой слой, какие стенды». URL в Java и commit — лист 22.
Skill заставляетПрочитать SKILL.md → один @Layer → расширить LoginPage, не класть локатор в тест → прогон -Dtest=Class#method → чеклист DoD.
QA.GURU
AI-first QA · пример: login / wrong password
SkillRuleRAGADR
22 · login · rule
Rule: ПДД, даже если skill уже прочитан
Skill знает как написать метод. Rule не даёт выехать за лимиты: не весь suite, не localhost в Java, не commit без OK. Это always-on, не «ещё один абзац в skill».
skill есть, rules выключены
// метод уже похож на канон…
loginPage.openPage()
.typeUsername("user1")
.typePassword("wrongpassword")
.submitExpectingError();
// но агент в том же чате:
open("http://localhost:9821/login"); // 03-env
./gradlew test // 01: без tags
./gradlew testE2e // 01: нет такого task
git add -A && git commit -m "login" // 02-git-safety
«ещё api заодно» // 04-one-task
Rules ON · пять файлов takeaway
01 cd tests/java/tests-java-…-selenide
./gradlew test -Denv=ci -DincludeTags=e2e \
-DexcludeTags=screenshot,mock
// нет task testE2e
// -Dtest=Class#method — skill qa-write-test
02 не commit / push без явного OK
03 URL только из properties; всегда -Denv=
open("/login") в PO, не localhost в тесте
04 этот task = этот ярус
05 homework-check — другой task
Без ruleХороший PO не спасает: агент гоняет полчаса test, коммитит «чтобы не потерялось», зелёный только на localhost.
С ruleКанон-команда и запреты на каждый новый task. Workflow Allure/flaky по-прежнему в skill qa-smoke-debug, не в rule.
QA.GURU
AI-first QA · пример: login / wrong password
SkillRuleRAGADR
23 · login · rag
RAG: факты с полки, не догадки 7b
Skill говорит «прочитай 2–4 чанка». Без RAG модель выдумывает $("input") и копирует happy path. С RAG — data-testid, submitExpectingError, текст ошибки, стенды.
без чанков · «на глаз»
// в LoginTests.java
$("#login").setValue("user1");
$("#pass").setValue("123");
$(".btn-primary").click();
$(".alert").shouldHave(text("Invalid"));
// или с вкладки happy path:
fillAndSubmitForm("user1", "wrongpassword")
.shouldHaveWelcomeMessage("…"); // ждёт HomePage
@Step("Type password: {password}")
@Step() на классе LoginPage
skill назвал чанки · агент их прочитал
po-locators LoginPage:
$("[data-testid='login-input']")
$("[data-testid='error-message']")
po-step @Step на методах, не на классе
Type password // не {password}
test-negative typeUsername → typePassword
→ submitExpectingError
«Wrong login or password»
cfg-stands URL из config; user1 есть на
pipeline / stage / prod
(wrong password сид не сносит)
Не RAGСкармливать всю папку rag/. «Прочитай стеллаж» → 7b тонет. Task testE2e — это rule 01, не карточка факта.
2–4 idДля этого промпта: po-locators · po-step · test-negative · cfg-stands. JSON 401 — ADR 009 (лист 24); факт api-кейса — test-api-layer, его читают после ADR.
QA.GURU
AI-first QA · пример: login / wrong password
SkillRuleRAGADR
24 · login · adr
ADR 009: 401 — не новый e2e
Skill+RAG умеют как кликнуть. ADR фиксирует почему A, не B, иначе каждый чат снова закрывает JSON браузером.
без ADR · «на всякий e2e»
// ещё один браузерный тест «на 401»
open("/login"); fill; submit;
$("pre").shouldHave(text("401")); // нет такого UI
class Login401Tests { … } // второй файл
// AuthApiTests#loginWithInvalidPassword
// уже лежит в репо — не открыли ADR
с ADR 009 · развилка закрыта
Контракт 401 JSON
AuthApiTests#loginWithInvalidPassword
@Layer("api") ← RAG test-api-layer
Текст ошибки на форме
LoginTests#shouldShowErrorWhenPasswordIsWrong
@Layer("e2e") ← это UI-состояние, e2e ок
Не $("pre") «401» — нет такого UI
Не ADR«В этом тесте опечатка в тексте ошибки» — поправь константу. «Поставь JDK 21» — RAG/rule. Не писать ADR на каждый новый метод LoginTests.
Это ADR401 не закрываем кликом, если нет UI-состояния. Факт селектора остаётся RAG, не копируется в ADR. Screenshot = slice — другой промпт, ADR 005, лист 04.
QA.GURU
AI-first QA · живой опыт: wrong password
ContextSkillRuleRAGADR
30 · микропроект
Две вкладки и один промпт
Сцена занятия: открыты LoginTests (успешный логин) и LoginPage. HomePage (Welcome), TestBase и Gradle — не третья вкладка, агент их «видит» сам. Это project context, не слой. Слои включаем со следующего листа.
Добавь автотест на неуспешный логин с неправильным паролем
вкладка 1 · LoginTests.java
@Layer("e2e") @Epic("Authentication") @Feature("Login")
class LoginTests extends TestBase {
@Test @Tag("e2e") @Tag("smoke") @Tag("positive")
@DisplayName("User is logged in with valid credentials")
void shouldLoginWithValidCredentials() {
loginPage.openPage()
.fillAndSubmitForm("user1", "password1")
.shouldHaveWelcomeMessage("Welcome, user1!");
}
}
welcomeMessage = $("[data-testid='welcome-message']");
HomePage shouldHaveWelcomeMessage(String message)
// fillAndSubmitForm возвращает сюда
условно · TestBase.java
protected LoginPage loginPage = new LoginPage();
Configuration.baseUrl = ConfigReader.resolveWebBaseUrl();
// chrome / remote — из config
// не new ChromeDriver() в тесте
test { includeTags из -DincludeTags; -Denv= }
// task testE2e — нет
./gradlew test -Denv=ci -DincludeTags=e2e \
-Dtest=LoginTests#<method>
Перед liveЗакомментируй shouldShowErrorWhenPasswordIsWrong — в takeaway метод уже лежит. Иначе skill честно скажет «не дублируй». Промпт на 31–35 тот же (жёлтая плашка только здесь). «Не коммить» в чат не писать — это Rule.
QA.GURU
AI-first QA · живой опыт: wrong password
ContextSkillRuleRAGADR
31 · полный стек
Правильный ответ: слои не дают скопировать happy path
Те же две вкладки, тот же промпт. Context даёт образец. Skill / rule / RAG / ADR не дают взять fillAndSubmitForm на sad path, выдумать task и закрыть 401 кликом.
канон · LoginTests
@Test @Tag("e2e") @Tag("negative")
@DisplayName("Wrong password shows readable error")
void shouldShowErrorWhenPasswordIsWrong() {
loginPage.openPage()
.typeUsername("user1")
.typePassword("wrongpassword")
.submitExpectingError()
.shouldHaveErrorMessage(
"Wrong login or password");
}
// не @Tag("smoke") — это не prod slice
// не fillAndSubmitForm — тот ждёт HomePage
прогон · ответ агента
cd tests/java/tests-java-gradle-junit5-allure3-selenide
./gradlew test -Denv=ci -DincludeTags=e2e \
-Dtest=LoginTests#shouldShowErrorWhenPasswordIsWrong
слой e2e (текст на форме)
стенды pipeline / stage / prod
user1 есть; сид не сносим
401 JSON уже в AuthApiTests — не трогаем
exit code 0 · нет commit
Вкладки те же. Стек почти полный. Каждый слой закрывает свою галлюцинацию — остальные три её не дублируют.
− Skill · нет When / DoD
Метод может получиться (ctx + RAG).
Ломается маршрут:
новый LoginSadPathTests.java // не расширил LoginTests
./gradlew test -DincludeTags=e2e // весь срез, не -Dtest=
нет ответа «слой / стенды / exit»
− Rule · нет ПДД на каждый чат
Тело уже канон. В том же чате:
./gradlew test // full suite
./gradlew testE2e // такого task нет
git commit // без OK
localhost · «ещё api заодно»
− RAG · факты с вкладки happy path
// скопировал вкладку 1 на sad path
loginPage.openPage()
.fillAndSubmitForm("user1", "wrongpassword")
.shouldHaveWelcomeMessage("…"); // ждёт HomePage
$("#password").setValue("123"); // или выдумал селектор
$(".alert").shouldHave(text("Invalid credentials"));
@Step("Type password: {password}")
@Step() на классе LoginPage
− ADR · спор снова открыт
UI-ошибка ок. Плюс:
$("pre") «401» // нет такого UI
class Login401Tests // второй e2e
«на всякий e2e на JSON»
Читать таблицу−RAG на этом промпте самый зрелищный: агент честно смотрит на открытый happy path и применяет его к неверному паролю. Context не лечит, он кормит эту ошибку.
QA.GURU
AI-first QA · живой опыт: wrong password
ContextSkillRuleRAGADR
33 · пары · 2 из 4
Осталось два слоя: дыры складываются
C(4,2) = 6. Не все live — таблица на экран. Context по-прежнему открыт. Промпт тот же.
full suite · git commit · нет -Dtest= · нет слоя в ответе
Пара ≠ половина стекаSkill+Rule без RAG на этом промпте выглядит «почти канон», пока не нажмёшь Submit: happy-path API на форме ошибки. Зелёный на ревью кода, красный на прогоне.
На занятииLive достаточно Skill+Rule и Skill+RAG — две разные дыры (факт vs ПДД). Остальные четыре — с листа, не шесть New Agent.
QA.GURU
AI-first QA · живой опыт: wrong password
ContextSkillRuleRAGADR
34 · 1 из 4 · пусто
Один слой не тянет. Ноль — учебный интернет
Один файл отвечает на один вопрос. Остальные три дыры открыты. Ничего (кроме вкладок) — то, что студент получит в чужом репо без пака.
четыре одиночки
Только
Вопрос, на который отвечает
Всё равно
Skill
порядок: слой → PO → прогон → DoD
выдуманный селектор / текст · commit · e2e на 401
Rule
не suite, не commit, всегда -Denv
new ChromeDriver() · $("input") · «Invalid» · e2e на 401
RAG
data-testid, submitExpectingError, точный текст
full suite · commit · нет DoD · второй тест на 401
Почему так, если канон на вкладкеМодель дописывает «как обычно в интернете»: Selenium 3, localhost, полный suite, сама коммитит. Открытый Selenide-тест — намёк, не запрет.
Live на зачётеОдин прогон «полного стека» и один прогон «ничего». Пары и одиночки — с листа, иначе занятие съест New Agent.
QA.GURU
AI-first QA · живой опыт: wrong password
ContextSkillRuleRAGADR
35 · context ≠ слой
Пятая опция: сцена, не скрипт
Project context — открытые вкладки, индекс репо, TestBase, build.gradle. Его включают всегда (лист 30). Это не пятый слой: он не отвечает ни на «как», ни на «нельзя», ни на «факт», ни на «почему».
Что такое Contextсцена
Вкладки: LoginTests, LoginPage
Недавно открытый TestBase
Поиск по репо / @codebase
Сигнатуры Gradle, если агент дошёл
Примеры «как уже сделано». Нет When, нет запрета, нет точного текста ошибки, нет развилки 401.
Чего Context не делаетне слой
Не skill — не заставляет выбрать один @Layer и DoD
Не rule — не держит «не commit» на следующем ходе
Не RAG — happy path на вкладке ≠ error path
Не ADR — не помнит, почему 401 не кликают
только Context · самая тихая галлюцинация
// выглядит как канон — скопировал вкладку 1
loginPage.openPage()
.fillAndSubmitForm("user1", "wrongpassword")
.shouldHaveWelcomeMessage("Welcome, user1!");
// или «чуть поправил» assert, но всё ещё HomePage
.shouldHaveErrorMessage("Wrong password");
./gradlew test // или testE2e
git commit -am "login"
эксперимент на занятии
Контроль две вкладки + один промпт
Context всегда ON ← не переменная
Лечение Skill · Rule · RAG · ADR
включаем / выключаем по одному
Зависимая тело теста · команда · commit · слой
Вывод открытый канон кормит копипаст
happy → sad. Слои это запрещают.
QA.GURU
AI-first QA · наращивание слоёв
SkillRuleRAGADR
10 · skills
Только skill: есть маршрут, нет тормозов
Агент знает порядок шагов и DoD. Не знает, чего нельзя. Без rule он может включить пустой чайник, запустить full suite и закоммитить «чтобы не потерялось».
чайник
Skill → 1) вода 2) кнопка 3) клик 4) чашка
DoD → чай в чашке
Ломается:
· чайник пустой (нет rule)
· кнопка справа — другая кухня (нет RAG)
· «а давайте самовар» (нет ADR)
прогон e2e slice · qa-smoke-debug
1. App UP (:8800 / UI :9821)
2. Gradle slice → exit code
3. Allure results
4. Flaky → -Dtest=Class#method × 3
Ломается:
· ./gradlew test без tags
· git commit «для истории»
· URL localhost в новом тесте
Прочитай docs/agent-skills/qa-smoke-debug/SKILL.md.
E2e slice. (Rules выключены — так не оставляем на зачёте.)
Зачем следующий слойSkill без rule — хороший чеклист в мире без запретов. На курсе сразу включаем Rules ON. Следующий лист: + ПДД.
QA.GURU
AI-first QA · наращивание слоёв
SkillRuleRAGADR
11 · skills + rules
Skill + rule: маршрут внутри ПДД
Rule — фон каждого чата. Skill — по запросу. Вместе: агент идёт по шагам, но не выезжает на полный suite и не коммитит сам. Это канон занятия 2.
как они стыкуются
RULES (фон, toggle ON)
e2e = includeTags=e2e + env ci
не коммить · не трогать allure-results · один task = один ярус
↓ ограничивают
SKILL (по запросу)
1. App UP (:8800 / UI :9821)
2. Gradle slice → exit code
3. Allure results
4. Flaky → -Dtest=Class#method × 3
ЧайникНе включать пустой. Вода → кнопка → чашка. Ещё не знаем, что кнопка слева на 4 этаже.
Прогон e2eКоманда канона из rule. Workflow из qa-smoke-debug. Ещё нет чанков PO и стендов — их допишет занятие 3.
Rules включены. Прочитай docs/agent-skills/qa-smoke-debug/SKILL.md.
E2e slice. Не коммить.
Ожидание:
./gradlew test -Denv=ci -DincludeTags=e2e -DexcludeTags=screenshot,mock
QA.GURU
AI-first QA · наращивание слоёв
SkillRuleRAGADR
12 · skills + rules + rag
+ RAG: 2–4 карточки, не весь стеллаж
Теперь skill называет факты. Агент не угадывает селектор и не путает pipeline с prod. Занятие 3: какие чанки брать; CI = та же пирамида.
Rule не пустой, не без присмотра
Skill вода → кнопка → клик → чашка
RAG кнопка слева, 4 этаж, ~100 °C
ADR электрический, не самовар
wrong password · полный ответ
Rule не full suite; URL не в Java
Skill qa-write-test: слой → PO → -Dtest
RAG po-locators · po-step · test-negative · cfg-stands
ADR 009: 401 JSON — api, не новый e2e-клик
Rules ON. Прочитай docs/agent-skills/qa-coverage-audit/SKILL.md
и rag/test-pyramid.md. Таблица сценариев × ярусы + 3 дыры.
Код не меняй. Не коммить.
Ожидание: таблица, не 15 новых e2e. Дальше — отдельный task qa-pyramid-plan. Закрыть 401 новым e2e = нарушение ADR 009.
QA.GURU
AI-first QA · два промпта · сдача одним блоком
SkillRuleRAGADR
40 · ДЗ · main → develop
Два промпта: стенд, потом план — не тесты
main — логин / items, без note. develop — заметка влита, ярусы takeaway на upstream 6/6. Промпты: HOMEWORK.md. В чат курса — только блок «Сдача ДЗ».
ДЗ-1 · main · живой стенд
Форк (не clone qa-guru) → git checkout main → compose → e2e. Note не писать.
Skill qa-smoke-debug
RAG ci-gradle-args · cfg-stands · allure-attach
Не всю папку rag/. Не prod. Не commit.
Delete на prod — фабрика+teardown (ADR 006), не сид user1
if (prod) в тесте; снести витрину
«100% пирамиды» = сценарий на своём @Layer
100% строк JaCoCo; добивать все ярусы одним чатом
DoОдин блок сдачи в конце ответа. Origin = форк. Compose с --build после смены ветки. Дальше отдельные чаты: unit → integration → component → api → e2e → manual.
Don'tClone qa-guru. Писать note на main. Реализовывать фичу на develop. Писать тесты note в ДЗ-2. Commit / push / reset --hard. Prod без remoteUrl.