discovery-media-player 0.1.157 → 0.1.158

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.
@@ -1050,6 +1050,35 @@ Asked of us, the answer has two halves and only one of them is a promise:
1050
1050
 
1051
1051
  Bring us the seam you need and cannot get, rather than working around a missing one in silence.
1052
1052
 
1053
+ ⚠️ **What every report must carry: the version you measured on.** One field, and it is the one we
1054
+ kept losing. `version` is already in the identity card — `GET /api/doc` serves it — so this costs
1055
+ you a copy-paste and nothing else: *"measured on 0.1.146"*, beside the shape and the count.
1056
+
1057
+ This is here because a host showed that we had asked for the wrong thing. We had asked hosts to stay
1058
+ current, reasoning that we cannot act on a report we cannot reproduce. Their correction: **what we
1059
+ need is not that you are up to date, it is knowing which version the measurement came from** — and a
1060
+ stamped report from a host eleven releases behind is reproducible, while an unstamped one from a
1061
+ perfectly current host is not. We then measured this document: of twelve host findings recorded in
1062
+ it, **none** names the version it was measured on. Some of those hosts were current at the time. The
1063
+ information was lost when we wrote it down, and no amount of future alignment brings it back.
1064
+
1065
+ So: **shape, count, version.** If the measurement spans an upgrade, say both. If you no longer know
1066
+ which version a past observation came from, say that too — *"measured some time before 0.1.150"* is
1067
+ worth more than a number we would have to guess at, and far more than silence.
1068
+
1069
+ ⚠️ **And name yourself inside the report, not just in how you send it.** Reports reach us through
1070
+ whatever channel carries them, and a channel can deliver the same message twice or put one host's
1071
+ text under another host's name — both happened to us in a single round, and we spent an exchange
1072
+ establishing who had said what instead of acting on it. Neither you nor we could tell from our own
1073
+ end; only the person relaying could, and they did. **One line of self-identification in the body
1074
+ costs nothing and survives any relay** — the same reasoning as the version stamp, applied to *who*
1075
+ rather than *what*.
1076
+
1077
+ The consequence for us is worth stating too, since it is about how much we can claim to have heard:
1078
+ when a duplicate is resolved, the reading it seemed to provide does not turn up elsewhere. It leaves
1079
+ us with one fewer host heard from, and we would rather record that plainly than let a channel look
1080
+ wider than it is.
1081
+
1053
1082
  **What not to send.** Shapes and counts, never contents. No row data, no reader IPs or User-Agents —
1054
1083
  those are the columns half this contract exists to get rid of — no keys, tokens, connection strings,
1055
1084
  or private hostnames. *"A table of ~1600 rows returned 1000"* is the whole of what we needed to fix
@@ -1060,23 +1089,61 @@ dated entry naming the case. That last part is deliberate and a host asked for i
1060
1089
  justification rots, a dated incident does not. In six months someone will read a field and ask why
1061
1090
  it exists, and the answer will name you.
1062
1091
 
1092
+ ⚠️ **But that date is ours, and for a long time we mistook it for yours.** Every changelog section
1093
+ carries the day *we shipped the fix* — 155 out of 155, checked. None carries the version *you*
1094
+ measured on, and the two answer different questions: ours says when it was closed, yours says what
1095
+ the observation was of. We had that backwards long enough to ask hosts for the wrong thing, so it is
1096
+ worth stating plainly rather than quietly correcting: **the entries above this line are unstamped,
1097
+ and cannot be retro-stamped** — the versions they were measured on were never recorded and are not
1098
+ recoverable. Everything from here on carries the stamp you send.
1099
+
1063
1100
  ## Versioning
1064
1101
 
1065
1102
  Semantic versioning on the package, independent of the `contract` number. Pin an **exact** version:
1066
1103
  the player and its hosts deploy separately, and a range brings in a version nobody decided to
1067
1104
  deploy, on a day someone ran `npm install` for another reason.
1068
1105
 
