Skip to content

[OPIK-7167] [QA] feat: dev testing workflow — /explore-feature skill + release-gate scaffolding#7334

Merged
AndreiCautisanu merged 1 commit into
mainfrom
andreic/OPIK-7167-explore-feature-skill
Jul 13, 2026
Merged

[OPIK-7167] [QA] feat: dev testing workflow — /explore-feature skill + release-gate scaffolding#7334
AndreiCautisanu merged 1 commit into
mainfrom
andreic/OPIK-7167-explore-feature-skill

Conversation

@AndreiCautisanu

@AndreiCautisanu AndreiCautisanu commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Details

Adds the QA-owned /explore-feature skill for the dev-driven testing workflow (automation-coverage initiative): each PR ships one happy-path test that gates its own release; QA reviews and integrates the keepers. This PR is the skill and its scaffolding only.

  • /explore-feature skill (.agents/skills/explore-feature/, mirrored to .claude/): a thin orchestrator that resolves scope (local branch diff / a PR / multiple PRs — including "I haven't opened a PR yet"), writes a happy-path test-plan.md to Jira, and delegates the actual test authoring to writing-e2e-tests via a fixed staging-ready contract. The version stamp is read from origin/main:version.txt and encoded as a @release-gate:<version> tag so gate selection is a floor comparison that survives cancelled/skipped releases.
  • E2E scaffolding: tests/_release-gate/ + a lifecycle README, and a test:release-gate grep target isolated from the curated @t1/@t2/@t3 tiers; a note in the writing-e2e-tests conventions documents the _release-gate/ exception so those specs don't read as guideline violations.

The skill was hardened by piloting it end-to-end on two real changes (a fix that needed a repro-specific seed, and a no-behavior-delta perf change), which shaped its guardrails: gate the repro not the easy path; seeding support is in-scope authoring; probe backend health via <baseUrl>/api; local-diff mode for pre-PR branches; a perf-fix override for no-behavior-delta changes. The pilot test/bridge artifacts are intentionally NOT part of this PR — they were validation, not deliverables.

Out of scope (deferred follow-up on the ticket): CI wiring — the staging gate selection by stamp, the post-ship move to shipped/, and the age-expiry job.

Change checklist

  • User facing
  • Documentation update

Issues

  • Resolves OPIK-7177

AI-WATERMARK

AI-WATERMARK: yes

  • Tools: Claude Code
  • Model(s): Claude Opus 4.8
  • Scope: full implementation (brainstorm → plan → skill authoring + scaffolding, hardened via two end-to-end pilots), human-directed
  • Human verification: design decisions made by the author; skill piloted end-to-end against a live local stack on two real changes (both produced green, relevant release-gate tests during validation — those artifacts are not committed here); grep-target isolation and skill frontmatter verified

Testing

  • cd tests_end_to_end/e2e && npm ci, then verified the scaffolding: npm run test:release-gate -- --list selects only @release-gate specs; npm run test:t1/t2/t3 -- --list are unchanged (20/32/36) and the @release-gate tag does not leak into the curated tiers.
  • Validated the skill files: SKILL.md frontmatter parses, cross-references resolve, and make claude mirrors cleanly to .claude/.
  • During validation (not part of this PR) the skill was driven end-to-end on two real changes and produced green release-gate tests against a live local stack; the #7322 gate's relevance was proven by going RED against the pre-fix code.
  • Not run: the full E2E suite against staging (deferred CI step).

Documentation

  • tests_end_to_end/e2e/tests/_release-gate/README.md documents the gate-test lifecycle for devs/QA.
  • The skill files (SKILL.md, test-plan-template.md, release-gate-contract.md) are the operator-facing documentation; the writing-e2e-tests conventions now note the _release-gate/ exception.

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file tests Including test files, or tests related like configuration. labels Jul 3, 2026
Comment thread tests_end_to_end/e2e/tests/_release-gate/README.md
Comment thread .agents/skills/explore-feature/test-plan-template.md Outdated
Comment thread .agents/skills/explore-feature/release-gate-contract.md
Comment thread .agents/skills/explore-feature/release-gate-contract.md
AndreiCautisanu added a commit that referenced this pull request Jul 3, 2026
…e convention exception

Address baz-reviewer findings on PR #7334:
- test-plan template pointed at a non-existent tests/_release-gate path; use the
  fully-qualified tests_end_to_end/e2e/... path and <lead-ticket> placeholder.
- writing-e2e-tests conventions/SKILL now note the _release-gate/ + @release-gate
  exception and point at release-gate-contract.md, so specs there don't read as
  guideline violations.
- _release-gate README marks the contract as source of truth to bound drift.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

⏱️ pre-commit per-hook timing

