@overcrow/mcp 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +1 -1
  2. package/dist/bootstrap/pin.json +43 -43
  3. package/dist/content/docs/en/cli.md +446 -31
  4. package/dist/content/docs/en/creator-space.md +78 -0
  5. package/dist/content/docs/en/guide.md +3 -4
  6. package/dist/content/docs/en/manifest.md +13 -6
  7. package/dist/content/docs/en/mcp.md +1 -1
  8. package/dist/content/docs/en/publish-a-widget.md +94 -0
  9. package/dist/content/docs/en/publish-keys.md +95 -0
  10. package/dist/content/docs/en/publishing.md +5 -0
  11. package/dist/content/docs/en/testing.md +3 -3
  12. package/dist/content/docs/en/verified-domain.md +46 -0
  13. package/dist/content/docs/en/widget-listing.md +65 -0
  14. package/dist/content/docs/en/widget-review.md +57 -0
  15. package/dist/content/docs/en/widget-statistics.md +134 -0
  16. package/dist/content/docs/fr/cli.md +467 -32
  17. package/dist/content/docs/fr/creator-space.md +83 -0
  18. package/dist/content/docs/fr/guide.md +3 -4
  19. package/dist/content/docs/fr/manifest.md +15 -6
  20. package/dist/content/docs/fr/mcp.md +1 -1
  21. package/dist/content/docs/fr/publish-a-widget.md +101 -0
  22. package/dist/content/docs/fr/publish-keys.md +97 -0
  23. package/dist/content/docs/fr/publishing.md +5 -0
  24. package/dist/content/docs/fr/testing.md +3 -3
  25. package/dist/content/docs/fr/verified-domain.md +49 -0
  26. package/dist/content/docs/fr/widget-listing.md +69 -0
  27. package/dist/content/docs/fr/widget-review.md +59 -0
  28. package/dist/content/docs/fr/widget-statistics.md +141 -0
  29. package/dist/content/examples/countdown/manifest.json +1 -1
  30. package/dist/content/examples/fps/submission.json +8 -0
  31. package/dist/content/examples/media/submission.json +12 -0
  32. package/dist/content/examples/notes/submission.json +12 -0
  33. package/dist/content/examples/performance/submission.json +12 -0
  34. package/dist/content/examples/playervox-journal/submission.json +12 -0
  35. package/dist/content/examples/playervox-rating/submission.json +12 -0
  36. package/dist/content/examples/playervox-reviews/submission.json +8 -0
  37. package/dist/content/examples/playervox-score/submission.json +8 -0
  38. package/dist/content/examples/session/submission.json +8 -0
  39. package/dist/content/examples/stopwatch/submission.json +12 -0
  40. package/dist/content/examples/twitch-chat/submission.json +12 -0
  41. package/dist/content/examples/warframe-market/submission.json +24 -0
  42. package/dist/content/examples/weather/manifest.json +1 -1
  43. package/dist/content/examples/weather/submission.json +17 -0
  44. package/dist/content/index.json +106 -2
  45. package/dist/content/reference/errors.json +224 -12
  46. package/dist/content/reference/manifest.md +1 -1
  47. package/dist/hidden.js +47 -0
  48. package/dist/texts.js +1 -1
  49. package/dist/tools/project.js +5 -0
  50. package/dist/tools/submission.js +1 -1
  51. package/dist/version.js +1 -1
  52. package/npm-shrinkwrap.json +2 -2
  53. package/package.json +1 -1
