Detect, document, escalate, and track external dependency blockers that prevent a service from progressing through the ADLC pipeline. External blockers are resources that require human action (API keys, infrastructure provisioning, third-party accounts).
Applies to all services and all pipeline stages. Covers credential blockers, infrastructure blockers, deployment blockers, external API blockers, network blockers, and permission blockers.
~/dev/ops/external-deps.mdsource ~/.env.adlc~/dev/ops/outputs/external-blockers.logExternal blockers manifest as: | Signal | Category | Example |
|——–|———-|———| | Missing env var | Credentials |
.env.example has RESEND_API_KEY but
.env does not | | 401/403 from external API | Credentials |
curl to CinetPay returns 401 | | Connection refused/timeout
| Infrastructure | Cannot reach external host | | Missing Coolify config
| Deployment | ~/dev/ops/coolify/{service}.json has no
app_uuid | | Spec references non-existent resource |
Infrastructure | S3 bucket not provisioned | | Build fails on missing
arg | Credentials | Docker build needs GHCR_TOKEN | | Audit
finding requiring upgrade | Human decision | CVE requires manual review
|
grep "{service}" ~/dev/ops/external-deps.mdIf the dependency is already tracked with status
NOT_CONFIGURED or BLOCKED, check if it has
been resolved since last check.
Post immediately – do not retry indefinitely:
source ~/.env.adlc
curl -sf -X POST "https://slack.com/api/chat.postMessage" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d "$(python3 -c "
import json
msg = {
'channel': 'D0AGRAVEC1K',
'text': ':key: EXTERNAL BLOCKER -- {service}/{task}\nCategory: {category}\nMissing: {specific_resource}\nSpec reference: {spec_section}\nImpact: {what_cannot_proceed}\nAction needed: {exact_steps_for_human}'
}
print(json.dumps(msg))
")"CLI="$HOME/dev/ops/adlc-v2/scripts/cli"
bash $CLI/write-status.sh {service} dev BLOCKED_EXTERNAL "{missing_resource}"
bash $CLI/write-pipeline-state.sh {project} {service} BLOCKED_EXTERNAL "{missing_resource}"echo "$(date -Iseconds) | {service} | {category} | {missing_resource} | OPEN" >> ~/dev/ops/outputs/external-blockers.logAdd or update the entry in
~/dev/ops/external-deps.md:
| {service} | {dependency} | {type} | NOT_CONFIGURED | {env_vars} | {notes} |Do NOT wait for resolution. Continue working on other tasks/services.
When the human responds in Slack with the missing credentials/config: 1.
Update .env or config file with the provided values 2.
Clear the BLOCKED_EXTERNAL status 3. Resume the blocked task 4. Update
the registry entry to AVAILABLE
Before triggering DevOps deploy (lesson from 2026-03-23):
# Does it have a Dockerfile?
ls ~/dev/projects/{service}/Dockerfile 2>/dev/null
# Does it have an HTTP server/health endpoint?
grep -r "health\|listen\|serve" ~/dev/projects/{service}/src/ 2>/dev/null | head -5If no to both: it is a CLI tool. Escalate for deployment model decision (run on agents server, Coolify job, or GitHub Actions).
grep "{service}" ~/dev/ops/outputs/external-blockers.logcat ~/dev/ops/outputs/{service}-dev.status shows
BLOCKED_EXTERNALgrep "{service}" ~/.claude/agent-memory/pipeline/state.md
shows BLOCKED_EXTERNALgrep "{service}" ~/dev/ops/external-deps.mdExternal blockers do not have a rollback per se. If a blocker is
resolved: 1. Update the status:
bash $CLI/write-status.sh {service} dev RUNNING "blocker resolved"
2. Update the registry: change status from NOT_CONFIGURED
to AVAILABLE 3. Close the log entry: append
RESOLVED to the blockers log 4. Resume pipeline for the
service
~/dev/ops/external-deps.md~/dev/ops/outputs/external-blockers.logD0AGRAVEC1K~/dev/CLAUDE.md (External Dependency
Blockers section)$COOLIFY_API_URL| Service | Blocker | Status |
|---|---|---|
| docstore | S3/MinIO storage | NOT_CONFIGURED |
| notification-hub | Resend API key | NOT_CONFIGURED |
| billing-engine | Stripe + CinetPay keys | NOT_CONFIGURED (P3) |
| lejecos/analytics | GA4 Measurement ID | BLOCKED_EXTERNAL |
| lejecos/payments | CinetPay + Stripe keys | BLOCKED_EXTERNAL |
| lejecos/strapi-cms | 12 env vars missing | PR_MERGED_BLOCKED_DEPLOY |
| all | CVE-2026-2005 PostgreSQL pgcrypto | OPEN (upgrade to 17.9 needed) |