Hook Description Result Duration
🌐 typecheck — frontend Whole-project tsc type check 40.01s
🌐 eslint — frontend Lint + autofix JS/TS 16.38s
📘 typecheck — typescript sdk Whole-project tsc type check 15.01s
☕ spotless — java backend Format Java code 7.48s
⚓ helm-docs Regenerate Helm chart README 3.34s
🐳 hadolint — dockerfiles Lint Dockerfiles 3.25s
🐍 mypy — python sdk Static type check 1.60s
⚙️ actionlint — github workflows Lint GitHub Actions workflows 1.50s
📘 eslint — typescript sdk Lint + autofix JS/TS 0.96s
🐍 fix end of files — python sdk Ensure files end in a newline 0.04s
🐍 trim trailing whitespace — python sdk Strip trailing whitespace 0.04s
🛡️ fix end of files — guardrails Ensure files end in a newline 0.03s
🐍 ruff-format — python sdk Format Python code (ruff) 0.02s
🐍 ruff — python sdk Lint + autofix Python (ruff) 0.02s
🛡️ trim trailing whitespace — guardrails Strip trailing whitespace 0.02s
block non-public FE plugins Block non-public FE plugins 0.01s
Total (16 ran) 89.71s
⏭️ 25 skipped (no matching files changed)
Hook Description Result
🤖 trim trailing whitespace — optimizer Strip trailing whitespace ⏭️
🤖 fix end of files — optimizer Ensure files end in a newline ⏭️
🤖 check yaml — optimizer Validate YAML syntax ⏭️
🤖 check json — optimizer Validate JSON syntax ⏭️
🤖 check toml — optimizer Validate TOML syntax ⏭️
🤖 check for added large files — optimizer Block large files (>1MB) ⏭️
🔐 detect private key — optimizer Block committed private keys ⏭️
🤖 check for merge conflicts — optimizer Block merge-conflict markers ⏭️
🤖 check for case conflicts — optimizer Block case-only name clashes ⏭️
🤖 pyupgrade — optimizer Modernize Python syntax ⏭️
🤖 ruff — optimizer Lint + autofix Python (ruff) ⏭️
🤖 ruff-format — optimizer Format Python code (ruff) ⏭️
🤖 mypy — optimizer Static type check ⏭️
📓 nbstripout — optimizer notebooks Strip notebook output ⏭️
📝 markdownlint — optimizer Lint Markdown ⏭️
🔤 codespell — optimizer Fix common misspellings ⏭️
📊 radon cc — optimizer Cyclomatic-complexity gate ⏭️
📊 radon raw — optimizer Raw size metrics gate ⏭️
📊 xenon — optimizer Fail on complexity thresholds ⏭️
📊 lizard — optimizer Cyclomatic-complexity gate ⏭️
🧹 vulture — optimizer Find dead code ⏭️
🛡️ ruff — guardrails Lint + autofix Python (ruff) ⏭️
🛡️ ruff-format — guardrails Format Python code (ruff) ⏭️
🛡️ mypy — guardrails Static type check ⏭️
🧪 pre-commit wrapper smoke tests Self-test the wrapper scripts ⏭️

@AndreiCautisanu AndreiCautisanu marked this pull request as ready for review July 9, 2026 12:02
@AndreiCautisanu AndreiCautisanu requested review from a team as code owners July 9, 2026 12:02
andrescrz
andrescrz previously approved these changes Jul 9, 2026
andrescrz
andrescrz previously approved these changes Jul 10, 2026
@github-actions github-actions Bot added 🔴 size/XL python Pull requests that update Python code typescript *.ts *.tsx labels Jul 10, 2026
…folding

The QA-owned /explore-feature skill for the dev-driven testing workflow: reads a
ticket + changed code (local branch diff, a PR, or several), writes a happy-path
test-plan.md to Jira, and delegates authoring of one staging-ready @release-gate
Playwright test to writing-e2e-tests via a fixed contract. Version stamp read from
origin/main:version.txt, encoded as a @release-gate:<version> tag for floor-based
gate selection.

Scaffolding: tests/_release-gate/ + lifecycle README, a test:release-gate grep
target isolated from the curated @t1/@t2/@T3 tiers, and a note in the
writing-e2e-tests conventions for the _release-gate/ exception.

The skill was hardened by piloting it end-to-end on two real changes (a fix and a
no-behavior-delta perf change); those pilot test/bridge artifacts are intentionally
not part of this PR. CI wiring (staging gate, post-ship move, expiry) is deferred.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@AndreiCautisanu AndreiCautisanu force-pushed the andreic/OPIK-7167-explore-feature-skill branch from 3631685 to dcbfc0f Compare July 10, 2026 11:36
@github-actions github-actions Bot added 🟠 size/L and removed python Pull requests that update Python code typescript *.ts *.tsx 🔴 size/XL labels Jul 10, 2026
@AndreiCautisanu

Copy link
Copy Markdown
Contributor Author

Reached final version for this PR

@AndreiCautisanu AndreiCautisanu merged commit ac733a5 into main Jul 13, 2026
29 checks passed
@AndreiCautisanu AndreiCautisanu deleted the andreic/OPIK-7167-explore-feature-skill branch July 13, 2026 13:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

baz: pending dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation 🟠 size/L tests Including test files, or tests related like configuration.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants