V / vulcan documentation

Language

Product specs, roles and actors

A product spec declares what an application owes the people using it. It attaches expectations to a U code and names the components, starting conditions, actions and outcomes of a scenario.

The declaration

A spec can contain component, given, action, then and role sections. The compiler resolves the specification vocabulary and produces a manifest. The test runner executes lane scenarios; eligible field-tagged lines can also be observed in a running application.

Roles establish test identities

A spec role declaration defines a reusable fixture. A role can be scoped to an entity, such as a tenant. The fixture must establish identity through the product's real authentication path when that is what the test claims to exercise.

Setting a label in a demo UI is useful for proving browser-context isolation, but it is not authentication and grants no permission.

Actors name callers

A cast inside role binds actor names to role fixtures. There is no separate actor keyword:

role {
  maker = cashier
  checker = supervisor of tenant "store-1"
}

Later sections can use maker and checker blocks to act and assert in the corresponding caller's context. Each caller keeps its own browser context. Opening a named case does not navigate to a URL; use navigate to change location.

Run a campaign

node n1/vulcan/lang/bin/vulc.ts test path/to/product.spec.v --ui-profile path/to/profile.json
node n1/vulcan/lang/bin/vulc.ts spec path/to/product.spec.v --json

The profile supplies the environment, fixture and driver. The spec command inspects what the declaration says; it is not a substitute for running the test against the application.

Field observation has limits

A browser observes one current caller. Named casts are skipped by field observation, including a cast with one named actor. Unknown caller identity is ungated evidence, not a proven role match. Observing a role never grants authorization.

Use lane tests for multi-caller behavior, keep fixture cleanup bounded, and retain failure evidence when an environment fails. Passing a mocked driver test does not prove behavior on a physical device.