1069
- ⚠️ **And please keep that pin current — one train behind at most.** A host asked whether this
1070
- mattered, having verified a release without moving onto it: the diff was comments only, no
1071
- migration, and their argument was that what makes a verification useful is the verification, not the
1072
- pin. That reasoning is sound, and the answer is still yes, for a reason that is ours rather than
1073
- theirs: **a report we cannot reproduce is a report we cannot act on.** Every finding in this
1074
- document arrived as "we measured X" — the ceiling, the platform timeout, the truncated aggregate.
1075
- Each was worth something because we could stand the same version up beside it. When installations
1076
- drift apart by several versions, a measurement stops being about the player and starts being about
1077
- which player, and the first thing we spend on any report is establishing that.
1078
-
1079
- It is a request, not a requirement: nothing here refuses to run on an older version, the contract
1080
- number has not moved, and a release whose notes say it changes nothing for you genuinely changes
1081
- nothing for you. But we are asking for the alignment explicitly rather than assuming it — which is
1082
- the point of writing it down at all.
1106
+ ⚠️ **When we say a release "changes nothing for you", check it from *your* version — ours is not
1107
+ yours.** The zone table in every Release compares the new version to **the one immediately before
1108
+ it**. That is our convenience, not your situation: a host two or three releases back is looking at a
1109
+ different diff, and theirs is the one that decides. A host caught this by redoing it — we had
1110
+ compared `0.1.156 → 0.1.157`; they were jumping from `0.1.155`, ran their own comparison, and got a
1111
+ third file we had not mentioned. Same conclusion in the end (no migrations, zero lines of code in
1112
+ `server/` once comments are excluded), **but reached on their span rather than on our word.**
1113
+
1114
+ So take the reassurance as a starting point and not as a finding. The tarballs are public: `npm pack`
1115
+ both versions and `diff -rq` the two trees is a minute's work, and it is the only version of the
1116
+ question that is about your installation.
1117
+
1118
+ ⚠️ **We asked you to stay current. That was the wrong ask, and a host took it apart.** The previous
1119
+ version of this paragraph requested that hosts keep the pin no more than one release behind, on the
1120
+ grounds that *a report we cannot reproduce is a report we cannot act on.* The premise is right. The
1121
+ conclusion did not follow:
1122
+
1123
+ > You are asking that hosts be up to date; what you need is to know **which version a measurement
1124
+ > was taken on**. They are not the same thing, and the second is strictly cheaper.
1125
+
1126
+ They are exactly right, and the counter-example is decisive. A host eleven releases behind who
1127
+ writes *"measured on 0.1.146: the 1600-row table returned 1000"* has given us a reproducible report.
1128
+ A perfectly aligned host who writes *"it returns 1000"* has not — and we find out only on the day we
1129
+ try to replay it. **Alignment neither implies the stamp nor substitutes for it.**
1130
+
1131
+ ⚠️ **And it is measurable in this very document — which is how we know the drift was never the
1132
+ cause.** They counted twelve places where this contract reports a host's finding and found one
1133
+ carrying a version nearby. We re-measured rather than take it: of those twelve, **zero** carry the
1134
+ version the host measured on. The single dated line in this file stamps *our own* measurement of our
1135
+ own code, not anyone's report. Several of those findings came from hosts who were current at the
1136
+ time. **The information was lost in the writing, not in the deployment, and no future alignment
1137
+ restores it.**
1138
+
1139
+ ⚠️ **Worse: the ask had the shape of the bias we had just written against ourselves.** A request to
1140
+ stay aligned can only be honoured by hosts who answer us, and is invisible in hosts who have
1141
+ drifted — so the channel would have reported "hosts are aligned" because the aligned are the only
1142
+ ones we hear from. That is the instrumentation bias one level up, applied to cadence instead of
1143
+ yield. The host who named it also took the release anyway, which is why the correction is theirs and
1144
+ not a concession.
1145
+
1146
+ **So the ask is now the stamp, and it is above, in what a report must carry.** Staying current keeps
1147
+ a smaller and separate value — you get fixes sooner, and a release that changes nothing for you
1148
+ costs nothing to take — but it is no longer presented as what makes your reports usable. It never
1149
+ was.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discovery-media-player",
3
- "version": "0.1.157",
3
+ "version": "0.1.158",
4
4
  "description": "Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the application hosting it — everything it borrows arrives through an injected context.",
5
5
  "keywords": [
6
6
  "pdf-viewer",