@bongos/core 1.21.104 → 1.21.106

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 (40) hide show
  1. package/.bongos-core.json +57 -47
  2. package/docs/copy-inventory.md +368 -366
  3. package/docs/copy-registry.json +475 -457
  4. package/docs/design/project-startup-direction.md +14 -0
  5. package/docs/module-api-changelog.md +4 -0
  6. package/docs/page-inventory.json +10 -3
  7. package/docs/page-readings.json +1023 -977
  8. package/modules/lifecycle/check-rollup.js +11 -1
  9. package/modules/lifecycle/github-push.js +3 -7
  10. package/modules/public-landing/public/projects-hall-live.states.json +3 -2
  11. package/modules/public-landing/public/projects-setup.states.json +91 -0
  12. package/modules/public-landing/public/projects.html +535 -804
  13. package/modules/public-landing/public/projects.probes.json +3 -3
  14. package/modules/public-landing/public/projects.states.json +1 -1
  15. package/modules/ui-design/kit/fixtures/provisioning-instances-hall-live.json +22 -2
  16. package/modules/ui-design/kit/fixtures/provisioning-instances-setup.json +195 -0
  17. package/modules/ui-design/kit/serve.js +22 -4
  18. package/package-lock.json +2 -2
  19. package/package.json +1 -1
  20. package/release-notes.json +12 -0
  21. package/scripts/gds/ship-land.js +2 -2
  22. package/src/module-api.js +1 -1
  23. package/tests/cosmos_token_contrast.mjs +10 -18
  24. package/tests/github_handback_any_device.mjs +4 -3
  25. package/tests/github_one_trip.mjs +45 -47
  26. package/tests/github_org_account.mjs +2 -2
  27. package/tests/github_pick_up.mjs +40 -29
  28. package/tests/github_push_merge_driver.mjs +46 -0
  29. package/tests/onboard.mjs +13 -7
  30. package/tests/project_invite_ui.mjs +6 -3
  31. package/tests/project_modules_ui.mjs +3 -3
  32. package/tests/projects_hub.mjs +8 -9
  33. package/tests/projects_hub_cloud_hop.mjs +77 -125
  34. package/tests/projects_hub_dns_ready.mjs +42 -51
  35. package/tests/projects_hub_pre_uat.mjs +68 -69
  36. package/tests/public_landing_projects.mjs +45 -102
  37. package/tests/setup_status_facts.mjs +400 -0
  38. package/tests/wizard_github_feedback.mjs +90 -87
  39. package/tests/wizard_one_page.mjs +11 -9
  40. package/tests/wizard_auto_open.mjs +0 -94
@@ -39,4 +39,14 @@ function readCheckRollup(rollup) {
39
39
  };
40
40
  }
41
41
 
42
- module.exports = { readCheckRollup, UNIT_REPORT_CONTEXT };
42
+ // The conclusions that mean a check really FAILED (task 1004666). One set for both
43
+ // readers: the laptop's ship-land.js (task 1003764) and the server's mergeBlockReason.
44
+ // readCheckRollup maps a status context's state into `conclusion`, so PENDING and
45
+ // EXPECTED (posted but unfinished, or required but not yet reported) land there too —
46
+ // those are waiting, not red. The server reader used to count anything outside
47
+ // SUCCESS/NEUTRAL/SKIPPED as failing, which named a still-running check as the reason
48
+ // a PR was red and sent the publish reconciler after a regen-heal it did not need.
49
+ const RED_CONCLUSIONS = new Set(['FAILURE', 'ERROR', 'TIMED_OUT', 'CANCELLED', 'ACTION_REQUIRED', 'STARTUP_FAILURE']);
50
+ const isRedCheck = (c) => !!c && RED_CONCLUSIONS.has(String(c.conclusion || '').toUpperCase());
51
+
52
+ module.exports = { readCheckRollup, UNIT_REPORT_CONTEXT, RED_CONCLUSIONS, isRedCheck };
@@ -40,7 +40,7 @@ const os = require('node:os');
40
40
  const path = require('node:path');
41
41
  const { promisify } = require('node:util');
42
42
  const { repoInfo, userAgent } = require('../../src/module-api');
