framework-development
Skill26 starsChanged 7 days agoMITView on GitHub
Framework evolution mode — evolves the QA boilerplate itself (KATA, fixtures, cli/, scripts/, api/schemas/ pipeline, package.json deps). Self-contained Plan → Code → Verify → Archive pipeline; needs nothing outside the repo (no SDD-* skills). Use when adding new fixture APIs, refactoring KATA base classes, evolving the installer, modifying the OpenAPI sync pipeline, or any change to the framework infrastructure that is NOT per-ticket test writing or manual QA. Triggers on: /framework-development, \"evolve framework\", \"framework refactor\", \"new fixture API\", \"modify KATA base\", \"refactor cli\", \"boilerplate evolution\", \"sync AI context\", \"sync AI memory\" (the docs follow-through after a boilerplate change), and mode `instructions` for any edit to AGENTS.md, an instruction section, the ROUTER or a section's triggers (\"edit AGENTS.md\", \"add a rule\", \"where does this rule go\", \"router row\", \"tune the triggers\", \"new instruction section\"). Do NOT use for: writing tests for a ticket (use /test-automation), manual QA per ticket (use /sprint-testing), documenting test cases (use /test-documentation), running regression suites (use /regression-testing).
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- acliSkill
- agentic-qa-coreSkill
- agentic-qa-onboardSkill
- bug-screenshot-annotationSkill
- business-api-contextSkill
- business-data-contextSkill
- business-domain-contextSkill
- business-e2e-contextSkill
- evidence-artifactSkill
- exploratory-testingSkill
- git-flow-masterSkill
- infra-contextSkill
- iql-contextSkill
- jira-administrationSkill
- judgment-daySkill
- orca-orchestrationSkill
- project-contextSkill
- project-discoverySkill
- pr-review-leadSkill
- regression-testingSkill
- session-handoffSkill
- shift-left-testingSkill
- sprint-conductorSkill
- sprint-testingSkill
- test-automationSkill
- test-documentationSkill
- test-framework-adaptationSkill
- xray-cliSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
30 rules. About 0 are common, 10 are distinctive, and 20 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
20
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 23
DO NOT: use this skill for per-ticket work — test writing is /test-automation, manual QA is /sprint-testing, TMS docs are …
- Very specific: line 24
DO: clear the readiness preflight, then run the Phase 0 path self-check against references/kata-invariants.md §10 before dispatching …
- Very specific: line 25
WHEN one change spans both ALLOWED and FORBIDDEN paths: split it.
- Distinctive: line 26
DO: run Plan → Code → Verify → Archive in order for every non-trivial framework change.
- Very specific: line 27
DO NOT: edit per-ticket tests from a framework-development session: the specs under tests/e2e/ and tests/integration/ and the per-module …
- Distinctive: line 28
DO NOT: collapse the KATA layers (TestContext / Base / Domain / Fixture) under a simplicity argument.
- Very specific: line 29
DO NOT: add a new fixture API without updating the matching fixture file AND kata-manifest.json AND citing at least one existing test that …
- Distinctive: line 30
DO NOT: bump a major version of Playwright / Bun / TypeScript without a regression run on a representative E2E suite — lockstep upgrades …
- Very specific: line 31
DO NOT: refactor cli/install.ts without exercising the full install flow on a clean clone.
- Very specific: line 35
DO NOT: let a subagent write progress.md.
- Very specific: line 38
WHEN the change touches cli/, scripts/, .husky/, AGENTS.md or .agents/instructions/: run the V5 drift sweep after the four verifiers, …
- Distinctive: line 39
DO: archive the session directory only after all four verifiers pass.
- Very specific: line 41
WHEN a trigger misses or over-fires: fix the section's triggers: and add the prompts to cli/lib/fixtures/instruction-router-eval.json.
- Very specific: line 104
Path guardrails injected per dispatch: every Plan and Code subagent briefing MUST include the line KATA invariants and ALLOWED/FORBIDDEN …
- Very specific: line 105
On any subagent failure: STOP, return the failing report, do NOT auto-rerun.
- Very specific: line 141
Read references/kata-invariants.md §10 (ALLOWED + FORBIDDEN paths).
- Distinctive: line 142
Ask the user (or infer from the request): "Which paths will this change touch?"
- Distinctive: line 144
If a path matches neither table, ASK the user explicitly — never assume.
- Very specific: line 145
If a single change spans both ALLOWED and FORBIDDEN paths (e.g.
- Very specific: line 154
After Phase 0 passes, run the four-phase pipeline in dependency order.
- Very specific: line 202
When the change IS a skill, the plan's Task breakdown follows ../agentic-qa-core/references/skill-scaffold.md §2 for that kind, and the …
- Distinctive: line 231
After all four return, the orchestrator inline-aggregates:
- Very specific: line 233
All four exitCode == 0 → ACCEPT.
- Very specific: line 246
Read every hit in context and report each sentence that is now wrong or silently incomplete, as file:line + the sentence + what changed.
- Very specific: line 266
F1.: NEVER use /framework-development for per-ticket test writing — that surface is owned by /test-automation (Plan → Code → Review on KATA …
- Distinctive: line 267
F2.: NEVER collapse KATA layers (TestContext / Base / Domain / Fixture) under the pretext of simplification.
- Distinctive: line 269
F4.: NEVER skip the Plan → Code → Verify → Archive pipeline for non-trivial framework changes.
- Distinctive: line 270
F5.: NEVER bump major versions of Playwright / Bun / TypeScript without a regression run on a representative E2E suite.
- Very specific: line 271
F6.: NEVER add a new fixture API without updating tests/components/TestFixture.ts (or the matching ApiFixture.ts / UiFixture.ts) AND …
- Very specific: line 272
F7.: NEVER refactor cli/install.ts without testing the full install flow on a clean clone.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Framework Development — Evolve the QA Boilerplate
Gateway skill for changes to the framework itself: KATA layers, fixtures, installer, OpenAPI pipeline, scripts, doctrine docs. Per-ticket QA work, test specs, and TMS documentation are owned by other workflow skills (/sprint-testing, /test-documentation, /test-automation, /regression-testing) and MUST NOT trigger this skill.
The skill exists because framework-surface changes — new fixture, new layer helper, installer rewrite, manifest extractor — deserve a planning gate before code. Per-ticket test writing already has its own gate in /test-automation Plan → Code → Review; this skill is its architectural-surface counterpart.
Compact Rules
- DO NOT: use this skill for per-ticket work — test writing is
/test-automation, manual QA is/sprint-testing, TMS docs are/test-documentation, suite runs are/regression-testing. This skill governs the architectural surface only. - DO: clear the readiness preflight, then run the Phase 0 path self-check against
references/kata-invariants.md§10 before dispatching anything. A FORBIDDEN path aborts and redirects to the skill named in the row; a path in neither table is ASKED about, never assumed. - WHEN one change spans both ALLOWED and FORBIDDEN paths: split it. This skill changes the base;
/test-automationmigrates the consuming specs in a follow-up. - DO: run Plan → Code → Verify → Archive in order for every non-trivial framework change. The pipeline IS the gate; "it's a quick refactor" is not an exemption.
- DO NOT: edit per-ticket tests from a framework-development session: the specs under
tests/e2e/andtests/integration/and the per-module Page / Api / Steps components are/test-automationsurface. The KATA bases (TestContext.ts,ApiBase.ts,UiBase.ts) and the fixture files ARE yours (references/kata-invariants.md§10.1). - DO NOT: collapse the KATA layers (TestContext / Base / Domain / Fixture) under a simplicity argument. They are framework architecture, not speculative abstraction.
- DO NOT: add a new fixture API without updating the matching fixture file AND
kata-manifest.jsonAND citing at least one existing test that consumes it. Orphan fixtures rot, and the manifest is the anti-duplication gate. - DO NOT: bump a major version of Playwright / Bun / TypeScript without a regression run on a representative E2E suite — lockstep upgrades hide breaks in fixture lifecycle, locator engines, and type emit.
- DO NOT: refactor
cli/install.tswithout exercising the full install flow on a clean clone. Verification on an already-installed repo proves nothing, and the installer is the one surface where a bug ships silently to every new user. - WHEN the chosen approach reshapes test architecture (KATA layers, a fixture API, the runner, the isolation/parallelization model, the OpenAPI/type pipeline) AND is hard to reverse: record an ADR under
.context/ADR/after plan approval and before coding. The plan approval IS the decision, so the ADR is writtenAcceptedciting it, never handed back for acceptance (Proposedonly for a question still open). ADRs are append-only — supersede, never rewrite. - DO: verify with all four checks (test, types, lint, skills) and treat any non-zero exit as REJECT — present retry / skip-and-document / abort, never auto-fix. A skill that itself broke (a wrong step, a missing verifier, a stale rule) is reported upstream per
../agentic-qa-core/references/upstream-feedback.md: drafted and redacted locally, filed only on explicit OK, verified withgh issue view. - WHEN the change IS a skill (a new or restructured
.agents/skills/<slug>/): scaffold it per../agentic-qa-core/references/skill-scaffold.md(frontmatter incl.metadata.kind, per-kind files and sections, Definition of Done).skill-creator(T3, installed at project level) is ALWAYS the builder: load it for the draft, the test prompts, the evals and the description pass; the scaffold contract stays this repo's. Missing on the machine → scaffold from the reference's template and say so. Consumer SUT context skills are NOT this skill's job:project-contextmodecontext-skillowns them. - DO NOT: let a subagent write
progress.md; it is orchestrator-only. Code subagents return one-line summaries per task, and the orchestrator does not read their diffs. - DO: close every change that adds, renames or retires a skill, a
package.jsonscript or a doc path, OR changes a behaviour a page describes, with the docs follow-through (Phase 3): patch.agents/instructions/agent-context-map.mdand.agents/instructions/agent-skills-and-mcps.md,README.md,INSTALLER.md,CONTEXT.md, thedocs/core/pages, the decks (packages/decks/**) and the Pages home (packages/pages-home/**) in the same PR.bun run docs:checkproves the router and the quoted scripts; the prose is judgment. - WHEN an edit lands inside a
LINT.IfChange(<label>)region (the hook prints aDOCS:line; ADR-0016): update EVERY page itsLINT.ThenChange(...)names in the same push. Only when the documented behaviour did not change, addDocs-Checked: <label> <reason>to a commit message; NEVER add it by reflex or without a reason. Pre-push and CI block otherwise. A drift found later gets a new marker. - WHEN the change touches
cli/,scripts/,.husky/,AGENTS.mdor.agents/instructions/: run the V5 drift sweep after the four verifiers, report-only (Phase 3). It greps the doc surface for prose that describes the OLD behaviour and counts theDocs-Checked:trailers the change used. - DO: archive the session directory only after all four verifiers pass. On REJECT it stays in place so the run can be debugged or resumed.
- DO: route every change to
AGENTS.md, a section under.agents/instructions/, the ROUTER or atriggers:list through modeinstructions: place each sentence withreferences/instructions-doctrine.md§2, close withbun run instructions:check. NEVER paste section prose intoAGENTS.md, and NEVER add a ROUTER row without the ADR that decides it (--accept-router ADR-NNNN, ADR-0013). - WHEN a trigger misses or over-fires: fix the section's
triggers:and add the prompts tocli/lib/fixtures/instruction-router-eval.json; NEVER relabel a prompt to hide a miss.
Read full SKILL.md when: writing the plan artifact, batching Code-phase tasks, resuming an interrupted session, running mode instructions, or reading the ALLOWED/FORBIDDEN path tables themselves.
Mode routing
The first token of $ARGUMENTS that names a mode below IS the mode; anything else runs the default pipeline.
| Mode | Trigger phrases | Reference | Output |
| (default) | evolve framework, new fixture API, refactor cli, boilerplate evolution, sync AI context | this file, Phase 0 to Phase 4 | the framework change, verified |
instructions | edit AGENTS.md, add a rule, where does this rule go, router row, tune the triggers, new instruction section | references/instructions-doctrine.md | the edited instruction files, instructions:check green |
Mode instructions
The one sanctioned path for changing what the agent is told on every session or per request kind. It is the default pipeline cut to the size of a text change: the placement table is the plan, the edit is the code, instructions:check is the verifier.
- Place. For each sentence, walk
references/instructions-doctrine.md§2 and write one line: sentence -> file -> the question that decided it. A sentence that lands in a skill or in an<aspect>-contextskill leaves this mode for that skill's own flow. - Router row? A new, changed or removed ROUTER row is a decision: record the ADR (
agentic-qa-core/references/adr-doctrine.md;Acceptedwhen the owner already approved the change), make the edit, runbun run instructions:check --accept-router ADR-NNNN, cite the fingerprint it prints in that ADR. Without the ADR the gate stays red; that is the lock working. - Edit. L0 takes binding sentences only (a critical rule's full text goes in
agent-critical-rules.mdfirst, the L0 line stays a verbatim fragment of it). Atriggers:orpaths:change adds the prompts that motivated it, both languages when the trigger is bilingual, tocli/lib/fixtures/instruction-router-eval.json, labelled with what a careful reader of the ROUTER would load. - New section? Ship it complete: frontmatter, its ROUTER row (step 2), at least three labelled prompts that expect its
id, a row in the## Sectionstable of.agents/instructions/README.md. - Verify.
bun run instructions:check(budget, router, frontmatter, rules, binding, the router lock, the eval, completeness), thenbun run docs:checkwhen a skill, script or doc path moved, then the Phase 3 verifiers as usual (skills:checkalready includesinstructions:check). A red gate is reported with its output, never worked around. - Measure (optional).
bun run instructions:auditreports how often routed sections are actually read, from local transcripts; quote its overall number in the PR when the change is about routing.
Inputs
Canonical reading order for any AI starting cold on a framework-development workflow. Read in order; stop earlier when the change is small enough that later inputs add no signal.
kata-manifest.json— Component + ATC registry (source of truth per Critical Rule #12). Establishes what already exists before any new fixture API, Page, Api, Steps module, or ATC ID is proposed..agents/skills/test-automation/references/kata-architecture.md+.agents/skills/test-automation/references/typescript-patterns.md— KATA layer flow (TestContext → ApiBase / UiBase → YourApi / YourPage → TestFixture), ATC identity rules, fixture-selection contract, import-alias conventions.tests/components/— current Api / Page / Steps shape; required reading when touching any L2 / L3 surface or adding a fixture consumed by these components.cli/install.ts— installer flow; required reading when evolving the installer, adding install steps, or modifying boilerplate scaffold behavior.scripts/sync-openapi.ts+api/schemas/— OpenAPI-derived TypeScript types pipeline; required reading when touching the API contract pipeline, schema generation, or any consumer of generated facades.package.json+bun.lock— dep landscape; required reading before bumping Playwright / Bun / TypeScript / fixture-runtime versions or adding/removing scripts.
Subagent Dispatch Strategy
Orchestration & Session contracts: this skill follows
agentic-qa-core/references/orchestration-doctrine.md(mandatory subagent dispatch — main thread is command center) ANDagentic-qa-core/references/session-management.md(Phase 0 resume check, plan-first persistence at.session/<skill-slug>/<scope>/, archive on completion). Phase 0 (resume check) and Phase 1 (plan write) are NOT optional.
This skill is compliant with the doctrine in AGENTS.md §3 (Orchestration Mode) and the session contract in .agents/skills/agentic-qa-core/references/session-management.md. Every dispatch follows the 7-component briefing format defined in .agents/skills/agentic-qa-core/references/briefing-template.md, and the pattern selected per phase matches the decision guide in .agents/skills/agentic-qa-core/references/dispatch-patterns.md. The four phases — Plan, Code, Verify, Archive — mirror the shape of /test-automation (Plan → Code → Review) extended with an inline Archive step. Phase 0 stays inline because the path self-check + session resume check are short orchestrator decisions that do not benefit from a fresh-context subagent.
Session scope: <change-name> (kebab-case, user-provided at session start). Session state lives at .session/framework-development/<change-name>/{plan.md, progress.md} per agentic-qa-core/references/session-management.md §9.
| Phase | Pattern | Subagent role |
| Phase 0 — Path self-check + session resume check | inline | orchestrator only; no subagent. Lists target paths against references/kata-invariants.md §10; aborts on FORBIDDEN. Also checks .session/framework-development/<change-name>/ for prior plan/progress and offers resume per agentic-qa-core/references/session-management.md §4 |
Phase 1 — Plan (plan.md) | Single | one Plan subagent writes .session/framework-development/<change-name>/plan.md per agentic-qa-core/references/session-management.md §6 schema; collapses prior explore + propose + spec + design + tasks into one artifact |
| Phase 2 — Code (per task batch) | Sequential | one Code subagent per task batch from the plan; orchestrator appends to progress.md per agentic-qa-core/references/session-management.md §7 schema; on verification failure: STOP, no auto-fix |
Phase 3 — Verify — bun run test | Parallel (sub-stage) | one Verifier subagent runs the test suite |
Phase 3 — Verify — bun run types:check | Parallel (sub-stage) | one Verifier subagent runs typecheck |
Phase 3 — Verify — bun run lint:check | Parallel (sub-stage) | one Verifier subagent runs ESLint |
Phase 3 — Verify — bun run skills:check | Parallel (sub-stage) | one Verifier subagent runs the skill-registry lint (framework changes can affect .agents/skills/, AGENTS.md, cli/install.ts) |
| Phase 3 — Aggregation + accept/reject decision | inline | orchestrator reads the 4 Verifier reports and decides; on any non-zero exit, presents retry / skip / abort |
| Phase 3 — V5 drift sweep (path-scoped) | Single (report-only) | only when the change touches cli/, scripts/, .husky/, AGENTS.md or .agents/instructions/: one subagent hunts the doc surface for sentences that describe the old behaviour; never gates ACCEPT |
| Phase 4 — Archive (move plan + progress) | inline | orchestrator only; moves .session/framework-development/<change-name>/ to .session/.archive/<YYYY-MM-DD>-framework-development-<change-name>/ (two-file dir preserved per agentic-qa-core/references/session-management.md §8); references in commit |
- Plan artifact location:
.session/framework-development/<change-name>/plan.md. The.session/tree is gitignored — the plan is local, not committed. Recovery on mid-run crash: the file persists; the orchestrator reads it back on the next session via Phase 0 resume check (seeagentic-qa-core/references/session-management.md§4). - Path guardrails injected per dispatch: every Plan and Code subagent briefing MUST include the line
KATA invariants and ALLOWED/FORBIDDEN paths: .agents/skills/framework-development/references/kata-invariants.md (read §10 before touching any file).Do NOT inline the path tables — the reference is authoritative. - On any subagent failure: STOP, return the failing report, do NOT auto-rerun. The orchestrator decides retry / skip / abort. See
.agents/skills/agentic-qa-core/references/orchestration-doctrine.md. - Strict TDD flag is set in Phase 1's
plan.mdunder §"Strict TDD flag". Default OFF. Flipped ON only when the user explicitly opted in. Code phase reads it from the plan; no separate cache needed.
Fleet seam (optional)
Phase 2 Code is sequential per task batch by default, and a change that fits one plan stays that way. A wave — several persistent worker sessions taking one task batch each, a conductor integrating them — is for a plan whose batches are genuinely independent (different files, no shared public API in flight). Offer it; never enter it silently.
- Topology: same checkout with file ownership per worker. Each worker's brief lists the exact files it owns and commits with explicit paths (never
git add -A), so two workers never stage each other's work. When two batches must touch the same module, they do not run in the same wave: serialize them, or give each worker its own worktree. - The conductor writes
launch.txtin.session/framework-development/<change-name>/— one self-contained line per worker — always, whether or not any orchestration transport exists on the machine. Launching, supervising and closing those sessions isorca-orchestration/SKILL.md([ORCHESTRATION_TOOL]): supervised launch is the native path, andlaunch.txtis the payload for the human-paste fallback when nothing can launch it. - Phase 0 and Phase 3 stay with the conductor. The path self-check runs once, over the union of every worker's paths, before the first launch; the four Phase 3 verifiers run once, on the integrated tree, after the last worker reports. A per-worker green gate is not a wave gate.
- Read before every edit. A worker's neighbour may have changed a shared file since the brief was written; Critical Rule #15 (no global discards) binds twice as hard when sessions share a tree.
- Silence rule: the absence of an orchestration transport is never named to the user and never appears in the preflight gate or the plan.
Readiness Preflight Gate (MANDATORY — runs before Phase 0)
Full doctrine:
agentic-qa-core/references/preflight-gate.md. Runs FIRST, before the path self-check and resume check. Two laws: (1) args-as-answers — the change name and touched paths are provided args; ask only the gaps. (2) probe, don't assume. Surface gaps + REDs as ONEAskUserQuestionchecklist; self-fix with approval + explanation; STOP on any blocking RED. This skill evolves the framework itself — it does NOT hit a live env, Jira, DB, or API — so its gate is a dev-toolchain readiness check that pairs with the Phase 0 path self-check. Generic baseline (the two laws, secret/restart handling, output contract) is inherited from the reference §3.1 — not repeated here; the env/creds half of the baseline is N/A for meta-work. Below is only this skill's specific capability delta.
| Capability | Need | Why here |
| Dev toolchain | REQUIRED | Phase 3 Verify runs bun run test / bun run types:check / bun run lint:check / bun run skills:check. All four must resolve at t=0. bun install if a dep is missing. |
kata-manifest.json clean | REQUIRED | Source of truth (Critical Rule #12). Framework changes can invalidate it — bun run kata:manifest:check clean, bun run kata:manifest to regenerate. |
| Playwright browsers | SCOPE — touching fixtures / KATA bases / tests | Verify of a fixture or base-class change runs the suite, which needs chromium (bun run pw:install). |
/github-actions-docs + /playwright-best-practices | OPTIONAL | Injected per dispatch when the change touches CI YAML or fixtures/tests (already noted in the briefing skeleton). |
Active env, test-user creds, OpenAPI / API token, DBHub, issue-tracker, TMS and resend are N/A — framework evolution is meta-work on this repo. After the gate clears (all REQUIRED GREEN), continue to Phase 0 below.
Phase 0 — Path self-check + session resume check (mandatory, runs first)
Before invoking any subagent, the orchestrator MUST (a) list the files / directories the change will touch and verify each one against the ALLOWED / FORBIDDEN tables in references/kata-invariants.md §10, and (b) run the session resume check per agentic-qa-core/references/session-management.md §4. Skipping Phase 0 is the most common way framework changes leak into ticket-owned surface area OR lose mid-run state on interruption.
- Read
references/kata-invariants.md§10 (ALLOWED + FORBIDDEN paths). - Ask the user (or infer from the request): "Which paths will this change touch?"
- For each path, look it up in §10 ALLOWED → proceed. Or §10 FORBIDDEN → abort and redirect to the skill named in the row.
- If a path matches neither table, ASK the user explicitly — never assume.
- If a single change spans both ALLOWED and FORBIDDEN paths (e.g. "refactor
tests/components/ui/UiBase.tsAND update the e2e tests that consume it"), split the work: framework-development handles the base-class change;/test-automationhandles the test-spec migration in a follow-up. - Session resume check (per
agentic-qa-core/references/session-management.md§4): check.session/framework-development/<change-name>/progress.md. If it exists, readplan.md+ the tail ofprogress.md, surface the last completed phase + next planned phase + any blocking notes, and offer resume / restart / abort. Onrestart, archive the current directory to.session/.archive/<YYYY-MM-DD>-framework-development-<change-name>-aborted/before proceeding.
Phase 0 is one short inline decision — it does NOT write a file. If the change is approved, the decision is captured later in Phase 1's plan.md §Investigation.
Native Phase Orchestration
After Phase 0 passes, run the four-phase pipeline in dependency order. Each subagent dispatch follows the 7-component briefing format in agentic-qa-core/references/briefing-template.md. Briefing skeleton for Plan and Code phases (fill the <...> slots):
Goal: <one-sentence outcome scoped to this phase>
Context docs:
- .agents/skills/framework-development/references/kata-invariants.md
- .session/framework-development/<change-name>/plan.md (Code phase only)
- .session/framework-development/<change-name>/progress.md (Code phase, batches > 1; orchestrator-written, read-only for subagents)
- <relevant ALLOWED-path files the phase will read or touch>
Project Standards (auto-resolved):
<compact-rule blocks pulled from .agents/skills/REGISTRY.md per skill-resolver protocol>
Skills to load: <none by default; orchestrator injects /playwright-best-practices if fixtures/tests, /github-actions-docs if CI YAML>
Exact instructions:
1. Read kata-invariants.md fully. Verify §10 ALLOWED for every touched path. FORBIDDEN → STOP.
2. <phase-specific step — e.g. "write the plan", "implement task batch N">
3. Save the artifact at the engram topic_key framework/<change-name>/<phase>.
4. Return the executive summary inline.
Report format:
- status: ready | blocked | failed
- artifact: <absolute path or engram topic_key>
- next_recommended: <phase or "stop">
- risks: [<one-liner per risk>]
- skill_resolution: injected | fallback-inline
Rules:
- ALLOWED paths only (kata-invariants.md §10). FORBIDDEN → abort.
- Do NOT modify generated artifacts (api/openapi-types.ts, kata-manifest.json, reports/).
- If strict TDD is ON (read from plan §"Strict TDD flag"), every production-code task is preceded by a failing test in the same batch.
- Decisions: agentic-qa-core/references/decision-protocol.md before any question. A technical call inside the approved plan is decided and reported as DECIDED with the option it beat; escalate to the orchestrator only the four §5 kinds (product behaviour, a new security posture, an irreversible or outward action, what the owner reserved). Never widen the scope beyond the plan.Phase order (each phase gates the next):
Phase 0 (inline) -> Phase 1 Plan (Single) -> Phase 2 Code (Sequential per batch) -> Phase 3 Verify (Parallel 4-way) -> Phase 4 Archive (inline)Phase 1 — Plan
Dispatch: Single. The Plan subagent writes one consolidated artifact at .session/framework-development/<change-name>/plan.md covering: Goal, Investigation, Approach options, Chosen approach, Invariants touched, Public API delta, Task breakdown, Strict TDD flag, Risks, Verification checklist. One file, ten sections — not five separate documents. The seven base sections from agentic-qa-core/references/session-management.md §6 are mandatory; framework-development extends them with three skill-specific sections (Invariants touched, Public API delta, Strict TDD flag).
Present the plan to the user. Wait for approval before Phase 2.
When the change IS a skill, the plan's Task breakdown follows ../agentic-qa-core/references/skill-scaffold.md §2 for that kind, and the Verification checklist includes its §5 Definition of Done.
ADR seeding (framework architecture). When the chosen approach reshapes the framework's test architecture — KATA layers, fixture APIs, the test runner, the isolation/parallelization model, or the OpenAPI/type pipeline — and the decision passes the two-gate test (architectural AND hard to reverse per agentic-qa-core/references/adr-doctrine.md §1), record a .context/ADR/ADR-NNNN-<slug>.md after the plan is approved and before Phase 2 coding. Framework evolution is meta-work: its decisions bind every test session that follows, so historicize them rather than leaving them in a one-off plan.md that gets archived. The plan's "Invariants touched" / "Public API delta" sections are the prime ADR candidates. The human already approved the plan, so the ADR is Accepted from the start, its Deciders line naming that approval; never ask the human to accept it again (agentic-qa-core/references/adr-doctrine.md step 4 and A4). Proposed is only for a part of the decision still open, and the ADR says what. Template + lifecycle: .context/ADR/README.md.
Phase 2 — Code
Dispatch: Sequential — one subagent per task batch. The orchestrator decides batching from the plan's task list; rule of thumb is 1 batch per 3-5 closely-coupled tasks, or 1 batch per task when the task touches a load-bearing file such as ApiBase.ts / UiBase.ts / TestContext.ts.
Each subagent:
- Reads
plan.mdand applies the tasks in its batch in plan order. - Runs the per-task verification command listed in the plan.
- Returns a one-line summary per task to the orchestrator.
- On verification failure: STOP, report, do not auto-fix.
The orchestrator never reads diffs from the Code subagent — only the summary. If the user wants to see actual changes, the orchestrator runs git diff inline after the batch returns. After each batch returns, the orchestrator appends a phase entry to .session/framework-development/<change-name>/progress.md per agentic-qa-core/references/session-management.md §7 (subagents never write to progress.md directly — that is an orchestrator-only file).
Phase 3 — Verify
Dispatch: Parallel — four Verifier subagents in the same <function_calls> block:
| Verifier | Command | Captures |
| V1 | bun run test | exit code, summary |
| V2 | bun run types:check | exit code, summary |
| V3 | bun run lint:check | exit code, summary |
| V4 | bun run skills:check | exit code, ERROR/WARN/INFO counts |
skills:check is included because framework changes routinely touch .agents/skills/framework-development/, agentic-qa-core/references/, AGENTS.md, and cli/install.ts — every one of those surfaces is read by scripts/lint-skills.ts and gated by the named checks it declares (tier coherence, anti-leak, stale-path, duplicate-tier, etc.). The other three commands never see this surface; adding the fourth verifier costs one parallel slot and prevents an entire failure class.
After all four return, the orchestrator inline-aggregates:
- All four
exitCode == 0→ ACCEPT. Proceed to Phase 4. - Any
exitCode != 0→ REJECT. Present failing verifier(s) to the user. Options: retry the failing Phase 2 batch / skip-and-document / abort. Do NOT auto-fix.
Docs follow-through (closing step of Phase 3)
Two triggers, either one is enough: the change adds, renames or retires a skill, a package.json script or a doc path; or it changes a BEHAVIOUR some page describes in prose (what a gate checks, what the installer asks or offers, which files a contract covers, how a rule is applied). The same PR patches every doc that names it or describes it: .agents/instructions/agent-context-map.md (task map), .agents/instructions/agent-skills-and-mcps.md (skill router), README.md, INSTALLER.md, CONTEXT.md, the docs/core/ pages, the decks under packages/decks/ and the Pages home under packages/pages-home/. The last two are the surface every measured drift missed. bun run docs:check (inside repo:check, and on every push) fails when a repo skill is missing from the §5 router or a doc quotes a bun run script package.json does not declare; the wording around each fact, and any page that describes the old behaviour, is read and fixed by hand. Human pages point to .agents/skills/REGISTRY.md for the skill list and never enumerate it (Critical Rule #17). A downstream project's own docs are test-framework-adaptation Phase 9.3, never this skill.
Declared couplings (ADR-0016). A code region a page describes carries LINT.IfChange(<label>) / LINT.ThenChange(<pages>) comment lines. When the change touches one, every page it names changes in the same push, or a commit carries Docs-Checked: <label> <reason> because the documented behaviour still holds. Pre-push (scripts/lint-doc-contracts.ts --push) and CI block otherwise; the commit hook only warns. In Claude Code and Codex the edit hook prints the DOCS: line the moment the region is edited. When this change finds a drift no marker caught, add the marker in the same PR: that is how coverage grows where drift happens.
V5 drift sweep (report-only, path-scoped). Runs only when the change touches cli/, scripts/, .husky/, AGENTS.md or .agents/instructions/, after the four verifiers. One subagent, briefed with the diff (git diff <merge-base>..HEAD) and a one-paragraph summary of the behaviour that changed:
- Extract the changed behaviour's terms (flags, file names, commands, rule names, the old wording the diff removed).
- Grep the doc surface:
README.md,INSTALLER.md,CONTEXT.md,AGENTS.md,.agents/instructions/**,.agents/skills/**,docs/**,packages/decks/**,packages/pages-home/**. - Read every hit in context and report each sentence that is now wrong or silently incomplete, as
file:line+ the sentence + what changed. A hit the PR already updated is not a finding. - Count the
Docs-Checked:trailers in the range (git log --format=%B <merge-base>..HEAD) and list each label with its reason.
Report-only: it never gates ACCEPT. The orchestrator fixes each finding or dismisses it with a reason, in the same PR. It is the one step that finds a coupling nobody declared.
Phase 4 — Archive
Dispatch: inline — no subagent. The orchestrator performs the archive flow from agentic-qa-core/references/session-management.md §8:
- Verifies the Verification checklist in
plan.mdpasses (all four Phase 3 verifiers returned exit 0). - Moves the entire working directory:
mv .session/framework-development/<change-name>/ .session/.archive/<YYYY-MM-DD>-framework-development-<change-name>/. Bothplan.mdandprogress.mdare preserved side by side (no concatenation) so future resume-replay stays possible. - Calls Engram
mem_session_summarywith the session template peragentic-qa-core/references/session-management.md§11. The summary MUST include the archive path somem_search "session framework-development <change-name>"resolves back to the artifacts. - Surfaces the archive path so
/git-flow-mastercan include it in the commit message body.
Archive is a "close-the-loop" step, not "ship-the-code". Code is shipped by /git-flow-master based on the diff that Phase 2 produced and Phase 3 verified. On Phase 3 REJECT, archive does NOT run — the working directory stays in place so the user can debug, resume, or abort.
Anti-patterns — NEVER do these
- F1. NEVER use
/framework-developmentfor per-ticket test writing — that surface is owned by/test-automation(Plan → Code → Review on KATA + Playwright + TypeScript). Framework-development governs the architectural surface only. - F2. NEVER collapse KATA layers (TestContext / Base / Domain / Fixture) under the pretext of simplification. The layers are framework architecture, not speculative abstraction. Critical Rule #12-adjacent: simplicity-first does NOT apply to KATA.
- F3. NEVER edit per-ticket tests from a framework-development session: the specs and the per-module Page / Api / Steps components in
tests/components/{module}/are owned by per-ticket work via/test-automation. The KATA bases (TestContext.ts,ApiBase.ts,UiBase.ts) and the fixture files intests/components/ARE this skill's surface (references/kata-invariants.md§10.1). If a base-class refactor forces a consumer migration, split the work: framework-development changes the base;/test-automationmigrates the specs in a follow-up. - F4. NEVER skip the Plan → Code → Verify → Archive pipeline for non-trivial framework changes. The pipeline IS the gate — bypassing it for "quick" refactors of
ApiBase.ts,UiBase.ts,TestContext.ts, fixtures, installer, or OpenAPI pipeline reliably produces undetected regressions. - F5. NEVER bump major versions of Playwright / Bun / TypeScript without a regression run on a representative E2E suite. Lockstep upgrades hide breaking changes in fixture lifecycle, locator engines, or type-emit behavior.
- F6. NEVER add a new fixture API without updating
tests/components/TestFixture.ts(or the matchingApiFixture.ts/UiFixture.ts) ANDkata-manifest.jsonAND citing at least one existing test that consumes it. Orphan fixtures rot — andkata-manifest.jsonis the anti-duplication gate (Critical Rule #12). - F7. NEVER refactor
cli/install.tswithout testing the full install flow on a clean clone. The installer is the only surface where a bug ships silently to every new user — verification on the developer's already-installed repo proves nothing. - F8. NEVER introduce a hard-to-reverse test-framework architectural decision (KATA-layer reshape, new fixture API, test-runner swap, isolation/parallelization model) without recording it as an ADR in
.context/ADR/. Framework evolution binds every later test session — a decision left only in an archivedplan.mdgets re-litigated or silently violated. Write it before Phase 2,Acceptedand citing the plan approval (Proposedonly while a question is still open). ADRs are append-only: supersede, never rewrite. Seeagentic-qa-core/references/adr-doctrine.md.
Session close contract
Session-footer contract (mandatory at close). The final phase is not done until the two chat-facing blocks from ../agentic-qa-core/references/session-footer-contract.md are printed: (1) consolidated screenshot list — repo-relative paths, verified on disk, bug annotations first — plus in-flow surfacing of every capture's path the instant it lands; (2) Session Footer listing skills/MCPs/CLIs actually used + testing levels touched, with explicit "none" entries for expected-but-untouched levels. Framing for this skill: meta. Multi-subagent sessions: each stage report carries the five footer fields (skills_loaded, mcps_used, clis_used, testing_levels_touched, screenshots_captured); the orchestrator compiles the footer ONCE at close. Chat only — never in a Jira comment or ATR body. Lessons noticed during the session are PROPOSED to .session/<skill-slug>/<scope>/refinements.md and never applied to a live skill, per ../agentic-qa-core/references/skill-refinement-protocol.md; the footer's Refinements proposed: line counts them.
References
references/kata-invariants.md— INVARIANT vs EXTENSIBLE rules for the 4 KATA layers, fixture selection, ATC identity, DRY scope, import aliases, public-method contract, extension points, evolution checklist, out-of-scope surfaces, and §10 ALLOWED / FORBIDDEN path tables. Required reading before any Plan or Code subagent that touchestests/components/,api/schemas/, or fixtures.../agentic-qa-core/references/skill-composition-strategy.md— T1/T2/T3/T4 tier model, category vocabulary, validation rules. The §4 anti-leak contract is informational here: framework-development does not chain SDD by default; §4 governs users who manually install SDD and explicitly request the SDD ceremony.../agentic-qa-core/references/briefing-template.md— 7-component briefing examples per pattern.../agentic-qa-core/references/dispatch-patterns.md— Single / Sequential / Parallel / Background decision guide.../agentic-qa-core/references/orchestration-doctrine.md— failure protocol, ASK-on-error rule, no auto-fix.../agentic-qa-core/references/session-management.md— Phase 0 resume contract,plan.md/progress.mdschemas, archive policy, scope-naming, Engram coupling. This skill is one of the producers ofsession/...topic keys.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

