You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
its docstring repeats "Spacewalk, juiceboxPanel.js, four sites"
docs/architecture-review.html is a fifth, though it is a dated snapshot and arguably exempt.
It has already drifted, within a week
#468's spec comment cited Spacewalk's sessionServices.js:158,:229 as the browser.dataset reader. By the time #468 was implemented, aidenlab/spacewalk#84 had landed and moved that read into src/juicebox/hicMapState.js. The decision in the comment was still right; the citation was already wrong, and the review caught it only because someone grepped the sibling checkout by hand.
ADR-0003's Last measured: line pins spacewalk 2776a3a; that repo's HEAD is now 730da58. Same shape as the contactMatrixView.viewportElement miss ADR-0003 already admits to — a hand-built table incomplete within a week.
Why nothing catches it
These facts are about repos juicebox.js does not build or test against, so no check here can fail when they rot.
Note the asymmetry #468 landed with. The rule — nothing internal reads the alias — is enforced automatically and forever by test/testAccessorVocabulary.js. The facts the rule exists to serve are prose in four files, verified only by a human running a grep in two other checkouts.
And precision makes it worse, not better: a file-and-line citation rots the moment the consumer refactors, while the vague "Spacewalk uses this" that would not rot is exactly what fails to stop a future cleanup pass. That tension is the issue. Do not resolve it by deleting the citations — naming the consumer at the accessor is deliberate (#468: "Naming the consumer is the point"), because that is where someone stands when they are about to delete it.
Options, cheapest first
One source, pointers elsewhere. ADR-0003's table stays the only place with counts and filenames; the JSDoc and test docstrings say "read by a host — see ADR-0003". Cheap, keeps one thing to update, but weakens the JSDoc exactly where it does its work.
A script that greps the sibling checkouts.npm run measure-consumers looks for ../spacewalk and ../juicebox-web, greps for every name in BROWSER_SURFACE, and diffs the result against ADR-0003's table. The only option that can actually fail. Skips (does not fail) when the checkouts are absent, so CI is unaffected. Would have caught the sessionServices.js move and the viewportElement omission both.
Not obviously worth doing before the release — but if it is done, 3 is the one with teeth, and 2 is worth doing regardless since it is one line.
Verification
Whichever option: ADR-0003's table, js/publicApi.js, the js/hicBrowser.js accessor JSDoc and test/testAccessorVocabulary.js's docstring must agree with a fresh grep of both consumer checkouts at the time it lands.
Part of #466. Fell out of the #468 code review.
The same class of fact — which host app reads which member — is now written down in four places, in prose, with nothing keeping them in sync.
docs/adr/0003-public-api-contract.mddataset | ✔ (3 sites) | ✔), plus aLast measured:line pinning both consumer SHAsjs/publicApi.jsactiveDatasetis here because Spacewalk reads it"js/hicBrowser.jsjuicebox/hicMapState.js,juicebox/juiceboxPanel.js(4 sites)test/testAccessorVocabulary.jsjuiceboxPanel.js, four sites"docs/architecture-review.htmlis a fifth, though it is a dated snapshot and arguably exempt.It has already drifted, within a week
#468's spec comment cited Spacewalk's
sessionServices.js:158,:229as thebrowser.datasetreader. By the time #468 was implemented, aidenlab/spacewalk#84 had landed and moved that read intosrc/juicebox/hicMapState.js. The decision in the comment was still right; the citation was already wrong, and the review caught it only because someone grepped the sibling checkout by hand.ADR-0003's
Last measured:line pins spacewalk2776a3a; that repo's HEAD is now730da58. Same shape as thecontactMatrixView.viewportElementmiss ADR-0003 already admits to — a hand-built table incomplete within a week.Why nothing catches it
These facts are about repos juicebox.js does not build or test against, so no check here can fail when they rot.
Note the asymmetry #468 landed with. The rule — nothing internal reads the alias — is enforced automatically and forever by
test/testAccessorVocabulary.js. The facts the rule exists to serve are prose in four files, verified only by a human running a grep in two other checkouts.And precision makes it worse, not better: a file-and-line citation rots the moment the consumer refactors, while the vague "Spacewalk uses this" that would not rot is exactly what fails to stop a future cleanup pass. That tension is the issue. Do not resolve it by deleting the citations — naming the consumer at the accessor is deliberate (#468: "Naming the consumer is the point"), because that is where someone stands when they are about to delete it.
Options, cheapest first
Last measured:line" to the pre-release checklist in Tracking: architecture review candidates (docs/architecture-review.html) #466. Cheap, but it is another manual step, and Refactor: one accessor vocabulary for dataset and state #468 drifted between releases.npm run measure-consumerslooks for../spacewalkand../juicebox-web, greps for every name inBROWSER_SURFACE, and diffs the result against ADR-0003's table. The only option that can actually fail. Skips (does not fail) when the checkouts are absent, so CI is unaffected. Would have caught thesessionServices.jsmove and theviewportElementomission both.Not obviously worth doing before the release — but if it is done, 3 is the one with teeth, and 2 is worth doing regardless since it is one line.
Verification
Whichever option: ADR-0003's table,
js/publicApi.js, thejs/hicBrowser.jsaccessor JSDoc andtest/testAccessorVocabulary.js's docstring must agree with a fresh grep of both consumer checkouts at the time it lands.