Thank you for helping build the open-source encyclopedia of real DevOps, Cloud, Kubernetes, Docker, Terraform and OpenStack errors. Every accurate page you add saves another engineer a bad night. This guide explains the quality bar, how to add and update errors, the validation/CI rules, and the PR process.
TL;DR
errlib new "Terraform State Lock" --tech terraform --severity high # fill in every section with real logs + read-only diagnostics errlib validate # must pass # commit, push, open a PR using the checklist below
This is a curated reference, not a link dump. Hold every contribution to senior DevOps / SRE level:
- Accuracy over quantity. One correct, complete page beats ten thin ones. We would rather merge slowly than merge wrong.
- No fabricated logs. Error messages must be verbatim strings you have actually seen, reproduced, or sourced from official docs/issues. Do not invent plausible-looking output. If you only have a paraphrase, say so or don't include it.
- Read-only diagnostics only. Everything in Diagnostic Commands must be safe to run on a live system:
describe,get,logs,status,journalctl,show,inspect,EXPLAIN, etc. Never put a destructive or state-changing command in that section β those belong in Resolution, clearly flagged as risky. - Explain the mechanism. The Root Cause Analysis must connect the log line to why the system produced it, not just restate the symptom.
- Write for the reader at 3 a.m. Precise, concrete, skimmable. Assume competence; don't pad.
No AI slop. Pages generated wholesale by an LLM without verification will be closed. Using AI to draft is fine β verifying every log line and command is mandatory.
errlib new "<Human Error Title>" --tech <technology> [--severity <level>] [--tags t1,t2] [--subdir <service>]Examples:
errlib new "Kubernetes Evicted Pod" --tech kubernetes --severity high
errlib new "Nova No Valid Host" --tech openstack --subdir nova --severity high--techpicks theerrors/<technology>/folder and is required.--subdirnests the file one level deeper β use it for OpenStack services (nova,cinder,neutron,glance,keystone,heat,horizon,swift,placement,ironic).--severityis one ofinfo | low | medium | high | critical(defaults tomedium).--tagsis a comma-separated list.
The title becomes a kebab-case slug, and the slug must equal the filename (without .md). errlib new handles this for you β don't rename the file afterwards without updating the slug: field to match.
Open the generated file and complete all 14 sections β none may be empty. Use ERROR_TEMPLATE.md as the canonical reference and errors/kubernetes/kubernetes-crashloopbackoff.md as a worked example.
Section-by-section expectations:
| Section | What good looks like |
|---|---|
| Error Message | Verbatim string(s) in a fenced block. Include 1β2 realistic variants people paste into search. |
| Description | 1β2 paragraphs: what it means, which component emits it, when. |
| Technologies | The technology + the component/subsystem. |
| Severity | The level and the operational impact (degraded / partial / full outage / data-loss risk). |
| Common Causes | Ordered by real-world frequency, stated concretely. |
| Root Cause Analysis | The mechanism β how each cause produces this exact error. |
| Diagnostic Commands | Real, read-only commands with a comment on what each reveals. |
| Expected Results | What the output looks like when broken vs. healthy. |
| Resolution | Numbered, actionable steps. Flag any risky/destructive step. |
| Validation | The command + output that proves the error is resolved. |
| Prevention | Concrete guardrails / CI checks to stop recurrence. |
| Related Errors | Relative links to neighbouring pages. |
| References | Official docs first; deeper guides may link to https://devopsaitoolkit.com/blog. |
| Tags | The same tags as the front matter, as `code` separated by Β·. |
---
title: "Kubernetes CrashLoopBackOff" # human title, quoted
slug: kubernetes-crashloopbackoff # MUST match the filename (kebab-case)
technologies: [kubernetes] # one or more
severity: high # info | low | medium | high | critical
tags: [kubernetes, pod, scheduling, crashloopbackoff, production]
related: [kubernetes-imagepullbackoff, kubernetes-oomkilled] # slugs of related pages
last_reviewed: 2026-06-27 # YYYY-MM-DD, the date you verified it
---slugmust equal the filename. This is checked in CI.severitymust be one of the five allowed values.relatedlists slugs (not paths); the body's Related Errors section links to them with relative paths.tagsshould include the technology, the area, the symptom, andproductionwhere relevant β they powererrlib search --tag.last_reviewedis the date a human verified the content.
errlib validate # front matter + sections + slugs; exits non-zero on any issue
errlib index # rebuild the JSON index (optional locally; CI does it)
errlib search "<a phrase from your page>" # sanity-check it's findableerrlib validate must print OK β N error document(s) valid. before you open a PR.
- Found something inaccurate or outdated? Fix it and bump
last_reviewedto today's date. - Re-running the diagnostic commands on a current version of the technology and confirming the output still matches counts as a real, valuable contribution β bump
last_reviewed. - If a tool's output format changed across versions, note the affected versions in Description or Expected Results rather than overwriting; keep the page useful for people on older releases.
- Keep edits scoped: one logical change per PR makes review fast.
Every pull request runs CI, which:
- Runs
errlib validateβ fails on missing/empty sections, malformed or missing front-matter keys, an invalidseverity, or aslugthat doesn't match the filename. - Rebuilds the JSON search index (
errlib index) to confirm the corpus compiles. - Regenerates the category indexes (
scripts/gen_indexes.py) β these are navigation aids and are excluded from validation and the search index, so you don't have to hand-edit them. - Runs the test suite (
pytest).
If errlib validate fails locally, it will fail in CI β fix it before pushing.
- Fork the repo and create a branch:
git checkout -b add/<tech>-<slug>. - Add or edit error pages; run
errlib validateuntil it passes. - Commit with a clear message, e.g.
Add: Terraform State Lock error. - Open a PR against
mainand fill in the checklist below. - A maintainer reviews for accuracy and the quality bar; address feedback; we merge.
- Created the page with
errlib new(correct--tech/--subdir). - All 14 sections filled in β none empty.
- Error Message is verbatim; no fabricated logs.
- Diagnostic Commands are read-only and safe to run live.
- Front matter complete: valid
severity,slug== filename, usefultags,relatedslugs,last_reviewedset. -
errlib validatepasses locally (OK β N error document(s) valid.). - Related links and references resolve.
- One logical change per PR.
Adding 20+ errors for a technology? Help us avoid duplicate work:
- Open a tracking issue titled e.g.
Batch: 30 PostgreSQL errorslisting the titles/slugs you plan to add. - A maintainer will confirm there's no overlap and effectively "assign" the batch to you.
- Submit in reviewable chunks (roughly 5β10 errors per PR) rather than one giant PR β it's faster to review and less likely to bit-rot.
- Check the per-technology targets in
ROADMAP.mdso your batch moves a real goal forward.
- One error per file. Never combine multiple distinct errors in a page.
- Folder = technology.
errors/<technology>/. OpenStack is split by service subfolder. - Filename = slug, kebab-case, prefixed with the technology where natural (
kubernetes-crashloopbackoff.md,nova-no-valid-host.md). - Severity scale:
info(informational) βlowβmediumβhighβcritical(data loss / full outage). Choose by operational impact, not by how scary the message looks. - Voice: senior engineer, concrete, no filler. Prefer imperative steps in Resolution.
- Code blocks: use
text for logs/output,bash for commands, ```yaml for manifests. - Links: relative paths between error pages; absolute URLs for external references.
By contributing, you agree that:
- Error content (anything under
errors/) is licensed CC BY 4.0. - Code (
errlib/,scripts/) is licensed MIT.
Only submit content you have the right to share. Thanks for making DevOps troubleshooting better for everyone. π