{
  "fixtureVersion": "2026-07-25.1",
  "status": "ready_for_downstream_run",
  "articleSlug": "ai-prompt-examples-before-after",
  "decisionQuestion": "Which prompt changes improve an observable task result when the input, target model, and pass conditions stay fixed?",
  "runContract": {
    "revisionMethod": "Acceptance-criteria-driven revision produced deterministically by scripts/lib/promptOutcomeLab.mjs.",
    "publicInputFixture": "prompt-lab-examples-inputs.json",
    "executionModel": null,
    "executionModelVersion": null,
    "temperature": null,
    "outputLimit": null,
    "runsPerPrompt": null,
    "freezeBeforeRun": [
      "fixedInput",
      "roughPrompt",
      "publicInput",
      "revisedPromptBuilder",
      "acceptanceCriteria",
      "reviewMethod"
    ],
    "selectionRule": "Publish every frozen case, including ties, regressions, provider failures, and ambiguous results."
  },
  "cases": [
    {
      "id": "marketing_launch_announcement",
      "family": "marketing",
      "task": "Write a bounded launch announcement from supplied product facts.",
      "roughPrompt": "Write a launch announcement for our API cost dashboard. Make it compelling and concise.",
      "fixedInput": {
        "audience": "Engineering leaders evaluating infrastructure spend.",
        "approvedFacts": [
          "Breaks API spend down by model and environment.",
          "Supports CSV export.",
          "Supports saved filters.",
          "Launch date is July 30."
        ],
        "prohibitedClaims": [
          "Customer adoption",
          "Savings percentages",
          "Performance improvements"
        ]
      },
      "failureHypothesis": "The rough prompt leaves audience, evidence boundaries, length, format, and call to action unspecified.",
      "acceptanceCriteria": [
        "Uses all four approved facts.",
        "Contains no prohibited claim.",
        "Stays at or below 180 words.",
        "Contains one headline, two body paragraphs, and one call to action."
      ],
      "reviewMethod": "deterministic_checks_plus_human_tone_review",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "coding_scoped_bug_fix",
      "family": "coding",
      "task": "Fix a date-formatting bug without changing unrelated files.",
      "roughPrompt": "Fix the date bug in this app.",
      "fixedInput": {
        "repositoryFixture": "prompt-lab-date-fixture-v1",
        "failingBehavior": "A YYYY-MM-DD value renders as the previous day in negative UTC offsets.",
        "allowedFiles": [
          "src/formatDate.js",
          "tests/formatDate.test.js"
        ],
        "verification": [
          "npm test",
          "npm run lint"
        ]
      },
      "failureHypothesis": "The rough prompt does not identify the failing behavior, scope boundary, or verification commands.",
      "acceptanceCriteria": [
        "The supplied regression test passes.",
        "No file outside the allowlist changes.",
        "The formatter keeps date-only values calendar-stable.",
        "Lint passes."
      ],
      "reviewMethod": "repository_diff_and_commands",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "coding_json_export",
      "family": "coding",
      "task": "Add a JSON export without breaking the existing CSV export.",
      "roughPrompt": "Add JSON export to the report.",
      "fixedInput": {
        "repositoryFixture": "prompt-lab-export-fixture-v1",
        "existingContract": "CSV export remains the default and preserves its current filename.",
        "newContract": "JSON export uses the visible filtered rows and ISO date strings.",
        "verification": [
          "npm test",
          "npm run lint",
          "npm run build"
        ]
      },
      "failureHypothesis": "The rough prompt does not protect the existing export or define the new data and date contracts.",
      "acceptanceCriteria": [
        "CSV behavior remains unchanged.",
        "JSON contains only visible filtered rows.",
        "Dates use ISO 8601 strings.",
        "Tests, lint, and build pass."
      ],
      "reviewMethod": "repository_diff_and_commands",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "extraction_invoice_json",
      "family": "extraction",
      "task": "Extract invoice fields into strict JSON.",
      "roughPrompt": "Extract the important invoice details as JSON.",
      "fixedInput": {
        "invoiceFixture": "synthetic-invoice-001.txt",
        "requiredKeys": [
          "invoice_number",
          "invoice_date",
          "currency",
          "subtotal",
          "tax",
          "total"
        ],
        "unknownRule": "Use null when the source does not contain a value.",
        "additionalProperties": false
      },
      "failureHypothesis": "The rough prompt does not define important, the schema, numeric formatting, or missing-value behavior.",
      "acceptanceCriteria": [
        "Output parses as JSON.",
        "Every required key exists.",
        "No additional key exists.",
        "Values match the fixture.",
        "Missing values are null rather than invented."
      ],
      "reviewMethod": "json_schema_and_fixture_match",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "extraction_support_routing",
      "family": "extraction",
      "task": "Classify a support ticket into an allowed queue.",
      "roughPrompt": "Read this support request and tell me who should handle it.",
      "fixedInput": {
        "ticketFixture": "synthetic-ticket-014.txt",
        "allowedLabels": [
          "billing",
          "bug",
          "feature_request",
          "account_access",
          "unknown"
        ],
        "outputContract": {
          "label": "one allowed label",
          "evidence": "one source sentence",
          "confidence": "low, medium, or high"
        }
      },
      "failureHypothesis": "The rough prompt leaves the label set, evidence requirement, and uncertainty behavior open.",
      "acceptanceCriteria": [
        "Label belongs to the allowlist.",
        "Evidence is copied from the ticket.",
        "Confidence belongs to the allowlist.",
        "No unsupported customer fact appears."
      ],
      "reviewMethod": "allowlist_and_source_grounding",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "data_weekly_conversion",
      "family": "data_analysis",
      "task": "Compare weekly conversion rates without confusing count and rate changes.",
      "roughPrompt": "Analyze this conversion data and explain what happened.",
      "fixedInput": {
        "datasetFixture": "weekly-conversion-001.csv",
        "columns": [
          "week",
          "sessions",
          "conversions"
        ],
        "requiredCalculation": "conversions / sessions",
        "materialLimit": "The fixture contains no channel or campaign dimension."
      },
      "failureHypothesis": "The rough prompt does not define conversion rate, comparison window, required calculations, or unavailable drivers.",
      "acceptanceCriteria": [
        "Calculates each weekly rate correctly.",
        "Separates conversion-count change from rate change.",
        "Names the largest week-over-week rate movement.",
        "Does not invent a channel or campaign explanation."
      ],
      "reviewMethod": "calculation_check_and_claim_audit",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "data_anomaly_summary",
      "family": "data_analysis",
      "task": "Summarize latency anomalies from a fixed service table.",
      "roughPrompt": "Find anything unusual in these latency numbers.",
      "fixedInput": {
        "datasetFixture": "service-latency-001.csv",
        "dimensions": [
          "service",
          "region",
          "day"
        ],
        "metrics": [
          "request_count",
          "p50_ms",
          "p95_ms"
        ],
        "minimumVolume": 1000
      },
      "failureHypothesis": "The rough prompt does not define unusual, choose a latency percentile, or guard against low-volume noise.",
      "acceptanceCriteria": [
        "Filters rows below the minimum volume.",
        "Reports p95 separately from p50.",
        "Names the service, region, and day for each anomaly.",
        "Does not claim root cause from the table."
      ],
      "reviewMethod": "calculation_check_and_claim_audit",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "research_provider_comparison",
      "family": "research",
      "task": "Compare two provider policies from supplied sources.",
      "roughPrompt": "Compare these AI provider privacy policies and recommend one.",
      "fixedInput": {
        "sourceFixture": [
          "provider-a-policy-2026-07-01.html",
          "provider-b-policy-2026-07-02.html"
        ],
        "comparisonCriteria": [
          "retention",
          "training use",
          "regional processing",
          "enterprise controls"
        ],
        "citationFormat": "Source ID and section heading"
      },
      "failureHypothesis": "The rough prompt does not define the decision, criteria, citation format, or boundary against outside knowledge.",
      "acceptanceCriteria": [
        "Every policy claim cites a supplied source section.",
        "All four criteria appear.",
        "Unknown values remain unknown.",
        "The recommendation names the workload assumption where it changes."
      ],
      "reviewMethod": "citation_and_source_entailment_review",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "research_evidence_table",
      "family": "research",
      "task": "Turn three supplied studies into an evidence table.",
      "roughPrompt": "Summarize these studies about AI coding productivity.",
      "fixedInput": {
        "sourceFixture": [
          "study-a.txt",
          "study-b.txt",
          "study-c.txt"
        ],
        "requiredColumns": [
          "population",
          "task",
          "comparison",
          "outcome",
          "sample_size",
          "limitation"
        ]
      },
      "failureHypothesis": "The rough prompt encourages prose synthesis before study populations and limitations are separated.",
      "acceptanceCriteria": [
        "Produces one row per study.",
        "Uses every required column.",
        "Keeps incompatible outcomes separate.",
        "Does not calculate a pooled effect."
      ],
      "reviewMethod": "table_contract_and_source_entailment_review",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "writing_executive_summary",
      "family": "writing",
      "task": "Write an executive summary from a supplied incident report.",
      "roughPrompt": "Make this incident report concise for executives.",
      "fixedInput": {
        "sourceFixture": "synthetic-incident-report-001.txt",
        "audience": "Engineering and finance executives",
        "requiredFacts": [
          "customer impact",
          "duration",
          "root cause status",
          "mitigation",
          "next decision"
        ],
        "wordLimit": 160
      },
      "failureHypothesis": "Concise does not protect the required facts or distinguish a confirmed root cause from an open investigation.",
      "acceptanceCriteria": [
        "Includes all required facts.",
        "Stays at or below 160 words.",
        "Preserves confirmed versus suspected status.",
        "Ends on the next decision."
      ],
      "reviewMethod": "fact_check_word_count_and_human_clarity_review",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "writing_localized_release_note",
      "family": "writing",
      "task": "Translate a release note while preserving placeholders and product names.",
      "roughPrompt": "Translate this release note into French and make it natural.",
      "fixedInput": {
        "sourceFixture": "release-note-placeholders-001.txt",
        "targetLocale": "fr-CA",
        "preserveExactly": [
          "{{workspace_name}}",
          "{{billing_url}}",
          "BenchLM Stats",
          "CSV"
        ],
        "tone": "Direct product documentation"
      },
      "failureHypothesis": "The rough prompt does not define locale, protected tokens, or the register for natural.",
      "acceptanceCriteria": [
        "Uses Canadian French.",
        "Preserves every protected token byte-for-byte.",
        "Does not translate product names.",
        "Keeps links and Markdown intact."
      ],
      "reviewMethod": "token_diff_and_bilingual_human_review",
      "revisedPrompt": null,
      "runs": []
    },
    {
      "id": "operations_meeting_actions",
      "family": "operations",
      "task": "Extract owners and due dates from meeting notes without inventing assignments.",
      "roughPrompt": "Turn these meeting notes into a useful action list.",
      "fixedInput": {
        "sourceFixture": "synthetic-meeting-notes-001.txt",
        "requiredFields": [
          "action",
          "owner",
          "due_date",
          "source_quote"
        ],
        "unknownRule": "Use unassigned or no date when the notes do not specify one."
      },
      "failureHypothesis": "Useful invites invented owners and deadlines unless the output contract preserves unknowns.",
      "acceptanceCriteria": [
        "Every action has a source quote.",
        "Owners and dates match the notes.",
        "Missing owners become unassigned.",
        "Missing dates become no date."
      ],
      "reviewMethod": "source_entailment_and_field_validation",
      "revisedPrompt": null,
      "runs": []
    }
  ]
}
