{
 "format": "ac-bench/1",
 "entry": "ghostfolio",
 "kind": "scramble",
 "variant": "default",
 "repo": "~/ac-targets/ghostfolio",
 "sha": "347cd06a4012931259224bc16ebe85249aa60fd0",
 "packageRoot": "apps/api",
 "moduleRoot": "src/app",
 "files": 154,
 "featureFiles": 153,
 "groundTruthModules": 34,
 "hardFiles": 54,
 "leakyFiles": 16,
 "leakage": {
  "renamed": 0,
  "inFeatureFolder": 0,
  "underSubFolder": 16,
  "subFolders": [
   {
    "folder": "calculator",
    "files": 6,
    "features": 1
   },
   {
    "folder": "errors",
    "files": 2,
    "features": 2
   },
   {
    "folder": "ghostfolio",
    "files": 7,
    "features": 1
   },
   {
    "folder": "queue",
    "files": 3,
    "features": 1
   }
  ],
  "unseen": 28
 },
 "scramble": {
  "commit": "9e65a3a63971b29f57cb1913a725c241d96db314",
  "tree": "7d3ee23e75f109d2405de19ddf92210f10ae9694",
  "moved": 156,
  "declined": 3,
  "excluded": 219,
  "certificate": {
   "verdict": "pass",
   "scope": "static",
   "digest": "sha256:c2d4ef40f83d24cef992132537144ceb9e89a991bb6090296c73a0ba07bcfe0c",
   "failing": []
  }
 },
 "methods": [
  {
   "method": "B0 type folders",
   "kind": "baseline",
   "clusters": 10,
   "mojoFm": 18.06,
   "ari": 0.014,
   "c2cCvg": 0,
   "clusterCountRatio": 0.26,
   "mojoFmHard": 55.1,
   "turboMq": {
    "sum": 1.6368,
    "mean": 0.1637
   },
   "backEdges": 2
  },
  {
   "method": "name-token (full stem)",
   "kind": "baseline",
   "clusters": 82,
   "mojoFm": 61.81,
   "ari": 0.22,
   "c2cCvg": 0.706,
   "clusterCountRatio": 2.38,
   "mojoFmHard": 28.57,
   "turboMq": {
    "sum": 18.3331,
    "mean": 0.2236
   },
   "backEdges": 5
  },
  {
   "method": "name-token (anchored)",
   "kind": "baseline",
   "clusters": 56,
   "mojoFm": 77.78,
   "ari": 0.36,
   "c2cCvg": 0.794,
   "clusterCountRatio": 1.62,
   "mojoFmHard": 57.14,
   "turboMq": {
    "sum": 19.4237,
    "mean": 0.3469
   },
   "backEdges": 9
  },
  {
   "method": "export-token (anchored)",
   "kind": "baseline",
   "clusters": 55,
   "mojoFm": 76.39,
   "ari": 0.347,
   "c2cCvg": 0.765,
   "clusterCountRatio": 1.59,
   "mojoFmHard": 55.1,
   "turboMq": {
    "sum": 18.794,
    "mean": 0.3417
   },
   "backEdges": 8
  },
  {
   "method": "seeds draft (file names)",
   "kind": "baseline",
   "clusters": 44,
   "mojoFm": 84.72,
   "ari": 0.441,
   "c2cCvg": 0.794,
   "clusterCountRatio": 1.26,
   "mojoFmHard": 77.55,
   "turboMq": {
    "sum": 19.8774,
    "mean": 0.4518
   },
   "backEdges": 8
  },
  {
   "method": "seeds draft (export names)",
   "kind": "draft",
   "clusters": 44,
   "mojoFm": 82.64,
   "ari": 0.421,
   "c2cCvg": 0.765,
   "clusterCountRatio": 1.26,
   "mojoFmHard": 75.51,
   "turboMq": {
    "sum": 19.203,
    "mean": 0.4364
   },
   "backEdges": 7
  },
  {
   "method": "Louvain r=1 (mean of seeds 1-5)",
   "kind": "baseline",
   "clusters": 17.6,
   "mojoFm": 53.2,
   "ari": 0.334,
   "c2cCvg": 0.229,
   "clusterCountRatio": 0.49,
   "mojoFmHard": 84.89,
   "turboMq": {
    "sum": 13.8358,
    "mean": 0.7864
   },
   "backEdges": 6.6,
   "note": "mean of seeds 1-5"
  },
  {
   "method": "Louvain r=2 (mean of seeds 1-5)",
   "kind": "baseline",
   "clusters": 23,
   "mojoFm": 64.72,
   "ari": 0.492,
   "c2cCvg": 0.294,
   "clusterCountRatio": 0.65,
   "mojoFmHard": 88.17,
   "turboMq": {
    "sum": 16.2137,
    "mean": 0.7049
   },
   "backEdges": 12,
   "note": "mean of seeds 1-5"
  },
  {
   "method": "Louvain r=4 (mean of seeds 1-5)",
   "kind": "baseline",
   "clusters": 30.8,
   "mojoFm": 75.56,
   "ari": 0.501,
   "c2cCvg": 0.435,
   "clusterCountRatio": 0.87,
   "mojoFmHard": 85.3,
   "turboMq": {
    "sum": 19.7083,
    "mean": 0.6399
   },
   "backEdges": 7.2,
   "note": "mean of seeds 1-5"
  },
  {
   "method": "planner (Ultra)",
   "kind": "planner",
   "clusters": 42,
   "mojoFm": 86.81,
   "ari": 0.475,
   "c2cCvg": 0.794,
   "clusterCountRatio": 1.21,
   "mojoFmHard": 79.59,
   "turboMq": {
    "sum": 19.9328,
    "mean": 0.4746
   },
   "backEdges": 8,
   "note": "invalid plan: 1 validator error"
  }
 ],
 "bestBaseline": {
  "method": "seeds draft (file names)",
  "mojoFm": 84.72,
  "turboMq": 19.8774
 },
 "planner": {
  "cassette": "cassettes/s7-bench.jsonl",
  "recordedCostUsd": 0.087777,
  "spentUsd": 0.02737,
  "replayed": false,
  "calls": {
   "replayed": 1,
   "recorded": 1
  },
  "rules": 2,
  "groups": 42,
  "modules": 38,
  "change": {
   "draftGroups": 44,
   "samePartition": false,
   "filesMoved": 7,
   "groupsMerged": 3,
   "winner": {
    "label": "ultra#2",
    "groupEntries": 44,
    "moves": 4,
    "movesById": 4,
    "issues": {
     "banned-name": 3
    }
   },
   "critic": {
    "suggestions": 28,
    "kept": 12
   }
  },
  "planSha256": "9048c87d30c7c24a475c61c027295a463616e6c24923c27654def3f55d517564"
 },
 "louvainMojoFmByResolution": {
  "1": [
   54.86,
   52.78,
   52.78,
   52.78,
   52.78
  ],
  "2": [
   65.28,
   64.58,
   64.58,
   63.89,
   65.28
  ],
  "4": [
   73.61,
   76.39,
   76.39,
   75,
   76.39
  ]
 },
 "draft": {
  "method": "seeds draft (export names)",
  "source": "export names",
  "contested": {
   "fileNames": 5,
   "exportNames": 4
  }
 },
 "notes": [
  "6 feature files are pinned in the facts (no method can place them) and not scored.",
  "The validator rejects the planner's plan (banned-name: \"app\" is a junk drawer or a type word, not a feature); it is scored as it came back.",
  "The planner starts from the seeds draft (export names): plannerDraft takes the export names only when they leave fewer files contested than the file names, and here they leave 4 against 5 (no ground truth is read).",
  "The planner's plan moves 7 of 154 files out of their draft group and merges 3 draft groups into others (44 draft groups, 42 plan groups). The winning edit, ultra#2, had 44 group entries and 4 moves (4 name their file by its id, not its path); the validator found 3 problems with it (banned-name 3) and dropped or repaired each before applying it. Planner rules 2 read a file by the id the prompt showed for it. The critic made 28 suggestions and its gate kept 12.",
  "Leakage, over the 154 movable files every method sees: 16 give their feature away in their path (0 still in a feature folder; 0 leaky renames; 16 in a sub-folder that only files of their feature share). Sub-folders kept under the type folders: calculator (6 files, 1 feature), errors (2 files, 2 features), ghostfolio (7 files, 1 feature), queue (3 files, 1 feature); the planner's prompt shows them, and no deterministic method groups by them. 28 more leaky files are pinned or not read by the facts, so no method sees them: not counted."
 ]
}
