Files

Product specs (BDD-lite)

spec/*.feature is the product behaviour source of truth. The files are executable specifications in structure, but AK does not run them through Cucumber. Ordinary Vitest and Playwright tests prove each scenario at the cheapest useful layer.

Each scenario has exactly one stable journey id, one product entry point, and one canonical proof layer:

@journey:tasks/claim @entrypoint:toolbox @proof:integration
Scenario: The assigned Agent claims a Task

The proving test includes the same id in its name:

it("[spec: tasks/claim] claims the assigned Task", async () => {})

Entry points identify the surface through which behavior is observed. Current values are product-ui, toolbox, public-http, http, webhook, and deployment.

Proof layers:

Tag Home Purpose
@proof:unit tests/unit/ or owning source unit test Pure rules, use cases, and component behavior
@proof:integration tests/integration/, tests/contract/, or a retained root integration test Real adapters, storage, HTTP, schema, and boundary contracts
@proof:e2e tests/e2e/ A small number of real browser journeys

Journey ids never change. If product behaviour is replaced, remove the old scenario and add a new id. pnpm lint:spec checks the metadata, duplicate ids, proof placement, and orphaned test breadcrumbs. A scenario may have additional tests at other layers, but exactly one layer is its canonical proof. Keep this directory pure: only this README and .feature files belong here.