What gets checked
On both providers, the check runs every prompt and component file in your push through the same TemplateDX compiler the runtime uses. If a file would fail to load at request time, the check fails, with that file annotated on the PR (GitHub) or summarized in the status description (GitLab). What surfaces as a failure:- Template syntax errors. Malformed MDX/JSX in
.prompt.mdxor.mdxfiles (unclosed tags, stray HTML comments, unexpected characters). - Frontmatter errors. Missing
text_config/object_config/image_config/speech_config, invalid model names, or missing required fields. - Schema reference errors. Malformed
$refs that fail at parse time.
- Your handler’s TypeScript or Python build. That runs on the code-deploy step, and surfaces in the AgentMark Dashboard under the deployment’s build logs.
- Files outside the directory set by
agentmarkPathinagentmark.json. Only files AgentMark Cloud imports are validated. $refs and imports that point at files outside the push. The check can’t validate those standalone, so it skips them rather than failing, which means a typo’d schema path passes the check and surfaces later at load time.
Conclusion states
The check reports one of three conclusions per push:| Conclusion | GitHub appearance | GitLab appearance |
|---|---|---|
| success | green check | success status, “All prompt and component files compiled.” |
| failure | red ✕, with per-file annotations on the PR’s Files Changed tab | failed status, description shows count by category (e.g. 3 prompt compile errors (1 frontmatter, 2 template syntax)) |
| neutral | gray, “No prompts to compile” | success status, “No AgentMark files in this push.” GitLab has no native neutral state, so we collapse to success |
GitHub
Making the check required
GitHub’s required status check setting is what blocks merge. To enforce the check:- In your GitHub repo, go to Settings → Branches → Branch protection rules.
-
Add a rule for the branch you deploy from (usually
main). - Enable Require status checks to pass before merging.
-
In the search box, type
AgentMarkand select AgentMark / Build. - Save.
What a failure looks like
When a prompt fails to compile, the PR’s Files changed tab gets an inline annotation on the offending file. The annotation title categorizes the failure so you can spot the class of problem from the sidebar without opening each file:- Frontmatter error. Fix the
---block at the top of the prompt. - Template syntax error. MDX/JSX in the body didn’t parse.
- Schema reference error. A malformed
$reffailed at parse time. - Prompt compile error. Generic fallback.
GitLab
What the check looks like
GitLab’s commit status API is intentionally thinner than GitHub’s Checks API: it carries{state, name, description, target_url} and nothing else. So the GitLab experience differs in two ways:
- No line-level annotations on the MR diff. Failure details ride on the status description as a categorized count:
4 prompt compile errors (1 frontmatter, 2 template syntax, 1 schema reference). - The
target_urlpoints to the AgentMark Dashboard. Click through for the per-file failure list with full error messages.
Making the check required
On GitLab, the Cloud-managed status is informational on every tier. AgentMark posts plain commit statuses, and GitLab’s merge-blocking mechanisms don’t consume them:- Pipelines must succeed (Settings → Merge requests → Merge checks) only watches real GitLab CI pipeline jobs, not externally posted statuses.
- External Status Checks (Ultimate tier, Settings → Merge requests → Status checks) require the external service to respond through GitLab’s status-checks API. A commit status cannot satisfy an external status check, and AgentMark does not register as one.
agentmark build failing as a pipeline job is a real pipeline failure, which Pipelines must succeed blocks on, on every GitLab tier.
Hardcoded merge blocking via CI
The Cloud-managed status checks above take zero config beyond installing the App or wiring a webhook, but they depend on AgentMark Cloud being reachable, and on GitLab they can’t block merge at all. For a fully self-hosted alternative that blocks merge on any provider regardless of tier, runagentmark build as a CI job in your own repository. The CLI compiles every prompt with the same compiler the runtime uses and exits non-zero on failure, which fails the pipeline and triggers the provider’s built-in “pipelines must succeed” merge guard.
This pattern has three advantages over (or alongside) the Cloud-managed check:
- The only merge-blocking path on GitLab. “Pipelines must succeed” blocks on pipeline failures, not externally posted statuses, and
agentmark buildfailing IS a pipeline failure. Works on every GitLab tier, including Free. - Doesn’t depend on AgentMark Cloud uptime. The validation runs entirely inside your CI. If our webhook handler is degraded, your merge guard still works.
- Faster feedback for big repos. No webhook round-trip; the CI job runs in seconds against the pushed commit directly.
GitLab CI
.gitlab-ci.yml
agentmark-build job is green.
GitHub Actions
.github/workflows/agentmark-build.yml
name: on the job matters: GitHub’s required-status picker lists Actions checks by job display name, not the workflow name, so without it the check appears as build. Then in Settings → Branches → Branch protection rules, add a rule requiring the AgentMark / Build check name. Same picker, same UX as the App-based check: your CI job’s status takes the place of (or runs alongside) the App’s.
Re-running the check
There’s no “Re-run” button on either platform. The check is keyed to the commit SHA, so pushing a new commit (even an empty one) is the way to retry:Limitations
- PRs from forks don’t get checks (GitHub). The check is posted from the
pushwebhook, which forks don’t send to the upstream App. PRs from branches in the same repo do get checks. GitLab MRs from forked projects have the analogous limitation. - No retries on transient outages. If the status API itself errors when we post the result, we log it and move on; the deploy still runs. The check will sit at in progress (GitHub) / running (GitLab) until the provider’s timeout. You can re-push to recover.
- One check per push, not per file. The aggregate conclusion comes from every prompt file in the change set.
- No line-level annotations on GitLab. GitLab users get a categorized count in the status description; the full per-file list lives in the AgentMark Dashboard.
Have questions?
Reach out any time:
- Email us at hello@agentmark.co for support
- Schedule an Enterprise Demo to learn about our business solutions