Skip to content
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
30d1122
Remove preprint release
haroldrubio Jan 15, 2026
fae13eb
Remove preprint process
haroldrubio Jan 15, 2026
7fe70c3
Change post submission process function
haroldrubio Jan 15, 2026
4d4c2fd
Change tests
haroldrubio Jan 15, 2026
07895a9
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Jan 15, 2026
6406213
Remove old test
haroldrubio Jan 15, 2026
55e4f45
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Mar 3, 2026
4aec93d
Merge branch 'master' into fix/arr-preprint-in-post
melisabok Mar 5, 2026
0ab123c
Parameterize post submission
haroldrubio Mar 10, 2026
9f1a738
Call venue invitation builder
haroldrubio Mar 10, 2026
b13b237
Duplicate Venue logic into ARR
haroldrubio Mar 10, 2026
da99720
Update process function
haroldrubio Mar 10, 2026
d3bfd13
Update tests
haroldrubio Mar 10, 2026
0572c67
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Mar 27, 2026
59cb630
Refactor source
haroldrubio Mar 27, 2026
9c7ea9a
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Mar 30, 2026
13a0fae
Fix level of nesting
haroldrubio Mar 30, 2026
5134dbf
Merge branch 'fix/arr-preprint-in-post' of https://github.com/openrev…
haroldrubio Mar 30, 2026
f05db47
Remove process function and fix explanation logic
haroldrubio Apr 3, 2026
811d2ca
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 3, 2026
9e541c8
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 3, 2026
3d3fc38
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 3, 2026
a3456a8
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 6, 2026
07723c3
Remove process function
haroldrubio Apr 7, 2026
1c40b6c
Update invitation schema
haroldrubio Apr 7, 2026
347724d
Move explanation of revisions assertions
haroldrubio Apr 7, 2026
1059204
Add back assertions
haroldrubio Apr 7, 2026
e2005b8
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 8, 2026
f342066
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 9, 2026
ee81cfd
Only keep custom source
haroldrubio Apr 9, 2026
a635ad7
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 10, 2026
bbe439d
Merge branch 'master' into fix/arr-preprint-in-post
celestemartinez Apr 14, 2026
19ef4e4
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 15, 2026
e4a6bf9
Merge branch 'master' into fix/arr-preprint-in-post
haroldrubio Apr 16, 2026
e54da3f
Merge branch 'master' into fix/arr-preprint-in-post
melisabok Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 75 additions & 3 deletions openreview/arr/arr.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,13 @@ def get_meta_invitation_id(self):
def get_submission_id(self):
return self.venue.get_submission_id()

def get_post_submission_id(self):
return self.venue.get_post_submission_id()

def get_preprint_post_submission_id(self):
submission_name = self.submission_stage.name if self.submission_stage else self.venue.submission_stage.name
return self.get_invitation_id(f'Preprint_Post_{submission_name}')

def get_pc_submission_revision_id(self):
return self.venue.get_pc_submission_revision_id()

