Documentation Index
Fetch the complete documentation index at: https://bintzgavin-apastra-14.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Installation
When to use
Apastra is designed to be CI optional. The local-first workflow — where your IDE agent runs evals and manages baselines — is sufficient for individual developers. Upgrade to CI when:Team scaling
Multiple contributors are editing prompts and you need a consistent quality gate on every pull request.
PR gating
You want to block merges automatically when a prompt change causes a regression against the established baseline.
Governed releases
You need an immutable, auditable record of which prompt package was shipped and who approved it.
Autonomous agents
Autonomous coding agents are submitting PRs and you need automated quality checks before any merge.
The core file-based protocol never changes when you upgrade to CI. Prompts, datasets, evaluators, suites, and baselines stay exactly the same — CI just adds an automated layer on top.
How to invoke
Ask your agent:“Use the apastra-setup-ci skill to set up CI for this repository”Your agent copies pre-built GitHub Actions workflows into
.github/workflows/.
The two CI tiers
- Basic CI (2 workflows)
- Full CI (6 workflows)
The minimum setup for PR gating. Two workflows working together:
prompt-eval.yml — triggers on pull requests that touch promptops/** and delegates to regression-gate.yml:prompt-release.yml — triggers on tag pushes and delegates to immutable-release.yml:Workflow details
regression-gate.yml
regression-gate.yml
Trigger: Pull requests to
main; also callable as a reusable workflow.What it does:- Checks out the repository with the last two commits
- Detects whether any files in
promptops/harnesses/,promptops/prompts/,promptops/datasets/, orpromptops/policies/changed — if none changed, it skips - Fetches the
promptops-artifactsbranch and readsreports/regression_report.jsonandreports/run_manifest.json - If the regression report is missing, blocks the merge with an error
- Renders a summary table of all evidence items (metric, status, candidate, baseline, delta, message) into the GitHub step summary
- Checks each evidence item for
"status": "fail"and emits individual GitHub error annotations - Reads the final
.statusfield — if"pass", checks the run manifest for atotal_costand compares it against anybudgets.cost_budgetdefined in suite files; if over budget, blocks the merge - Exits 0 on pass, exits 1 on any failure
promptops-artifacts branch.auto-merge.yml
auto-merge.yml
Trigger: Pull requests opened, reopened, or synchronized.What it does:
- Runs only for PRs from approved authors (configurable in the workflow file)
- Fetches the base branch and attempts a merge, automatically resolving
PROGRESS.mdconflicts using a union merge strategy - Pushes any resolved conflicts back to the PR branch
- Enables GitHub’s auto-merge (squash strategy) via
gh pr merge --auto --squash - Retries up to 5 times with backoff to handle GitHub API rate limits
regression-gate), the PR merges automatically without manual intervention.promote.yml
promote.yml
Trigger: Manual workflow dispatch (with
digest, channel, and evidence_refs inputs) or release published.What it does:- Checks out the
promptops-artifactsbranch - Verifies that an approval record exists in the
approvals/directory matching the target digest and"decision": "approved"— blocks promotion if no approval is found - Generates a promotion record JSON and appends it to
derived-index/promotions/:
- Commits the record and calls
deliver.ymlwith the promotion record path
deliver.yml
deliver.yml
Trigger: Called by
promote.yml after a promotion record is committed.What it does:- Fetches the promotion record from the
promptops-artifactsbranch - Reads the
channelanddigestfrom the record - Iterates over all files in
promptops/delivery/*.yaml, finds those matching the promotion channel, and executes the sync for the configured target type and repository
promptops/delivery/.immutable-release.yml
immutable-release.yml
Trigger: Tag push (any tag); also callable as a reusable workflow.What it does:Effect: Every tagged release of your prompt package is cryptographically attested and cannot be tampered with after publication.
- Packages the entire
promptops/directory aspromptops.tar.gz - Computes a SHA-256 digest of the archive
- Attests build provenance using
actions/attest-build-provenance(creates a verifiable SLSA provenance record) - Creates a GitHub Release with the archive attached and the digest in the release notes
record-approval.yml
record-approval.yml
Trigger: Manual workflow dispatch with
revision_ref (the target digest or ID) and decision (approved, rejected, or abstained).What it does:- Checks out the
promptops-artifactsbranch - Generates an approval state record and appends it to
approvals/:
- Commits the record
promote.yml checks before allowing any promotion.Configuring required status checks
After installing the workflows, protect your main branch:
With this in place, no one — including autonomous agents — can merge a prompt change that drops quality below the established baseline.
What stays the same after upgrading
Upgrading to CI does not change your local workflow:- You still edit prompts in
promptops/prompts/ - You still write cases in
promptops/datasets/ - You still test locally using the
apastra-evalskill - The only difference: when you push a PR, GitHub runs the regression gate automatically