@bongos/core 1.21.65 → 1.21.67
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 +114 -49
- package/docs/copy-inventory.md +432 -405
- package/docs/copy-registry.json +840 -571
- package/docs/file-map.md +1 -0
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +45 -13
- package/docs/page-readings.json +969 -917
- package/modules/hall-ui/public/profile.html +4 -7
- package/modules/hall-ui/public/profile.js +0 -5
- package/modules/platform-identity/routes/my-projects.js +1 -1
- package/modules/public-landing/public/account.html +1 -1
- package/modules/public-landing/public/assets/cosmos.css +12 -10
- package/modules/public-landing/public/contact.html +1 -1
- package/modules/public-landing/public/guild.html +1 -1
- package/modules/public-landing/public/index-cli.states.json +20 -0
- package/modules/public-landing/public/index.html +68 -1
- package/modules/public-landing/public/index.states.json +4 -4
- package/modules/public-landing/public/invitations-empty.states.json +56 -0
- package/modules/public-landing/public/invitations-picker.states.json +84 -0
- package/modules/public-landing/public/invitations.html +956 -0
- package/modules/public-landing/public/invitations.probes.json +430 -0
- package/modules/public-landing/public/invitations.states.json +473 -0
- package/modules/public-landing/public/privacy.html +1 -1
- package/modules/public-landing/public/projects.html +18 -543
- package/modules/public-landing/public/projects.probes.json +0 -29
- package/modules/public-landing/public/projects.states.json +0 -6
- package/modules/public-landing/public/terms.html +1 -1
- package/modules/ui-design/kit/fixtures/bongos-cli-latest-sample.json +10 -0
- package/modules/ui-design/kit/fixtures/featured-invitations.json +183 -0
- package/modules/ui-design/kit/fixtures/guilds-empty.json +1 -0
- package/modules/ui-design/kit/fixtures/me-guild-engagements-empty.json +1 -0
- package/modules/ui-design/kit/fixtures/me-guild-requests-empty.json +1 -0
- package/modules/ui-design/kit/fixtures/my-projects-applied.json +29 -0
- package/modules/ui-design/kit/fixtures/my-projects-invites-empty.json +1 -0
- package/modules/ui-design/kit/serve.js +5 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +16 -0
- package/src/module-api.js +1 -1
- package/src/platform-server.js +11 -0
- package/tests/canonical_profile_url.mjs +23 -157
- package/tests/hub_account_page.mjs +1 -1
- package/tests/hub_engagement_cards.mjs +44 -40
- package/tests/hub_guild_cards.mjs +24 -22
- package/tests/hub_invitations_page.mjs +414 -0
- package/tests/join_relay_outcome.mjs +1 -1
- package/tests/landing_legal_pages.mjs +8 -6
- package/tests/landing_page.mjs +125 -3
- package/tests/my_projects_surface.mjs +14 -6
- package/tests/public_landing_projects.mjs +12 -14
- package/tests/render_check.mjs +3 -2
- package/tests/ui_design_kit.mjs +3 -3
- package/modules/hall-ui/public/profile-canonical.js +0 -137
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
<title>Profile — {{worldName}}</title>
|
|
7
7
|
<meta name="description" content="A builder of {{worldName}} — rank, works shipped, standing, and achievements.">
|
|
8
8
|
<!-- The platform hub's apex, stamped server-side (P08, task 1002804; ADR 0214
|
|
9
|
-
D2).
|
|
10
|
-
|
|
11
|
-
same-host URL claiming
|
|
9
|
+
D2), read through OTB.hubOrigin() (the profile nudge's link to the hub).
|
|
10
|
+
Empty on a vanilla instance, and then no hub link renders — a meta, never
|
|
11
|
+
an href, so an empty value cannot degrade into a same-host URL claiming
|
|
12
|
+
to be the hub. -->
|
|
12
13
|
<meta name="hub-origin" content="{{hubOrigin}}">
|
|
13
14
|
<link rel="icon" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><text x='16' y='24' font-size='24' text-anchor='middle' font-family='sans-serif'>⌂</text></svg>">
|
|
14
15
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
@@ -223,10 +224,6 @@
|
|
|
223
224
|
exists by the time renderProfile runs; profile.js guards on it anyway, so a
|
|
224
225
|
page that omits this script simply has no connections section. -->
|
|
225
226
|
<script src="/builders/profile-connections.js?v=2026-08-29-r20"></script>
|
|
226
|
-
<!-- Canonical-profile wiring (P08). Loaded BEFORE profile.js so
|
|
227
|
-
window.OTBCanonical exists when renderProfile runs; profile.js guards on it,
|
|
228
|
-
so a page that omits this script simply declares no canonical. -->
|
|
229
|
-
<script src="/builders/profile-canonical.js?v=2026-08-29-p08"></script>
|
|
230
227
|
<!-- The charts (task 1003489). Loaded BEFORE profile.js so window.OTBProfileCharts
|
|
231
228
|
exists when renderProfile runs; profile.js guards on it, so a page that
|
|
232
229
|
omits this script simply has no charts section content. -->
|
|
@@ -965,11 +965,6 @@
|
|
|
965
965
|
// reveals its own section or leaves it hidden. Optional by design: a page
|
|
966
966
|
// that does not load it simply has no connections section.
|
|
967
967
|
if (window.OTBConnections) window.OTBConnections.render(data, selfId);
|
|
968
|
-
// Canonical-profile wiring (P08, task 1002804) — the rel=canonical + the
|
|
969
|
-
// link-out to the cross-project record on a federated instance, and the
|
|
970
|
-
// numeric-id redirect on the hub. Optional the same way: a page without the
|
|
971
|
-
// script declares no canonical rather than breaking.
|
|
972
|
-
if (window.OTBCanonical) window.OTBCanonical.render(data);
|
|
973
968
|
}
|
|
974
969
|
|
|
975
970
|
// Render the friendly "no builder chosen" empty state for a signed-out visitor
|
|
@@ -65,7 +65,7 @@ async function isDarkMatter(client) {
|
|
|
65
65
|
// build, not to write prose into the platform's UI. Anything else is "not
|
|
66
66
|
// relayed" (null) → the caller's 502.
|
|
67
67
|
const RELAY_SENTENCE = {
|
|
68
|
-
requested: '
|
|
68
|
+
requested: 'Applied. The project’s owner admits new builders; once approved, sign in to enter.',
|
|
69
69
|
already_member: 'You already build on this project — sign in to it to see it here.',
|
|
70
70
|
invite_only: 'This project is invite-only — it doesn’t take requests. Ask its owner for an invite; once invited, sign in to it.',
|
|
71
71
|
open_enrollment: 'This project is open — no request needed. Sign in to it and you’re in.',
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
<p class="bandWho" id="bandWho"><img id="bandWhoImg" alt="" hidden><span class="whoName" id="bandWhoLogin"></span></p>
|
|
125
125
|
<ul class="bandRow">
|
|
126
126
|
<li class="bandCell"><a class="bandT" href="/projects?view=mine">My projects</a></li>
|
|
127
|
-
<li class="bandCell"><a class="bandT" href="/account" aria-current="page">Account</a></li>
|
|
127
|
+
<li class="bandCell"><a class="bandT" href="/invitations">Invitations</a></li><li class="bandCell"><a class="bandT" href="/account" aria-current="page">Account</a></li>
|
|
128
128
|
<!-- the honest hover target; the delegated click upgrades it to the POST -->
|
|
129
129
|
<li class="bandCell"><a class="bandT signout" href="/api/bongos/auth/logout">Sign out</a></li>
|
|
130
130
|
</ul>
|
|
@@ -1435,16 +1435,18 @@ p.sec-p{font-size:var(--fs-lede);font-weight:500;color:var(--ink-soft);line-heig
|
|
|
1435
1435
|
ender on the error ink; no lift, no shadow ── */
|
|
1436
1436
|
#view-mine .actions,#view-manage .actions{gap:8px;margin:0;}
|
|
1437
1437
|
#view-mine .actions{justify-content:flex-end;}
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
#view-mine .btn
|
|
1441
|
-
#view-mine .btn
|
|
1442
|
-
#view-mine .btn
|
|
1443
|
-
#view-mine .btn.small
|
|
1444
|
-
#view-mine .btn.small:
|
|
1445
|
-
#view-mine .btn.small.danger,#view-manage .btn.small.danger{border-color:
|
|
1446
|
-
#view-mine .btn.small.danger:hover,#view-manage .btn.small.danger:hover{background:
|
|
1447
|
-
#view-mine .btn.small
|
|
1438
|
+
/* the mine and manage views' buttons; #invt is /invitations, whose cards moved out of the mine
|
|
1439
|
+
view (task 1004276) and keep the buttons they had there */
|
|
1440
|
+
#view-mine .btn,#view-manage .btn,#invt .btn{min-height:44px;padding:0 22px;font-family:var(--font-body);font-weight:500;font-size:15px;text-transform:lowercase;white-space:nowrap;box-shadow:none;transition:border-color .15s ease,background .15s ease;}
|
|
1441
|
+
#view-mine .btn:hover,#view-manage .btn:hover,#invt .btn:hover{transform:none;box-shadow:none;}
|
|
1442
|
+
#view-mine .btn:active,#view-manage .btn:active,#invt .btn:active{transform:none;}
|
|
1443
|
+
#view-mine .btn.small,#view-manage .btn.small,#invt .btn.small{min-height:40px;padding:0 18px;font-weight:400;font-size:14.5px;color:var(--ink);background:none;border:1px solid var(--rule);}
|
|
1444
|
+
#view-mine .btn.small:hover,#view-manage .btn.small:hover,#invt .btn.small:hover{border-color:var(--ink-faint);color:var(--ink);}
|
|
1445
|
+
#view-mine .btn.small:not(.ghost):not(.danger),#view-manage .btn.small:not(.ghost):not(.danger),#invt .btn.small:not(.ghost):not(.danger){background:var(--accent);border-color:var(--accent);color:var(--accent-on);font-weight:500;}
|
|
1446
|
+
#view-mine .btn.small:not(.ghost):not(.danger):hover,#view-manage .btn.small:not(.ghost):not(.danger):hover,#invt .btn.small:not(.ghost):not(.danger):hover{background:color-mix(in srgb,var(--accent) 88%,var(--ink));border-color:color-mix(in srgb,var(--accent) 88%,var(--ink));color:var(--accent-on);}
|
|
1447
|
+
#view-mine .btn.small.danger,#view-manage .btn.small.danger,#invt .btn.small.danger{border-color:color-mix(in srgb,var(--err) 45%,transparent);color:var(--err);}
|
|
1448
|
+
#view-mine .btn.small.danger:hover,#view-manage .btn.small.danger:hover,#invt .btn.small.danger:hover{background:none;border-color:var(--err);color:var(--err);}
|
|
1449
|
+
#view-mine .btn.small:disabled,#view-manage .btn.small:disabled,#invt .btn.small:disabled{background:none;border-color:var(--rule-soft);color:var(--ink-faint);}
|
|
1448
1450
|
/* the address field and the ender's typed-back name: a hairline field. Both
|
|
1449
1451
|
live on the project's own page now (task 1003355), so the scope is one. */
|
|
1450
1452
|
#view-manage .attach{gap:10px 14px;margin-top:12px;align-items:center;}
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
<li class="bandCell"><a class="bandT" href="/projects?view=mine">My projects</a></li>
|
|
86
86
|
<!-- apex-only because /account is: it is served only where platform-identity
|
|
87
87
|
runs, so a child instance loses the item whole (as on projects.html) -->
|
|
88
|
-
<!--apex-only:start--><li class="bandCell"><a class="bandT" href="/account">Account</a></li><!--apex-only:end-->
|
|
88
|
+
<!--apex-only:start--><li class="bandCell"><a class="bandT" href="/invitations">Invitations</a></li><li class="bandCell"><a class="bandT" href="/account">Account</a></li><!--apex-only:end-->
|
|
89
89
|
<!-- the honest hover target; assets/hub-bar.js upgrades the click to the POST -->
|
|
90
90
|
<li class="bandCell"><a class="bandT signout" href="/api/bongos/auth/logout">Sign out</a></li>
|
|
91
91
|
</ul>
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
<p class="bandWho" id="bandWho"><img id="bandWhoImg" alt="" hidden><span class="whoName" id="bandWhoLogin"></span></p>
|
|
159
159
|
<ul class="bandRow">
|
|
160
160
|
<li class="bandCell"><a class="bandT" href="/projects?view=mine">My projects</a></li>
|
|
161
|
-
<li class="bandCell"><a class="bandT" href="/account">Account</a></li>
|
|
161
|
+
<li class="bandCell"><a class="bandT" href="/invitations">Invitations</a></li><li class="bandCell"><a class="bandT" href="/account">Account</a></li>
|
|
162
162
|
<!-- the honest hover target; the delegated click upgrades it to the POST -->
|
|
163
163
|
<li class="bandCell"><a class="bandT signout" href="/api/bongos/auth/logout">Sign out</a></li>
|
|
164
164
|
</ul>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_": "The landing on an instance that has published a CLI release (task 1004257): the same page, the same stub, the release feed /downloads/bongos/latest.json answered from a sample instead of the 404 an apex with no config/bongos-cli.json gives. The download block sits in the closing band under the fold, so the state focuses its door to bring it into view. Rendered by name: node modules/ui-design/kit/render.js --states modules/public-landing/public/index-cli.states.json",
|
|
3
|
+
"page": "/",
|
|
4
|
+
"surface": "public-landing",
|
|
5
|
+
"modes": ["dark"],
|
|
6
|
+
"modeQuery": false,
|
|
7
|
+
"stub": {
|
|
8
|
+
"fixtures": { "bongos-cli-latest": "bongos-cli-latest-sample" }
|
|
9
|
+
},
|
|
10
|
+
"ignoreRequests": ["/api/(gds|bongos)/me$", "/my-projects", "/provisioning/"],
|
|
11
|
+
"ignoreConsole": ["/api/(gds|bongos)/me", "\\b401\\b", "Unauthorized"],
|
|
12
|
+
"ignoreControls": [".skip", ".vh"],
|
|
13
|
+
"states": {
|
|
14
|
+
"cli-out": {
|
|
15
|
+
"auth": false,
|
|
16
|
+
"actions": [["focus", "[data-cli-get]"], ["wait", 200]],
|
|
17
|
+
"expect": { "visible": ["[data-cli]", "[data-cli-get]", "#cliFor"], "count": [["[data-cli-also] a", 4]] }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -329,6 +329,20 @@ h2{font-family:var(--font-display);font-weight:300;font-size:clamp(26px,3.1vw,42
|
|
|
329
329
|
filter:var(--sky-shadow)}
|
|
330
330
|
.close .doorbar{margin:0 auto}
|
|
331
331
|
|
|
332
|
+
/* the CLI download (task 1004257): one door on its own ground under the pair, quieter than the
|
|
333
|
+
accent door above it, with the platform it picked and the other platforms under it. The block is
|
|
334
|
+
[hidden] until the release feed answers, so no display rule is set on .cli itself. */
|
|
335
|
+
.cli{margin-top:30px}
|
|
336
|
+
.cli .door{gap:10px;padding:0 28px}
|
|
337
|
+
.door--solo{background:var(--door-ground);border:1px solid var(--door-edge)}
|
|
338
|
+
.door .dl{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;
|
|
339
|
+
stroke-linecap:round;stroke-linejoin:round}
|
|
340
|
+
.cli .label{margin-top:16px}
|
|
341
|
+
.cliAlso{margin-top:6px;font-size:14.5px;color:var(--ink-soft)}
|
|
342
|
+
.cliAlso a{display:inline-block;min-height:24px;padding:3px 0;margin:0 7px;line-height:1.24;
|
|
343
|
+
color:var(--accent-ink);text-decoration:underline;text-underline-offset:3px;
|
|
344
|
+
text-decoration-thickness:1px}
|
|
345
|
+
|
|
332
346
|
/* footer */
|
|
333
347
|
footer{position:relative;border-top:1px solid var(--rule-soft);padding:30px 26px 52px;font-size:14.5px;
|
|
334
348
|
color:var(--ink-soft)}
|
|
@@ -704,7 +718,7 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
704
718
|
account page, where the person's own settings live (ADR 0337 D4.3).
|
|
705
719
|
Apex-only because the page is — /account is served only where
|
|
706
720
|
platform-identity runs, so a child instance loses the item whole. -->
|
|
707
|
-
<!--apex-only:start--><li class="bandCell"><a class="bandT" href="/account">Account</a></li><!--apex-only:end-->
|
|
721
|
+
<!--apex-only:start--><li class="bandCell"><a class="bandT" href="/invitations">Invitations</a></li><li class="bandCell"><a class="bandT" href="/account">Account</a></li><!--apex-only:end-->
|
|
708
722
|
<!-- the honest hover target; the script upgrades the click to the POST -->
|
|
709
723
|
<li class="bandCell"><a class="bandT signout" href="/api/bongos/auth/logout">Sign out</a></li>
|
|
710
724
|
</ul>
|
|
@@ -894,6 +908,11 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
894
908
|
<a class="door door--go" href="/projects?view=new">Start a project</a>
|
|
895
909
|
<a class="door" href="/projects">Find a project</a>
|
|
896
910
|
</div>
|
|
911
|
+
<div class="cli" data-cli hidden>
|
|
912
|
+
<a class="door door--solo" data-cli-get aria-describedby="cliFor"><svg class="dl" viewBox="0 0 20 20" aria-hidden="true"><path d="M10 3.5v9.5M6 9.5l4 4 4-4M4.5 16.5h11"/></svg>Download the CLI</a>
|
|
913
|
+
<p class="label" id="cliFor" data-cli-for></p>
|
|
914
|
+
<p class="cliAlso" data-cli-also></p>
|
|
915
|
+
</div>
|
|
897
916
|
</div>
|
|
898
917
|
</section>
|
|
899
918
|
</main>
|
|
@@ -1192,6 +1211,54 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
1192
1211
|
host.appendChild(li);
|
|
1193
1212
|
});
|
|
1194
1213
|
});
|
|
1214
|
+
|
|
1215
|
+
/* ── the CLI download (task 1004257). The binaries are release assets an instance points
|
|
1216
|
+
at with config/bongos-cli.json; with no release configured /downloads/bongos/* does not
|
|
1217
|
+
mount, so the block stays hidden rather than offer a door that 404s. The feed names the
|
|
1218
|
+
version and the targets; every link stays on this origin's /downloads/bongos/<target>
|
|
1219
|
+
redirect, never the asset URL. A user agent cannot tell Apple silicon from Intel, and
|
|
1220
|
+
Macs have shipped Apple silicon since 2020, so a Mac gets arm64 with Intel one link
|
|
1221
|
+
away; a phone or tablet gets no guess, only the list. ── */
|
|
1222
|
+
var CLI_NAMES = {
|
|
1223
|
+
'mac-arm64': 'macOS, Apple silicon', 'mac-x64': 'macOS, Intel',
|
|
1224
|
+
'linux-x64': 'Linux, x64', 'linux-arm64': 'Linux, ARM64', 'win-x64': 'Windows'
|
|
1225
|
+
};
|
|
1226
|
+
function cliTarget(nav, targets) {
|
|
1227
|
+
var data = nav.userAgentData || {};
|
|
1228
|
+
var s = (String(data.platform || nav.platform || '') + ' ' + String(nav.userAgent || '')).toLowerCase();
|
|
1229
|
+
var want = [];
|
|
1230
|
+
if (data.mobile || /android|iphone|ipad|ipod|mobile/.test(s) || (/mac/.test(s) && nav.maxTouchPoints > 1)) want = [];
|
|
1231
|
+
else if (/win/.test(s)) want = ['win-x64'];
|
|
1232
|
+
else if (/mac/.test(s)) want = ['mac-arm64', 'mac-x64'];
|
|
1233
|
+
else if (/aarch64|arm64|armv8/.test(s)) want = ['linux-arm64', 'linux-x64'];
|
|
1234
|
+
else if (/linux|x11|cros/.test(s)) want = ['linux-x64', 'linux-arm64'];
|
|
1235
|
+
for (var i = 0; i < want.length; i++) if (targets.indexOf(want[i]) !== -1) return want[i];
|
|
1236
|
+
return null;
|
|
1237
|
+
}
|
|
1238
|
+
json('/downloads/bongos/latest.json').then(function (data) {
|
|
1239
|
+
var box = document.querySelector('[data-cli]');
|
|
1240
|
+
var assets = data && data.assets;
|
|
1241
|
+
if (!box || !assets || typeof assets !== 'object') return;
|
|
1242
|
+
var targets = Object.keys(assets).filter(function (k) { return /^[a-z0-9][a-z0-9-]{0,39}$/.test(k); });
|
|
1243
|
+
if (!targets.length) return;
|
|
1244
|
+
var version = /^\d+\.\d+\.\d+$/.test(String(data.version)) ? 'v' + data.version : '';
|
|
1245
|
+
var pick = cliTarget(navigator, targets);
|
|
1246
|
+
var get = box.querySelector('[data-cli-get]');
|
|
1247
|
+
if (pick && get) get.href = '/downloads/bongos/' + pick;
|
|
1248
|
+
else if (get) get.remove();
|
|
1249
|
+
var label = pick ? (CLI_NAMES[pick] || pick) : 'Download the CLI';
|
|
1250
|
+
box.querySelector('[data-cli-for]').textContent = version ? label + ' · ' + version : label;
|
|
1251
|
+
var also = box.querySelector('[data-cli-also]');
|
|
1252
|
+
var rest = targets.filter(function (k) { return k !== pick; });
|
|
1253
|
+
if (rest.length) also.appendChild(document.createTextNode(pick ? 'Also for' : 'For'));
|
|
1254
|
+
rest.forEach(function (k) {
|
|
1255
|
+
var a = document.createElement('a');
|
|
1256
|
+
a.href = '/downloads/bongos/' + k;
|
|
1257
|
+
a.textContent = CLI_NAMES[k] || k;
|
|
1258
|
+
also.appendChild(a);
|
|
1259
|
+
});
|
|
1260
|
+
box.hidden = false;
|
|
1261
|
+
});
|
|
1195
1262
|
})();
|
|
1196
1263
|
</script>
|
|
1197
1264
|
</body>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_": "The landing's states for modules/ui-design/kit/render.js (task 1003320): the bar and its two bands, signed out and in. Dark only (task 1003336): the apex pins data-mode=\"dark\", so `modes` names the one mode and there is no query to walk.",
|
|
2
|
+
"_": "The landing's states for modules/ui-design/kit/render.js (task 1003320): the bar and its two bands, signed out and in. With no CLI release the feed 404s, as on an apex without config/bongos-cli.json, and the download block stays hidden (task 1004257; index-cli.states.json renders it with one). Dark only (task 1003336): the apex pins data-mode=\"dark\", so `modes` names the one mode and there is no query to walk.",
|
|
3
3
|
"page": "/",
|
|
4
4
|
"surface": "public-landing",
|
|
5
5
|
"modes": ["dark"],
|
|
6
6
|
"modeQuery": false,
|
|
7
|
-
"ignoreRequests": ["/api/(gds|bongos)/me$", "/my-projects", "/provisioning/"],
|
|
8
|
-
"ignoreConsole": ["/api/(gds|bongos)/me", "\\b401\\b", "Unauthorized"],
|
|
7
|
+
"ignoreRequests": ["/api/(gds|bongos)/me$", "/my-projects", "/provisioning/", "/downloads/bongos/latest\\.json$"],
|
|
8
|
+
"ignoreConsole": ["/api/(gds|bongos)/me", "\\b401\\b", "Unauthorized", "status of 404"],
|
|
9
9
|
"ignoreControls": [".skip", ".vh"],
|
|
10
10
|
"states": {
|
|
11
|
-
"out": { "auth": false, "expect": { "expanded": false, "visible": ["#who a.signin"], "hidden": ["#mineCell"] } },
|
|
11
|
+
"out": { "auth": false, "expect": { "expanded": false, "visible": ["#who a.signin"], "hidden": ["#mineCell", "[data-cli]"] } },
|
|
12
12
|
"in": { "auth": true, "expect": { "expanded": false, "visible": ["#who .trig"] } },
|
|
13
13
|
"out-projects": { "auth": false, "actions": [["click", "#projTrig"], ["wait", 350]], "expect": { "expanded": true, "open": "#menuProjects", "count": [["#menuProjects [aria-current]", 0]] } },
|
|
14
14
|
"in-profile": { "auth": true, "actions": [["click", "#who .trig"], ["wait", 350]], "expect": { "expanded": true, "open": "#menuProfile" } }
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_": "The invitations page with nothing waiting (task 1004276): the same page, every list's read aliased to an empty fixture, so the one empty line shows under the heading and the join field still stands.",
|
|
3
|
+
"page": "/invitations",
|
|
4
|
+
"surface": "public-landing",
|
|
5
|
+
"modes": [
|
|
6
|
+
"dark"
|
|
7
|
+
],
|
|
8
|
+
"modeQuery": false,
|
|
9
|
+
"stub": {
|
|
10
|
+
"fixtures": {
|
|
11
|
+
"my-projects__invites": "my-projects-invites-empty",
|
|
12
|
+
"me__guild-engagements": "me-guild-engagements-empty",
|
|
13
|
+
"me__guild-requests": "me-guild-requests-empty",
|
|
14
|
+
"guilds": "guilds-empty"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"ignoreRequests": [
|
|
18
|
+
"/api/(gds|bongos)/me$",
|
|
19
|
+
"/my-projects",
|
|
20
|
+
"/me/guild-"
|
|
21
|
+
],
|
|
22
|
+
"ignoreConsole": [
|
|
23
|
+
"/api/(gds|bongos)/me",
|
|
24
|
+
"\\b401\\b",
|
|
25
|
+
"Unauthorized"
|
|
26
|
+
],
|
|
27
|
+
"ignoreControls": [
|
|
28
|
+
".skip",
|
|
29
|
+
".vh"
|
|
30
|
+
],
|
|
31
|
+
"states": {
|
|
32
|
+
"in-empty": {
|
|
33
|
+
"auth": true,
|
|
34
|
+
"actions": [
|
|
35
|
+
[
|
|
36
|
+
"wait",
|
|
37
|
+
900
|
|
38
|
+
]
|
|
39
|
+
],
|
|
40
|
+
"expect": {
|
|
41
|
+
"visible": [
|
|
42
|
+
"#invtBody",
|
|
43
|
+
"#invitesNone",
|
|
44
|
+
"#joinOrigin",
|
|
45
|
+
"#joinBtn"
|
|
46
|
+
],
|
|
47
|
+
"count": [
|
|
48
|
+
[
|
|
49
|
+
"#mineInvites .mineRow",
|
|
50
|
+
0
|
|
51
|
+
]
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_": "The join field's project picker on the invitations page (task 1004276; the owner's ask of 2026-10-06, typing an address is tedious). The map feed is aliased to featured-invitations (seven projects: two the fixture builder already builds on and one anonymous black hole, all left out; Tidepool applied to through my-projects-applied), so the list shows four pickable projects and one Applied row. States: the list open on focus, narrowed by typing, and a project picked with the keyboard.",
|
|
3
|
+
"page": "/invitations",
|
|
4
|
+
"surface": "public-landing",
|
|
5
|
+
"modes": [
|
|
6
|
+
"dark"
|
|
7
|
+
],
|
|
8
|
+
"modeQuery": false,
|
|
9
|
+
"stub": {
|
|
10
|
+
"fixtures": {
|
|
11
|
+
"featured": "featured-invitations",
|
|
12
|
+
"my-projects": "my-projects-applied"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"ignoreRequests": [
|
|
16
|
+
"/api/(gds|bongos)/me$",
|
|
17
|
+
"/my-projects",
|
|
18
|
+
"/me/guild-"
|
|
19
|
+
],
|
|
20
|
+
"ignoreConsole": [
|
|
21
|
+
"/api/(gds|bongos)/me",
|
|
22
|
+
"\\b401\\b",
|
|
23
|
+
"Unauthorized"
|
|
24
|
+
],
|
|
25
|
+
"ignoreControls": [
|
|
26
|
+
".skip",
|
|
27
|
+
".vh"
|
|
28
|
+
],
|
|
29
|
+
"states": {
|
|
30
|
+
"in-pick-open": {
|
|
31
|
+
"auth": true,
|
|
32
|
+
"actions": [
|
|
33
|
+
["wait", 900],
|
|
34
|
+
["focus", "#joinOrigin"],
|
|
35
|
+
["wait", 500]
|
|
36
|
+
],
|
|
37
|
+
"expect": {
|
|
38
|
+
"visible": ["#joinList"],
|
|
39
|
+
"count": [
|
|
40
|
+
["#joinList [role=\"option\"]", 5],
|
|
41
|
+
["#joinList [role=\"option\"][aria-disabled=\"true\"]", 1]
|
|
42
|
+
],
|
|
43
|
+
"text": [
|
|
44
|
+
["#joinList [role=\"option\"]:first-child .joinOpt__name", "Demo"],
|
|
45
|
+
["#joinList [aria-disabled=\"true\"] .joinOpt__tag", "Applied"]
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"in-pick-typed": {
|
|
50
|
+
"auth": true,
|
|
51
|
+
"actions": [
|
|
52
|
+
["wait", 900],
|
|
53
|
+
["fill", "#joinOrigin", "gro"],
|
|
54
|
+
["wait", 500]
|
|
55
|
+
],
|
|
56
|
+
"expect": {
|
|
57
|
+
"visible": ["#joinList"],
|
|
58
|
+
"count": [
|
|
59
|
+
["#joinList [role=\"option\"]", 1]
|
|
60
|
+
],
|
|
61
|
+
"text": [
|
|
62
|
+
["#joinList [role=\"option\"] .joinOpt__name", "The Grove"]
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"in-pick-chosen": {
|
|
67
|
+
"auth": true,
|
|
68
|
+
"actions": [
|
|
69
|
+
["wait", 900],
|
|
70
|
+
["fill", "#joinOrigin", "lantern"],
|
|
71
|
+
["wait", 500],
|
|
72
|
+
["press", "ArrowDown"],
|
|
73
|
+
["press", "Enter"],
|
|
74
|
+
["wait", 200]
|
|
75
|
+
],
|
|
76
|
+
"expect": {
|
|
77
|
+
"hidden": ["#joinList"],
|
|
78
|
+
"value": [
|
|
79
|
+
["#joinOrigin", "https://lantern-works.cloudbongos.com"]
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|