Expand Down Expand Up @@ -427,7 +434,56 @@ def recruit_reviewers(self,

# For stage invitations, pass value to inner venue objects
def create_submission_stage(self):
stage_value = self.venue.create_submission_stage()
self.invitation_builder.set_submission_invitation()
if self.venue.iThenticate_plagiarism_check:
self.invitation_builder.set_iThenticate_plagiarism_check_invitation()
self.invitation_builder.set_withdrawal_invitation()
self.invitation_builder.set_desk_rejection_invitation()
self.invitation_builder.set_post_submission_invitation(
invitation_id=self.get_post_submission_id(),
source={
'venueid': self.get_submission_venue_id(),
'content': {
'preprint': 'no'
}
}
)
self.invitation_builder.set_post_submission_invitation(
invitation_id=self.get_preprint_post_submission_id(),
source={
'venueid': self.get_submission_venue_id(),
'content': {
'preprint': 'yes'
}
}
)
self.invitation_builder.set_pc_submission_revision_invitation()
self.invitation_builder.set_submission_reviewer_group_invitation()
self.invitation_builder.set_submission_message_invitation()
if self.use_area_chairs:
self.invitation_builder.set_submission_area_chair_group_invitation()
if self.use_senior_area_chairs:
self.invitation_builder.set_submission_senior_area_chair_group_invitation()
if self.expertise_selection_stage:
self.invitation_builder.set_expertise_selection_invitations()

if self.submission_stage.second_due_date:
stage = self.submission_stage
submission_revision_stage = openreview.stages.SubmissionRevisionStage(
name=f'Full_{stage.name}',
start_date=stage.exp_date,
due_date=stage.second_due_date,
additional_fields=stage.second_deadline_additional_fields if stage.second_deadline_additional_fields else stage.additional_fields,
remove_fields=stage.second_deadline_remove_fields if stage.second_deadline_remove_fields else stage.remove_fields,
only_accepted=False,
multiReply=True,
allow_author_reorder=stage.author_reorder_after_first_deadline,
allow_license_edition=True,
source={'venueid': self.get_submission_venue_id()}
)
self.invitation_builder.set_submission_revision_invitation(submission_revision_stage)
self.invitation_builder.set_submission_deletion_invitation(submission_revision_stage)

invitation = self.client.get_invitation(self.get_submission_id())
invitation.preprocess = self.invitation_builder.get_process_content('process/submission_preprocess.py')
invitation.process = invitation.process + self.invitation_builder.get_process_content('process/submission_process_extension.py')
Expand All @@ -440,10 +496,26 @@ def create_submission_stage(self):
replacement=False,
invitation=invitation
)
return stage_value

def create_post_submission_stage(self):
return self.venue.create_post_submission_stage()
self.invitation_builder.set_post_submission_invitation(
invitation_id=self.get_post_submission_id(),
source={
'venueid': self.get_submission_venue_id(),
'content': {
'preprint': 'no'
}
}
)
self.invitation_builder.set_post_submission_invitation(
invitation_id=self.get_preprint_post_submission_id(),
source={
'venueid': self.get_submission_venue_id(),
'content': {
'preprint': 'yes'
}
}
)

def create_submission_revision_stage(self):
self.venue.submission_revision_stage = self.submission_revision_stage
Expand Down
75 changes: 0 additions & 75 deletions openreview/arr/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@
arr_metareview_license_task,
arr_metareview_license_task_forum,
arr_metareview_rating_content,
hide_fields_from_public,
hide_fields,
arr_submitted_author_forum,
arr_submitted_author_content,
arr_delay_notification_content,
Expand Down Expand Up @@ -147,12 +145,6 @@ class ARRWorkflow(object):
"order": 14,
"required": False
},
"preprint_release_submission_date": {
"description": "When should submissions be copied over and the opt-in papers be revealed to the public? This should be done several hours (12+ hours) after the submission deadline.",
"value-regex": "^[0-9]{4}\\/([1-9]|0[1-9]|1[0-2])\\/([1-9]|0[1-9]|[1-2][0-9]|3[0-1])(\\s+)?((2[0-3]|[01][0-9]|[0-9]):[0-5][0-9])?(\\s+)?$",
"order": 15,
"required": False
},
"setup_sae_ae_assignment_date": {
"description": "When will both SAE and AE assignments be deployed? This must happen after both assignments are deployed to give SAEs access to the AE assignments.",
"value-regex": "^[0-9]{4}\\/([1-9]|0[1-9]|1[0-2])\\/([1-9]|0[1-9]|[1-2][0-9]|3[0-1])(\\s+)?((2[0-3]|[01][0-9]|[0-9]):[0-5][0-9])?(\\s+)?$",
Expand Down Expand Up @@ -396,64 +388,6 @@ class ARRWorkflow(object):
}


@staticmethod
def _build_preprint_release_edit(client, venue, builder, request_form):
venue_id = venue.id
submission_stage = venue.submission_stage

submission_id = submission_stage.get_submission_id(venue)

hidden_field_names = hide_fields_from_public
committee_members = venue.get_committee(number='${{4/id}/number}', with_authors=True)
note_content = { f: { 'readers': committee_members } for f in hidden_field_names}

