Skip to content
VAIR Co. No. 16938467

Rev. A / 2026-08-07 Datasheet vairworks.co.uk

VAIR LTD, build infrastructure and CI tooling, London A build that fails in the first minute, not the fortieth.

VAIR LTD is a London software company that works the caching, scheduling and reproducibility layer between a repository and its CI runners. Toolchains get resolved rather than inherited, cache keys are cut from inputs somebody declared, and the task graph resolves before a runner is asked for, so a broken pin fails at resolution instead of forty minutes into a queue.

Company number 16938467 (SIC 62012, business and domestic software development)
Engagements Remote across the UK, on-site in London by arrangement.
Start here Show us your slowest build — email hello@vairworks.co.uk

01 / Scope

Three work areas, and what each one takes off the table

Everything here sits between a repository and its CI runners. The table states what each area covers, and the class of failure it exists to remove.

Scope register, revision A, 7 August 2026
Ref Work area What it covers What it rules out
01 Build caching Content-addressed cache keys derived from a task's declared inputs, a local tier and a shared remote tier, and a rule that failures are never promoted to the shared tier. A hit served from an input nobody declared, and a failed run poisoning the tier every other machine reads.
02 Task scheduling Dependency graph resolution, fan-out of independent tasks across ephemeral runners, and queue admission against a stated concurrency budget rather than an unbounded pool. Fan-out that keeps widening until the runner pool, rather than the team, has decided the monthly bill.
03 Reproducibility auditing Recording the resolved input set for every task so that a build can be replayed later and any divergence attributed to a named input rather than to chance. Two runs that disagree for a reason nobody can name once the runner has been torn down.

Scrolls sideways on a narrow screen.

02 / Rules

Three rules the tooling holds to

Each card states one rule and the reasoning under it. The configuration format in the specimen below is where those three rules are declared and enforced.

01

Cache keys that describe the whole input

A cache key is a digest over the declared file set, the pinned toolchain versions and an explicit allow-list of environment variables. Anything off that list is stripped before hashing, so a stray variable in the runner environment cannot quietly invalidate a hit or, worse, manufacture one.

cache.key

02

Scheduling against a stated budget

Fan-out is admitted against a concurrency budget the team sets, not against whatever the runner pool happens to allow. Cold-start cost on ephemeral runners counts as a first-class input to that decision, because on short tasks it is frequently the dominant term.

task.fanout

03

Builds you can replay and argue with

Every task emits the resolved input set it actually hashed. Two runs that disagree get diffed at the level of inputs, which turns "it works on the other runner" from a shrug into a question with an answer.

audit.inputs

Specimen: vair.toml, revision A
# vair.toml
# One file at the workspace root. Every key below is read at task
# resolution, before a runner is asked for.

[workspace]
root      = "."
toolchain = "lockfile"   # every tool version resolved, none inherited

[cache]
tiers  = ["local", "remote"]
key    = ["inputs", "toolchain", "env"]
write  = "on-success"       # failures never reach the shared tier

[[task]]
name    = "build"
inputs  = ["src/**", "Cargo.lock"]
outputs = ["target/release/app"]
env     = ["TARGET_TRIPLE"]  # the allow-list; the rest is stripped

[[task]]
name      = "test"
depends   = ["build"]
inputs    = ["tests/**"]
fanout    = 12                # admitted against the concurrency budget

Printed in full so it can be argued with rather than summarised. Each stanza carries one of the rules above: declared inputs, a pinned toolchain, an environment allow-list, and a write rule that keeps a failed task out of the tier everyone else reads.

03 / Method

How an engagement runs, step by step

Five steps, procedural, in this order. The same sequence governs the company's own tooling and every engagement it takes, because an engagement is where that tooling meets a build nobody here wrote.

  1. Read the build as it actually runs

    The starting artefact is the CI configuration and the task graph it produces, not a description of them. Steps that were added for one incident and never removed are usually visible within an hour of reading.

  2. Measure before changing anything

    Wall-clock per task, queue wait, runner cold-start and cache hit rate are recorded first, on the team's own runners. A change with no baseline in front of it is a guess, and we would rather publish a number the team can reproduce than one they have to trust.

  3. Declare the inputs

    Each task gets an explicit input set: files, toolchain versions, and the environment variables it is genuinely allowed to read. Most of the work in caching is here, and most of the false cache hits people have been burned by trace back to this step being skipped.

  4. Introduce caching at one boundary

    One task, one boundary, verified by replaying the build with the cache cold and then warm and comparing outputs byte for byte. Only after that boundary holds does a second one get touched.

  5. Leave the reasoning behind

    The deliverable includes the input declarations, the measurements and the written reasons for each decision, in the team's repository. An engagement that only works while we are still on the call has not finished.

