Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ The official specification of the [WCA Competition Interchange Format](./specifi

## Versioning

This document is for v2.0.0, the current `latest` version of WCIF. See the following for more information:
This document is for v2.0.1, the current `latest` version of WCIF. See the following for more information:
- [Changelog](https://github.com/thewca/wcif/blob/latest/changelog.md) for more information.
- [WCIF Versioning Policy](https://github.com/thewca/wcif/blob/latest/versioning-policy.md) for more information.

Expand Down
20 changes: 16 additions & 4 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
## v2.0.0: Changelog from v1.1
## v2.1.1: Change from v2.0.1

### Minor
- Added `scope` to `ResultCondition` types `ranking` and `percent`, to clarify whether the single or average should be used to determine ranking.

### Patch
- Clarified that `ParticipationSource` may be `null` for competitions during and before 2021.

Changes from v1.1 are as follows:

### Major
## v2.0.1: Change from v2.0.0

### Patch:
- Corrected usage of field names and clarified which fields may also return null values.

## v2.0.0: Changelog from v1.1

### Major:
- Replaced `AdvancementCondition` object with `ParticipationRuleset`
- `ResultCondition` object added, which is used by both `ParticipationRuleset` and `Qualification`
- `Qualification` object changed to make use of `ResultCondition`
Expand All @@ -20,5 +32,5 @@ Changes from v1.1 are as follows:

## v1.1.0: Changelog from v1.0

Changes from v1.0 are as follows:
### Minor:
- Added value `5` to `round.format` enum - `5` corresponds to a Best of 5 format as described in the [2026 Regulation Changes](https://github.com/thewca/wca-regulations-january-2026/pull/48).
29 changes: 17 additions & 12 deletions specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ WCIF stands for WCA Competition Interchange Format and is a specification of com
It's designed as a way for many applications to exchange data in a standardized manner.

## Version
- Number: 2.0.0
- Number: 2.1.1
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm, will wca website ever request data for wcif 2.0.0 and 2.1.1?

Maybe we just support different versions based on what we intend to return from the wca website?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Hmm, I don't quite understand this - how do you mean "Maybe we just support different versions based on what we intend to return from the wca website?"

Gregor and I chatted about this the other day - we'll basically only ever return the latest and current - so if 2.0.0 gets superceded by 2.1.1 in current, we'll cease to serve 2.0.0 - except in exceptional circumstances where we might continues to serve a deprecated version for some period of time.

- Status: Latest
- Next Status: Stable
- Status Advancement Date: N/A
Expand Down Expand Up @@ -327,7 +327,7 @@ Represents an official personal record.
```json
{
"eventId": "333",
"best": 790,
"value": 790,
"type": "single",
"worldRanking": 995,
"continentalRanking": 105,
Expand Down Expand Up @@ -366,7 +366,7 @@ Represents data of a round held at the competition.
| Attribute | Type | Description |
| --- | --- | --- |
| `id` | `String` | The round identifier of the form `{eventId}-r{roundNumber}`. *Note: this is a valid [`ActivityCode`](#activitycode).* |
| `linkedRounds` | [`String`] | A list of round ID's indicating the rounds which this round is linked to, for the purposes of implementing [Dual Rounds](https://www.worldcubeassociation.org/regulations/#9v). LinkedRounds have their results considered together for the purpose of participation in subsequent rounds in the competition. |
| `linkedRounds` | [`String`] \| `null` | A list of round ID's indicating the rounds which this round is linked to, for the purposes of implementing [Dual Rounds](https://www.worldcubeassociation.org/regulations/#9v). LinkedRounds have their results considered together for the purpose of participation in subsequent rounds in the competition. |
| `format` | `"1"\|"2"\|"3"\|"5"\|"a"\|"m"\|"h"` | The round format. Look [here](https://github.com/thewca/worldcubeassociation.org/blob/main/lib/static_data/formats.json) for the list of all the WCA formats. |
| `timeLimit` | [`TimeLimit`](#timelimit)\|`null` | The time limit in this round. For events with unchangeable time limit (3x3x3 MBLD, 3x3x3 FM) the value is `null`. |
| `cutoff` | [`Cutoff`](#cutoff)\|`null` | The cutoff in this round. |
Expand All @@ -381,6 +381,7 @@ Represents data of a round held at the competition.
```json
{
"id": "333-r1",
"linkedRounds": ["333-r1", "333-r2"],
"format": "a",
"timeLimit": {...},
"cutoff": {...},
Expand Down Expand Up @@ -436,8 +437,8 @@ Regardless of the participation ruleset type, [regulation 9p1](https://www.world

| Attribute | Type | Description |
| --- | --- | --- |
| `participationSource` | [`ParticipationSource`](#participationsource) | The type of participation ruleset. Either of `registrations` (all registered competitors) `ranking` (top N competitors), `percent` (top X% of competitors) or `resultValue` (competitors with result better than Y - either single or average as per [9p2+](https://www.worldcubeassociation.org/regulations/guidelines.html#9p2+)). |
| `reservedPlaces` | [`ReservedPlaces`](#reservedplaces) | Places in a finals reserved for competitors from a particular nationality or continent, as defined in [9p2b](https://www.worldcubeassociation.org/regulations/#9p2b). |
| `participationSource` | [`ParticipationSource`](#participationsource)\|`null` | The type of participation ruleset. Either of `registrations` (all registered competitors) `ranking` (top N competitors), `percent` (top X% of competitors) or `resultValue` (competitors with result better than Y - either single or average as per [9p2+](https://www.worldcubeassociation.org/regulations/guidelines.html#9p2+)). May only be `null` for competitions from 2021 and before. |
| `reservedPlaces` | [`ReservedPlaces`](#reservedplaces)\|`null` | Places in a finals reserved for competitors from a particular nationality or continent, as defined in [9p2b](https://www.worldcubeassociation.org/regulations/#9p2b). |

### ParticipationSource

Expand Down Expand Up @@ -537,7 +538,7 @@ See "Announcement Criteria" paragraph 5.1 in the [WCA Competition Requirements P
| --- | --- | --- |
| `earliestResultDate` | [`Date`](#date)\|`null` | An optional field indicating a date from which a result must have been achieved in order to meet the qualification. In practice, this would be to ensure that qualification spots are taken by active, in-form competitors. |
| `latestResultDate` | [`Date`](#date) | The date by which the qualification requirement must be satisfied. If a result is set in a multiple-day competition which ends before this date, that is considered to have been set by this date. |
| `resultCondition` | [`ResultCondition`](#resultcondition) | Specifies the requirement a competitor must satisfy to register. Only ResultCondition types `resultValue` and `ranking` are used for Qualification. |
| `resultCondition` | [`ResultCondition`](#resultcondition) | Specifies the requirement a competitor must satisfy to register. Only ResultCondition types `resultAchieved` and `ranking` are used for Qualification. |

#### Examples

Expand Down Expand Up @@ -586,7 +587,7 @@ Represents one of attempts a competitor got during the given round.

```json
{
"result": 650,
"value": 650,
"reconstruction": "z y2 U Rw' D2 L F' L' D' ..."
}
```
Expand All @@ -599,9 +600,9 @@ An object representing the criteria a competitor needs to meet to satisfy a [Qua

| Attribute | Type | Description |
| --- | --- | --- |
| `type` | `String` | Always `resultAchieved`
| `scope` | `"single"\|"average""` | Specifies if the result should be a `single` or `average`.
| `value` | `ResultValue`\|`null` | Species the `ResultValue` necessary to meet the ResultCondition. `null` indicates that any non-DNF/DNS result achieved in the given `scope` will meet the ResultCondition.
| `type` | `String` | Always `resultAchieved` |
| `scope` | `"single"\|"average""` | Specifies if the result should be a `single` or `average`. |
| `value` | `ResultValue`\|`null` | Species the `ResultValue` necessary to meet the ResultCondition. `null` indicates that any non-DNF/DNS result achieved in the given `scope` will meet the ResultCondition. |

##### Example
```json
Expand All @@ -626,14 +627,16 @@ An object representing the criteria a competitor needs to meet to satisfy a [Qua

| Attribute | Type | Description |
| --- | --- | --- |
| `type` | `String` | Always `ranking`
| `type` | `String` | Always `ranking` |
| `scope` | `"single"\|"average""` | Specifies if the result should be a `single` or `average`. For ParticipationRuleset, this will always be determined by the event format, and cannot be changed via a WCIF patch.. |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Same as my other comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed

| `value` |`Integer` | Top-N (inclusive) competitors who meet the ResultCondition - ranked by world ranking (Qualification) or results of rounds considered in the `participationSource` (ParticipationRuleset)

##### Example
```json
// Top 16 competitors meet the ResultCondition
{
"type": "percent",
"type": "ranking",
"scope": "average",
"value": 16
}
```
Expand All @@ -643,6 +646,7 @@ An object representing the criteria a competitor needs to meet to satisfy a [Qua
| Attribute | Type | Description |
| --- | --- | --- |
| `type` | `String` | Always `percent`
| `scope` | `"single"\|"average""` | Specifies if the result should be a `single` or `average`. For ParticipationRuleset, this will always be determined by the event format, and cannot be changed via a WCIF patch.. |
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

by the round format.
Also, double full stop at the end

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed

| `value` | `Integer` | The top n-% of competitors who meet the ResultCondition (70% will be expressed as `70`)

##### Example
Expand All @@ -651,6 +655,7 @@ An object representing the criteria a competitor needs to meet to satisfy a [Qua
// Top 70% of competitors meet the ResultCondition
{
"type": "percent",
"scope": "single",
"value": 70
}
```
Expand Down
4 changes: 3 additions & 1 deletion versioning-policy.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ We will follow [SemVer](https://semver.org/)’s Major.Minor.Patch format, defin
- Major changes in business logic - such as the addition of a new round format or advancement type.[^1]
- **Minor**: increments upon the addition of new functionality that maintains _forward compatibility_ - ie, existing implementations can continue without error
- Adding a new field, adding values to an existing enum
- **Patch**: a change which does not meaningfully alter API output - for example, bugfixes that alter incorrect behaviour to align with documented behaviour
- **Patch**: clerical changes improving spec clarity, or a change which does not meaningfully alter API output
- Correcting an inconsistency in field naming between documentation and the example of the documentation
- Bugfixes that alter incorrect behaviour to align with documented behaviour

[^1] Sometimes these changes may "just" take the form of a new enum value, which would usually be handled by a Minor version increment. In certain cases, however, the change to business logic is significant enough to mandate a Major version change, to ensure that backwards-compatibility doesn't allow third-party tools to create undesireable outcomes (such as incorrectly determining round advancement from a new round advancement criterion).

Expand Down