This prompt is designed for DevRel engineers, documentation maintainers, and technical writers who need to systematically audit a collection of code samples for staleness. The core job-to-be-done is identifying code snippets that no longer compile, execute, or follow current best practices due to deprecated APIs, breaking language changes, or outdated library versions. The ideal user is someone responsible for maintaining a high-quality developer documentation surface where broken examples directly erode trust and increase support load. Required context includes the code sample itself, the target language and version, and ideally the specific framework or library versions the sample claims to support.
Prompt
Stale Code Sample Identification Prompt

When to Use This Prompt
Define the job, reader, and constraints for the Stale Code Sample Identification Prompt.
Use this prompt when you have a batch of code samples from documentation, READMEs, or tutorials and you need a structured, sample-by-sample audit report. It is most effective when paired with a downstream compilation or linting harness that can verify the model's claims. Do not use this prompt for real-time code execution, for generating new code examples from scratch, or for reviewing application logic correctness beyond API compatibility. It is not a substitute for a full CI/CD pipeline but rather a pre-filtering step that surfaces likely failures before you invest in automated build verification. The prompt assumes you can provide explicit version context; without it, the model will guess and may produce unreliable results.
Before running this prompt, ensure you have a clear inventory of the code samples to audit, including their source locations and any documented version requirements. After receiving the audit report, you should route flagged samples to a language-specific build harness for confirmation. Do not automatically delete or rewrite samples based solely on the model's output—treat the audit as a prioritized investigation queue. The next step is to integrate this prompt into a scheduled documentation health check, running it against your entire sample corpus on a regular cadence aligned with your dependency release cycles.
Use Case Fit
Where the Stale Code Sample Identification Prompt delivers reliable audits and where it needs additional safeguards or alternative approaches.
Good Fit: Versioned Documentation Audits
Use when: you have documentation with code samples tied to specific library or API versions and need to flag samples that reference deprecated methods or incompatible syntax. Guardrail: provide explicit version-to-deprecation mappings in [CONTEXT] so the model can match samples against known end-of-life timelines.
Good Fit: Pre-Release Documentation QA
Use when: preparing documentation for a new SDK or API release and need to verify all code examples compile against the release candidate. Guardrail: pair this prompt with a CI-integrated compilation harness that validates the model's findings before publication.
Bad Fit: Untestable Pseudocode Samples
Avoid when: documentation contains illustrative pseudocode that was never intended to compile or run. The model may flag intentional abstractions as errors. Guardrail: pre-tag pseudocode blocks with metadata markers so the prompt can skip them during audit.
Bad Fit: Multi-Language Repositories Without Language Hints
Avoid when: code samples lack language identifiers or are embedded in prose without clear boundaries. The model may misclassify syntax or apply wrong-language linting rules. Guardrail: require fenced code blocks with explicit language tags as a prerequisite input format.
Required Inputs: Version Compatibility Matrix
Risk: without a clear map of which versions are current, deprecated, or sunset, the model cannot accurately classify staleness. Guardrail: supply a structured compatibility matrix in [CONTEXT] with package names, version ranges, deprecation dates, and replacement APIs.
Operational Risk: False Positives on Backward-Compatible Code
Risk: the model may flag code that uses older but still-supported patterns as stale, creating unnecessary churn for documentation teams. Guardrail: implement a human review step for any flag that lacks a corresponding compiler error or official deprecation notice, and track false positive rates over time.
Copy-Ready Prompt Template
A reusable prompt template for auditing documentation code samples against live compilation, linting, and API deprecation checks.
The prompt below is designed to be copied directly into your AI harness. It accepts a list of code samples extracted from your documentation, along with the target language runtime context, and returns a structured audit of each sample's health. Use square-bracket placeholders to inject your specific inputs before sending the request to the model. The template is language-agnostic but expects you to provide the compilation or linting output as part of the context so the model can reason about errors rather than guess at syntax.
textYou are a documentation QA engineer auditing code samples for staleness. ## INPUT [CODE_SAMPLES] ## CONTEXT - Target language and version: [LANGUAGE_RUNTIME] - Compilation or linting output per sample: [VALIDATION_OUTPUT] - API deprecation schedule: [DEPRECATION_SCHEDULE] - Known breaking changes in recent releases: [BREAKING_CHANGES] ## OUTPUT_SCHEMA Return a JSON array of objects with the following fields for each sample: - sample_id: string (from input) - status: "current" | "deprecated_api" | "syntax_error" | "version_mismatch" | "removed" - error_details: string | null (compiler/linter error message or deprecation notice) - deprecated_apis_used: string[] (list of deprecated functions, methods, or classes) - suggested_replacement: string | null (corrected code snippet or migration guidance) - minimum_runtime_version: string | null (earliest version where sample compiles) - breaking_change_impact: "none" | "minor" | "major" - human_review_required: boolean ## CONSTRAINTS - Do not invent compiler errors. Only reference errors present in [VALIDATION_OUTPUT]. - If a sample compiles but uses deprecated APIs, set status to "deprecated_api" and include the deprecation notice from [DEPRECATION_SCHEDULE]. - If no validation output is available for a sample, set status to "version_mismatch" and flag human_review_required as true. - For syntax errors, include the exact error message and line number if available. - Suggested replacements must be compilable in the target [LANGUAGE_RUNTIME]. - If a breaking change in [BREAKING_CHANGES] affects the sample, note it even if the sample currently compiles. ## RISK_LEVEL High. Incorrect code samples in documentation cause developer trust erosion and support burden. Flag any sample you are uncertain about for human review.
To adapt this template, replace each square-bracket placeholder with real data from your documentation pipeline. [CODE_SAMPLES] should be a JSON array of objects with at minimum a sample_id and code field. [VALIDATION_OUTPUT] is the raw output from your CI step that compiles or lints each sample against the target runtime. If you don't have automated validation wired up yet, the prompt will still flag samples for human review, but the accuracy of error_details and suggested_replacement will degrade. Wire the validation harness first, then use this prompt to turn raw compiler output into a prioritized audit report. For high-risk SDKs or security-sensitive APIs, always require human review on samples flagged with breaking_change_impact: "major" before publishing updates.
Prompt Variables
Required and optional inputs for the Stale Code Sample Identification Prompt. Each placeholder must be populated before the prompt is assembled and sent to the model. Validation notes describe how to programmatically verify the input before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[CODE_SAMPLE_LIST] | Array of code blocks to audit, each with a unique identifier and language tag | [{"id":"auth-example-1","language":"python","code":"import requests\n..."}] | Must be a valid JSON array. Each object requires id, language, and code fields. Reject if empty or missing required fields. |
[TARGET_LANGUAGE_VERSION] | The language or framework version against which to check compatibility | python 3.12 | Must match a known language version string. Validate against a controlled vocabulary of supported targets. Reject if null or unrecognized. |
[DEPENDENCY_MANIFEST] | Package or dependency specification showing allowed library versions | {"requests":">=2.28,<3.0","urllib3":"^2.0"} | Must be valid JSON with package names as keys and version constraints as values. Parse with a semver-compatible library. Allow null if no dependency check is needed. |
[API_REFERENCE_DOCS] | Current API reference documentation for the libraries or services used in the code samples | {"requests.get":{"deprecated":false,"since":"0.1.0"}} | Must be valid JSON mapping function signatures to metadata. Validate schema: each key requires deprecated (boolean) and since (string) fields. Allow null if unavailable. |
[KNOWN_BREAKING_CHANGES] | List of known breaking changes or migration notes for the target version | ["urllib3 v2 removed DEFAULT_CIPHERS","requests async support dropped in 3.0"] | Must be an array of strings. Each entry should describe a specific breaking change. Allow empty array. Reject if not an array. |
[OUTPUT_SCHEMA] | Expected JSON schema for the audit output | {"type":"object","properties":{"sample_id":{"type":"string"},"status":{"enum":["current","stale","broken"]}}} | Must be a valid JSON Schema object. Validate with a JSON Schema validator. Reject if schema is invalid or missing required output fields. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score for the model to report a finding without flagging for human review | 0.85 | Must be a float between 0.0 and 1.0. Default to 0.8 if not provided. Reject values outside range. |
[LINTING_OUTPUT] | Pre-computed linter or compiler output for each code sample, if available | {"auth-example-1":{"errors":["line 12: undefined name 'urllib3'"]}} | Must be valid JSON mapping sample IDs to error arrays. Allow null if no linting pass was run. Validate that keys match [CODE_SAMPLE_LIST] IDs. |
Implementation Harness Notes
How to wire the stale code sample identification prompt into a CI/CD pipeline or documentation review workflow with validation, retries, and human escalation.
This prompt is designed to be embedded in a documentation pipeline, not used as a one-off chat interaction. The core workflow involves extracting code blocks from documentation sources, submitting each block alongside its declared language and target version context, and then processing the structured audit output. The prompt expects a specific input shape—a code block, a language identifier, and a version constraint—so the harness must parse documentation files (Markdown, MDX, reStructuredText) and isolate fenced code blocks before calling the model. A pre-processing step should strip irrelevant markup and attach metadata such as the source file path, the section heading, and the last-modified date of the document. This metadata is critical for downstream reporting and for routing fixes to the right owners.
The implementation harness should wrap the model call in a validation and retry layer. The prompt's output schema is a JSON object with a status field (current, stale, error, unknown) and an array of issues. After receiving the model response, validate the JSON structure against a strict schema. If the model returns status: "error" but the issues array is empty, or if the replacement_suggestion field is missing when status is stale, flag the response for retry. Use a retry budget of 2–3 attempts with a backoff, and on each retry, include the validation error message in the prompt context so the model can self-correct. For high-stakes documentation (e.g., security libraries, payment SDKs), route all stale and error findings to a human review queue before publication. The harness should log every model call, the raw output, the validation result, and the final disposition to an observability platform for audit and prompt drift analysis.
The most critical integration point is the language-specific compilation or linting validation step. The prompt alone cannot guarantee that a code sample compiles; it can only flag likely issues based on its training data. After the model identifies a sample as potentially stale, the harness must execute a real linter or compiler for the declared language and version. For example, for a Python sample targeting version 3.9+, run python3.9 -m py_compile on the extracted block. For JavaScript, use ESLint with the appropriate preset. The harness should compare the model's findings with the actual compiler output and reconcile discrepancies. If the model flags an issue that the compiler does not reproduce, mark it as a false positive and feed that back into your evaluation dataset. If the compiler catches an issue the model missed, log it as a false negative and consider adding it as a few-shot example in the next prompt iteration. This human-in-the-loop compiler integration is what elevates the prompt from a heuristic guess to a reliable documentation gate.
Expected Output Contract
Defines the exact fields, types, and validation rules for the structured audit report produced by the Stale Code Sample Identification Prompt. Use this contract to build a downstream parser or validation harness.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
audit_report.samples | Array of objects | Must contain at least one element. If no samples are found, return an empty array, not null. | |
audit_report.samples[].sample_id | String | Must match the [SAMPLE_ID] from the input manifest or a generated UUID if none provided. Must be unique within the array. | |
audit_report.samples[].status | Enum: 'pass', 'fail', 'warn' | Must be 'fail' if compilation or linting errors exist. Must be 'warn' if deprecation warnings exist but compilation succeeds. Must be 'pass' otherwise. | |
audit_report.samples[].target_version | String (semver or date) | Must match the [TARGET_VERSION] input parameter exactly. Used to validate deprecation claims against a specific release. | |
audit_report.samples[].errors | Array of objects | Must be an empty array if status is 'pass'. Each object must contain 'line', 'column', 'message', and 'error_code' fields. | |
audit_report.samples[].deprecation_warnings | Array of objects | Must be an empty array if no deprecated APIs are used. Each object must contain 'api_name', 'deprecated_in', 'scheduled_removal', and 'replacement_suggestion' fields. | |
audit_report.samples[].replacement_suggestion | String or null | If status is 'fail' or 'warn', must provide a concrete code suggestion or a link to migration docs. If status is 'pass', must be null. | |
audit_report.metadata.validator_version | String | Must match the version of the linting or compilation harness used. Fails validation if this string is missing or does not match the expected harness version. |
Common Failure Modes
What breaks first when identifying stale code samples and how to guard against it.
False Negatives from Outdated Knowledge Cutoff
What to watch: The model confidently declares a code sample current because its training data predates the deprecation. It cannot see the latest library release or API changelog. Guardrail: Always pair the prompt with a live compilation or linting harness. The model flags candidates; the harness confirms them.
Version Ambiguity in Replacement Suggestions
What to watch: The model suggests a replacement API that itself is deprecated in a newer minor version, or it recommends a syntax that doesn't exist in the project's pinned dependency. Guardrail: Require the prompt to output a minimum_version and last_verified_version field for every replacement. Validate against the project's lockfile.
Context Window Truncation on Large Files
What to watch: When auditing a long markdown file with dozens of code blocks, the model loses track of earlier samples and either skips them or hallucinates findings. Guardrail: Chunk the document by heading before processing. Run the prompt on each chunk independently and deduplicate the results by line number.
Misidentifying Pseudo-Code as Stale Production Code
What to watch: The model flags illustrative pseudo-code or simplified examples as broken because they don't compile with strict checks. Guardrail: Add a code_block_type classification step before the audit. If the block is tagged as pseudo-code or illustrative, skip compilation checks and only flag factual inaccuracies.
Ignoring Transitive Dependency Breakage
What to watch: A code sample uses a direct dependency that is current, but one of its upstream calls relies on a deprecated transitive dependency. The sample compiles but fails at runtime. Guardrail: Extend the validation harness to run the sample in a sandboxed environment. Flag any runtime deprecation warnings, not just compilation errors.
Inconsistent Severity Classification
What to watch: The model labels a minor syntax change as critical and a breaking API removal as warning, leading to triage chaos. Guardrail: Provide a strict severity rubric in the prompt: critical (breaks compilation), high (runtime error), medium (deprecated in next major), low (stylistic change). Validate the output enum.
Evaluation Rubric
Criteria for evaluating the quality and correctness of the stale code sample identification output before integrating it into a documentation pipeline or review workflow.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Compilability Flag Accuracy | Every sample flagged as non-compilable fails with a real compiler error matching the reported message | Flagged sample compiles successfully or error message does not match actual compiler output | Run each flagged sample through the language-appropriate compiler; compare exit code and error substring |
Deprecated API Detection Recall | At least 95% of known deprecated API usages in the test corpus are identified | Deprecated API call present in sample but not mentioned in the audit output | Seed a test document with samples using APIs from a known deprecation list; measure recall |
Version Compatibility Note Precision | Every version note specifies a correct minimum, maximum, or breaking-change version boundary | Version note claims compatibility with a version where the API does not exist or was already removed | Cross-reference each version note against the official language or library changelog for the referenced API |
Replacement Suggestion Validity | Every replacement suggestion compiles and produces equivalent behavior under the target version | Suggested replacement uses another deprecated API, introduces a type error, or changes runtime behavior | Apply each replacement suggestion to the original sample and run the project's existing test suite |
False Positive Rate on Current Samples | Fewer than 5% of samples using only current, non-deprecated APIs are flagged as stale | Audit flags a sample that uses only APIs from the latest stable release with no deprecation warnings | Run the prompt against a golden set of samples verified to use only current APIs; count false flags |
Syntax Error Localization Accuracy | Reported line number and column for syntax errors are within a 2-line tolerance of the actual error location | Error location points to a different function, block, or file than where the parser reports the error | Parse each flagged sample with the language's AST parser; compare reported location to actual error node position |
Output Schema Compliance | Every audit entry contains all required fields: sample_id, status, errors, version_notes, replacement, confidence | Output is missing required fields, uses wrong types, or nests objects incorrectly per the contract | Validate the full JSON output against the defined output schema using a JSON Schema validator |
Confidence Score Calibration | High-confidence flags (>=0.9) are correct at least 90% of the time; low-confidence flags (<0.5) are correct at most 50% of the time | High-confidence flags are frequently wrong, or low-confidence flags are nearly always correct | Bucket flags by confidence decile; compute precision per bucket across a labeled test set of 100+ samples |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Add a strict JSON output schema with fields for status, deprecated_calls, syntax_errors, version_compatibility, and replacement_suggestions. Wrap the prompt in a harness that runs compilation or linting as a validation step before returning results.
Prompt snippet
codeAnalyze the following [LANGUAGE] code sample against [TARGET_VERSION]. Return JSON matching [OUTPUT_SCHEMA]. For each deprecated API, include the deprecation version, removal version, and a working replacement. Flag syntax errors with line numbers. [CODE_SAMPLE]
Watch for
- Schema drift when model adds or renames fields
- Linting tool version mismatches with model knowledge cutoff
- Silent failures when code sample is incomplete or truncated

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us