Replication Package — Assemble, Anonymize, and Audit
Build publication-ready replication packages, optionally anonymize for double-blind review, or audit an existing package for reproducibility. The original project is never modified.
Modes
| Mode | What it does | Use case |
|---|---|---|
| Assemble | Clean copy + AI trace removal + AEA-style README | Sharing, Zenodo deposit, journal supplementary |
| Blind | Everything in Assemble + identity anonymization | Double-blind conference/journal submission |
| Audit | Read-only 11-check reproducibility validation | Pre-deposit quality gate, self-check |
Default mode: Assemble. Infer Blind if the user says "anonymize", "double-blind", or "blind review". Infer Audit if the user says "audit", "check reproducibility", or "validate package".
When to Use
- Submitting supplementary materials or replication files to a journal
- Depositing a package on Zenodo, Dataverse, or ICPSR
- Sharing a project repo publicly (GitHub, institutional repository)
- Preparing for double-blind submission (Blind mode)
- Self-checking reproducibility before deposit (Audit mode)
When NOT to Use
- Quick one-off cleanup of a single file — do it manually
- Removing a single AI artifact — just delete it directly
- Projects with no empirical or computational component
Critical Rules
- Never modify the original project. All work happens on a copy in a sibling folder.
- Dry-run mandatory. Always show what will be removed/changed and get user confirmation before any deletions.
- Binary files are never modified. Warn the user to manually check PDFs (Document Properties), images (EXIF data), and datasets for embedded metadata.
- Self-citations are always interactive. Never auto-remove or auto-anonymize a citation. Flag each potential self-citation and let the user decide per citation. In Blind mode, surface every self-citation against the loaded submission author list and require a per-citation decision (third-person OK / blind the entry). When the cited paper's author list is a subset of the submission's, third-person is structurally insufficient and the bib entry MUST be blinded — see
_shared/double-blind-anonymity-checklist.md§P4–P5. - Resolve symlinks. Use
rsync -aLso symlinked content (e.g., Overleafpaper/symlinks) becomes real files in the copy. - Preserve compilability. The output must still compile/run — only infrastructure and identity are removed, not project functionality.
- Blind mode runs the structured-metadata field check (A2) before reporting clean.
pyproject.toml[project] authors,package.jsonauthor/contributors,Cargo.toml[package] authors,CITATION.cff,LICENSEholder, etc. — see_shared/double-blind-anonymity-checklist.md§"Structured-metadata field check (A2)" for the full target list. This was the CCS 2026 #1328 desk-reject trigger and is now non-skippable.
Assemble Mode (Non-Blind)
Phases 1-7: Scan → Copy → Scrub AI Traces → Generate README → Verify → Fresh Git → Report.
Full workflow: references/assemble-workflow.md
Blind Mode (Assemble + Anonymization)
Runs all Assemble phases, then continues with Phases 8-12: Collect Identity → Anonymize LaTeX → Anonymize Other Files → Anonymous Git → Leak Check Report.
Full workflow: references/blind-workflow.md
Audit Mode (Read-Only)
11-check reproducibility validation: Compilation, Script order, Output presence, Dependencies, Data provenance, README, File sizes, End-to-end clarity, AI traces, Identity leaks, Numeric reproduction.
Full workflow: references/audit-workflow.md
Check 11 (Numeric reproduction) is N/A unless an expected_values.json (the manuscript's reported numbers) sits at the package root. When present, the audit parses the package's committed output files and scores them against that ground truth within tolerance — catching paper-vs-output drift. It is read-only and never re-runs scripts. Convention + scoring rubric: references/expected-values-schema.md.
HPC-run results
If the project used [HPC cluster] (hpc/ directory with *.sbatch), the results in out/<jobid>/ should include git-sha.txt + git-status.txt (written by the sbatch templates before srun). Audit must verify these exist and the SHA matches a commit in the repo — this is the compute-reproducibility equivalent of Script order + Dependencies for HPC runs. The Assemble README should document the hpc/ entry point and the HF/conda env-setup script alongside code/ + data/. See Task Management docs/guides/hpc.md.
What This Skill Does NOT Do
- Does not modify the original project — all changes are in the sibling folder (Assemble/Blind) or purely read-only (Audit).
- Does not modify binary files — PDFs, images, datasets are copied as-is. User must check these manually for embedded metadata.
- Does not auto-handle self-citations — every potential self-citation requires user decision.
- Does not anonymize the paper title — titles are generally not considered identifying (but some venues disagree; user should check).
- Does not strip PDF metadata — if a compiled PDF exists, its Document Properties may contain author info. User should recompile from the anonymized source or use
exiftoolto strip metadata. - Does not run scripts — it verifies their presence and order but does not execute them (too risky without a controlled environment). Check 11 (Numeric reproduction) likewise compares the package's already-committed output files against the manuscript; it never re-runs the pipeline, so it catches paper-vs-output drift, not full fresh-run reproduction.
Examples
Assemble mode (default)
"Build a replication package for my research paper"
Runs Assemble mode on the current project, creates ../mcdm-paper-replication/.
Blind mode
"Anonymize my paper for AAAI double-blind submission"
Runs Blind mode, creates ../mcdm-paper-replication-blind/.
Audit mode
"Audit the reproducibility of my replication package"
Runs Audit mode (read-only) on the specified package directory.
Explicit path and mode
"replication-package --mode blind"
Runs Blind mode on the specified project path.
Cross-References
data-sensitivityrule — raw data is read-only; replication packages must document data provenance without modifyingdata/raw/overleaf-separationrule —paper/structure is preserved; symlinks resolved by rsyncshared/multi-language-conventions.md— dependency detection patterns for Python, R, Julia, MATLABshared/publication-output.md— output file verification and freshness checkslatex— compilation check in Audit modereferences/aea-readme-template.md— AEA-style README template for Assemble modereferences/figure-table-crosswalk.md— per-figure/table crosswalk (with LaTeX Label) + paper-consistency check, appended to the README (Phase 4)references/logging-skeletons.md— per-script logging + master-script skeletons (R/Python/Julia/Stata) offered in Phase 5references/release-readiness-checklist.md— 14-point PASS/FAIL pre-release gate emitted at Phase 7 (RELEASE-READINESS.md)references/rules.dropboxignore— Dropbox-sync ignore file for Dropbox-synced packages (Phase 6)references/anonymization-patterns.md— replacement tables for Blind modereferences/audit-rubric.md— 11-check scoring rubric for Audit modereferences/expected-values-schema.md—expected_values.jsonconvention + numeric-reproduction scoring rubric (Check 11)references/deposit-checklist.md— platform-specific deposit completeness checklistreferences/report-template.md— report format for Blind mode_shared/double-blind-anonymity-checklist.md— authoritative paper+artifact anonymity matrix (P1–P8, A1–A9). Blind mode must run all artifact-side checks (A1–A9) before reporting clean.
Note: This skill replaces the former
/export-project-cleanand/export-project-anonskills. All their functionality is preserved in Assemble and Blind modes respectively.
Output Verification (Guard)
This skill writes files. Before any auto-commit, emit an outputs manifest and run the shared verifier. See skills/_shared/verify-outputs.md for the full protocol.
Required tail steps (before git commit):
Write the manifest to
<project>/.context/state/outputs-manifest-<UTC-timestamp>.json, listing every file this skill claims to have written in this invocation (paths relative to the project root).Run:
uv run python "<skills-root>/_shared/verify_outputs.py" \ --manifest "$MANIFEST" \ --project-root "$PROJECT_ROOT"If the verifier exits non-zero, do not commit — surface the missing-files list to the user and stop. The verifier has already logged an
errorentry to~/.local/state/ai-workflows/skill-outcomes.jsonl, which feeds the shared skill-health dashboard.
Why: closes the "hallucinated outputs" failure class (commit b2cff75, 2026-04-18).