# Always hide authors and authorids
author_readers = [venue_id, venue.get_authors_id(number='${{4/id}/number}')]
note_content['authors'] = { 'readers': author_readers }
note_content['authorids'] = { 'readers': author_readers }
for field in hide_fields:
note_content[field] = { 'readers': author_readers }

edit = {
'signatures': [venue_id],
'readers': [venue_id, venue.get_authors_id('${{2/note/id}/number}')],
'writers': [venue_id],
'note': {
'id': {
'param': {
'withInvitation': submission_id,
'optional': True
}
},
'odate': {
'param': {
'range': [ 0, 9999999999999 ],
'optional': True,
'deletable': True
}
},
'signatures': [ venue.get_authors_id('${{2/id}/number}') ],
'readers': ['everyone'],
'writers': [venue_id, venue.get_authors_id('${{2/id}/number}')],
}
}

note_content['_bibtex'] = {
'value': {
'param': {
'type': 'string',
'maxLength': 200000,
'input': 'textarea',
'optional': True
}
}
}

if note_content:
edit['note']['content'] = note_content

return {'edit': edit}

@staticmethod
def _extend_desk_reject_verification(client, venue, builder, request_form):
venue.invitation_builder.set_verification_flag_invitation()
Expand Down Expand Up @@ -588,15 +522,6 @@ def __init__(self, client_v2, venue, configuration_note, request_form_id, suppor
request_form = self.client.get_note(request_form_id)

self.workflow_stages = [
ARRStage(
type=ARRStage.Type.PROCESS_INVITATION,
required_fields=['preprint_release_submission_date'],
super_invitation_id=f"{self.venue_id}/-/Preprint_Release_{venue.submission_stage.name}",
stage_arguments={},
start_date=self.configuration_note.content.get('preprint_release_submission_date'),
process='process/preprint_release_submission_process.py',
build_edit=ARRWorkflow._build_preprint_release_edit
),
ARRStage(
type=ARRStage.Type.PROCESS_INVITATION,
required_fields=['setup_shared_data_date', 'previous_cycle'],
Expand Down
29 changes: 26 additions & 3 deletions openreview/arr/invitation.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,18 +198,41 @@ def set_preferred_emails_invitation(self):
def set_submission_invitation(self):
return self.venue_invitation_builder.set_submission_invitation()

def set_post_submission_invitation(self, invitation_id=None, source=None):
return self.venue_invitation_builder.set_post_submission_invitation(
invitation_id=invitation_id,
source=source,
process_path='../arr/process/post_submission_process.py'
)

def set_preprint_post_submission_invitation(self):
return self.set_post_submission_invitation(
invitation_id=self.venue.get_preprint_post_submission_id(),
source={
'venueid': self.venue.get_submission_venue_id(),
'content': {
'preprint': 'yes'
}
}
)
def set_submission_deletion_invitation(self, submission_revision_stage):
return self.venue_invitation_builder.set_submission_deletion_invitation(submission_revision_stage)

def set_post_submission_invitation(self):
return self.venue_invitation_builder.set_post_submission_invitation()

def set_submission_change_invitation(self, name, activation_date):
return self.venue_invitation_builder.set_submission_change_invitation(name, activation_date)

def set_pc_submission_revision_invitation(self):
return self.venue_invitation_builder.set_pc_submission_revision_invitation()

def set_submission_message_invitation(self):
return self.venue_invitation_builder.set_submission_message_invitation()

def set_iThenticate_plagiarism_check_invitation(self):
return self.venue_invitation_builder.set_iThenticate_plagiarism_check_invitation()

def set_submission_deletion_invitation(self, submission_revision_stage):
return self.venue_invitation_builder.set_submission_deletion_invitation(submission_revision_stage)

Comment on lines +347 to +349
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

InvitationBuilder defines set_submission_deletion_invitation twice (the second definition overwrites the first). Please remove the duplicate method to avoid confusion and accidental divergence if one copy is changed later.

Suggested change
def set_submission_deletion_invitation(self, submission_revision_stage):
return self.venue_invitation_builder.set_submission_deletion_invitation(submission_revision_stage)

Copilot uses AI. Check for mistakes.
def set_review_invitation(self):
return self.venue_invitation_builder.set_review_invitation()

Expand Down
Loading
Loading