@@ -39,7 +39,7 @@ values it fills in. A manifest with permissions and a menu:
39
39
  {
40
40
  "schemaVersion": 1,
41
41
  "apiVersion": 1,
42
- "id": "com.example.countdown",
42
+ "id": "nova.countdown",
43
43
  "version": "1.0.0",
44
44
  "name": { "en": "Countdown", "fr": "Compte à rebours" },
45
45
  "sizing": {
@@ -79,7 +79,7 @@ values it fills in. A manifest with permissions and a menu:
79
79
  | --- | --- | --- | --- |
80
80
  | `schemaVersion` | integer 1 to 1 | yes | Manifest document version. |
81
81
  | `apiVersion` | integer 1 to 1 | yes | Widget API version; selects this schema. |
82
- | `id` | `widget ID` | yes | Reverse-DNS ID, from 3 bytes to 128 bytes: at least two dot-separated segments of `[a-z0-9-]`, each at most 63 bytes and not starting or ending with `-`. `com.playervox` and `com.playervox.*` are reserved for packages signed by PlayerVox. |
82
+ | `id` | `widget ID` | yes | Widget ID, from 3 bytes to 128 bytes: at least two dot-separated segments of `[a-z0-9-]`, each at most 63 bytes and not starting or ending with `-`; `<handle>.<name>` with the publisher's handle, or a domain the publisher verified, reversed, then a name. `com.playervox` and `com.playervox.*` are reserved for packages signed by PlayerVox. |
83
83
  | `version` | `version` | yes | SemVer 2.0.0 `MAJOR.MINOR.PATCH[-PRERELEASE]` in canonical form, at most 64 bytes; build metadata is rejected. |
84
84
  | `name` | `WidgetName` | yes | Localized widget name shown by the host. |
85
85
  | `sizing` | `Sizing` | yes | Size and fit rules applied by the widget's frame. |
@@ -92,9 +92,13 @@ values it fills in. A manifest with permissions and a menu:
92
92
  ### Identity and version
93
93
 
94
94
  - **`id`** is the widget's identity everywhere: in the catalog, in the
95
- user's profile, in its storage. Choose a reverse-DNS ID under a domain you
96
- control and keep it. IDs under `com.playervox` are reserved for widgets
97
- published by PlayerVox.
95
+ user's profile, in its storage. It is `<handle>.<name>`, your publisher
96
+ handle in the OverCrow creator space and a name (`nova.lol-timers`), or,
97
+ once you verified a domain, that domain reversed and a name
98
+ (`gg.nova.lol-timers`). An ID is final: it is never given to another
99
+ widget, even after yours is removed. `nova`, `example`, `yourhandle` and
100
+ `yourname` are example handles that nobody can publish under, and IDs
101
+ under `com.playervox` are reserved for widgets published by PlayerVox.
98
102
  - **`version`** is a semantic version. A published version never changes:
99
103
  any change to a published widget is a new, higher version.
100
104
  - **`schemaVersion`** and **`apiVersion`** are both `1`.
@@ -102,7 +106,10 @@ values it fills in. A manifest with permissions and a menu:
102
106
  ### Names
103
107
 
104
108
  `name` gives the name OverCrow shows in its widget list and menus, in
105
- English and in French. Both are required.
109
+ English and in French. Both are required. A name shows as written: no
110
+ control character and no invisible or text-direction character, such as
111
+ U+200B (zero-width space) or U+202E (right-to-left override). Menu labels
112
+ follow the same rule.
106
113
 
107
114
  <!-- generated:manifest-name -->
108
115
  | Field | Type | Required | Meaning |
@@ -119,7 +119,7 @@ Developer, Edit Config), then restart Claude Desktop.
119
119
  ## What it does not do
120
120
 
121
121
  - It never sends, signs or publishes anything. You send the ZIP and the
122
- texts in the OverCrow creator space on overcrow.playervox.com.
122
+ texts in the OverCrow creator space, at creators.playervox.com.
123
123
  - It does not install your widget in OverCrow: trying it in a game is the
124
124
  [development channel](dev-channel.md) of the command-line tool.
125
125
  - It sends nothing about you: no telemetry, no account.
@@ -0,0 +1,94 @@
1
+ # Publish a widget
2
+
3
+ In the creator space of PlayerVox OverCrow, at
4
+ `creators.playervox.com`, a widget reaches players in four steps:
5
+ you send its sources, they are checked automatically, PlayerVox reviews
6
+ them, then the version is published in the catalog. This page covers the
7
+ first two and the screen that sends a version to review; the
8
+ [review](widget-review.md) and the [listing](widget-listing.md) have their
9
+ own pages.
10
+
11
+ ## Before you send
12
+
13
+ - Your widget's ID is reserved in the creator space
14
+ ([getting started](creator-space.md)), and `manifest.json` uses it.
15
+ - `overcrow-widget check` passes in the widget's folder.
16
+ - The version in `manifest.json` is newer than the last approved one:
17
+ `1.2.1` or higher after `1.2.0`.
18
+
19
+ ## Send the sources
20
+
21
+ Open the widget in **Widgets**, then **Submit a version**.
22
+
23
+ - On a computer, drop the widget's folder on the page, or choose it. You
24
+ can also send a `.zip` of the folder.
25
+ - On a phone or a tablet, which cannot pick a folder, choose the `.zip`.
26
+
27
+ The creator space reads a folder with the same rules as
28
+ `overcrow-widget submit`, on your computer, and sends the same files. It
29
+ leaves out hidden files and folders (`.env`, `.git/`…), `node_modules/`,
30
+ `dist/`, `tests/output/`, `__MACOSX/`, built packages, key files, system
31
+ files and names that are not portable ASCII; the page lists what it left
32
+ out. A `.zip` is sent as it is. The bounds and the refusals are those of
33
+ [source archives](cli.md#source-archives): 32 MiB for the archive, 64 MiB and
34
+ 2,000 files once uncompressed, 16 levels of folders, paths of 255 bytes at
35
+ most, no two names that differ only by case.
36
+
37
+ - A `.zip` made by Windows PowerShell 5.1 (`Compress-Archive`) separates
38
+ folders with `\` and is refused at once: drop the folder instead.
39
+ - A file or folder name with `\ : * ? " < > |` is refused before anything
40
+ is sent: Windows cannot use it. Rename it.
41
+ - A browser reads the file a link points to, where the command-line tool
42
+ leaves the link out. Keep links out of the widget's folder.
43
+ - Your sources stay private: only PlayerVox reviewers read them, and every
44
+ access shows in the creator space.
45
+
46
+ A publisher sends at most 20 submissions in 24 hours; the page says when
47
+ the next one is possible. If the page is closed or the connection drops
48
+ while sending, drop the same folder again: the submission resumes, and
49
+ nothing is counted twice.
50
+
51
+ ## The checks
52
+
53
+ The checks take about a minute: the manifest, the version number, the code,
54
+ the package build, the permissions, the size. You can leave the page: an
55
+ e-mail tells you when they end.
56
+
57
+ - When a check fails, each problem is shown in your own files, with the
58
+ line and the correction. Fix it and send again; nothing reaches the
59
+ reviewers.
60
+ - "Problem on our side" means PlayerVox could not run the checks: your
61
+ code is not the cause. PlayerVox is told and runs them again.
62
+
63
+ ## Submit for review
64
+
65
+ When the checks pass, the version page says what changes for players:
66
+
67
+ - **Permissions.** Explain why the widget needs each new or widened
68
+ permission, in words players understand. A first version explains all of
69
+ them.
70
+ - **Privacy policy.** Required as soon as the widget uses the network. The
71
+ address typed here is saved into the listing too.
72
+ - **Listing.** A first version goes to review with its listing, which needs
73
+ an English description, a license and a support contact.
74
+ - **Release notes**, shown to players: optional. English comes first;
75
+ **Add a language** adds others, 16 at most. When you write any, write
76
+ them in English too.
77
+ - **Message for the review**, read only by PlayerVox: a test account,
78
+ useful context.
79
+
80
+ The page also says which review the version gets (quick or full) and what
81
+ changed since the last approved version. **Submit for review** sends it.
82
+
83
+ ## From a terminal or a CI job
84
+
85
+ `overcrow-widget submit` sends a version with a publish key, and stops at
86
+ the same screen when something is missing: see [`submit`](cli.md#submit) and
87
+ [publish keys and CI](publish-keys.md).
88
+
89
+ ## After the review
90
+
91
+ An approved version is published within 24 business hours. In the creator
92
+ space you can then withdraw it, or the whole widget (**Settings**): it
93
+ leaves the catalog at the next publication, and installed copies keep
94
+ working.
@@ -0,0 +1,95 @@
1
+ # Publish keys and CI
2
+
3
+ A publish key lets `overcrow-widget submit` send versions of one
4
+ PlayerVox OverCrow widget from a terminal or a CI job, without your
5
+ password. It can do nothing else.
6
+
7
+ ## What a key can do
8
+
9
+ - Submit versions of **one** widget, and follow their checks. Every version
10
+ still goes through the review before players get it.
11
+ - It can neither publish, nor change the listing, nor reach your account or
12
+ your other widgets.
13
+ - It lasts 1 to 365 days (90 by default). We remind you by e-mail and in
14
+ the creator space 14 days before it expires.
15
+ - PlayerVox keeps only a digest of it: the key is shown **once**, when you
16
+ create it.
17
+
18
+ ## Create a key
19
+
20
+ In the creator space, **Publish keys**, **Create a key**:
21
+
22
+ 1. Name it after where it will live (`GitHub Actions`, `Laptop`).
23
+ 2. Choose the widget and the lifetime.
24
+ 3. Confirm with a fresh code of your authenticator app.
25
+
26
+ Copy the key at once into your CI's secrets: it starts with `ocw_pub_` and
27
+ will never be shown again. If you lose it, revoke it and create another
28
+ one. A widget has at most ten active keys.
29
+
30
+ ## Use it
31
+
32
+ `overcrow-widget submit` reads the key from the environment variable
33
+ `OVERCROW_PUBLISH_KEY`, and only there: never put it in a file of your
34
+ project or in a command line.
35
+
36
+ ```sh
37
+ export OVERCROW_PUBLISH_KEY=ocw_pub_…
38
+ overcrow-widget submit
39
+ ```
40
+
41
+ The [submit command](cli.md#submit) checks the version as the creator space
42
+ will, sends it, then follows its checks, about a minute.
43
+
44
+ ## In GitHub Actions
45
+
46
+ Keep the key as a secret of the repository, `OVERCROW_PUBLISH_KEY`. This
47
+ workflow submits the widget on every version tag:
48
+
49
+ <!-- source: docs/content/examples/weather/.github/workflows/submit.yml -->
50
+ ```yaml
51
+ # Sends the widget to the OverCrow creator space when a version tag is
52
+ # pushed. The publish key is a secret of the repository, and the OverCrow
53
+ # release whose creator tools to use is a variable of the repository.
54
+ name: Submit to OverCrow
55
+
56
+ on:
57
+ push:
58
+ tags: ["v*"]
59
+
60
+ permissions:
61
+ contents: read
62
+
63
+ jobs:
64
+ submit:
65
+ runs-on: ubuntu-24.04
66
+ env:
67
+ OVERCROW_VERSION: ${{ vars.OVERCROW_VERSION }}
68
+ steps:
69
+ - uses: actions/checkout@v4
70
+ - name: Install overcrow-widget
71
+ run: |
72
+ tools="overcrow-creator-tools-$OVERCROW_VERSION-linux-x86_64"
73
+ curl --fail --location --silent --show-error --remote-name \
74
+ "https://github.com/Valhallab/playervox-overcrow-releases/releases/download/v$OVERCROW_VERSION/$tools.zip"
75
+ unzip -q "$tools.zip"
76
+ (cd "$tools" && sha256sum --check --quiet SHA256SUMS)
77
+ install -D -m 755 "$tools"/overcrow-widget-*-linux-x86_64 "$HOME/.local/bin/overcrow-widget"
78
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
79
+ - name: Submit to OverCrow
80
+ run: overcrow-widget submit --submission submission.json
81
+ env:
82
+ OVERCROW_PUBLISH_KEY: ${{ secrets.OVERCROW_PUBLISH_KEY }}
83
+ ```
84
+
85
+ The job fails when the checks fail, with each problem on the line of your
86
+ file. A version the creator space already has is not sent again: `submit`
87
+ reports its state, so the same job may also run on every push to your main
88
+ branch.
89
+
90
+ ## Revoke a key
91
+
92
+ **Revoke** stops the key at once: an upload in progress with it fails.
93
+ Versions it already sent stay, but no longer enter review on their own:
94
+ send them to review from the creator space. Revoke a key as soon as you
95
+ think it leaked, then create a new one.
@@ -1,5 +1,10 @@
1
1
  # Publishing and review
2
2
 
3
+ > **Pull requests are closed.** Widgets are no longer proposed by pull
4
+ > request: PlayerVox's own widgets already go through the OverCrow creator
5
+ > space, and yours will when it opens. Until then, this page describes the
6
+ > admission, the review and the catalog a widget goes through.
7
+
3
8
  Widgets reach PlayerVox OverCrow users through the signed widget catalog:
4
9
  OverCrow installs only what that catalog lists. This page goes from a
5
10
  widget's source directory to a listed version. Neither a pull request nor a
@@ -376,7 +376,7 @@ are real.
376
376
  `overcrow-widget-headless` is OverCrow's own code without a window: it
377
377
  validates the package as the overlay does and runs the widget's logic in
378
378
  the same sandbox. `overcrow-widget test` runs the version this CLI pins,
379
- 0.6.0-beta.2, and prints its version and SHA-256. Without the operating
379
+ 0.7.0-beta.1, and prints its version and SHA-256. Without the operating
380
380
  system's sandbox the runtime refuses to run and says so; the test command
381
381
  then ends with status 2.
382
382
 
@@ -387,8 +387,8 @@ one this CLI pins. The ZIP is not kept. The runtime then stays in the CLI's cach
387
387
 
388
388
  | Platform | Path |
389
389
  | --- | --- |
390
- | Linux | `~/.cache/overcrow-widget/runtime/0.6.0-beta.2/` (`$XDG_CACHE_HOME` instead of `~/.cache` when set) |
391
- | Windows | `%LOCALAPPDATA%\overcrow-widget\runtime\0.6.0-beta.2\` |
390
+ | Linux | `~/.cache/overcrow-widget/runtime/0.7.0-beta.1/` (`$XDG_CACHE_HOME` instead of `~/.cache` when set) |
391
+ | Windows | `%LOCALAPPDATA%\overcrow-widget\runtime\0.7.0-beta.1\` |
392
392
 
393
393
  To work offline, put the runtime of the creator tools ZIP there yourself
394
394
  (executable on Linux): `test` finds it and downloads nothing. With
@@ -0,0 +1,46 @@
1
+ # Verified domain
2
+
3
+ Verifying a domain you own puts the **Verified domain** badge next to your
4
+ publisher's name, in the Control Center of PlayerVox OverCrow and on the
5
+ website, and lets your
6
+ widgets' IDs start with that domain reversed: `gg.nova.lol-timers` for
7
+ `nova.gg`.
8
+
9
+ ## Add a domain
10
+
11
+ In the creator space, **Publisher profile**, **Add a domain**. Write the
12
+ domain alone, without `https://` or `www.`: `nova.gg`. A publisher can hold
13
+ up to eight domains.
14
+
15
+ The creator space then gives the DNS record to publish at your DNS host: a
16
+ TXT record named `_overcrow.` followed by your domain, whose value is
17
+ `overcrow-verify=` followed by a token.
18
+
19
+ ```text
20
+ _overcrow.nova.gg. TXT "overcrow-verify=3f9c1e7a52d04b8e"
21
+ ```
22
+
23
+ ## Verification
24
+
25
+ **Check now** looks for the record at once (once a minute at most). We
26
+ also check on our own every hour for seven days. DNS can take a few minutes
27
+ to spread.
28
+
29
+ | State | Meaning |
30
+ | --- | --- |
31
+ | Pending | The record is not found yet; checked every hour for seven days. |
32
+ | Verified | The record is found. It is checked again every 30 days. |
33
+ | Lost | The record disappeared. Put it back, then check now. |
34
+ | Expired | Not verified within seven days. Check now to start again. |
35
+
36
+ Keep the record in place: if it disappears, the badge goes away. The IDs
37
+ of widgets you already created under the domain stay yours.
38
+
39
+ ## Who can claim a domain
40
+
41
+ - A domain verified once by a publisher is reserved to it, as are the
42
+ domains under and above it: nobody else can claim them.
43
+ - A domain reading as PlayerVox, OverCrow or Valhallab is refused; write to
44
+ support if it is yours. IDs under `com.playervox` belong to PlayerVox.
45
+ - Removing a domain never verified forgets it. A domain verified once stays
46
+ reserved to you, and cannot be removed while widget IDs use it.
@@ -0,0 +1,65 @@
1
+ # The listing: best practices
2
+
3
+ The listing is what players read in the PlayerVox OverCrow catalog before
4
+ they install a widget: its description, its preview, its category, its
5
+ games, its license and its links. You write it in the creator space, in the
6
+ widget's **Listing** tab.
7
+
8
+ ## Saved as you type
9
+
10
+ The listing is a draft, saved by itself as you type.
11
+
12
+ - A widget's first listing goes to review with its first version.
13
+ - Later changes go alone to a quick review: **Submit the listing**. They
14
+ need no new version of the widget. **Cancel the changes** brings the
15
+ draft back to the published listing.
16
+ - The category is the exception: you change it at any time, without a
17
+ review, and the change reaches players with the next publication of the
18
+ catalog.
19
+
20
+ ## Languages
21
+
22
+ English comes first: it is the default, shown when a player's language has
23
+ no description. **Add a language** adds another one, 16 languages at most.
24
+ The widget's name comes from its manifest (`name.en`, `name.fr`): to change
25
+ it, change the manifest and submit a version. The languages of the widget's
26
+ own interface come from its `locales/` files.
27
+
28
+ ## Description
29
+
30
+ - 500 characters at most per language. The first two lines show on the
31
+ catalog card: say what the widget does, plainly.
32
+ - Say when the widget contacts a server, and which one.
33
+ - No advertising and no claim the widget does not keep.
34
+
35
+ ## Preview image
36
+
37
+ One image, in English, for every language: a PNG in 4:3, from 480 × 360 to
38
+ 1,024 × 768 (1,024 × 768 recommended), 256 KiB at most. Show the widget in
39
+ use, without marketing text.
40
+
41
+ ## Category and games
42
+
43
+ The category places the widget in the catalog. Add up to five games it is
44
+ made for: players filter the catalog by game.
45
+
46
+ ## License and links
47
+
48
+ - **License**: "Proprietary, all rights reserved", or an SPDX license such
49
+ as `MIT` or `Apache-2.0`.
50
+ - **Support**: an e-mail address or a web page where players get help.
51
+ Required.
52
+ - **Privacy policy**: required as soon as the widget uses the network.
53
+ - **Public source code**: optional; a public repository adds the "Public
54
+ source code" badge.
55
+
56
+ Type an address as you know it (`example.com/privacy`): `https://` is added
57
+ for you, and a `/` after a bare domain (`example.com` is saved as
58
+ `https://example.com/`). An address in `http://` is refused.
59
+
60
+ ## From listing.json
61
+
62
+ A version's sources may carry a `listing.json`, as the command-line tool
63
+ reads it (see [`admit`](cli.md#admit)). In the
64
+ **Listing** tab, **Import listing.json** applies its descriptions, license
65
+ and source code address to the draft.
@@ -0,0 +1,57 @@
1
+ # Review: types, delays, appeals
2
+
3
+ Every version of a PlayerVox OverCrow widget, and every change of its
4
+ listing, is read by a person at PlayerVox before players get it. This page
5
+ covers the two kinds of review, their delays, the review thread and the
6
+ appeal. To send a version, see [publish a widget](publish-a-widget.md).
7
+
8
+ ## Quick or full
9
+
10
+ | Review | When | Longest delay |
11
+ | --- | --- | --- |
12
+ | Full | The first publication, or an update that adds a permission, a network route or a capability | 5 business days |
13
+ | Quick | Any other update, or a change of the listing alone | 2 business days |
14
+ | Appeal | Once per decision, within six months | 7 days |
15
+ | Publication | After the approval | 24 business hours |
16
+
17
+ Business days run Monday to Friday, except French public holidays. The delay
18
+ is paused while the review waits for your reply or a corrected version.
19
+ A quick review reads the lines that changed since the last approved
20
+ version; a full review reads the whole widget.
21
+
22
+ ## The review thread
23
+
24
+ Each version in review has a thread in the creator space:
25
+
26
+ - A **remark** points to a file and a line, quotes the code the reviewer
27
+ read and cites a numbered rule of the publication rules.
28
+ - You can **reply** to the reviewer. Your reply sends the review back to
29
+ the reviewer when it was waiting for you.
30
+ - A **corrected version** continues the same thread: send it from
31
+ **Submit a version**, with a newer version number.
32
+ - The **decision** is approval, changes requested or a refusal, always
33
+ with its reasons.
34
+
35
+ Reviewers are shown as "PlayerVox reviewer", never by name. Every time a
36
+ reviewer opens your sources, the creator space shows when, which version
37
+ and why, under **Access to your sources**.
38
+
39
+ ## Appeal
40
+
41
+ You can contest a refusal or a suspension once per decision, within six
42
+ months, with **Contest the decision**. PlayerVox re-examines the decision
43
+ entirely and answers within 7 days, with its reasons. You can always send a
44
+ new version instead.
45
+
46
+ ## Suspension
47
+
48
+ When players are at risk (malicious code, a leaked key, a data leak),
49
+ PlayerVox can suspend a widget or a version at once: installed copies are
50
+ turned off. The creator space gives the reason and the rule, and the
51
+ appeal stays open.
52
+
53
+ ## Withdrawal
54
+
55
+ You can withdraw a version or the whole widget at any time: it leaves the
56
+ catalog at the next publication, and installed copies keep working. A
57
+ version in review or approved but not published yet is withdrawn at once.
@@ -0,0 +1,134 @@
1
+ # Statistics: definitions
2
+
3
+ The **Statistics** tab of a widget, in the creator space, shows how players
4
+ use it: installs, daily active players, errors and the players' rating.
5
+ PlayerVox OverCrow sends these figures anonymously. They are trends, not
6
+ exact counts: this page says what each figure counts and what it leaves out.
7
+
8
+ ## Where the figures come from
9
+
10
+ Once a day at most, at a random time, OverCrow sends one anonymous signal
11
+ for each widget installed from the catalog: the widget, its version, the
12
+ day, the system (Windows or Linux), the version of OverCrow, whether the
13
+ widget was shown, installed or uninstalled that day, and its errors (kind,
14
+ place in the code, a rounded count).
15
+
16
+ - **No identifier**: nothing names the player or the computer, and nothing
17
+ links the widgets of one player, each widget being sent apart.
18
+ - **No error message**: only the kind of an error and its place in your
19
+ code. A message may hold personal data.
20
+ - **On by default**: players can turn **Share anonymous statistics** off in
21
+ OverCrow; nothing is sent after that, and they are no longer counted.
22
+
23
+ The figures are added up as the signals arrive. **Updated** gives the time
24
+ of the last one counted.
25
+
26
+ ## The figures
27
+
28
+ | Figure | What it counts |
29
+ | --- | --- |
30
+ | Daily active players | The players who showed the widget at least once that day. The tile gives the mean per day over the period. |
31
+ | Active installs | Installs minus uninstalls, added up since the first signal, never below zero. |
32
+ | Installs · uninstalls | The installs and the uninstalls of the period, and their balance. An update is neither. |
33
+ | Errors | The sum of the errors reported over the period. |
34
+
35
+ Each tile compares its figure with the period just before, of the same
36
+ length: green when it moves the good way (fewer errors, more players), amber
37
+ the other way, grey when it moves by less than 1 %. **First period** means
38
+ there is nothing before to compare with.
39
+
40
+ ## Periods and filters
41
+
42
+ - **Period**: 7 days, 28 days, 90 days or 12 months. Over 12 months, the
43
+ installs and uninstalls chart adds up each week.
44
+ - **Version**: one of your published versions. Active installs show "—"
45
+ with a version: an installation changes version at every update, so that
46
+ figure only makes sense for all versions. **Version adoption** compares
47
+ the versions and does not follow this filter.
48
+ - **System**: Windows or Linux. **Where your widget runs** compares the
49
+ systems and does not follow this filter.
50
+ - The rating follows no filter.
51
+
52
+ Every chart has **View as table**, with the same figures day by day.
53
+
54
+ ## Version adoption and where your widget runs
55
+
56
+ - **Version adoption**: the share of the daily active players on each
57
+ version. The three newest versions keep their colour; the others add up as
58
+ **Older**.
59
+ - **Where your widget runs**: the share of active players on Windows and on
60
+ Linux, and on each version of OverCrow (the two most used, then
61
+ **Others**).
62
+
63
+ ## Errors
64
+
65
+ The errors are grouped by kind and by place in your code: the same kind at
66
+ the same line of the same function is one group, whatever the version. The
67
+ table shows the 50 most frequent groups of the period, with their versions,
68
+ their count and their trend; **Export CSV** saves them.
69
+
70
+ OverCrow reports where an error happened in the package's `logic.js`. The
71
+ creator space traces that position back to your sources (file, line and
72
+ function) with a map of your code built with the package and never
73
+ published.
74
+
75
+ - **Being traced**: the position is shown as `logic.js:line:column` until it
76
+ is traced.
77
+ - **Not traced**: the version has no map, or the position is not in it; the
78
+ raw position stays.
79
+ - **No position in the code**: the widget stopped as a whole (budget
80
+ exceeded, no answer); see its kind.
81
+ - **SDK**: the error happened inside `@overcrow/sdk`, called from your code.
82
+
83
+ | Kind | Meaning |
84
+ | --- | --- |
85
+ | `Error` | Error thrown |
86
+ | `TypeError` | Value of an unexpected type |
87
+ | `RangeError` | Value out of range |
88
+ | `ReferenceError` | Unknown name |
89
+ | `SyntaxError` | Invalid syntax |
90
+ | `URIError` | Invalid address encoding |
91
+ | `EvalError` | Code evaluation refused |
92
+ | `AggregateError` | Several errors at once |
93
+ | `InternalError` | Engine limit reached |
94
+ | Thrown value | A value that is not an error was thrown |
95
+ | Memory or processing budget exceeded | The widget was restarted |
96
+ | Stopped responding | The widget was restarted |
97
+ | Failed to load | The code or the view could not load |
98
+ | Widget process stopped | Without reporting a fault |
99
+ | Network request refused | Address not declared in the manifest |
100
+ | Other error | Of a kind the creator space does not know yet |
101
+
102
+ The kind of an error is the built-in type it was created from, never the
103
+ `name` your code may give it.
104
+
105
+ ## Player rating
106
+
107
+ Players rate a widget from 0 to 100 in the OverCrow Control Center, with
108
+ their PlayerVox account: one rating per account and per widget, which they
109
+ can change or remove.
110
+
111
+ - **Score**: the mean of the ratings, rounded, with its rank: S+ from 90,
112
+ S from 80, A from 70, B from 60, C from 40, D from 20, then F.
113
+ - **From 5 ratings**: below that, the creator space says **Not enough
114
+ ratings yet** and gives the number of ratings; the catalog shows nothing.
115
+ - **Spread by rank**: the number of ratings in each rank, shown only in
116
+ the creator space. Nobody sees who rated.
117
+ - **Since the latest version**: the points gained or lost since your latest
118
+ version was published, when 5 ratings existed before it.
119
+ - The members of your publisher cannot rate its widgets.
120
+
121
+ Players see the score, the rank and the number of ratings in the catalog
122
+ and on the website.
123
+
124
+ ## Trends, not exact counts
125
+
126
+ - Only the players who share their anonymous statistics are counted.
127
+ - OverCrow rounds each error count to a step before sending it, and sends
128
+ at most 10 places in the code per widget and day: the error figures give
129
+ orders of magnitude.
130
+ - A day is the player's own date.
131
+ - A player who clears OverCrow's data, then installs the widget again,
132
+ counts as two installs.
133
+ - Signals that look broken or inflated are set aside before they are
134
+ counted.