{
  "manifest_version": "0.1",
  "work_slug": "process-mining-helpdesk-service-level-resolution",
  "protocol": "protocol:secondary-analysis 0.1",
  "module": "agent/tools.py",
  "analysis_unit": "analysis.py",
  "published_results": "results.json",
  "source_dataset_doi": "10.4121/uuid:0c60edf1-6f83-4e75-9367-4c63b3e9d5bb",
  "environment": {
    "language": "python",
    "tested_version": "3.13",
    "requirements": "requirements-reproduction.txt",
    "network": "deny-except-pinned-inputs"
  },
  "execution": {
    "boundary": "docs/72-reproduction-contract.md",
    "live_invocation": "not connected; the sandboxed runner gates execution over MCP"
  },
  "tools": [
    {
      "name": "dataset_summary",
      "summary": "Size, span and exclusion counts of the event log and the case table.",
      "unit": "analysis.acquire_data and analysis.build_case_table",
      "parameters": [],
      "returns": "seed, data_md5, n_events, n_cases, time_span, the analysed tiers, the a priori exclusion, and both exclusion counts",
      "supports_claims": [1, 2],
      "deterministic": true
    },
    {
      "name": "tier_comparison",
      "summary": "Kruskal-Wallis across service tiers, with epsilon-squared effect size.",
      "unit": "analysis.kruskal_block (with analysis.epsilon_squared)",
      "parameters": [
        {
          "name": "outcome",
          "type": "string",
          "default": "resolve_h",
          "range": "resolve_h | throughput_h",
          "published_values": ["resolve_h", "throughput_h"]
        },
        {
          "name": "grouping",
          "type": "string",
          "default": "service_level",
          "range": "service_level (modal per case) | service_level_first (first observed)",
          "published_values": ["service_level", "service_level_first"]
        },
        {
          "name": "tiers",
          "type": "array of string | null",
          "default": null,
          "range": "any two or more of Value 1, Value 2, Value 3, Value 4; null uses the three analysed tiers",
          "published_values": [null],
          "notes": "Value 4 is excluded a priori by the published run and is reachable here. So is dropping Value 1, the 115-case tier whose median resolve time is more than twice the others'."
        },
        {
          "name": "drop_ambiguous",
          "type": "boolean",
          "default": false,
          "range": "true drops the 43 cases whose service level changes mid-case",
          "published_values": [false, true]
        }
      ],
      "returns": "H, df, p, epsilon_squared, n, k, per-tier counts and medians",
      "supports_claims": [1, 2],
      "deterministic": true
    },
    {
      "name": "pairwise_comparisons",
      "summary": "Mann-Whitney U for every tier pair, with rank-biserial and Holm correction.",
      "unit": "analysis.rank_biserial and analysis.holm_correction over the same frame",
      "parameters": [
        {"name": "outcome", "type": "string", "default": "resolve_h", "range": "resolve_h | throughput_h", "published_values": ["resolve_h"]},
        {"name": "grouping", "type": "string", "default": "service_level", "range": "service_level | service_level_first", "published_values": ["service_level"]},
        {"name": "tiers", "type": "array of string | null", "default": null, "range": "any two or more of the four tiers; null uses the three analysed", "published_values": [null]},
        {"name": "drop_ambiguous", "type": "boolean", "default": false, "range": "true drops the 43 mid-case tier changes", "published_values": [false]}
      ],
      "returns": "one block per pair: groups, U, p_raw, rank_biserial, both n, p_holm",
      "supports_claims": [2],
      "deterministic": true
    },
    {
      "name": "effect_size",
      "summary": "Epsilon-squared for a Kruskal-Wallis H, given the sample and group counts.",
      "unit": "analysis.epsilon_squared",
      "parameters": [
        {"name": "h", "type": "number", "default": null, "range": "any Kruskal-Wallis H statistic", "published_values": [7.048836129897784]},
        {"name": "n", "type": "number", "default": null, "range": "> k", "published_values": [4566]},
        {"name": "k", "type": "number", "default": null, "range": ">= 2", "published_values": [3]}
      ],
      "returns": "H, n, k and the epsilon_squared they imply",
      "supports_claims": [1],
      "deterministic": true
    },
    {
      "name": "holm",
      "summary": "Holm-Bonferroni correction over a family of p-values, in input order.",
      "unit": "analysis.holm_correction",
      "parameters": [
        {
          "name": "p_values",
          "type": "array of number | null",
          "default": null,
          "range": "any non-empty list of p-values in [0, 1]; null uses the three pairwise comparisons",
          "published_values": [null]
        }
      ],
      "returns": "the corrected p-values, in input order",
      "supports_claims": [2],
      "deterministic": true
    }
  ]
}
