@bongos/core 1.19.663 → 1.19.665
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.
- package/.bongos-core.json +40 -25
- package/docs/copy-inventory.md +28 -17
- package/docs/copy-registry.json +121 -22
- package/docs/module-api-changelog.md +14 -0
- package/modules/hall-ui/public/hall-kit.js +36 -2
- package/modules/hall-ui/public/studio.css +121 -1
- package/modules/hall-ui/public/studio.html +5 -1
- package/modules/hall-ui/public/studio.js +337 -13
- package/modules/hall-ui/public/studio.states.json +1 -1
- package/modules/provisioning/credential-preflight.js +170 -0
- package/modules/provisioning/routes/provisioning.js +16 -11
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/hall-preview/server.js +11 -0
- package/scripts/hall-preview/task-visual.js +89 -0
- package/src/module-api.js +15 -1
- package/tests/hall_studio_world.mjs +435 -8
- package/tests/module_api.mjs +1 -0
- package/tests/provisioning_credential_preflight.mjs +153 -0
- package/tests/provisioning_onboard_mode.mjs +13 -0
- package/tests/rank_tier_single_source.mjs +8 -1
- package/tests/task_visuals.mjs +35 -0
package/docs/copy-registry.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"generator": "scripts/gds/copy-inventory.js",
|
|
4
4
|
"goal": 1000074,
|
|
5
5
|
"counts": {
|
|
6
|
-
"strings":
|
|
7
|
-
"unique_ids":
|
|
8
|
-
"certain":
|
|
6
|
+
"strings": 1755,
|
|
7
|
+
"unique_ids": 1519,
|
|
8
|
+
"certain": 1755,
|
|
9
9
|
"heuristic": 0,
|
|
10
10
|
"duplicate_ids": 165
|
|
11
11
|
},
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"builders-hall": {
|
|
14
14
|
"at": "modules/hall-ui/public",
|
|
15
15
|
"files": 81,
|
|
16
|
-
"strings":
|
|
16
|
+
"strings": 1282
|
|
17
17
|
},
|
|
18
18
|
"status-dashboard": {
|
|
19
19
|
"at": "modules/status-ui/public",
|
|
@@ -925,8 +925,8 @@
|
|
|
925
925
|
"text": "Let it be for now",
|
|
926
926
|
"occurrences": 2,
|
|
927
927
|
"at": [
|
|
928
|
-
"modules/hall-ui/public/studio.js:
|
|
929
|
-
"modules/hall-ui/public/studio.js:
|
|
928
|
+
"modules/hall-ui/public/studio.js:203",
|
|
929
|
+
"modules/hall-ui/public/studio.js:218"
|
|
930
930
|
]
|
|
931
931
|
},
|
|
932
932
|
{
|
|
@@ -1645,8 +1645,8 @@
|
|
|
1645
1645
|
"text": "to tend now · {…}",
|
|
1646
1646
|
"occurrences": 2,
|
|
1647
1647
|
"at": [
|
|
1648
|
-
"modules/hall-ui/public/studio.js:
|
|
1649
|
-
"modules/hall-ui/public/studio.js:
|
|
1648
|
+
"modules/hall-ui/public/studio.js:203",
|
|
1649
|
+
"modules/hall-ui/public/studio.js:218"
|
|
1650
1650
|
]
|
|
1651
1651
|
},
|
|
1652
1652
|
{
|
|
@@ -3314,7 +3314,7 @@
|
|
|
3314
3314
|
"surface": "builders-hall",
|
|
3315
3315
|
"text": "Coach the grader",
|
|
3316
3316
|
"file": "modules/hall-ui/public/studio.js",
|
|
3317
|
-
"line":
|
|
3317
|
+
"line": 181,
|
|
3318
3318
|
"origin": "js-markup",
|
|
3319
3319
|
"confidence": "certain"
|
|
3320
3320
|
},
|
|
@@ -4425,6 +4425,15 @@
|
|
|
4425
4425
|
"origin": "html-text",
|
|
4426
4426
|
"confidence": "certain"
|
|
4427
4427
|
},
|
|
4428
|
+
{
|
|
4429
|
+
"id": "b384ec1a6fe4",
|
|
4430
|
+
"surface": "builders-hall",
|
|
4431
|
+
"text": "Dismissed — the copy and visuals are good as shipped.",
|
|
4432
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
4433
|
+
"line": 356,
|
|
4434
|
+
"origin": "js-notice",
|
|
4435
|
+
"confidence": "certain"
|
|
4436
|
+
},
|
|
4428
4437
|
{
|
|
4429
4438
|
"id": "3e561393f4e9",
|
|
4430
4439
|
"surface": "builders-hall",
|
|
@@ -4848,6 +4857,15 @@
|
|
|
4848
4857
|
"origin": "html-text",
|
|
4849
4858
|
"confidence": "certain"
|
|
4850
4859
|
},
|
|
4860
|
+
{
|
|
4861
|
+
"id": "a7bdd4706975",
|
|
4862
|
+
"surface": "builders-hall",
|
|
4863
|
+
"text": "Filed as task {…} — this review is closed against it.",
|
|
4864
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
4865
|
+
"line": 445,
|
|
4866
|
+
"origin": "js-notice",
|
|
4867
|
+
"confidence": "certain"
|
|
4868
|
+
},
|
|
4851
4869
|
{
|
|
4852
4870
|
"id": "6430ee350486",
|
|
4853
4871
|
"surface": "builders-hall",
|
|
@@ -5703,12 +5721,21 @@
|
|
|
5703
5721
|
"origin": "js-markup",
|
|
5704
5722
|
"confidence": "certain"
|
|
5705
5723
|
},
|
|
5724
|
+
{
|
|
5725
|
+
"id": "a28aa368453f",
|
|
5726
|
+
"surface": "builders-hall",
|
|
5727
|
+
"text": "It shipped and it is live. Say what you see — your review coaches the grader and never blocks what shipped.",
|
|
5728
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
5729
|
+
"line": 201,
|
|
5730
|
+
"origin": "js-markup",
|
|
5731
|
+
"confidence": "certain"
|
|
5732
|
+
},
|
|
5706
5733
|
{
|
|
5707
5734
|
"id": "d751fe51e178",
|
|
5708
5735
|
"surface": "builders-hall",
|
|
5709
5736
|
"text": "It shipped and it is live. Your review coaches the grader on how it judged the work, then remakes or tweaks the words or art only if they need it — it never blocks what shipped.",
|
|
5710
5737
|
"file": "modules/hall-ui/public/studio.js",
|
|
5711
|
-
"line":
|
|
5738
|
+
"line": 202,
|
|
5712
5739
|
"origin": "js-markup",
|
|
5713
5740
|
"confidence": "certain"
|
|
5714
5741
|
},
|
|
@@ -5933,7 +5960,7 @@
|
|
|
5933
5960
|
"surface": "builders-hall",
|
|
5934
5961
|
"text": "Let it be for now",
|
|
5935
5962
|
"file": "modules/hall-ui/public/studio.js",
|
|
5936
|
-
"line":
|
|
5963
|
+
"line": 203,
|
|
5937
5964
|
"origin": "js-markup",
|
|
5938
5965
|
"confidence": "certain"
|
|
5939
5966
|
},
|
|
@@ -5942,7 +5969,7 @@
|
|
|
5942
5969
|
"surface": "builders-hall",
|
|
5943
5970
|
"text": "Let it be for now",
|
|
5944
5971
|
"file": "modules/hall-ui/public/studio.js",
|
|
5945
|
-
"line":
|
|
5972
|
+
"line": 218,
|
|
5946
5973
|
"origin": "js-markup",
|
|
5947
5974
|
"confidence": "certain"
|
|
5948
5975
|
},
|
|
@@ -6207,6 +6234,15 @@
|
|
|
6207
6234
|
"origin": "js-markup",
|
|
6208
6235
|
"confidence": "certain"
|
|
6209
6236
|
},
|
|
6237
|
+
{
|
|
6238
|
+
"id": "73677b6839d7",
|
|
6239
|
+
"surface": "builders-hall",
|
|
6240
|
+
"text": "Looks good",
|
|
6241
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
6242
|
+
"line": 161,
|
|
6243
|
+
"origin": "js-markup",
|
|
6244
|
+
"confidence": "certain"
|
|
6245
|
+
},
|
|
6210
6246
|
{
|
|
6211
6247
|
"id": "a93ca2841b96",
|
|
6212
6248
|
"surface": "builders-hall",
|
|
@@ -6405,6 +6441,15 @@
|
|
|
6405
6441
|
"origin": "js-markup",
|
|
6406
6442
|
"confidence": "certain"
|
|
6407
6443
|
},
|
|
6444
|
+
{
|
|
6445
|
+
"id": "3970d299c95a",
|
|
6446
|
+
"surface": "builders-hall",
|
|
6447
|
+
"text": "Needs work",
|
|
6448
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
6449
|
+
"line": 161,
|
|
6450
|
+
"origin": "js-markup",
|
|
6451
|
+
"confidence": "certain"
|
|
6452
|
+
},
|
|
6408
6453
|
{
|
|
6409
6454
|
"id": "7def635421ea",
|
|
6410
6455
|
"surface": "builders-hall",
|
|
@@ -6864,6 +6909,24 @@
|
|
|
6864
6909
|
"origin": "js-markup",
|
|
6865
6910
|
"confidence": "certain"
|
|
6866
6911
|
},
|
|
6912
|
+
{
|
|
6913
|
+
"id": "73c72974f4f9",
|
|
6914
|
+
"surface": "builders-hall",
|
|
6915
|
+
"text": "Note it",
|
|
6916
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
6917
|
+
"line": 161,
|
|
6918
|
+
"origin": "js-markup",
|
|
6919
|
+
"confidence": "certain"
|
|
6920
|
+
},
|
|
6921
|
+
{
|
|
6922
|
+
"id": "c404f22d7892",
|
|
6923
|
+
"surface": "builders-hall",
|
|
6924
|
+
"text": "Noted on the review — it stays open.",
|
|
6925
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
6926
|
+
"line": 388,
|
|
6927
|
+
"origin": "js-notice",
|
|
6928
|
+
"confidence": "certain"
|
|
6929
|
+
},
|
|
6867
6930
|
{
|
|
6868
6931
|
"id": "cd652d04d616",
|
|
6869
6932
|
"surface": "builders-hall",
|
|
@@ -7022,7 +7085,7 @@
|
|
|
7022
7085
|
"surface": "builders-hall",
|
|
7023
7086
|
"text": "Only if it needs it — with the AI at your side, or on your own.",
|
|
7024
7087
|
"file": "modules/hall-ui/public/studio.js",
|
|
7025
|
-
"line":
|
|
7088
|
+
"line": 181,
|
|
7026
7089
|
"origin": "js-markup",
|
|
7027
7090
|
"confidence": "certain"
|
|
7028
7091
|
},
|
|
@@ -7085,7 +7148,7 @@
|
|
|
7085
7148
|
"surface": "builders-hall",
|
|
7086
7149
|
"text": "Open in the copy desk",
|
|
7087
7150
|
"file": "modules/hall-ui/public/studio.js",
|
|
7088
|
-
"line":
|
|
7151
|
+
"line": 218,
|
|
7089
7152
|
"origin": "js-markup",
|
|
7090
7153
|
"confidence": "certain"
|
|
7091
7154
|
},
|
|
@@ -7166,7 +7229,7 @@
|
|
|
7166
7229
|
"surface": "builders-hall",
|
|
7167
7230
|
"text": "Open this review",
|
|
7168
7231
|
"file": "modules/hall-ui/public/studio.js",
|
|
7169
|
-
"line":
|
|
7232
|
+
"line": 203,
|
|
7170
7233
|
"origin": "js-markup",
|
|
7171
7234
|
"confidence": "certain"
|
|
7172
7235
|
},
|
|
@@ -7931,7 +7994,7 @@
|
|
|
7931
7994
|
"surface": "builders-hall",
|
|
7932
7995
|
"text": "Remake or tweak",
|
|
7933
7996
|
"file": "modules/hall-ui/public/studio.js",
|
|
7934
|
-
"line":
|
|
7997
|
+
"line": 181,
|
|
7935
7998
|
"origin": "js-markup",
|
|
7936
7999
|
"confidence": "certain"
|
|
7937
8000
|
},
|
|
@@ -8228,7 +8291,7 @@
|
|
|
8228
8291
|
"surface": "builders-hall",
|
|
8229
8292
|
"text": "Review how it judged this work, and teach it what good looked like.",
|
|
8230
8293
|
"file": "modules/hall-ui/public/studio.js",
|
|
8231
|
-
"line":
|
|
8294
|
+
"line": 181,
|
|
8232
8295
|
"origin": "js-markup",
|
|
8233
8296
|
"confidence": "certain"
|
|
8234
8297
|
},
|
|
@@ -8903,7 +8966,7 @@
|
|
|
8903
8966
|
"surface": "builders-hall",
|
|
8904
8967
|
"text": "Start over",
|
|
8905
8968
|
"file": "modules/hall-ui/public/studio.js",
|
|
8906
|
-
"line":
|
|
8969
|
+
"line": 234,
|
|
8907
8970
|
"origin": "js-markup",
|
|
8908
8971
|
"confidence": "certain"
|
|
8909
8972
|
},
|
|
@@ -9321,6 +9384,15 @@
|
|
|
9321
9384
|
"origin": "js-markup",
|
|
9322
9385
|
"confidence": "certain"
|
|
9323
9386
|
},
|
|
9387
|
+
{
|
|
9388
|
+
"id": "027e9420daa2",
|
|
9389
|
+
"surface": "builders-hall",
|
|
9390
|
+
"text": "The headline lands, but the sub-line reads like a brochure.",
|
|
9391
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
9392
|
+
"line": 161,
|
|
9393
|
+
"origin": "js-markup",
|
|
9394
|
+
"confidence": "certain"
|
|
9395
|
+
},
|
|
9324
9396
|
{
|
|
9325
9397
|
"id": "797f02fa8295",
|
|
9326
9398
|
"surface": "builders-hall",
|
|
@@ -10293,6 +10365,15 @@
|
|
|
10293
10365
|
"origin": "html-attr:placeholder",
|
|
10294
10366
|
"confidence": "certain"
|
|
10295
10367
|
},
|
|
10368
|
+
{
|
|
10369
|
+
"id": "1d5bfd09068c",
|
|
10370
|
+
"surface": "builders-hall",
|
|
10371
|
+
"text": "What you saw",
|
|
10372
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
10373
|
+
"line": 161,
|
|
10374
|
+
"origin": "js-markup",
|
|
10375
|
+
"confidence": "certain"
|
|
10376
|
+
},
|
|
10296
10377
|
{
|
|
10297
10378
|
"id": "3dade88f0584",
|
|
10298
10379
|
"surface": "builders-hall",
|
|
@@ -10878,6 +10959,15 @@
|
|
|
10878
10959
|
"origin": "html-text",
|
|
10879
10960
|
"confidence": "certain"
|
|
10880
10961
|
},
|
|
10962
|
+
{
|
|
10963
|
+
"id": "a824e3e2057a",
|
|
10964
|
+
"surface": "builders-hall",
|
|
10965
|
+
"text": "Your verdict on a review is recorded from the review itself — open it to dismiss it, note what you saw, or file the follow-up.",
|
|
10966
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
10967
|
+
"line": 158,
|
|
10968
|
+
"origin": "js-markup",
|
|
10969
|
+
"confidence": "certain"
|
|
10970
|
+
},
|
|
10881
10971
|
{
|
|
10882
10972
|
"id": "f6b12676169b",
|
|
10883
10973
|
"surface": "builders-hall",
|
|
@@ -11036,7 +11126,7 @@
|
|
|
11036
11126
|
"surface": "builders-hall",
|
|
11037
11127
|
"text": "and {…} more waiting{…}",
|
|
11038
11128
|
"file": "modules/hall-ui/public/studio.js",
|
|
11039
|
-
"line":
|
|
11129
|
+
"line": 276,
|
|
11040
11130
|
"origin": "js-markup",
|
|
11041
11131
|
"confidence": "certain"
|
|
11042
11132
|
},
|
|
@@ -11684,7 +11774,7 @@
|
|
|
11684
11774
|
"surface": "builders-hall",
|
|
11685
11775
|
"text": "no data",
|
|
11686
11776
|
"file": "modules/hall-ui/public/hall-kit.js",
|
|
11687
|
-
"line":
|
|
11777
|
+
"line": 761,
|
|
11688
11778
|
"origin": "js-markup",
|
|
11689
11779
|
"confidence": "certain"
|
|
11690
11780
|
},
|
|
@@ -12215,7 +12305,7 @@
|
|
|
12215
12305
|
"surface": "builders-hall",
|
|
12216
12306
|
"text": "to tend now · {…}",
|
|
12217
12307
|
"file": "modules/hall-ui/public/studio.js",
|
|
12218
|
-
"line":
|
|
12308
|
+
"line": 203,
|
|
12219
12309
|
"origin": "js-markup",
|
|
12220
12310
|
"confidence": "certain"
|
|
12221
12311
|
},
|
|
@@ -12224,7 +12314,7 @@
|
|
|
12224
12314
|
"surface": "builders-hall",
|
|
12225
12315
|
"text": "to tend now · {…}",
|
|
12226
12316
|
"file": "modules/hall-ui/public/studio.js",
|
|
12227
|
-
"line":
|
|
12317
|
+
"line": 218,
|
|
12228
12318
|
"origin": "js-markup",
|
|
12229
12319
|
"confidence": "certain"
|
|
12230
12320
|
},
|
|
@@ -12993,6 +13083,15 @@
|
|
|
12993
13083
|
"origin": "js-markup",
|
|
12994
13084
|
"confidence": "certain"
|
|
12995
13085
|
},
|
|
13086
|
+
{
|
|
13087
|
+
"id": "d3afa6d6dd9e",
|
|
13088
|
+
"surface": "builders-hall",
|
|
13089
|
+
"text": "— your words, in your voice. Needed for a note or a follow-up.",
|
|
13090
|
+
"file": "modules/hall-ui/public/studio.js",
|
|
13091
|
+
"line": 161,
|
|
13092
|
+
"origin": "js-markup",
|
|
13093
|
+
"confidence": "certain"
|
|
13094
|
+
},
|
|
12996
13095
|
{
|
|
12997
13096
|
"id": "68b547166d48",
|
|
12998
13097
|
"surface": "builders-hall",
|
|
@@ -1775,5 +1775,19 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
1775
1775
|
landed since 1.19.661 with no explicit bump. run 34553965204. (task 1002620)
|
|
1776
1776
|
1.19.663 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
1777
1777
|
landed since 1.19.662 with no explicit bump. run 34557840364. (task 1002620)
|
|
1778
|
+
(next carrier) — grantedScopeCoversRepos re-exported (task 1002909, goal 1000106).
|
|
1779
|
+
The provisioning module's create-route credential preflight must tell "that
|
|
1780
|
+
repo does not exist" apart from "it is private and your pre-ADR-0155 token
|
|
1781
|
+
cannot see it" — GitHub answers 404 to both — so it needs the canonical scope
|
|
1782
|
+
read. Shared rather than re-implemented because `public_repo` CONTAINS the
|
|
1783
|
+
substring "repo", so a naive match accepts exactly the stale token it guards
|
|
1784
|
+
against. auth-config.js is KERNEL (ADR 0091 §1), so this stays inside the
|
|
1785
|
+
kernel-imports-only rule; db.getGithubToken and github-repos are DOMAIN and
|
|
1786
|
+
deliberately did NOT come through the doorway — the module reaches those via
|
|
1787
|
+
the already-exposed `pool` + `secretBox` and its own one-field repo client.
|
|
1788
|
+
1.19.664 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
1789
|
+
landed since 1.19.663 with no explicit bump. run 34558906002. (task 1002620)
|
|
1790
|
+
1.19.665 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
1791
|
+
landed since 1.19.664 with no explicit bump. run 34560552542. (task 1002620)
|
|
1778
1792
|
---------------------------------------------------------------------------
|
|
1779
1793
|
```
|
|
@@ -610,6 +610,40 @@
|
|
|
610
610
|
`<img class="ship-visual-thumb" src="${esc(url)}" alt="${esc(alt)}" loading="lazy"></a>`;
|
|
611
611
|
}
|
|
612
612
|
|
|
613
|
+
// The FULL-SIZE form: the picture as the thing being looked at, with
|
|
614
|
+
// visual_alt as its caption. The thumbnail above is for a FEED, where the
|
|
615
|
+
// summary is one line in a list; this is for a surface whose subject IS the
|
|
616
|
+
// image — the task record, and the Studio's review card (task 1003829).
|
|
617
|
+
//
|
|
618
|
+
// It lives here so the Studio did not become the THIRD hand-rolled <figure>
|
|
619
|
+
// for this one image. Be precise about what that did and did not fix: the two
|
|
620
|
+
// that already existed — task.js's taskVisualHtml (.tk-visual) and
|
|
621
|
+
// task-detail.js's overlay (.td-visual) — are NOT converged onto this yet and
|
|
622
|
+
// are untouched by the task that added it (1003829). Neither page loads the
|
|
623
|
+
// kit, so migrating them means adding it to task.html, which is a call of its
|
|
624
|
+
// own. So: one canonical renderer exists and new callers take it; the two
|
|
625
|
+
// legacy copies are a known, named cleanup rather than a claim already met.
|
|
626
|
+
//
|
|
627
|
+
// `className` is the caller's BEM base, because the size is the surface's
|
|
628
|
+
// decision and not the kit's: the task record caps at 52vh inside a record
|
|
629
|
+
// column (.tk-visual), the Studio gives the plate the card's whole width.
|
|
630
|
+
// The markup, the URL guard and the escaping are the kit's and identical
|
|
631
|
+
// everywhere. Returns '' with no visual, like the thumbnail.
|
|
632
|
+
function taskVisualFigureHtml(row, { className = 'task-visual' } = {}) {
|
|
633
|
+
const url = String((row && row.visual_url) ?? '');
|
|
634
|
+
if (!isTaskVisualUrl(url)) return '';
|
|
635
|
+
const written = String((row && row.visual_alt) || '').trim();
|
|
636
|
+
const alt = written || `Visual for task ${(row && row.id) ?? ''}`;
|
|
637
|
+
const base = String(className).replace(/[^A-Za-z0-9_-]/g, '');
|
|
638
|
+
// The caption is only drawn when the shipper WROTE one — the fallback alt is
|
|
639
|
+
// a machine sentence for a screen reader, not a caption to show a reader.
|
|
640
|
+
const caption = written ? `<figcaption class="${base}__caption">${esc(written)}</figcaption>` : '';
|
|
641
|
+
return `<figure class="${base}">` +
|
|
642
|
+
`<a href="${esc(url)}" target="_blank" rel="noopener">` +
|
|
643
|
+
`<img class="${base}__img" src="${esc(url)}" alt="${esc(alt)}" loading="lazy">` +
|
|
644
|
+
`</a>${caption}</figure>`;
|
|
645
|
+
}
|
|
646
|
+
|
|
613
647
|
// ---- charts (task 1003445) ------------------------------------------------
|
|
614
648
|
//
|
|
615
649
|
// Charts were the one primitive the kit never got, which is exactly why the
|
|
@@ -1184,8 +1218,8 @@
|
|
|
1184
1218
|
plotBox, plotWindow,
|
|
1185
1219
|
// states
|
|
1186
1220
|
emptyStateHtml, skeletonRows, collapsibleCard,
|
|
1187
|
-
// ship-time task visual (task 1003109)
|
|
1188
|
-
isTaskVisualUrl, shipVisualThumbHtml,
|
|
1221
|
+
// ship-time task visual (task 1003109; the full-size figure, task 1003829)
|
|
1222
|
+
isTaskVisualUrl, shipVisualThumbHtml, taskVisualFigureHtml,
|
|
1189
1223
|
// age (task 1002955)
|
|
1190
1224
|
fmtAge, fmtAbsDate, ageChipHtml, AGE_STALE_DAYS,
|
|
1191
1225
|
};
|
|
@@ -151,6 +151,42 @@
|
|
|
151
151
|
max-width: var(--measure);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
/* THE PLATE — the reviewed work's ship-time visual (task 1003829). The picture
|
|
155
|
+
IS the card: an artist is being asked to LOOK at something, so it is given the
|
|
156
|
+
card's full width and as much height as a screen can spare, not the 44px
|
|
157
|
+
thumbnail a ship feed uses. Markup comes from the kit's one renderer
|
|
158
|
+
(OTBKit.taskVisualFigureHtml); only the size is this room's decision.
|
|
159
|
+
|
|
160
|
+
max-height in vh, and MEASURED at 1440x900 rather than chosen. The size an
|
|
161
|
+
artist can judge it at wins over a zero-scroll card — that is the task's own
|
|
162
|
+
priority — so this is not tuned to fit the verdict on the first screen; the
|
|
163
|
+
room's head alone is ~300px and no judgeable plate fits under it. What 40vh
|
|
164
|
+
buys is that the picture AND its caption are wholly in view together (plate
|
|
165
|
+
459-819, caption 827-865), with the weights one short scroll below (946). At
|
|
166
|
+
58vh the caption fell off too, which is worse: a plate you cannot read the
|
|
167
|
+
subject of. The tonal well behind it is --glass, so a transparent PNG has
|
|
168
|
+
something to sit on in both modes. */
|
|
169
|
+
.studio-plate { margin: 0 0 18px; }
|
|
170
|
+
.studio-plate__img {
|
|
171
|
+
display: block;
|
|
172
|
+
max-width: 100%;
|
|
173
|
+
max-height: 40vh;
|
|
174
|
+
width: auto;
|
|
175
|
+
height: auto;
|
|
176
|
+
border-radius: var(--radius-sm);
|
|
177
|
+
background: var(--glass);
|
|
178
|
+
}
|
|
179
|
+
/* The shipper's own words about the picture, in the caption voice — drawn only
|
|
180
|
+
when they wrote some (the kit omits the element otherwise, never a caption
|
|
181
|
+
that reads "Visual for task 1899"). */
|
|
182
|
+
.studio-plate__caption {
|
|
183
|
+
margin: 8px 0 0;
|
|
184
|
+
font-size: 12.5px;
|
|
185
|
+
line-height: 1.5;
|
|
186
|
+
color: var(--ink-faint);
|
|
187
|
+
max-width: var(--measure);
|
|
188
|
+
}
|
|
189
|
+
|
|
154
190
|
/* The two steps of a review (R04): coach the grader, then remake or tweak. Not
|
|
155
191
|
a checklist widget — a gentle reminder of the shape of the work, so the room
|
|
156
192
|
describes the craft without becoming the form the criterion warns against. */
|
|
@@ -184,6 +220,73 @@
|
|
|
184
220
|
color: var(--ink-faint);
|
|
185
221
|
}
|
|
186
222
|
|
|
223
|
+
/* THE VERDICT — the artist's answer, said here rather than somewhere else
|
|
224
|
+
(task 1003829). A tonal well separates it from the card's prose without a
|
|
225
|
+
drawn edge (the v3 hall rule), and it sits ABOVE the actions so the reader
|
|
226
|
+
meets "what did you think" before "open this" / "let it be". */
|
|
227
|
+
.studio-verdict {
|
|
228
|
+
margin: 0 0 20px;
|
|
229
|
+
padding: 16px;
|
|
230
|
+
border-radius: var(--radius-sm);
|
|
231
|
+
background: var(--glass);
|
|
232
|
+
}
|
|
233
|
+
.studio-verdict__label {
|
|
234
|
+
display: block;
|
|
235
|
+
margin: 0 0 8px;
|
|
236
|
+
font-family: var(--label-face);
|
|
237
|
+
font-size: var(--label-size);
|
|
238
|
+
letter-spacing: var(--label-space);
|
|
239
|
+
text-transform: var(--label-case);
|
|
240
|
+
color: var(--ink-soft);
|
|
241
|
+
}
|
|
242
|
+
/* The clarifier rides inside the label (so clicking it still focuses the field)
|
|
243
|
+
but drops out of the label voice — caps are for the label, not a sentence. */
|
|
244
|
+
.studio-verdict__label small {
|
|
245
|
+
font-family: var(--font-body);
|
|
246
|
+
font-size: 12.5px;
|
|
247
|
+
letter-spacing: normal;
|
|
248
|
+
text-transform: none;
|
|
249
|
+
color: var(--ink-faint);
|
|
250
|
+
}
|
|
251
|
+
.studio-verdict__words {
|
|
252
|
+
display: block;
|
|
253
|
+
width: 100%;
|
|
254
|
+
resize: vertical;
|
|
255
|
+
font-size: 14.5px;
|
|
256
|
+
line-height: 1.5;
|
|
257
|
+
}
|
|
258
|
+
/* The inline error, beside the control that caused it and gone the moment the
|
|
259
|
+
field is edited. --danger is the platform's measured status red; the room
|
|
260
|
+
spends no other colour. */
|
|
261
|
+
.studio-verdict__err {
|
|
262
|
+
margin: 8px 0 0;
|
|
263
|
+
font-size: 13px;
|
|
264
|
+
line-height: 1.45;
|
|
265
|
+
color: var(--danger);
|
|
266
|
+
}
|
|
267
|
+
/* Three equal answers on one line, wrapping to a column on a phone rather than
|
|
268
|
+
squeezing. The 24px control floor is the shell's (.btn-ghost); the gap keeps
|
|
269
|
+
them from reading as a segmented control, which would imply one is selected. */
|
|
270
|
+
.studio-verdict__weights {
|
|
271
|
+
margin-top: 12px;
|
|
272
|
+
display: flex;
|
|
273
|
+
flex-wrap: wrap;
|
|
274
|
+
gap: 10px;
|
|
275
|
+
}
|
|
276
|
+
/* What a viewer below the routes' floor sees instead of three buttons it would
|
|
277
|
+
refuse: a sentence naming where the verdict is recorded. Quiet, not a warning
|
|
278
|
+
— this is not an error, it is a different door. */
|
|
279
|
+
.studio-verdict__sealed {
|
|
280
|
+
margin: 0 0 20px;
|
|
281
|
+
padding: 14px 16px;
|
|
282
|
+
border-radius: var(--radius-sm);
|
|
283
|
+
background: var(--glass);
|
|
284
|
+
font-size: 13.5px;
|
|
285
|
+
line-height: 1.5;
|
|
286
|
+
color: var(--ink-soft);
|
|
287
|
+
max-width: var(--measure);
|
|
288
|
+
}
|
|
289
|
+
|
|
187
290
|
/* The one place the accent is spent on a control. Ghost is the calm pass —
|
|
188
291
|
"let it be for now" advances to the next piece without changing anything. */
|
|
189
292
|
.studio-card__actions {
|
|
@@ -237,7 +340,18 @@
|
|
|
237
340
|
font-size: 13.5px;
|
|
238
341
|
color: var(--ink-faint);
|
|
239
342
|
}
|
|
240
|
-
|
|
343
|
+
/* The 24px control floor, which these two links were failing at every width and
|
|
344
|
+
in both modes (the kit's controls-24px audit: 229x21 and 154x21). A link IS a
|
|
345
|
+
control, and the floor is "clears 24px on both sides" — so they get the height
|
|
346
|
+
here rather than staying the one failing pair on an otherwise clean surface.
|
|
347
|
+
inline-flex + align-items keeps the text where it sits today; only the hit
|
|
348
|
+
area grows. */
|
|
349
|
+
.studio-links a {
|
|
350
|
+
color: var(--accent-ink);
|
|
351
|
+
display: inline-flex;
|
|
352
|
+
align-items: center;
|
|
353
|
+
min-height: 24px;
|
|
354
|
+
}
|
|
241
355
|
|
|
242
356
|
/* The empty room — a good sign, said plainly, not a dead panel. */
|
|
243
357
|
.studio-empty {
|
|
@@ -265,4 +379,10 @@
|
|
|
265
379
|
@media (max-width: 640px) {
|
|
266
380
|
.studio { padding-top: 20px; }
|
|
267
381
|
.studio-card__actions { gap: 8px; }
|
|
382
|
+
/* The plate takes less of a phone's height so the verdict is still reachable
|
|
383
|
+
without a scroll past the picture. */
|
|
384
|
+
.studio-plate__img { max-height: 34vh; }
|
|
385
|
+
/* Full-width weights, stacked: three buttons side by side at 320px would each
|
|
386
|
+
fall under the 24px-clearance floor. */
|
|
387
|
+
.studio-verdict__weights { flex-direction: column; align-items: stretch; }
|
|
268
388
|
}
|
|
@@ -69,6 +69,10 @@
|
|
|
69
69
|
<script src="/builders/shell.js?v=2026-07-02-shell1"></script>
|
|
70
70
|
<script src="/builders/palette.js" defer></script>
|
|
71
71
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
72
|
-
|
|
72
|
+
<!-- The kit, for its ONE renderer: the full-size ship-time visual figure
|
|
73
|
+
(task 1003829). The copy desk — the artist's other room — already loads it,
|
|
74
|
+
and a fourth hand-rolled <figure> is what the kit exists to stop. -->
|
|
75
|
+
<script src="/builders/hall-kit.js"></script>
|
|
76
|
+
<script src="/builders/studio.js?v=2026-09-10-studio2"></script>
|
|
73
77
|
</body>
|
|
74
78
|
</html>
|