04 / Reference architecture

The system, drawn

The schematic sets out the path a task takes from repository to artefact store and the six components it passes through. The lettered notes beside it say what each one answers for.

Reference architecture, revision A A left-to-right schematic. A repository feeds an input hasher, which feeds a content-addressed cache index. The cache index feeds a scheduler, which fans work out to a pool of ephemeral runners. The runners write to an artefact and audit store, which writes results back to the cache index. Repository source and lockfiles Input hasher declared inputs only Cache index content addressed Scheduler graph plus admission Runner pool ephemeral, cold start Artefact and audit store resolved input sets A B C D E F Rev. A / 2026-08-07 / reference architecture Dashed return path: cache promotion on success only
Figure 1. Reference architecture, revision A. Solid lines carry the data path. The dashed return leg is the promotion rule: an artefact reaches the shared index only after the task that produced it succeeded.
  • A

    Repository. Source, lockfiles and the CI configuration. Taken as given. Nothing here asks a team to restructure a repository before any of it can be cached.

  • B

    Input hasher. Reads only the declared input set for a task. Undeclared files and unlisted environment variables are invisible to it by construction, which is what makes a key mean something.

  • C

    Cache index. Content addressed, so an entry is named by what went into it. Two teams that produce the same inputs land on the same key without coordinating.

  • D

    Scheduler. Resolves the dependency graph, drops tasks whose key already resolves, and admits the remainder against a concurrency budget the team states rather than one the runner pool implies.

  • E

    Runner pool. Ephemeral by assumption. Cold-start cost feeds admission as an input in its own right, rather than being averaged away as noise.

  • F

    Artefact and audit store. Holds outputs alongside the resolved input set that produced them, which is what makes a later replay comparable rather than merely repeated.

05 / Engagement

Shape, rates and jurisdiction

Alongside its own tooling the company takes engagements on other teams' build systems. The terms below are standing ones. Everything else is settled per engagement, in writing, before any work starts.

Work taken
Build pipelines on managed or self-hosted runners, whichever CI platform they run on. The scope register above says which layer a given piece of work sits in.
How many at once
A small number, so each build gets read properly rather than skimmed. Email to ask what the queue looks like.
Engagement shape
Fixed written scope agreed in advance, work carried out on the team's own runners, deliverable is a written report plus the configuration changes it describes, committed to the team's repository.Remote by default. On-site in London by arrangement.
Rates
Rates are agreed per engagement. Ask by email and you will get a figure in writing.
Out of scope
Workforce, training and credentialing software. Property energy-performance inspection. General IT support. We do not take work in these areas and will say so rather than subcontract it.
Contact route
hello@vairworks.co.ukMonitored on working days. A person replies within five working days.
Jurisdiction
Contracts are governed by the law of England and Wales.

06 / Notes and disclosures

Notes on figures, the name and this document

  1. Figures. Any benchmark or speed figure published here names the workload it was measured on, the hardware it ran on and the date it was taken.
  2. Name. "Vair" is the heraldic term for the pattern of alternating bell shapes representing squirrel fur, and the French word for that fur. The mark on this site is a pair of those bells. The compound "vairworks" is what the company brands on.
  3. Not connected with. VAIR LTD has no connection to Vair IT Technologies Pvt Ltd, VAIRKKO, The Vair Companies Inc., VAIR Networks or Vair Corporation. Similar names, separate businesses.
  4. Revision. This document is revision A, dated 7 August 2026. The letter and the date sit at the head of every page here, so you can tell which version of a statement you are reading.

Show us your slowest build

The job everyone on the team has quietly learned to work around. Send its CI configuration and a rough wall-clock figure, and you get back a specific reading of where the time is going rather than a brochure.

hello@vairworks.co.uk

Replies come from a vairworks.co.uk address within five working days. Written enquiries can also be sent to the registered office below.