Venue Fork: Second-Venue Submission Variant
Fork a paper for a second venue while the original submission keeps living. A fork is a copy
(both venues track independently), unlike retarget-journal (a move) and preprint (a
non-archival variant that must NOT get a vault submission entry).
When to Use
- A venue window explicitly permits concurrent submission (e.g. WINE 2026 ⟷ FOCS/SAGT/AFT 2026)
- A rejected paper needs a reformatted version for a differently-formatted venue
- the user says "submit this also to X", "concurrent submission to X", "make the X version"
Phase 0 — CFP compliance sheet (blocks everything)
Fetch the official CFP (never WikiCFP alone; mark-unverified applies) and record:
| Item |
Why it matters |
| Page limit + what's excluded (title page? references? appendix policy) |
Drives the refit budget in Phase 3 |
| Font size / margins / class requirements |
Submission format is often looser than camera-ready (e.g. WINE: ≥11pt, ≥1in, any class; LNCS only at camera-ready) |
| Blind policy |
Anonymity QA in Phase 4; third-person self-citation per double-blind-self-citation rule |
| Concurrent policy — on BOTH sides |
The target naming the source venue is not enough; verify the source venue's CFP reciprocates |
| Deadlines: submission, rebuttal, notification |
Also the SOURCE venue's notification date |
Timing analysis (report to the user): if the source venue notifies before the target's
rebuttal/notification, acceptance there forces withdrawal from the target before any reviews
arrive — the fork is then insurance + comments-on-rejection, not guaranteed feedback. Say so
explicitly before doing the work.
Phase 1 — Create the fork
- New Overleaf project via Dropbox (the active client may create these — folder + main.tex = project):
Apps/Overleaf/Paper {Theme} {Short Name} ({VENUE} {YY})/ — Title Case, venue suffix, per
the existing naming convention. Resolve the Dropbox root per multi-machine.md.
- Copy from the source project:
main.tex, the bib, figure dirs, any .bst the target format
needs. Never edit the source project's files — it is a live submission surface.
Copy files by name only — never cp -r a whole template/source dir into the new Overleaf
folder, which would drag a .git in and make it a repo on the wrong remote. Confirm
find <new-overleaf-folder> -name .git is empty. See .claude/rules/template-scaffold-strip-git.md.
- Project dir:
mkdir <project>/paper-{venue}/ + relative symlink
paper-{venue}/paper → ../../../../../Apps/Overleaf/<name> (absolute symlinks break
cross-machine).
Phase 2 — Document-class conversion
Target submission formats like WINE's are satisfied by plain \documentclass[11pt,a4paper]{article}
\usepackage[margin=1in]{geometry}. Conversion map:
| Source class |
Strip |
Replace with |
lipics-v2021 |
\Copyright, \ccsdesc, \category, \relatedversion, \supplement, \funding, \acknowledgements, all \Event*/\SeriesVolume/\ArticleNo, \titlerunning/\authorrunning, 5-arg \author{}{}{}{}{} |
article \title + \author{Anonymous submission} + \date{}; keywords as a \noindent\textbf{Keywords:} line inside the abstract |
llncs |
\titlerunning, \institute, \spnewtheorem defs, LNCS author-suppression hacks |
amsthm with explicit \newtheorem for every env the body uses (theorem, lemma, proposition, corollary, definition, example, remark, observation, claim); proof comes from amsthm — do NOT redefine. \keywords shim: \newcommand{\keywords}[1]{\par\medskip\noindent{\bfseries Keywords:} {\def\and{\unskip{} $\cdot$ }#1}} |
acmart |
\ccsdesc, \keywords, \copyright*, \settopmatter, \authornote |
as above |
- Grep the body first:
grep -o '\\begin{[a-z]*}' main.tex | sort | uniq -c tells you exactly
which theorem environments to define — the AFT paper needed none, the SAGT paper needed nine.
cleveref: load hyperref then \usepackage[capitalise,noabbrev]{cleveref} when the body
uses \cref/\Cref (LIPIcs loads it via class option).
.bst files: plainurl.bst ships with TeX Live (urlbst); splncs04.bst must be copied into
the fork. Check with kpsewhich <name>.bst before assuming.
Shared math core. A class conversion is a legitimate adoption window for
user-math.sty (templates/venues/_shared/): copy it in, load it AFTER the
new class, and delete the preamble's now-duplicate \newcommand{\E}-style
lines — it supplies the macro set, operators, delimiters, and theorem
environments clash-safely ([notheorems] when the kit owns them). Papers not
being converted are NOT retrofitted (templates/venues/_shared/README.md;
candidates: docs/reference/user-math-adoption-candidates.md).
Phase 3 — Page-budget refit (relocate, never cut)
- Compile; find where the body ends:
pdftotext -f N -l N main.pdf - per page around the
expected boundary — locate the References header page.
- Compute overrun against the CFP budget (mind what's excluded: title page/references usually
don't count; an 18pp LNCS body ≈ 12–13pp at 11pt/1in — LNCS text block is ~40% smaller).
- Relocate in this order until the body fits, adding
\appendix sections with pointer lines
(\noindent\emph{The proof appears in Appendix~\ref{...}.}):
- Detail subsections readers can defer (experimental-design grids, implementation details)
- Large floats (tables/figures) —
\cref keeps resolving when labels move with the float
- Longest proofs → "Omitted Proofs" appendix, re-titled
\begin{proof}[Proof of Theorem~\ref{...}]
- Whole peripheral sections (motivating applications, extended demarcation)
- Never cut prose to fit — relocation only (
manuscript-edit-budget rule). Update any
in-text Section~\ref pointing at moved content to Appendix~\ref.
Phase 4 — QA gates (all must pass)
latexmk -pdf exit 0; grep -c 'LaTeX Warning: Reference\|Warning: Citation' main.log → 0.
- Body-end page ≤ budget (re-run the Phase 3 boundary check — floats move on recompile).
- Anonymity grep on the tex: author surname, first name, all affiliated institutions,
acknowledg, our prior, we showed, in earlier work. Then eyeball p1 of the PDF.
- Render-level check (compile logs cannot catch wrong-symbol output):
pdftotext the PDF and
grep for symbols that should/shouldn't appear — especially after any macro rename (see Gotchas).
Phase 5 — Submission + writeback (after the user submits)
Multi-system completeness — all of these, then verify:
- Vault submission file
submissions/<topic>-<venue>-<year>.md: status: Submitted,
submitted_date, and exactly one attention date: notification_date for a real CFP
decision date or follow_up_date for an operational journal check-in. Set conference
dates, double_blind,
paper_id, and a body concurrency clause: which venue notifies first and the withdrawal
obligation. Link the primary submission entry.
- Atlas topic
outputs[]: new venue entry, status: Submitted (output-ladder canon only),
same dates, notes carrying the concurrency clause, and the full submission-join set per
rules/atlas-status-vocabulary.md § submission-join completeness: paper_id (same as the
vault entry), paper_title (must equal the registry canonical_title), and — if the venue is
a Conference/Workshop — cycle: <Venue> <edition-year> (journals exempt). (Do NOT bump
last_reviewed — a venue swap is not topic-file curation; only update-topic-file writes
that field.) Validate with atlas-vault/schema.py; validate-portfolio-registry.py catches
any missed join as cycle-gap/title-gap at the next session-close.
If the fork target has no venue file yet, create ~/vault/venues/<slug>.md with
canon-only ranking fields (cabs/core/scimago/venue_type from the fixed sets — lookup
caveats go in # comments after a canon value, never in the value).
- Submitted-PDF archive: verify the HotCRP/CMT-downloaded PDF page-matches the local build,
file at
<project>/paper-{venue}/submitted-YYYY-MM-DD.pdf (outside the Overleaf symlink),
add a pointer line in the vault entry.
- Inbox:
curl -X POST localhost:8765/api/sync (Mac Mini) and confirm the notification item
appears; mark the met submission-deadline item done.
Gotchas (each cost real time on 2026-07-02)
- Macro renames:
\b does not fire before _. re.sub(r'\\cap\b', ...) misses \cap_j
(underscore is a word char) — and the un-renamed token still compiles, rendering the WRONG
symbol silently. Use (?![a-zA-Z]) as the boundary and pdftotext-verify the output.
- Macro names:
\newcommand{\cap_} is invalid (redefines \cap); never end a macro name
with _; check clashes with amssymb (\Cap) before choosing.
- Missing bib looks fine in Overleaf because a copied
.bbl renders references anyway —
check the file list, not the PDF, when confirming the fork is complete.
- Paperpile CLI snapshot lag: freshly imported refs miss in
get-item/lookup-by-doi for a
while; the app-side BibTeX export is the authoritative canonical-key source meanwhile.
- Merge adjacent
\cite{a}\cite{b} → \cite{a,b} after batch key swaps.
Anti-Patterns
- Don't edit or compile inside the source venue's Overleaf project — fork first, then touch.
- Don't cut prose to make the page budget — relocate to appendices.
- Don't create the vault submission entry for a preprint-server post — that's
preprint's
domain and the preprint-vs-submission rule forbids it.
- Don't skip verifying the concurrent policy on the SOURCE venue's side.
- Don't report "ready" from compile success alone — run the render-level check.
- Don't hand-author bib entries — Paperpile-canonical keys only (
paperpile-citations rule).
Verification
The fork is done when: fork compiles clean at/under budget with 0 warnings; anonymity + render
checks pass; source project untouched (ls -lt mtimes); after submission, vault + atlas agree
(Submitted, same dates), schema validates, the inbox shows the notification or follow-up item, and the
submitted-PDF archive is filed with a pointer.
1---2name: venue-fork3description: Fork an existing paper into a concurrent second-venue submission variant with policy checks, separate Overleaf ownership, format conversion, budget refit, QA, and Atlas/Vault writeback. Use when submitting the same work concurrently to another permitted venue. Not for preprints, ordinary retargeting, or camera-ready work.4---56# Venue Fork: Second-Venue Submission Variant78Fork a paper for a second venue while the original submission keeps living. A fork is a **copy**9(both venues track independently), unlike `retarget-journal` (a move) and `preprint` (a10non-archival variant that must NOT get a vault submission entry).1112## When to Use1314- A venue window explicitly permits concurrent submission (e.g. WINE 2026 ⟷ FOCS/SAGT/AFT 2026)15- A rejected paper needs a reformatted version for a differently-formatted venue16- the user says "submit this also to X", "concurrent submission to X", "make the X version"1718## Phase 0 — CFP compliance sheet (blocks everything)1920Fetch the **official CFP** (never WikiCFP alone; `mark-unverified` applies) and record:2122| Item | Why it matters |23|---|---|24| Page limit + what's excluded (title page? references? appendix policy) | Drives the refit budget in Phase 3 |25| Font size / margins / class requirements | Submission format is often looser than camera-ready (e.g. WINE: ≥11pt, ≥1in, any class; LNCS only at camera-ready) |26| Blind policy | Anonymity QA in Phase 4; third-person self-citation per `double-blind-self-citation` rule |27| **Concurrent policy — on BOTH sides** | The target naming the source venue is not enough; verify the source venue's CFP reciprocates |28| Deadlines: submission, rebuttal, **notification** | Also the SOURCE venue's notification date |2930**Timing analysis (report to the user):** if the source venue notifies before the target's31rebuttal/notification, acceptance there forces withdrawal from the target *before any reviews32arrive* — the fork is then insurance + comments-on-rejection, not guaranteed feedback. Say so33explicitly before doing the work.3435## Phase 1 — Create the fork36371. New Overleaf project via Dropbox (the active client may create these — folder + main.tex = project):38 `Apps/Overleaf/Paper {Theme} {Short Name} ({VENUE} {YY})/` — Title Case, venue suffix, per39 the existing naming convention. Resolve the Dropbox root per `multi-machine.md`.402. Copy from the source project: `main.tex`, the bib, figure dirs, any `.bst` the target format41 needs. **Never edit the source project's files** — it is a live submission surface.42 Copy **files by name only** — never `cp -r` a whole template/source dir into the new Overleaf43 folder, which would drag a `.git` in and make it a repo on the wrong remote. Confirm44 `find <new-overleaf-folder> -name .git` is empty. See `.claude/rules/template-scaffold-strip-git.md`.453. Project dir: `mkdir <project>/paper-{venue}/` + **relative** symlink46 `paper-{venue}/paper → ../../../../../Apps/Overleaf/<name>` (absolute symlinks break47 cross-machine).4849## Phase 2 — Document-class conversion5051Target submission formats like WINE's are satisfied by plain `\documentclass[11pt,a4paper]{article}`52+ `\usepackage[margin=1in]{geometry}`. Conversion map:5354| Source class | Strip | Replace with |55|---|---|---|56| `lipics-v2021` | `\Copyright`, `\ccsdesc`, `\category`, `\relatedversion`, `\supplement`, `\funding`, `\acknowledgements`, all `\Event*`/`\SeriesVolume`/`\ArticleNo`, `\titlerunning`/`\authorrunning`, 5-arg `\author{}{}{}{}{}` | article `\title` + `\author{Anonymous submission}` + `\date{}`; keywords as a `\noindent\textbf{Keywords:}` line inside the abstract |57| `llncs` | `\titlerunning`, `\institute`, `\spnewtheorem` defs, LNCS author-suppression hacks | amsthm with explicit `\newtheorem` for every env the body uses (`theorem`, `lemma`, `proposition`, `corollary`, `definition`, `example`, `remark`, `observation`, `claim`); `proof` comes from amsthm — do NOT redefine. `\keywords` shim: `\newcommand{\keywords}[1]{\par\medskip\noindent{\bfseries Keywords:} {\def\and{\unskip{} $\cdot$ }#1}}` |58| `acmart` | `\ccsdesc`, `\keywords`, `\copyright*`, `\settopmatter`, `\authornote` | as above |5960- Grep the body first: `grep -o '\\begin{[a-z]*}' main.tex | sort | uniq -c` tells you exactly61 which theorem environments to define — the AFT paper needed none, the SAGT paper needed nine.62- `cleveref`: load `hyperref` then `\usepackage[capitalise,noabbrev]{cleveref}` when the body63 uses `\cref`/`\Cref` (LIPIcs loads it via class option).64- `.bst` files: `plainurl.bst` ships with TeX Live (urlbst); `splncs04.bst` must be copied into65 the fork. Check with `kpsewhich <name>.bst` before assuming.6667**Shared math core.** A class conversion is a legitimate adoption window for68`user-math.sty` (`templates/venues/_shared/`): copy it in, load it AFTER the69new class, and delete the preamble's now-duplicate `\newcommand{\E}`-style70lines — it supplies the macro set, operators, delimiters, and theorem71environments clash-safely (`[notheorems]` when the kit owns them). Papers not72being converted are NOT retrofitted (`templates/venues/_shared/README.md`;73candidates: `docs/reference/user-math-adoption-candidates.md`).747576## Phase 3 — Page-budget refit (relocate, never cut)77781. Compile; find where the body ends: `pdftotext -f N -l N main.pdf -` per page around the79 expected boundary — locate the References header page.802. Compute overrun against the CFP budget (mind what's excluded: title page/references usually81 don't count; an 18pp LNCS body ≈ 12–13pp at 11pt/1in — LNCS text block is ~40% smaller).823. Relocate in this order until the body fits, adding `\appendix` sections with pointer lines83 (`\noindent\emph{The proof appears in Appendix~\ref{...}.}`):84 1. Detail subsections readers can defer (experimental-design grids, implementation details)85 2. Large floats (tables/figures) — `\cref` keeps resolving when labels move with the float86 3. Longest proofs → "Omitted Proofs" appendix, re-titled `\begin{proof}[Proof of Theorem~\ref{...}]`87 4. Whole peripheral sections (motivating applications, extended demarcation)884. **Never cut prose to fit** — relocation only (`manuscript-edit-budget` rule). Update any89 in-text `Section~\ref` pointing at moved content to `Appendix~\ref`.9091## Phase 4 — QA gates (all must pass)9293- `latexmk -pdf` exit 0; `grep -c 'LaTeX Warning: Reference\|Warning: Citation' main.log` → 0.94- Body-end page ≤ budget (re-run the Phase 3 boundary check — floats move on recompile).95- Anonymity grep on the tex: author surname, first name, all affiliated institutions,96 `acknowledg`, `our prior`, `we showed`, `in earlier work`. Then eyeball p1 of the PDF.97- **Render-level check** (compile logs cannot catch wrong-symbol output): `pdftotext` the PDF and98 grep for symbols that should/shouldn't appear — especially after any macro rename (see Gotchas).99100## Phase 5 — Submission + writeback (after the user submits)101102Multi-system completeness — all of these, then verify:1031041. **Vault submission file** `submissions/<topic>-<venue>-<year>.md`: `status: Submitted`,105 `submitted_date`, and exactly one attention date: **`notification_date`** for a real CFP106 decision date or **`follow_up_date`** for an operational journal check-in. Set conference107 dates, `double_blind`,108 `paper_id`, and a body **concurrency clause**: which venue notifies first and the withdrawal109 obligation. Link the primary submission entry.1102. **Atlas topic** `outputs[]`: new venue entry, `status: Submitted` (output-ladder canon only),111 same dates, notes carrying the concurrency clause, **and the full submission-join set** per112 `rules/atlas-status-vocabulary.md` § submission-join completeness: `paper_id` (same as the113 vault entry), `paper_title` (must equal the registry `canonical_title`), and — if the venue is114 a Conference/Workshop — `cycle: <Venue> <edition-year>` (journals exempt). (Do NOT bump115 `last_reviewed` — a venue swap is not topic-file curation; only `update-topic-file` writes116 that field.) Validate with `atlas-vault/schema.py`; `validate-portfolio-registry.py` catches117 any missed join as `cycle-gap`/`title-gap` at the next `session-close`.118 If the fork target has **no venue file** yet, create `~/vault/venues/<slug>.md` with119 canon-only ranking fields (`cabs`/`core`/`scimago`/`venue_type` from the fixed sets — lookup120 caveats go in `#` comments after a canon value, never in the value).1213. **Submitted-PDF archive**: verify the HotCRP/CMT-downloaded PDF page-matches the local build,122 file at `<project>/paper-{venue}/submitted-YYYY-MM-DD.pdf` (outside the Overleaf symlink),123 add a pointer line in the vault entry.1244. **Inbox**: `curl -X POST localhost:8765/api/sync` (Mac Mini) and confirm the notification item125 appears; mark the met submission-deadline item done.126127## Gotchas (each cost real time on 2026-07-02)128129- **Macro renames: `\b` does not fire before `_`.** `re.sub(r'\\cap\b', ...)` misses `\cap_j`130 (underscore is a word char) — and the un-renamed token still compiles, rendering the WRONG131 symbol silently. Use `(?![a-zA-Z])` as the boundary and pdftotext-verify the output.132- **Macro names:** `\newcommand{\cap_}` is invalid (redefines `\cap`); never end a macro name133 with `_`; check clashes with amssymb (`\Cap`) before choosing.134- **Missing bib looks fine in Overleaf** because a copied `.bbl` renders references anyway —135 check the file list, not the PDF, when confirming the fork is complete.136- **Paperpile CLI snapshot lag:** freshly imported refs miss in `get-item`/`lookup-by-doi` for a137 while; the app-side BibTeX export is the authoritative canonical-key source meanwhile.138- Merge adjacent `\cite{a}\cite{b}` → `\cite{a,b}` after batch key swaps.139140## Anti-Patterns141142- **Don't** edit or compile inside the source venue's Overleaf project — fork first, then touch.143- **Don't** cut prose to make the page budget — relocate to appendices.144- **Don't** create the vault submission entry for a preprint-server post — that's `preprint`'s145 domain and the `preprint-vs-submission` rule forbids it.146- **Don't** skip verifying the concurrent policy on the SOURCE venue's side.147- **Don't** report "ready" from compile success alone — run the render-level check.148- **Don't** hand-author bib entries — Paperpile-canonical keys only (`paperpile-citations` rule).149150## Verification151152The fork is done when: fork compiles clean at/under budget with 0 warnings; anonymity + render153checks pass; source project untouched (`ls -lt` mtimes); after submission, vault + atlas agree154(`Submitted`, same dates), schema validates, the inbox shows the notification or follow-up item, and the155submitted-PDF archive is filed with a pointer.