Airlock
Concepts

Artifacts

Content, comments, and patches produced by workflow steps.

Workflow steps produce artifacts that populate the Push Request. There are three types of artifacts, each created with a dedicated CLI command.

Artifact Types

Content

Content artifacts add rich text to the Push Request overview — typically a generated PR title and description.

airlock artifact content --title "Add user authentication" --body "Implements OAuth2 login flow with..."

Comment

Comment artifacts attach inline review comments to specific files and lines in the Changes tab.

airlock artifact comment \
  --file src/auth.ts \
  --line 42 \
  --message "Consider using a constant for the token expiry" \
  --severity warning

Patch

Patch artifacts suggest code changes that appear in the Patches tab for review.

airlock artifact patch \
  --title "Fix import ordering" \
  --explanation "Sorted imports alphabetically per project convention"

Patch artifacts capture the current worktree diff as the patch content. Pre-freeze patches are applied automatically; post-freeze patches are queued for manual review.

See the CLI Reference for full flag details on each command.

How Artifacts Populate the Push Request

Artifact TypeDesktop App Tab
ContentOverview — Title and description
CommentChanges — Inline comments on the diff
PatchPatches — Suggested changes to accept or reject

Producing Artifacts in Custom Steps

Any workflow step can produce artifacts by calling the airlock artifact commands. For example, a custom linting step might produce both patches (auto-fixes) and comments (warnings):

- name: custom-lint
  run: |
    # Run linter and apply fixes
    eslint --fix src/
    airlock artifact patch --title "ESLint auto-fixes" --explanation "Applied ESLint auto-fix rules"

    # Add a comment for manual-fix issues
    airlock artifact comment --file src/index.ts --line 10 \
      --message "Unused variable 'foo'" --severity warning

Step Result Artifacts

Some default steps write JSON result files to $AIRLOCK_ARTIFACTS/ that downstream steps can read:

test_result.json

Written by the test step:

{
  "verdict": "pass",
  "summary": "All 42 tests passed",
  "details": "..."
}
FieldValuesDescription
verdictpass, fail, or skipOverall test outcome
summarystringBrief summary of the test run

critique_result.json

Written by the critique step:

{
  "max_severity": "warning",
  "comment_count": 3,
  "summary": "Found 2 warnings and 1 info suggestion"
}
FieldValuesDescription
max_severitynone, info, warning, or errorHighest severity across comments
comment_countnumberTotal number of review comments

risk_assessment.json

Written by the gate step:

{
  "risk_level": "medium",
  "summary": "Change modifies core auth logic with partial test coverage",
  "rationale": "The change touches authentication middleware...",
  "system_impact": "moderate",
  "ambiguity": "medium",
  "approval_threshold": "medium",
  "await_human_approval": "true",
  "test_verdict": "pass",
  "critique_max_severity": "warning",
  "critique_comment_count": 3
}
FieldValuesDescription
risk_levellow, medium, or highAssessed risk level of the change
summarystringBrief summary of the risk assessment
rationalestringExplanation of why this risk level was chosen
system_impactcosmetic, moderate, fundamentalScope of the change's impact on the system
ambiguitylow, medium, or highLevel of implementation ambiguity
approval_thresholdstringConfigured AIRLOCK_RISK_THRESHOLD value
await_human_approval"true" or "false"Whether the gate paused for approval
test_verdictpass, fail, or skipTest verdict from upstream step
critique_max_severitynone, info, warning, errorHighest critique severity
critique_comment_countnumberNumber of critique comments

These artifacts are used by the gate step to perform a risk assessment and conditionally pause the pipeline with airlock exec await.