43
- const { readCheckRollup, UNIT_REPORT_CONTEXT } = require('./check-rollup');
43
+ const { readCheckRollup, UNIT_REPORT_CONTEXT, isRedCheck } = require('./check-rollup'); // isRedCheck: only a FAILED check is red, never a pending one (task 1004666)
44
44
  const { loadRepoInfo } = repoInfo;
45
45
 
46
46
  const execFileP = promisify(execFile);
@@ -951,10 +951,6 @@ async function getMergeState({ branch }, deps = {}) {
951
951
  };
952
952
  }
953
953
 
954
- // A non-passing check conclusion (everything that isn't a clean success/skip).
955
- const _BAD_CHECK = (c) =>
956
- c.conclusion && !['SUCCESS', 'NEUTRAL', 'SKIPPED'].includes(String(c.conclusion).toUpperCase());
957
-
958
954
  // Human-readable reason a not-yet-merged PR isn't mergeable, surfaced to a
959
955
  // credential-less session so it reports the truth instead of guessing.
960
956
  function mergeBlockReason(s) {
@@ -967,7 +963,7 @@ function mergeBlockReason(s) {
967
963
  if (s.review_decision === 'CHANGES_REQUESTED') return 'changes_requested';
968
964
  if (s.review_decision === 'REVIEW_REQUIRED') return 'review_required';
969
965
  if (s.merge_state === 'BLOCKED') {
970
- const bad = s.checks.filter(_BAD_CHECK);
966
+ const bad = s.checks.filter(isRedCheck);
971
967
  if (bad.length) return `failing_check:${bad[0].name}`;
972
968
  // Red, and the failing check is one of the nulled nodes: say the list is blind
973
969
  // rather than guess "review or pending", which sent a ship retrying (task 1003988).
@@ -975,7 +971,7 @@ function mergeBlockReason(s) {
975
971
  return 'blocked_required_review_or_pending_check';
976
972
  }
977
973
  if (s.merge_state === 'UNSTABLE') {
978
- const bad = s.checks.filter(_BAD_CHECK);
974
+ const bad = s.checks.filter(isRedCheck);
979
975
  return bad.length ? `non_required_check_failing:${bad[0].name}` : 'non_required_check_pending';
980
976
  }
981
977
  if (s.mergeable === 'UNKNOWN' || s.merge_state === 'UNKNOWN' || s.merge_state == null) {
@@ -1,5 +1,5 @@
1
1
  {
2
- "_": "The create wizard done panel once the hall answers (task 1004503): the same walk as projects.states.json in-new-done, with the instance list aliased so the project just filed (id 102) is live and verified up. The invite box opens only now; in-new-done in the main file pictures it shut while the project is set up. Rendered by name: node modules/ui-design/kit/render.js --states modules/public-landing/public/projects-hall-live.states.json",
2
+ "_": "The create wizard done panel once the hall answers (task 1004503): the same walk as projects.states.json in-new-done, with the instance list aliased so the project just filed (id 102) is live and verified up, with its GitHub app approved, installed and signed in (since task 1004683 part 03 says it is alive only once every required fact is done). The invite box and the Enter Genesis door open only now; in-new-done in the main file pictures it shut while the project is set up. Rendered by name: node modules/ui-design/kit/render.js --states modules/public-landing/public/projects-hall-live.states.json",
3
3
  "page": "/projects",
4
4
  "surface": "public-landing",
5
5
  "modes": [
@@ -131,7 +131,8 @@
131
131
  "#panel-done",
132
132
  "#wizInvite",
133
133
  "#wizInviteWho",
134
- "#humanSteps"
134
+ "#doneAlive",
135
+ "#enterGenesis"
135
136
  ],
136
137
  "hidden": [
137
138
  "#hop",
@@ -0,0 +1,91 @@
1
+ {
2
+ "_": "Part 03 after Create, the five scenarios of the design of record docs/design/mocks/day-night-rooms/setup-status.html (task 1004683): the same page and stub, the instance list aliased to one project per scenario, each opened by URL the way the GitHub return route lands a founder (?view=new&id=<project>). The GitHub halves of each owner read come from the REAL projections (see the fixture's note). The room follows the viewer's clock, so these renders picture whichever room the machine's clock gives, and the stub serves a local address with no apex base, so the Approve fact pictures its local-platform branch (GitHub cannot reach a local platform) rather than Connect GitHub. The day and night shots attached to the task were taken with the browser's timezone moved and the apex stamped. Rendered by name: node modules/ui-design/kit/render.js --states modules/public-landing/public/projects-setup.states.json",
3
+ "page": "/projects",
4
+ "surface": "public-landing",
5
+ "modes": [
6
+ "dark"
7
+ ],
8
+ "modeQuery": false,
9
+ "stub": {
10
+ "fixtures": {
11
+ "provisioning-instances": "provisioning-instances-setup"
12
+ }
13
+ },
14
+ "ignoreRequests": [
15
+ "/api/(gds|bongos)/me$",
16
+ "/my-projects",
17
+ "/github/orgs",
18
+ "/env-manifest$"
19
+ ],
20
+ "ignoreConsole": [
21
+ "/api/(gds|bongos)/me",
22
+ "\\b401\\b",
23
+ "\\b404\\b",
24
+ "Unauthorized"
25
+ ],
26
+ "ignoreControls": [
27
+ ".skip",
28
+ ".vh"
29
+ ],
30
+ "states": {
31
+ "setup-just-created": {
32
+ "auth": true,
33
+ "url": "/projects?view=new&id=201",
34
+ "actions": [["wait", 1500]],
35
+ "expect": {
36
+ "visible": ["#panel-done", "#setupNow", "#homeFacts", "#ghFacts", "#hopLink", "#homeFacts [data-fact=\"server\"].now"],
37
+ "hidden": ["#wizParts", "#hop", "#doneAlive", "#aaPick"],
38
+ "text": [["#donePartT", "Getting kestrel ready"], ["#ghState", "1 of 6 done"]]
39
+ }
40
+ },
41
+ "setup-waiting-on-github": {
42
+ "auth": true,
43
+ "url": "/projects?view=new&id=202",
44
+ "actions": [["wait", 1500]],
45
+ "expect": {
46
+ "visible": ["#panel-done", "#homeFacts [data-fact=\"answers\"].now"],
47
+ "hidden": ["#hop", "#doneAlive", "#aaPick"],
48
+ "text": [["#ghState", "2 of 6 done"]]
49
+ }
50
+ },
51
+ "setup-installing": {
52
+ "auth": true,
53
+ "url": "/projects?view=new&id=203",
54
+ "actions": [["wait", 1500]],
55
+ "expect": {
56
+ "visible": ["#panel-done", "#ghFacts [data-fact=\"install\"].you"],
57
+ "hidden": ["#hop", "#doneAlive"],
58
+ "text": [["#ghState", "4 of 6 done"]]
59
+ }
60
+ },
61
+ "setup-stopped": {
62
+ "auth": true,
63
+ "url": "/projects?view=new&id=204",
64
+ "actions": [["wait", 1500]],
65
+ "expect": {
66
+ "visible": ["#panel-done", "#ghFacts [data-fact=\"install\"].bad [data-action=\"pick-up\"]"],
67
+ "hidden": ["#hop", "#doneAlive"],
68
+ "text": [["#ghState", "5 of 6 done"]]
69
+ }
70
+ },
71
+ "setup-all-done": {
72
+ "auth": true,
73
+ "url": "/projects?view=new&id=205",
74
+ "actions": [["wait", 1500]],
75
+ "expect": {
76
+ "visible": ["#panel-done", "#doneAlive", "#enterGenesis"],
77
+ "hidden": ["#hop", "#hopLink"],
78
+ "text": [["#ghState", "ready ✓"], ["#done-h", "wren is alive."], ["#enterGenesis", "Enter Genesis"]]
79
+ }
80
+ },
81
+ "setup-cloud-hop-open": {
82
+ "auth": true,
83
+ "url": "/projects?view=new&id=201",
84
+ "actions": [["wait", 1200], ["click", "#hopLink"], ["wait", 600]],
85
+ "expect": {
86
+ "visible": ["#hop", "#hopCanvas"],
87
+ "attr": [["#hopLink", "aria-expanded", "true"]]
88
+ }
89
+ }
90
+ }
91
+ }