## ----leakage-setup------------------------------------------------------------
source(system.file("research", "october_2026_participant_leakage.R",
                   package = "gp3ml"), local = TRUE)
audit <- gp3ml_october_leakage_audit(repeats = 24L, seed = 20261022L)
stopifnot(nrow(audit) == 48L,
          all(audit$shared_participants[audit$split == "participant"] == 0L))
aggregate(cbind(heldout_accuracy, shared_participants) ~ split,
          data = audit, FUN = mean)

## ----participant-identity-leakage-figure, fig.width=9, fig.height=4, fig.cap="Original synthetic demonstration. Observation-wise evaluation permits participant identity overlap, whereas the participant-disjoint evaluation has zero shared participants. Repeats are dependent."----
gp3ml_october_plot_leakage(audit)

## ----participant-identity-paired-figure, fig.width=7, fig.height=4, fig.cap="Accuracy by repeated partition on a fixed synthetic generating dataset; connecting lines summarize dependent algorithmic splits, not uncertainty intervals."----
row_scores <- audit$heldout_accuracy[audit$split == "observation"]
participant_scores <- audit$heldout_accuracy[audit$split == "participant"]
graphics::plot(seq_along(row_scores), row_scores, type = "b", pch = 16,
  ylim = c(0, 1), xlab = "Dependent partition repeat",
  ylab = "Held-out accuracy", col = "#24577B",
  main = "Row versus participant generalization")
graphics::lines(seq_along(participant_scores), participant_scores,
  type = "b", pch = 1, col = "#C05B43")
graphics::abline(h = 0.5, lty = 3, col = "gray50")
graphics::legend("bottomleft", legend = c("Rows", "Participants"),
  col = c("#24577B", "#C05B43"), lty = 1, pch = c(16, 1), bty = "n")

