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."4allowed-tools:5 - Read6 - Glob7 - Grep8 - Write9 - Edit10 - Bash11 - WebFetch12 - AskUserQuestion13---1415# Venue Fork: Second-Venue Submission Variant1617Fork a paper for a second venue while the original submission keeps living. A fork is a **copy**18(both venues track independently), unlike `retarget-journal` (a move) and `preprint` (a19non-archival variant that must NOT get a vault submission entry).2021## When to Use2223- A venue window explicitly permits concurrent submission (e.g. WINE 2026 ⟷ FOCS/SAGT/AFT 2026)24- A rejected paper needs a reformatted version for a differently-formatted venue25- the user says "submit this also to X", "concurrent submission to X", "make the X version"2627## Phase 0 — CFP compliance sheet (blocks everything)2829Fetch the **official CFP** (never WikiCFP alone; `mark-unverified` applies) and record:3031| Item | Why it matters |32|---|---|33| Page limit + what's excluded (title page? references? appendix policy) | Drives the refit budget in Phase 3 |34| 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) |35| Blind policy | Anonymity QA in Phase 4; third-person self-citation per `double-blind-self-citation` rule |36| **Concurrent policy — on BOTH sides** | The target naming the source venue is not enough; verify the source venue's CFP reciprocates |37| Deadlines: submission, rebuttal, **notification** | Also the SOURCE venue's notification date |3839**Timing analysis (report to the user):** if the source venue notifies before the target's40rebuttal/notification, acceptance there forces withdrawal from the target *before any reviews41arrive* — the fork is then insurance + comments-on-rejection, not guaranteed feedback. Say so42explicitly before doing the work.4344## Phase 1 — Create the fork45461. New Overleaf project via Dropbox (the active client may create these — folder + main.tex = project):47 `Apps/Overleaf/Paper {Theme} {Short Name} ({VENUE} {YY})/` — Title Case, venue suffix, per48 the existing naming convention. Resolve the Dropbox root per `multi-machine.md`.492. Copy from the source project: `main.tex`, the bib, figure dirs, any `.bst` the target format50 needs. **Never edit the source project's files** — it is a live submission surface.51 Copy **files by name only** — never `cp -r` a whole template/source dir into the new Overleaf52 folder, which would drag a `.git` in and make it a repo on the wrong remote. Confirm53 `find <new-overleaf-folder> -name .git` is empty. See `.claude/rules/template-scaffold-strip-git.md`.543. Project dir: `mkdir <project>/paper-{venue}/` + **relative** symlink55 `paper-{venue}/paper → ../../../../../Apps/Overleaf/<name>` (absolute symlinks break56 cross-machine).5758## Phase 2 — Document-class conversion5960Target submission formats like WINE's are satisfied by plain `\documentclass[11pt,a4paper]{article}`61+ `\usepackage[margin=1in]{geometry}`. Conversion map:6263| Source class | Strip | Replace with |64|---|---|---|65| `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 |66| `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}}` |67| `acmart` | `\ccsdesc`, `\keywords`, `\copyright*`, `\settopmatter`, `\authornote` | as above |6869- Grep the body first: `grep -o '\\begin{[a-z]*}' main.tex | sort | uniq -c` tells you exactly70 which theorem environments to define — the AFT paper needed none, the SAGT paper needed nine.71- `cleveref`: load `hyperref` then `\usepackage[capitalise,noabbrev]{cleveref}` when the body72 uses `\cref`/`\Cref` (LIPIcs loads it via class option).73- `.bst` files: `plainurl.bst` ships with TeX Live (urlbst); `splncs04.bst` must be copied into74 the fork. Check with `kpsewhich <name>.bst` before assuming.7576**Shared math core.** A class conversion is a legitimate adoption window for77`user-math.sty` (`templates/venues/_shared/`): copy it in, load it AFTER the78new class, and delete the preamble's now-duplicate `\newcommand{\E}`-style79lines — it supplies the macro set, operators, delimiters, and theorem80environments clash-safely (`[notheorems]` when the kit owns them). Papers not81being converted are NOT retrofitted (`templates/venues/_shared/README.md`;82candidates: `docs/reference/user-math-adoption-candidates.md`).838485## Phase 3 — Page-budget refit (relocate, never cut)86871. Compile; find where the body ends: `pdftotext -f N -l N main.pdf -` per page around the88 expected boundary — locate the References header page.892. Compute overrun against the CFP budget (mind what's excluded: title page/references usually90 don't count; an 18pp LNCS body ≈ 12–13pp at 11pt/1in — LNCS text block is ~40% smaller).913. Relocate in this order until the body fits, adding `\appendix` sections with pointer lines92 (`\noindent\emph{The proof appears in Appendix~\ref{...}.}`):93 1. Detail subsections readers can defer (experimental-design grids, implementation details)94 2. Large floats (tables/figures) — `\cref` keeps resolving when labels move with the float95 3. Longest proofs → "Omitted Proofs" appendix, re-titled `\begin{proof}[Proof of Theorem~\ref{...}]`96 4. Whole peripheral sections (motivating applications, extended demarcation)974. **Never cut prose to fit** — relocation only (`manuscript-edit-budget` rule). Update any98 in-text `Section~\ref` pointing at moved content to `Appendix~\ref`.99100## Phase 4 — QA gates (all must pass)101102- `latexmk -pdf` exit 0; `grep -c 'LaTeX Warning: Reference\|Warning: Citation' main.log` → 0.103- Body-end page ≤ budget (re-run the Phase 3 boundary check — floats move on recompile).104- Anonymity grep on the tex: author surname, first name, all affiliated institutions,105 `acknowledg`, `our prior`, `we showed`, `in earlier work`. Then eyeball p1 of the PDF.106- **Render-level check** (compile logs cannot catch wrong-symbol output): `pdftotext` the PDF and107 grep for symbols that should/shouldn't appear — especially after any macro rename (see Gotchas).108109## Phase 5 — Submission + writeback (after the user submits)110111Multi-system completeness — all of these, then verify:1121131. **Vault submission file** `submissions/<topic>-<venue>-<year>.md`: `status: Submitted`,114 `submitted_date`, and exactly one attention date: **`notification_date`** for a real CFP115 decision date or **`follow_up_date`** for an operational journal check-in. Set conference116 dates, `double_blind`,117 `paper_id`, and a body **concurrency clause**: which venue notifies first and the withdrawal118 obligation. Link the primary submission entry.1192. **Atlas topic** `outputs[]`: new venue entry, `status: Submitted` (output-ladder canon only),120 same dates, notes carrying the concurrency clause, **and the full submission-join set** per121 `rules/atlas-status-vocabulary.md` § submission-join completeness: `paper_id` (same as the122 vault entry), `paper_title` (must equal the registry `canonical_title`), and — if the venue is123 a Conference/Workshop — `cycle: <Venue> <edition-year>` (journals exempt). (Do NOT bump124 `last_reviewed` — a venue swap is not topic-file curation; only `update-topic-file` writes125 that field.) Validate with `atlas-vault/schema.py`; `validate-portfolio-registry.py` catches126 any missed join as `cycle-gap`/`title-gap` at the next `session-close`.127 If the fork target has **no venue file** yet, create `~/vault/venues/<slug>.md` with128 canon-only ranking fields (`cabs`/`core`/`scimago`/`venue_type` from the fixed sets — lookup129 caveats go in `#` comments after a canon value, never in the value).1303. **Submitted-PDF archive**: verify the HotCRP/CMT-downloaded PDF page-matches the local build,131 file at `<project>/paper-{venue}/submitted-YYYY-MM-DD.pdf` (outside the Overleaf symlink),132 add a pointer line in the vault entry.1334. **Inbox**: `curl -X POST localhost:8765/api/sync` (Mac Mini) and confirm the notification item134 appears; mark the met submission-deadline item done.135136## Gotchas (each cost real time on 2026-07-02)137138- **Macro renames: `\b` does not fire before `_`.** `re.sub(r'\\cap\b', ...)` misses `\cap_j`139 (underscore is a word char) — and the un-renamed token still compiles, rendering the WRONG140 symbol silently. Use `(?![a-zA-Z])` as the boundary and pdftotext-verify the output.141- **Macro names:** `\newcommand{\cap_}` is invalid (redefines `\cap`); never end a macro name142 with `_`; check clashes with amssymb (`\Cap`) before choosing.143- **Missing bib looks fine in Overleaf** because a copied `.bbl` renders references anyway —144 check the file list, not the PDF, when confirming the fork is complete.145- **Paperpile CLI snapshot lag:** freshly imported refs miss in `get-item`/`lookup-by-doi` for a146 while; the app-side BibTeX export is the authoritative canonical-key source meanwhile.147- Merge adjacent `\cite{a}\cite{b}` → `\cite{a,b}` after batch key swaps.148149## Anti-Patterns150151- **Don't** edit or compile inside the source venue's Overleaf project — fork first, then touch.152- **Don't** cut prose to make the page budget — relocate to appendices.153- **Don't** create the vault submission entry for a preprint-server post — that's `preprint`'s154 domain and the `preprint-vs-submission` rule forbids it.155- **Don't** skip verifying the concurrent policy on the SOURCE venue's side.156- **Don't** report "ready" from compile success alone — run the render-level check.157- **Don't** hand-author bib entries — Paperpile-canonical keys only (`paperpile-citations` rule).158159## Verification160161The fork is done when: fork compiles clean at/under budget with 0 warnings; anonymity + render162checks pass; source project untouched (`ls -lt` mtimes); after submission, vault + atlas agree163(`Submitted`, same dates), schema validates, the inbox shows the notification or follow-up item, and the164submitted-PDF archive is filed with a pointer.