@bongos/core 1.19.583 → 1.19.584

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 CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.583",
6
- "core_contract": "1.19.583",
7
- "source_commit": "fb22777c0f055003ba879a32ce83f133c3bcf404",
5
+ "core_version": "1.19.584",
6
+ "core_contract": "1.19.584",
7
+ "source_commit": "7c7b294c8826106fad152689caf15014afbaf444",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-07T21:24:48.534Z",
9
+ "built_at": "2026-09-07T21:57:27.222Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 453,
13
13
  "agent_docs_stubbed": 24,
14
- "functional_verbatim": 2055,
14
+ "functional_verbatim": 2056,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2532,
20
- "tree_sha256": "bd94f04eed1f7a4c89844c53856157cdb9a14e2281876e6025d511ca9c446b7a",
19
+ "file_count": 2533,
20
+ "tree_sha256": "1091075083386a5cf37d1f5736153ed4f8cb23a152f278b1120d408446e48f14",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1857,12 +1857,12 @@
1857
1857
  {
1858
1858
  "path": "docs/copy-inventory.md",
1859
1859
  "mode": "0000644",
1860
- "sha256": "c4b6557f79a876b18cfc020ea4d45b8dfa419c9c37cab3fb2c629d85939bd75d"
1860
+ "sha256": "9357061e4e1046ee48fc227ed0b837fc32d950f7ceb5fccb4a549d310c19e5ee"
1861
1861
  },
1862
1862
  {
1863
1863
  "path": "docs/copy-registry.json",
1864
1864
  "mode": "0000644",
1865
- "sha256": "867399ce0002d6a1f509969544ad9589db6769352597471b495c66749271bb3c"
1865
+ "sha256": "34c8e1786455cbf5c76dc5ad2fffb407d4d51e4009d5455545571c415d83afaa"
1866
1866
  },
1867
1867
  {
1868
1868
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2707,7 +2707,7 @@
2707
2707
  {
2708
2708
  "path": "docs/module-api-changelog.md",
2709
2709
  "mode": "0000644",
2710
- "sha256": "a73cb53670674b790e02461ef7c11e001a5ed0ebb38498ffa222034263058932"
2710
+ "sha256": "2e124b22362c309eb08016d25db0dfbcd5d7ee2930db895c21b5053a4565a782"
2711
2711
  },
2712
2712
  {
2713
2713
  "path": "docs/modules-contract.md",
@@ -6832,7 +6832,7 @@
6832
6832
  {
6833
6833
  "path": "modules/public-landing/public/projects.html",
6834
6834
  "mode": "0000644",
6835
- "sha256": "0154fab4db489db2eb1955bffdd9b0585ff7fe28607897e75c26d83c7edfc3e0"
6835
+ "sha256": "79b713d994571f5f2405605fa19bd1b0ec05546f2ff606227afa9c91392bd969"
6836
6836
  },
6837
6837
  {
6838
6838
  "path": "modules/public-landing/public/projects.probes.json",
@@ -7577,12 +7577,12 @@
7577
7577
  {
7578
7578
  "path": "package-lock.json",
7579
7579
  "mode": "0000644",
7580
- "sha256": "b37aec87b322bad5e71296695b690719db6952a401e63afe00c277863e109082"
7580
+ "sha256": "1dedc1b50a922313443c0c20150eb85bff94a6b56d86009a39084220724e3080"
7581
7581
  },
7582
7582
  {
7583
7583
  "path": "package.json",
7584
7584
  "mode": "0000644",
7585
- "sha256": "5ddfb97b2d19da1f5631fd5fcd81102c1fb3188a855b4ea9a2e640447dad2403"
7585
+ "sha256": "03cb18f378e3d31ff342f11c865a8a97a9c08a1b6be530e35ca89fcb50632b3d"
7586
7586
  },
7587
7587
  {
7588
7588
  "path": "public-docs/index.html",
@@ -9292,7 +9292,7 @@
9292
9292
  {
9293
9293
  "path": "src/module-api.js",
9294
9294
  "mode": "0000644",
9295
- "sha256": "4cae7c47e642670fbd78fa75a65b4cee629fbc43df0a9c34a69fc465c434330e"
9295
+ "sha256": "21ef11c8ad8fe92b37ecb6279f79cbbf8d61a25283bb2623d50cf6db210414f7"
9296
9296
  },
9297
9297
  {
9298
9298
  "path": "src/module-loader/catalog.js",
@@ -12644,6 +12644,11 @@
12644
12644
  "mode": "0000644",
12645
12645
  "sha256": "456b20334164a710f59116d6a6c4b85090dc0e65668284d0a736e6ee1df5dea6"
12646
12646
  },
12647
+ {
12648
+ "path": "tests/wizard_draft_resume.mjs",
12649
+ "mode": "0000644",
12650
+ "sha256": "74ffbc7e4585e651d00ab879ece6f3d23089d7c9ae7acb15483d3752b47bbdc0"
12651
+ },
12647
12652
  {
12648
12653
  "path": "tests/workflow_exec_paths.mjs",
12649
12654
  "mode": "0000644",
@@ -4,7 +4,7 @@
4
4
  > Deterministic on a given tree — regenerate and commit rather than hand-editing.
5
5
  > Machine-readable twin: [`copy-registry.json`](copy-registry.json).
6
6
 
7
- **1709 strings** across 3 surfaces · 1478 distinct pieces of copy · 1709 certain, 0 heuristic · 162 shown in more than one place.
7
+ **1710 strings** across 3 surfaces · 1479 distinct pieces of copy · 1710 certain, 0 heuristic · 162 shown in more than one place.
8
8
 
9
9
  ## Surfaces
10
10
 
@@ -12,7 +12,7 @@
12
12
  |---|---|---|---|
13
13
  | `builders-hall` | `modules/hall-ui/public` | 78 | 1237 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
15
- | `landing` | `modules/public-landing/public` | 5 | 372 |
15
+ | `landing` | `modules/public-landing/public` | 5 | 373 |
16
16
 
17
17
  ## Confidence, and why it is on every row
18
18
 
@@ -49,7 +49,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
49
49
  | `90a128c97eae` | 4x | Builders' hall | modules/public-landing/public/index.html:906, modules/public-landing/public/projects.html:550, modules/public-landing/public/projects.html:550 |
50
50
  | `bd315dd71ea7` | 4x | Built by agents, on Cloud Bongos. | modules/public-landing/public/contact.html:71, modules/public-landing/public/index.html:900, modules/public-landing/public/privacy.html:80 |
51
51
  | `512ab32e3bf2` | 4x | Close box | modules/hall-ui/public/box-panel.js:149, modules/hall-ui/public/box-panel.js:163, modules/hall-ui/public/box-panel.js:206 |
52
- | `a5257c88eb07` | 4x | GitHub username | modules/public-landing/public/projects.html:864, modules/public-landing/public/projects.html:865, modules/public-landing/public/projects.html:1240 |
52
+ | `a5257c88eb07` | 4x | GitHub username | modules/public-landing/public/projects.html:864, modules/public-landing/public/projects.html:865, modules/public-landing/public/projects.html:1247 |
53
53
  | `3eb67b892dea` | 4x | Percy Jackson | modules/public-landing/public/index.html:803, modules/public-landing/public/index.html:821, modules/public-landing/public/index.html:827 |
54
54
  | `0887725744f2` | 4x | Restricted. | modules/hall-ui/public/gate.js:219, modules/hall-ui/public/government.js:1104, modules/hall-ui/public/harbor.js:337 |
55
55
  | `e57ec24e13ef` | 4x | Sign in with GitHub | modules/hall-ui/public/hall-render.js:265, modules/hall-ui/public/hall-render.js:336, modules/hall-ui/public/hall-render.js:405 |
@@ -1425,7 +1425,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1425
1425
  | `7667eb552781` | certain | {…}: {…}% ({…}/{…} checks) | `modules/status-ui/public/status.js:468` |
1426
1426
  | `6d0d64f10bd9` | certain | ‹ earlier page | `modules/status-ui/public/index.html:321` |
1427
1427
 
1428
- ## `landing` — 372 strings
1428
+ ## `landing` — 373 strings
1429
1429
 
1430
1430
  | id | conf | text | where |
1431
1431
  |---|---|---|---|
@@ -1445,9 +1445,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1445
1445
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/contact.html:71` |
1446
1446
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/index.html:900` |
1447
1447
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/privacy.html:80` |
1448
- | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/projects.html:1338` |
1448
+ | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/projects.html:1345` |
1449
1449
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/terms.html:84` |
1450
- | `2363998aa2be` | certain | A pair of bongo drums | `modules/public-landing/public/projects.html:1267` |
1450
+ | `2363998aa2be` | certain | A pair of bongo drums | `modules/public-landing/public/projects.html:1274` |
1451
1451
  | `407982c3d4ff` | certain | A project as a codebase, regardless of function. | `modules/public-landing/public/index.html:762` |
1452
1452
  | `c3504a900b0f` | certain | A project stood up from the hub runs on the platform's servers at your request. Any cost is shown before you c | `modules/public-landing/public/terms.html:61` |
1453
1453
  | `6cb796f01882` | certain | A project you create | `modules/public-landing/public/privacy.html:57` |
@@ -1468,10 +1468,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1468
1468
  | `90a128c97eae` | certain | Builders' hall | `modules/public-landing/public/index.html:906` |
1469
1469
  | `90a128c97eae` | certain | Builders' hall | `modules/public-landing/public/projects.html:550` |
1470
1470
  | `90a128c97eae` | certain | Builders' hall | `modules/public-landing/public/projects.html:550` |
1471
- | `90a128c97eae` | certain | Builders' hall | `modules/public-landing/public/projects.html:1338` |
1471
+ | `90a128c97eae` | certain | Builders' hall | `modules/public-landing/public/projects.html:1345` |
1472
1472
  | `16bc370da814` | certain | Building Digitally, | `modules/public-landing/public/index.html:720` |
1473
1473
  | `1e3de399e779` | certain | Built by Verro Labs, Cloud Bongos is our way of making AI co-building usable by entire project groups, whether | `modules/public-landing/public/index.html:847` |
1474
- | `ee7d8b276a29` | certain | Built by agents, on | `modules/public-landing/public/projects.html:1338` |
1474
+ | `ee7d8b276a29` | certain | Built by agents, on | `modules/public-landing/public/projects.html:1345` |
1475
1475
  | `bd315dd71ea7` | certain | Built by agents, on Cloud Bongos. | `modules/public-landing/public/contact.html:71` |
1476
1476
  | `bd315dd71ea7` | certain | Built by agents, on Cloud Bongos. | `modules/public-landing/public/index.html:900` |
1477
1477
  | `bd315dd71ea7` | certain | Built by agents, on Cloud Bongos. | `modules/public-landing/public/privacy.html:80` |
@@ -1491,11 +1491,11 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1491
1491
  | `eeda19200aeb` | certain | Cloud Bongos | `modules/public-landing/public/projects.html:1113` |
1492
1492
  | `3596c03573ce` | certain | Continue → | `modules/public-landing/public/projects.html:988` |
1493
1493
  | `21db11ef932e` | certain | Create a project | `modules/public-landing/public/projects.html:951` |
1494
- | `330038e92a44` | certain | Create my project | `modules/public-landing/public/projects.html:1214` |
1494
+ | `330038e92a44` | certain | Create my project | `modules/public-landing/public/projects.html:1221` |
1495
1495
  | `c01533093b42` | certain | Create your first project | `modules/public-landing/public/projects.html:654` |
1496
1496
  | `b07e75a05f48` | certain | Creating the repo yourself on GitHub? Public or private is your choice there — both work here, and we never ch | `modules/public-landing/public/projects.html:1156` |
1497
1497
  | `3aeefb044b9f` | certain | Creation steps | `modules/public-landing/public/projects.html:937` |
1498
- | `47d1558b17a3` | certain | Domain you own | `modules/public-landing/public/projects.html:1189` |
1498
+ | `47d1558b17a3` | certain | Domain you own | `modules/public-landing/public/projects.html:1196` |
1499
1499
  | `8d812912c392` | certain | Don't use {{productName}} to break the law, to attack this site or other people's projects, to mine, spam or o | `modules/public-landing/public/terms.html:73` |
1500
1500
  | `d919980d2ca5` | certain | Download our core code and protocols, and build instantly with your team. | `modules/public-landing/public/index.html:862` |
1501
1501
  | `18b6b56edc93` | certain | Each sign-in creates a session: a random token, whether it came from the browser or the command line, the brow | `modules/public-landing/public/privacy.html:54` |
@@ -1524,8 +1524,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1524
1524
  | `98eb6344d39e` | certain | GitHub owner | `modules/public-landing/public/projects.html:1148` |
1525
1525
  | `a5257c88eb07` | certain | GitHub username | `modules/public-landing/public/projects.html:864` |
1526
1526
  | `a5257c88eb07` | certain | GitHub username | `modules/public-landing/public/projects.html:865` |
1527
- | `a5257c88eb07` | certain | GitHub username | `modules/public-landing/public/projects.html:1240` |
1528
- | `a5257c88eb07` | certain | GitHub username | `modules/public-landing/public/projects.html:1241` |
1527
+ | `a5257c88eb07` | certain | GitHub username | `modules/public-landing/public/projects.html:1247` |
1528
+ | `a5257c88eb07` | certain | GitHub username | `modules/public-landing/public/projects.html:1248` |
1529
1529
  | `4995791c6449` | certain | Go to the hall | `modules/public-landing/public/contact.html:56` |
1530
1530
  | `41778f67b4c9` | certain | Have us handle your hosting. | `modules/public-landing/public/index.html:867` |
1531
1531
  | `978da2e651bd` | certain | Hosted projects | `modules/public-landing/public/terms.html:60` |
@@ -1534,11 +1534,11 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1534
1534
  | `4b542b000afa` | certain | How this project is drawn: on the sky, in your list, at the top of this page and on its card. A planet is a | `modules/public-landing/public/projects.html:887` |
1535
1535
  | `9f31eaed8252` | certain | If you grant repository access while creating a project, that permission is used to create or adopt your repos | `modules/public-landing/public/privacy.html:55` |
1536
1536
  | `607551ae732b` | certain | Invite a builder | `modules/public-landing/public/projects.html:860` |
1537
- | `20786b02f47a` | certain | Invite builders | `modules/public-landing/public/projects.html:1237` |
1537
+ | `20786b02f47a` | certain | Invite builders | `modules/public-landing/public/projects.html:1244` |
1538
1538
  | `a1256030d879` | certain | Invite only | `modules/public-landing/public/projects.html:809` |
1539
1539
  | `1f5d4b500966` | certain | It is provided as it is, without warranty of any kind, as its licence — the AGPL-3.0 — says. | `modules/public-landing/public/terms.html:50` |
1540
1540
  | `43a874f27956` | certain | Its address | `modules/public-landing/public/projects.html:756` |
1541
- | `cff8279a62e6` | certain | Its address in the sky | `modules/public-landing/public/projects.html:1176` |
1541
+ | `cff8279a62e6` | certain | Its address in the sky | `modules/public-landing/public/projects.html:1183` |
1542
1542
  | `639cb136cd20` | certain | Its address, its repository, what the platform last | `modules/public-landing/public/projects.html:685` |
1543
1543
  | `c30fde6c0be9` | certain | Its card | `modules/public-landing/public/projects.html:895` |
1544
1544
  | `218224e0007c` | certain | Its extras | `modules/public-landing/public/projects.html:844` |
@@ -1557,8 +1557,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1557
1557
  | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1019` |
1558
1558
  | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1052` |
1559
1559
  | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1091` |
1560
- | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1161` |
1561
- | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1201` |
1560
+ | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1168` |
1561
+ | `c661548d5140` | certain | Next → | `modules/public-landing/public/projects.html:1208` |
1562
1562
  | `f0dbace5717d` | certain | No project here. It may have been removed, or the link may be wrong. | `modules/public-landing/public/projects.html:701` |
1563
1563
  | `fad4acf2aba6` | certain | Not Sure | `modules/public-landing/public/projects.html:1010` |
1564
1564
  | `f8665480baf6` | certain | Nothing is sold, and nothing is shared for advertising. | `modules/public-landing/public/privacy.html:67` |
@@ -1567,17 +1567,17 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1567
1567
  | `1bc11853e893` | certain | On the map | `modules/public-landing/public/projects.html:824` |
1568
1568
  | `b4ac8f44710c` | certain | On the public map | `modules/public-landing/public/projects.html:742` |
1569
1569
  | `69400ca12477` | certain | Once you have signed in here and accepted these terms, your profile and that record are public by default: at | `modules/public-landing/public/terms.html:68` |
1570
- | `8329bb1a3693` | certain | One tap files the request and the platform starts standing your project up — server, database, address. Here's | `modules/public-landing/public/projects.html:1209` |
1570
+ | `8329bb1a3693` | certain | One tap files the request and the platform starts standing your project up — server, database, address. Here's | `modules/public-landing/public/projects.html:1216` |
1571
1571
  | `86cde1930d84` | certain | Only mine | `modules/public-landing/public/projects.html:419` |
1572
1572
  | `f82fe1982ab3` | certain | Open an issue on the repository | `modules/public-landing/public/contact.html:52` |
1573
1573
  | `cbfdd6ac4ec8` | certain | Open source (AGPL-3.0) | `modules/public-landing/public/contact.html:71` |
1574
1574
  | `cbfdd6ac4ec8` | certain | Open source (AGPL-3.0) | `modules/public-landing/public/index.html:900` |
1575
1575
  | `cbfdd6ac4ec8` | certain | Open source (AGPL-3.0) | `modules/public-landing/public/privacy.html:80` |
1576
- | `cbfdd6ac4ec8` | certain | Open source (AGPL-3.0) | `modules/public-landing/public/projects.html:1338` |
1576
+ | `cbfdd6ac4ec8` | certain | Open source (AGPL-3.0) | `modules/public-landing/public/projects.html:1345` |
1577
1577
  | `cbfdd6ac4ec8` | certain | Open source (AGPL-3.0) | `modules/public-landing/public/terms.html:84` |
1578
1578
  | `275ca0d5ce65` | certain | Open source. | `modules/public-landing/public/index.html:862` |
1579
1579
  | `74cdcd87d1fa` | certain | Open the map | `modules/public-landing/public/index.html:755` |
1580
- | `a226469fc575` | certain | Optional — invite people by GitHub username. Each one gets an invitation to accept from their own projects pag | `modules/public-landing/public/projects.html:1238` |
1580
+ | `a226469fc575` | certain | Optional — invite people by GitHub username. Each one gets an invitation to accept from their own projects pag | `modules/public-landing/public/projects.html:1245` |
1581
1581
  | `1ccd5072978c` | certain | Optional — skip it and nothing about your project changes. Answering shapes what we set up for you, and a desc | `modules/public-landing/public/projects.html:1035` |
1582
1582
  | `cb6c0f4da355` | certain | Optional — skip it and you get the suggested set below, shaped by what you just told us. These are extras on t | `modules/public-landing/public/projects.html:1071` |
1583
1583
  | `3eb67b892dea` | certain | Percy Jackson | `modules/public-landing/public/index.html:803` |
@@ -1586,11 +1586,11 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1586
1586
  | `3eb67b892dea` | certain | Percy Jackson | `modules/public-landing/public/index.html:833` |
1587
1587
  | `d4e9bf625ab3` | certain | Pick one of your repositories | `modules/public-landing/public/projects.html:1130` |
1588
1588
  | `65635b58dfab` | certain | Pick the shape that fits best — it’s how the project is listed on the map, and it stays as you pick it for now | `modules/public-landing/public/projects.html:1003` |
1589
- | `92c7055aa799` | certain | Project handle | `modules/public-landing/public/projects.html:1179` |
1589
+ | `92c7055aa799` | certain | Project handle | `modules/public-landing/public/projects.html:1186` |
1590
1590
  | `edab0ed81a40` | certain | Project name | `modules/public-landing/public/projects.html:982` |
1591
1591
  | `edab0ed81a40` | certain | Project name | `modules/public-landing/public/projects.html:983` |
1592
1592
  | `9685afcf24b1` | certain | Project type | `modules/public-landing/public/projects.html:1005` |
1593
- | `b76fce69822b` | certain | Projects aren’t created from this instance — this is a project, not the platform that hosts them. | `modules/public-landing/public/projects.html:1330` |
1593
+ | `b76fce69822b` | certain | Projects aren’t created from this instance — this is a project, not the platform that hosts them. | `modules/public-landing/public/projects.html:1337` |
1594
1594
  | `351a61f190a6` | certain | Questions go through the | `modules/public-landing/public/terms.html:80` |
1595
1595
  | `664f5731ddc3` | certain | Read the source. | `modules/public-landing/public/privacy.html:75` |
1596
1596
  | `664f5731ddc3` | certain | Read the source. | `modules/public-landing/public/terms.html:79` |
@@ -1607,7 +1607,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1607
1607
  | `a858e71476cc` | certain | Reading these pages signs you into nothing and sets no tracking cookie. There are no advertising or analytics | `modules/public-landing/public/privacy.html:50` |
1608
1608
  | `53be603bd0ed` | certain | Reading your GitHub repositories… | `modules/public-landing/public/projects.html:1128` |
1609
1609
  | `1702f20d7a3b` | certain | Reading your projects… | `modules/public-landing/public/projects.html:630` |
1610
- | `2cffb293878a` | certain | Ready to roll | `modules/public-landing/public/projects.html:1208` |
1610
+ | `2cffb293878a` | certain | Ready to roll | `modules/public-landing/public/projects.html:1215` |
1611
1611
  | `51660f7569f3` | certain | Repository name | `modules/public-landing/public/projects.html:1151` |
1612
1612
  | `0c6208abb13a` | certain | Repository visibility | `modules/public-landing/public/projects.html:770` |
1613
1613
  | `74f80d9e1abc` | certain | Search extras… | `modules/public-landing/public/projects.html:1080` |
@@ -1641,7 +1641,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1641
1641
  | `2ae36be1c531` | certain | Start a project | `modules/public-landing/public/projects.html:509` |
1642
1642
  | `2ae36be1c531` | certain | Start a project | `modules/public-landing/public/projects.html:978` |
1643
1643
  | `3651fe041ecf` | certain | Start fresh | `modules/public-landing/public/projects.html:1107` |
1644
- | `d18145be6031` | certain | Start without an address — possible, but sign-in on your project can’t be set up until it has one. | `modules/public-landing/public/projects.html:1196` |
1644
+ | `d18145be6031` | certain | Start without an address — possible, but sign-in on your project can’t be set up until it has one. | `modules/public-landing/public/projects.html:1203` |
1645
1645
  | `0b1330bed905` | certain | Starting point | `modules/public-landing/public/projects.html:1102` |
1646
1646
  | `d75633cc707d` | certain | Take it offline | `modules/public-landing/public/projects.html:912` |
1647
1647
  | `052e2da986c2` | certain | Task titles are write-once, no route can edit one, so a wrong title is permanent | `modules/public-landing/public/index.html:832` |
@@ -1653,9 +1653,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1653
1653
  | `8ed2dfbfd1eb` | certain | The backdrop behind this project’s name on its card — the panel that opens when someone picks it out of the ma | `modules/public-landing/public/projects.html:899` |
1654
1654
  | `c6fb34560b04` | certain | The builders' hall | `modules/public-landing/public/contact.html:54` |
1655
1655
  | `183c89fecb58` | certain | The code is open | `modules/public-landing/public/privacy.html:74` |
1656
- | `72e85e8b6f47` | certain | The drums are rolling | `modules/public-landing/public/projects.html:1223` |
1656
+ | `72e85e8b6f47` | certain | The drums are rolling | `modules/public-landing/public/projects.html:1230` |
1657
1657
  | `562422c98e3a` | certain | The hall is where members work: ideas, blockers and questions are raised and answered there. Sign in with GitH | `modules/public-landing/public/contact.html:55` |
1658
- | `fb416bf1a26b` | certain | The handle names your project on the platform — and its address comes with it. Once it stands up, a few GitHub | `modules/public-landing/public/projects.html:1177` |
1658
+ | `fb416bf1a26b` | certain | The handle names your project on the platform — and its address comes with it. Once it stands up, a few GitHub | `modules/public-landing/public/projects.html:1184` |
1659
1659
  | `a954f0dce9a3` | certain | The platform | `modules/public-landing/public/contact.html:65` |
1660
1660
  | `4fd8f5746cc5` | certain | The platform is run as a non-profit, capture-resistant commons. | `modules/public-landing/public/terms.html:50` |
1661
1661
  | `198f1eac5a95` | certain | The platform stores the date you accepted these terms, and which version, on your account. It is written only | `modules/public-landing/public/terms.html:70` |
@@ -1665,10 +1665,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1665
1665
  | `a184374b2b70` | certain | The repository is where the code, its history and its discussion live — the right door for a bug, a question, | `modules/public-landing/public/contact.html:51` |
1666
1666
  | `502ab071ba33` | certain | The short version: this is free software run by its owner, your code stays yours, and you are responsible for | `modules/public-landing/public/terms.html:46` |
1667
1667
  | `62377d81c52c` | certain | The six most recent, straight from the ledger. | `modules/public-landing/public/index.html:798` |
1668
- | `2b193468bbb5` | certain | These are the same steps however a project is created — nothing here is special to this page. | `modules/public-landing/public/projects.html:1258` |
1668
+ | `2b193468bbb5` | certain | These are the same steps however a project is created — nothing here is special to this page. | `modules/public-landing/public/projects.html:1265` |
1669
1669
  | `02e596cc4569` | certain | These numbers describe; they do not govern. | `modules/public-landing/public/terms.html:67` |
1670
1670
  | `ea7de26ce2f0` | certain | These terms ship with the software and change with it. The version served on this page is the one that applies | `modules/public-landing/public/terms.html:79` |
1671
- | `1eff94c94b66` | certain | This files the request; the control plane does the real standup and nothing touches servers from this page. Yo | `modules/public-landing/public/projects.html:1216` |
1671
+ | `1eff94c94b66` | certain | This files the request; the control plane does the real standup and nothing touches servers from this page. Yo | `modules/public-landing/public/projects.html:1223` |
1672
1672
  | `d83b739afb1e` | certain | This is a project’s management page — it answers only to the person who owns it. Sign in with GitHub to open y | `modules/public-landing/public/projects.html:691` |
1673
1673
  | `406e774e0952` | certain | This project’s deploys read its code from GitHub with an older key that only works on public repositories — so | `modules/public-landing/public/projects.html:778` |
1674
1674
  | `11c244aec5c3` | certain | This statement describes the software as it ships and changes when the software does. Revised August 2026. | `modules/public-landing/public/privacy.html:76` |
@@ -1678,7 +1678,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1678
1678
  | `b1dd149424ea` | certain | Turn the filter off to see what everyone else is building — or start your own. | `modules/public-landing/public/projects.html:508` |
1679
1679
  | `6ca9f17bdfb5` | certain | Two doors. Both are public, and both are how {{productName}} itself works day to day. | `modules/public-landing/public/contact.html:47` |
1680
1680
  | `a165999f36a9` | certain | Types of projects | `modules/public-landing/public/index.html:860` |
1681
- | `8604a145869b` | certain | Use a domain I own instead | `modules/public-landing/public/projects.html:1187` |
1681
+ | `8604a145869b` | certain | Use a domain I own instead | `modules/public-landing/public/projects.html:1194` |
1682
+ | `9be878db0d86` | certain | Use my GitHub repositories instead | `modules/public-landing/public/projects.html:1163` |
1682
1683
  | `6e1001190059` | certain | VERRO LABS | `modules/public-landing/public/index.html:846` |
1683
1684
  | `5370dd2d0e62` | certain | Ways to get paid | `modules/public-landing/public/index.html:876` |
1684
1685
  | `2286591887e3` | certain | We never change a repo’s visibility — public stays public, private stays private. | `modules/public-landing/public/projects.html:1136` |
@@ -1722,9 +1723,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1722
1723
  | `4e25e6872321` | certain | Your projects | `modules/public-landing/public/projects.html:610` |
1723
1724
  | `878439d60f78` | certain | Your projects and your code | `modules/public-landing/public/terms.html:55` |
1724
1725
  | `f04dcdea0f96` | certain | Your repositories | `modules/public-landing/public/projects.html:1132` |
1725
- | `8391cfe0dd03` | certain | Your steps — the parts only you can play | `modules/public-landing/public/projects.html:1253` |
1726
+ | `8391cfe0dd03` | certain | Your steps — the parts only you can play | `modules/public-landing/public/projects.html:1260` |
1726
1727
  | `cd379e3e0111` | certain | Your work across projects | `modules/public-landing/public/terms.html:65` |
1727
- | `bb158e10340b` | certain | Yours from the moment it stands up. You can point a domain you own at it any time. | `modules/public-landing/public/projects.html:1185` |
1728
+ | `bb158e10340b` | certain | Yours from the moment it stands up. You can point a domain you own at it any time. | `modules/public-landing/public/projects.html:1192` |
1728
1729
  | `b7cee0f10353` | certain | a game, 11 builders | `modules/public-landing/public/index.html:742` |
1729
1730
  | `7c3f28fa6528` | certain | a to z | `modules/public-landing/public/projects.html:535` |
1730
1731
  | `9cebd20afcba` | certain | about it, and the controls you have today. | `modules/public-landing/public/projects.html:685` |
@@ -1797,9 +1798,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1797
1798
  | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1018` |
1798
1799
  | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1049` |
1799
1800
  | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1088` |
1800
- | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1160` |
1801
- | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1200` |
1802
- | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1213` |
1801
+ | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1167` |
1802
+ | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1207` |
1803
+ | `5df2baabf82e` | certain | ← Back | `modules/public-landing/public/projects.html:1220` |
1803
1804
  | `b675934f9d39` | certain | ← Your projects | `modules/public-landing/public/projects.html:674` |
1804
1805
 
1805
1806
  ---
@@ -3,9 +3,9 @@
3
3
  "generator": "scripts/gds/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 1709,
7
- "unique_ids": 1478,
8
- "certain": 1709,
6
+ "strings": 1710,
7
+ "unique_ids": 1479,
8
+ "certain": 1710,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 162
11
11
  },
@@ -23,7 +23,7 @@
23
23
  "landing": {
24
24
  "at": "modules/public-landing/public",
25
25
  "files": 5,
26
- "strings": 372
26
+ "strings": 373
27
27
  }
28
28
  },
29
29
  "blind_spots": [
@@ -92,9 +92,9 @@
92
92
  "modules/public-landing/public/projects.html:1018",
93
93
  "modules/public-landing/public/projects.html:1049",
94
94
  "modules/public-landing/public/projects.html:1088",
95
- "modules/public-landing/public/projects.html:1160",
96
- "modules/public-landing/public/projects.html:1200",
97
- "modules/public-landing/public/projects.html:1213"
95
+ "modules/public-landing/public/projects.html:1167",
96
+ "modules/public-landing/public/projects.html:1207",
97
+ "modules/public-landing/public/projects.html:1220"
98
98
  ]
99
99
  },
100
100
  {
@@ -106,7 +106,7 @@
106
106
  "modules/public-landing/public/contact.html:71",
107
107
  "modules/public-landing/public/index.html:900",
108
108
  "modules/public-landing/public/privacy.html:80",
109
- "modules/public-landing/public/projects.html:1338",
109
+ "modules/public-landing/public/projects.html:1345",
110
110
  "modules/public-landing/public/terms.html:84"
111
111
  ]
112
112
  },
@@ -119,8 +119,8 @@
119
119
  "modules/public-landing/public/projects.html:1019",
120
120
  "modules/public-landing/public/projects.html:1052",
121
121
  "modules/public-landing/public/projects.html:1091",
122
- "modules/public-landing/public/projects.html:1161",
123
- "modules/public-landing/public/projects.html:1201"
122
+ "modules/public-landing/public/projects.html:1168",
123
+ "modules/public-landing/public/projects.html:1208"
124
124
  ]
125
125
  },
126
126
  {
@@ -132,7 +132,7 @@
132
132
  "modules/public-landing/public/contact.html:71",
133
133
  "modules/public-landing/public/index.html:900",
134
134
  "modules/public-landing/public/privacy.html:80",
135
- "modules/public-landing/public/projects.html:1338",
135
+ "modules/public-landing/public/projects.html:1345",
136
136
  "modules/public-landing/public/terms.html:84"
137
137
  ]
138
138
  },
@@ -183,7 +183,7 @@
183
183
  "modules/public-landing/public/index.html:906",
184
184
  "modules/public-landing/public/projects.html:550",
185
185
  "modules/public-landing/public/projects.html:550",
186
- "modules/public-landing/public/projects.html:1338"
186
+ "modules/public-landing/public/projects.html:1345"
187
187
  ]
188
188
  },
189
189
  {
@@ -218,8 +218,8 @@
218
218
  "at": [
219
219
  "modules/public-landing/public/projects.html:864",
220
220
  "modules/public-landing/public/projects.html:865",
221
- "modules/public-landing/public/projects.html:1240",
222
- "modules/public-landing/public/projects.html:1241"
221
+ "modules/public-landing/public/projects.html:1247",
222
+ "modules/public-landing/public/projects.html:1248"
223
223
  ]
224
224
  },
225
225
  {
@@ -13011,7 +13011,7 @@
13011
13011
  "surface": "landing",
13012
13012
  "text": "A non-profit, capture-resistant commons.",
13013
13013
  "file": "modules/public-landing/public/projects.html",
13014
- "line": 1338,
13014
+ "line": 1345,
13015
13015
  "origin": "html-text",
13016
13016
  "confidence": "certain"
13017
13017
  },
@@ -13029,7 +13029,7 @@
13029
13029
  "surface": "landing",
13030
13030
  "text": "A pair of bongo drums",
13031
13031
  "file": "modules/public-landing/public/projects.html",
13032
- "line": 1267,
13032
+ "line": 1274,
13033
13033
  "origin": "html-attr:aria-label",
13034
13034
  "confidence": "certain"
13035
13035
  },
@@ -13218,7 +13218,7 @@
13218
13218
  "surface": "landing",
13219
13219
  "text": "Builders' hall",
13220
13220
  "file": "modules/public-landing/public/projects.html",
13221
- "line": 1338,
13221
+ "line": 1345,
13222
13222
  "origin": "html-text",
13223
13223
  "confidence": "certain"
13224
13224
  },
@@ -13245,7 +13245,7 @@
13245
13245
  "surface": "landing",
13246
13246
  "text": "Built by agents, on",
13247
13247
  "file": "modules/public-landing/public/projects.html",
13248
- "line": 1338,
13248
+ "line": 1345,
13249
13249
  "origin": "html-text",
13250
13250
  "confidence": "certain"
13251
13251
  },
@@ -13425,7 +13425,7 @@
13425
13425
  "surface": "landing",
13426
13426
  "text": "Create my project",
13427
13427
  "file": "modules/public-landing/public/projects.html",
13428
- "line": 1214,
13428
+ "line": 1221,
13429
13429
  "origin": "html-text",
13430
13430
  "confidence": "certain"
13431
13431
  },
@@ -13461,7 +13461,7 @@
13461
13461
  "surface": "landing",
13462
13462
  "text": "Domain you own",
13463
13463
  "file": "modules/public-landing/public/projects.html",
13464
- "line": 1189,
13464
+ "line": 1196,
13465
13465
  "origin": "html-text",
13466
13466
  "confidence": "certain"
13467
13467
  },
@@ -13722,7 +13722,7 @@
13722
13722
  "surface": "landing",
13723
13723
  "text": "GitHub username",
13724
13724
  "file": "modules/public-landing/public/projects.html",
13725
- "line": 1240,
13725
+ "line": 1247,
13726
13726
  "origin": "html-text",
13727
13727
  "confidence": "certain"
13728
13728
  },
@@ -13731,7 +13731,7 @@
13731
13731
  "surface": "landing",
13732
13732
  "text": "GitHub username",
13733
13733
  "file": "modules/public-landing/public/projects.html",
13734
- "line": 1241,
13734
+ "line": 1248,
13735
13735
  "origin": "html-attr:placeholder",
13736
13736
  "confidence": "certain"
13737
13737
  },
@@ -13812,7 +13812,7 @@
13812
13812
  "surface": "landing",
13813
13813
  "text": "Invite builders",
13814
13814
  "file": "modules/public-landing/public/projects.html",
13815
- "line": 1237,
13815
+ "line": 1244,
13816
13816
  "origin": "html-text",
13817
13817
  "confidence": "certain"
13818
13818
  },
@@ -13848,7 +13848,7 @@
13848
13848
  "surface": "landing",
13849
13849
  "text": "Its address in the sky",
13850
13850
  "file": "modules/public-landing/public/projects.html",
13851
- "line": 1176,
13851
+ "line": 1183,
13852
13852
  "origin": "html-text",
13853
13853
  "confidence": "certain"
13854
13854
  },
@@ -14019,7 +14019,7 @@
14019
14019
  "surface": "landing",
14020
14020
  "text": "Next →",
14021
14021
  "file": "modules/public-landing/public/projects.html",
14022
- "line": 1161,
14022
+ "line": 1168,
14023
14023
  "origin": "html-text",
14024
14024
  "confidence": "certain"
14025
14025
  },
@@ -14028,7 +14028,7 @@
14028
14028
  "surface": "landing",
14029
14029
  "text": "Next →",
14030
14030
  "file": "modules/public-landing/public/projects.html",
14031
- "line": 1201,
14031
+ "line": 1208,
14032
14032
  "origin": "html-text",
14033
14033
  "confidence": "certain"
14034
14034
  },
@@ -14109,7 +14109,7 @@
14109
14109
  "surface": "landing",
14110
14110
  "text": "One tap files the request and the platform starts standing your project up — server, database, address. Here's the beat you're about to drop:",
14111
14111
  "file": "modules/public-landing/public/projects.html",
14112
- "line": 1209,
14112
+ "line": 1216,
14113
14113
  "origin": "html-text",
14114
14114
  "confidence": "certain"
14115
14115
  },
@@ -14163,7 +14163,7 @@
14163
14163
  "surface": "landing",
14164
14164
  "text": "Open source (AGPL-3.0)",
14165
14165
  "file": "modules/public-landing/public/projects.html",
14166
- "line": 1338,
14166
+ "line": 1345,
14167
14167
  "origin": "html-text",
14168
14168
  "confidence": "certain"
14169
14169
  },
@@ -14199,7 +14199,7 @@
14199
14199
  "surface": "landing",
14200
14200
  "text": "Optional — invite people by GitHub username. Each one gets an invitation to accept from their own projects page, and they need to have signed in here at least once. Skip this and invite anyone later; nothing about your project waits on it.",
14201
14201
  "file": "modules/public-landing/public/projects.html",
14202
- "line": 1238,
14202
+ "line": 1245,
14203
14203
  "origin": "html-text",
14204
14204
  "confidence": "certain"
14205
14205
  },
@@ -14280,7 +14280,7 @@
14280
14280
  "surface": "landing",
14281
14281
  "text": "Project handle",
14282
14282
  "file": "modules/public-landing/public/projects.html",
14283
- "line": 1179,
14283
+ "line": 1186,
14284
14284
  "origin": "html-text",
14285
14285
  "confidence": "certain"
14286
14286
  },
@@ -14316,7 +14316,7 @@
14316
14316
  "surface": "landing",
14317
14317
  "text": "Projects aren’t created from this instance — this is a project, not the platform that hosts them.",
14318
14318
  "file": "modules/public-landing/public/projects.html",
14319
- "line": 1330,
14319
+ "line": 1337,
14320
14320
  "origin": "html-text",
14321
14321
  "confidence": "certain"
14322
14322
  },
@@ -14469,7 +14469,7 @@
14469
14469
  "surface": "landing",
14470
14470
  "text": "Ready to roll",
14471
14471
  "file": "modules/public-landing/public/projects.html",
14472
- "line": 1208,
14472
+ "line": 1215,
14473
14473
  "origin": "html-text",
14474
14474
  "confidence": "certain"
14475
14475
  },
@@ -14775,7 +14775,7 @@
14775
14775
  "surface": "landing",
14776
14776
  "text": "Start without an address — possible, but sign-in on your project can’t be set up until it has one.",
14777
14777
  "file": "modules/public-landing/public/projects.html",
14778
- "line": 1196,
14778
+ "line": 1203,
14779
14779
  "origin": "html-text",
14780
14780
  "confidence": "certain"
14781
14781
  },
@@ -14883,7 +14883,7 @@
14883
14883
  "surface": "landing",
14884
14884
  "text": "The drums are rolling",
14885
14885
  "file": "modules/public-landing/public/projects.html",
14886
- "line": 1223,
14886
+ "line": 1230,
14887
14887
  "origin": "html-text",
14888
14888
  "confidence": "certain"
14889
14889
  },
@@ -14901,7 +14901,7 @@
14901
14901
  "surface": "landing",
14902
14902
  "text": "The handle names your project on the platform — and its address comes with it. Once it stands up, a few GitHub steps (the next screen walks you through them) switch sign-in on.",
14903
14903
  "file": "modules/public-landing/public/projects.html",
14904
- "line": 1177,
14904
+ "line": 1184,
14905
14905
  "origin": "html-text",
14906
14906
  "confidence": "certain"
14907
14907
  },
@@ -14991,7 +14991,7 @@
14991
14991
  "surface": "landing",
14992
14992
  "text": "These are the same steps however a project is created — nothing here is special to this page.",
14993
14993
  "file": "modules/public-landing/public/projects.html",
14994
- "line": 1258,
14994
+ "line": 1265,
14995
14995
  "origin": "html-text",
14996
14996
  "confidence": "certain"
14997
14997
  },
@@ -15018,7 +15018,7 @@
15018
15018
  "surface": "landing",
15019
15019
  "text": "This files the request; the control plane does the real standup and nothing touches servers from this page. You'll get the few steps only you can do right after.",
15020
15020
  "file": "modules/public-landing/public/projects.html",
15021
- "line": 1216,
15021
+ "line": 1223,
15022
15022
  "origin": "html-text",
15023
15023
  "confidence": "certain"
15024
15024
  },
@@ -15108,7 +15108,16 @@
15108
15108
  "surface": "landing",
15109
15109
  "text": "Use a domain I own instead",
15110
15110
  "file": "modules/public-landing/public/projects.html",
15111
- "line": 1187,
15111
+ "line": 1194,
15112
+ "origin": "html-text",
15113
+ "confidence": "certain"
15114
+ },
15115
+ {
15116
+ "id": "9be878db0d86",
15117
+ "surface": "landing",
15118
+ "text": "Use my GitHub repositories instead",
15119
+ "file": "modules/public-landing/public/projects.html",
15120
+ "line": 1163,
15112
15121
  "origin": "html-text",
15113
15122
  "confidence": "certain"
15114
15123
  },
@@ -15504,7 +15513,7 @@
15504
15513
  "surface": "landing",
15505
15514
  "text": "Your steps — the parts only you can play",
15506
15515
  "file": "modules/public-landing/public/projects.html",
15507
- "line": 1253,
15516
+ "line": 1260,
15508
15517
  "origin": "html-text",
15509
15518
  "confidence": "certain"
15510
15519
  },
@@ -15522,7 +15531,7 @@
15522
15531
  "surface": "landing",
15523
15532
  "text": "Yours from the moment it stands up. You can point a domain you own at it any time.",
15524
15533
  "file": "modules/public-landing/public/projects.html",
15525
- "line": 1185,
15534
+ "line": 1192,
15526
15535
  "origin": "html-text",
15527
15536
  "confidence": "certain"
15528
15537
  },
@@ -16179,7 +16188,7 @@
16179
16188
  "surface": "landing",
16180
16189
  "text": "← Back",
16181
16190
  "file": "modules/public-landing/public/projects.html",
16182
- "line": 1160,
16191
+ "line": 1167,
16183
16192
  "origin": "html-text",
16184
16193
  "confidence": "certain"
16185
16194
  },
@@ -16188,7 +16197,7 @@
16188
16197
  "surface": "landing",
16189
16198
  "text": "← Back",
16190
16199
  "file": "modules/public-landing/public/projects.html",
16191
- "line": 1200,
16200
+ "line": 1207,
16192
16201
  "origin": "html-text",
16193
16202
  "confidence": "certain"
16194
16203
  },
@@ -16197,7 +16206,7 @@
16197
16206
  "surface": "landing",
16198
16207
  "text": "← Back",
16199
16208
  "file": "modules/public-landing/public/projects.html",
16200
- "line": 1213,
16209
+ "line": 1220,
16201
16210
  "origin": "html-text",
16202
16211
  "confidence": "certain"
16203
16212
  },
@@ -1615,5 +1615,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
1615
1615
  landed since 1.19.581 with no explicit bump. run 34160253741. (task 1002620)
1616
1616
  1.19.583 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1617
1617
  landed since 1.19.582 with no explicit bump. run 34162998083. (task 1002620)
1618
+ 1.19.584 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1619
+ landed since 1.19.583 with no explicit bump. run 34164936809. (task 1002620)
1618
1620
  ---------------------------------------------------------------------------
1619
1621
  ```
@@ -1154,6 +1154,13 @@ summary{min-height:24px;padding:3px 0;}
1154
1154
  <!-- visibility stated BEFORE GitHub's own radio is the first place it
1155
1155
  appears (task 1002721, owner firsthand in the QA walk) -->
1156
1156
  <div class="hint" style="grid-column:1 / -1;">Creating the repo yourself on GitHub? Public or private is your choice there — both work here, and we never change it.</div>
1157
+ <!-- the way back from the manual fallback (task 1003683). Choosing "or enter
1158
+ it manually" used to hide the connect offer for good: #ghConnect renders
1159
+ only while repoAccess is 'need-connect', and nothing ever set it back, so
1160
+ a full reload was the only route to the button. Stays hidden when the
1161
+ fallback was FORCED (repoAccess 'unavailable'), where connecting cannot
1162
+ help and the offer would be a lie. -->
1163
+ <button type="button" class="linklike" id="ghManualBack" style="grid-column:1 / -1;" hidden>Use my GitHub repositories instead</button>
1157
1164
  </div>
1158
1165
  <div class="hint" id="h-home">&nbsp;</div>
1159
1166
  <div class="nav">
@@ -3498,6 +3505,7 @@ summary{min-height:24px;padding:3px 0;}
3498
3505
  }
3499
3506
  $('ghConnectBtn').addEventListener('click', connectRepos);
3500
3507
  $('ghManualToggle').addEventListener('click', function () { repoAccess = 'manual'; syncHome(); $('f-owner').focus(); });
3508
+ $('ghManualBack').addEventListener('click', function () { repoAccess = 'need-connect'; syncHome(); $('ghConnectBtn').focus(); });
3501
3509
 
3502
3510
  function syncHome() {
3503
3511
  var need = repoAccess === 'need-connect';
@@ -3508,6 +3516,9 @@ summary{min-height:24px;padding:3px 0;}
3508
3516
  $('ghAdopt').hidden = !(ok && adopt);
3509
3517
  $('ghFresh').hidden = !(ok && !adopt);
3510
3518
  $('manualHome').hidden = !isManualHome();
3519
+ /* only when the visitor CHOSE manual: with 'unavailable' the server cannot hold a
3520
+ token, so a connect round-trip would land back here having changed nothing */
3521
+ $('ghManualBack').hidden = repoAccess !== 'manual';
3511
3522
  if (need) {
3512
3523
  /* Informed consent (ADR 0155): this grants `repo`, which GitHub's own screen
3513
3524
  words as full control of ALL your repositories — so say plainly why we ask
@@ -4568,7 +4579,14 @@ summary{min-height:24px;padding:3px 0;}
4568
4579
  re-enters to the real draft step the moment /me answers */
4569
4580
  var step = authKnown && state.step >= 1 && state.step <= 7 ? state.step : 1;
4570
4581
  if (step === 1) {
4582
+ /* Pre-auth, step 1 is a PLACEHOLDER, not where the visitor is — but show()
4583
+ persists whatever step it renders, so it used to overwrite the draft's real
4584
+ position with 1 and leave onAuth() nothing to re-enter to (task 1003683). Every
4585
+ return through GitHub landed the visitor back at the name step. Put the real
4586
+ step back after rendering the placeholder, in memory AND in the draft. */
4587
+ var resumeStep = state.step;
4571
4588
  show(1, false);
4589
+ if (!authKnown && resumeStep >= 1 && resumeStep <= 7) { state.step = resumeStep; saveDraft(); }
4572
4590
  if (focus) $('newName').focus();
4573
4591
  } else {
4574
4592
  show(step, !!focus);
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.583",
3
+ "version": "1.19.584",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.583",
9
+ "version": "1.19.584",
10
10
  "license": "AGPL-3.0-or-later",
11
11
  "dependencies": {
12
12
  "express": "^4.21.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.583",
3
+ "version": "1.19.584",
4
4
  "description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "main": "src/platform-server.js",
package/src/module-api.js CHANGED
@@ -55,7 +55,7 @@ const { buildInfo } = require('./build-info');
55
55
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
56
56
  // the entry to that file. Look for a version's history there, not here.
57
57
  // ---------------------------------------------------------------------------
58
- const CORE_VERSION = '1.19.583'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
58
+ const CORE_VERSION = '1.19.584'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
59
59
 
60
60
  // A namespaced logger so a module's log lines are attributable + consistent.
61
61
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -0,0 +1,194 @@
1
+ // tests/wizard_draft_resume.mjs — the create wizard survives a round-trip through GitHub
2
+ // (task 1003683).
3
+ //
4
+ // Two defects on the Home step, both found while walking the R24 proof on live:
5
+ //
6
+ // 1. EVERY boot reset the draft to step 1. enter() deliberately renders the name step
7
+ // before /me settles ("deeper steps carry authenticated side effects"), and its own
8
+ // comment promises "onAuth() re-enters to the real draft step the moment /me answers".
9
+ // But show() PERSISTS whatever step it renders, so the placeholder overwrote the
10
+ // draft's real position with 1 — leaving onAuth() nothing to return to. Granting repo
11
+ // access from step 5 therefore dumped the visitor back at the name step, every time.
12
+ // Reproduced live on core 1.19.580: planting {step:5} and reloading read back step 1.
13
+ //
14
+ // 2. "or enter it manually" was a ONE-WAY door. #ghConnect renders only while repoAccess
15
+ // is 'need-connect', the toggle set repoAccess='manual', and nothing ever set it back
16
+ // — so the "Allow repo access" button vanished until a full page reload. Navigating
17
+ // back to step 4 and forward again did not restore it.
18
+ //
19
+ // Harness: there is no jsdom in this repo, so this follows tests/project_door_ui.mjs —
20
+ // slice the real region out of the page's INLINE script and run it in a vm under a minimal
21
+ // DOM stub. The slice boundaries are asserted, so a rename can never leave this file
22
+ // quietly testing nothing.
23
+ //
24
+ // NOT covered here, deliberately: the team shape. The first draft of this task claimed the
25
+ // OAuth hop dropped it; that was wrong — teamShape, projType and modules all survive a
26
+ // reload (verified live). What looked like a drop was the documented "clicking the chosen
27
+ // pill again UNSAYS it" toggle being re-clicked by hand.
28
+ //
29
+ // Run: node --test --test-reporter=tap tests/wizard_draft_resume.mjs
30
+
31
+ import assert from 'node:assert/strict';
32
+ import { test } from 'node:test';
33
+ import fs from 'node:fs';
34
+ import path from 'node:path';
35
+ import vm from 'node:vm';
36
+ import { fileURLToPath } from 'node:url';
37
+
38
+ const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
39
+ const HUB = fs.readFileSync(path.join(ROOT, 'modules', 'public-landing', 'public', 'projects.html'), 'utf8');
40
+
41
+ // ── slice 1 · the step-resolution block inside enter() ────────────────────────────
42
+ const STEP_RE = /var step = authKnown &&[\s\S]*?show\(step, !!focus\);\r?\n\s*\}/;
43
+ const stepSlice = (HUB.match(STEP_RE) || [null])[0];
44
+
45
+ test('the step-resolution slice is still findable (a rename must fail loudly, not silently pass)', () => {
46
+ assert.ok(stepSlice, 'enter()\'s step-resolution block was not found in projects.html');
47
+ assert.match(stepSlice, /show\(1, false\)/, 'the pre-auth placeholder render is part of the slice');
48
+ });
49
+
50
+ // A faithful miniature of the real show(): the ONE behaviour that matters here is that it
51
+ // writes state.step and then persists the whole state. If show() ever stops persisting,
52
+ // this test still passes for the right reason — the draft keeps the real step either way.
53
+ function runStep({ authKnown, draftStep }) {
54
+ const store = new Map();
55
+ const state = { step: draftStep, name: 'probe', teamShape: 'small-team' };
56
+ store.set('draft', JSON.stringify(state));
57
+ const rendered = [];
58
+ const sandbox = {
59
+ authKnown,
60
+ state,
61
+ focus: false,
62
+ saveDraft() { store.set('draft', JSON.stringify(state)); },
63
+ show(step) { state.step = step; rendered.push(step); sandbox.saveDraft(); },
64
+ $: () => ({ focus() {} }),
65
+ };
66
+ sandbox.globalThis = sandbox;
67
+ vm.createContext(sandbox);
68
+ vm.runInContext(stepSlice, sandbox);
69
+ return { rendered, persisted: JSON.parse(store.get('draft')), state };
70
+ }
71
+
72
+ test('pre-auth: the placeholder renders step 1 but the draft KEEPS the real step', () => {
73
+ const { rendered, persisted } = runStep({ authKnown: false, draftStep: 5 });
74
+ assert.deepEqual(rendered, [1], 'still renders the name step before identity settles');
75
+ assert.equal(persisted.step, 5, 'the draft must not be overwritten with the placeholder');
76
+ });
77
+
78
+ test('pre-auth: the in-memory step is restored too, so onAuth() can re-enter to it', () => {
79
+ // onAuth() calls enter() again and reads state.step from MEMORY, not from storage — so
80
+ // restoring only the stored copy would fix nothing.
81
+ const { state } = runStep({ authKnown: false, draftStep: 6 });
82
+ assert.equal(state.step, 6);
83
+ });
84
+
85
+ test('post-auth: the real step is rendered', () => {
86
+ const { rendered, persisted } = runStep({ authKnown: true, draftStep: 5 });
87
+ assert.deepEqual(rendered, [5]);
88
+ assert.equal(persisted.step, 5);
89
+ });
90
+
91
+ test('a draft already at step 1 is unchanged, and an out-of-range step is not resurrected', () => {
92
+ assert.equal(runStep({ authKnown: false, draftStep: 1 }).persisted.step, 1);
93
+ // 8 is the done panel, reached by its own branch above this slice; 0 is the gate. Neither
94
+ // is a resumable wizard position, so the placeholder is allowed to stand.
95
+ for (const bad of [0, 8, 99]) {
96
+ assert.equal(runStep({ authKnown: false, draftStep: bad }).persisted.step, 1, `step ${bad} is not resumed`);
97
+ }
98
+ });
99
+
100
+ // ── slice 2 · syncHome's control over the way back ────────────────────────────────
101
+ const SYNC_RE = /function syncHome\(\) \{[\s\S]*?\n {4}\}/;
102
+ const syncSlice = (HUB.match(SYNC_RE) || [null])[0];
103
+
104
+ test('the syncHome slice is still findable', () => {
105
+ assert.ok(syncSlice, 'syncHome() was not found in projects.html');
106
+ assert.match(syncSlice, /ghManualBack/, 'syncHome governs the way-back control');
107
+ });
108
+
109
+ function runSync(repoAccess) {
110
+ const els = {};
111
+ // Elements start HIDDEN so that "shown" is only ever the result of syncHome setting it.
112
+ // With a `hidden: false` default, a control syncHome never mentions reads as visible and
113
+ // the assertion below would pass against the unfixed page.
114
+ const el = (id) => (els[id] ||= {
115
+ id, hidden: true, textContent: '', _on: false,
116
+ classList: { toggle(_c, v) { els[id]._on = !!v; } },
117
+ });
118
+ const sandbox = {
119
+ repoAccess,
120
+ state: { mode: 'greenfield' },
121
+ $: el,
122
+ isManualHome: () => repoAccess === 'manual' || repoAccess === 'unavailable',
123
+ initAdoptPicker() {}, syncFresh() {},
124
+ };
125
+ sandbox.globalThis = sandbox;
126
+ vm.createContext(sandbox);
127
+ vm.runInContext(syncSlice + '\nsyncHome();', sandbox);
128
+ return { connectShown: el('ghConnect')._on, manualShown: !el('manualHome').hidden, backShown: !el('ghManualBack').hidden };
129
+ }
130
+
131
+ test('choosing manual leaves a way back to the connect offer', () => {
132
+ const manual = runSync('manual');
133
+ assert.equal(manual.manualShown, true, 'the manual fields are up');
134
+ assert.equal(manual.connectShown, false, 'the connect box is down — that is what made it a trap');
135
+ assert.equal(manual.backShown, true, 'and the way back is offered');
136
+ });
137
+
138
+ test('a FORCED fallback offers no way back, because connecting cannot help', () => {
139
+ // 'unavailable' means the server could not store a token. Offering "use my GitHub
140
+ // repositories instead" there would send the visitor through a round-trip that lands
141
+ // them right back here — an offer that cannot be honoured is worse than none.
142
+ const forced = runSync('unavailable');
143
+ assert.equal(forced.manualShown, true);
144
+ assert.equal(forced.backShown, false);
145
+ });
146
+
147
+ test('while the connect offer is up, the way back is not', () => {
148
+ const need = runSync('need-connect');
149
+ assert.equal(need.connectShown, true);
150
+ assert.equal(need.backShown, false, 'no second, redundant control beside the button itself');
151
+ });
152
+
153
+ // ── slice 3 · why this task's original team-shape claim was wrong ─────────────────
154
+ // The bug was filed claiming a GitHub round-trip drops the team shape. It does not: a
155
+ // planted draft reads teamShape back intact after a reload (verified live on 1.19.580).
156
+ // The real explanation is this handler — the pill is an UNSAY toggle, so re-clicking the
157
+ // already-chosen shape clears it. During the R24 walk that second click was mine. Pinning
158
+ // it here so the claim rests on the handler's actual behaviour rather than on prose.
159
+ // Anchored on addEventListener: the same selector also appears inside paintTeam(), which
160
+ // only writes aria-pressed. Matching that one instead yields a slice that will not parse.
161
+ const TEAM_RE = /root\.querySelectorAll\('#teamCards \.tpill'\)\.forEach\(function \(b\) \{\s*b\.addEventListener[\s\S]*?\n {4}\}\);/;
162
+ const teamSlice = (HUB.match(TEAM_RE) || [null])[0];
163
+
164
+ test('the team-pill slice is still findable', () => {
165
+ assert.ok(teamSlice, 'the #teamCards pill handler was not found in projects.html');
166
+ assert.match(teamSlice, /state\.teamShape/, 'the handler owns the team-shape answer');
167
+ });
168
+
169
+ test('the team pill UNSAYS on a second click — the answer is not dropped, it is toggled off', () => {
170
+ const state = { teamShape: null };
171
+ const handlers = [];
172
+ const pill = (team) => ({
173
+ getAttribute: (a) => (a === 'data-team' ? team : null),
174
+ addEventListener: (_e, fn) => handlers.push({ team, fn }),
175
+ });
176
+ const sandbox = {
177
+ state,
178
+ root: { querySelectorAll: () => [pill('solo'), pill('small-team'), pill('community')] },
179
+ paintTeam() {}, paintDetail() {}, saveDraft() {},
180
+ };
181
+ sandbox.globalThis = sandbox;
182
+ vm.createContext(sandbox);
183
+ vm.runInContext(teamSlice, sandbox);
184
+
185
+ const click = (team) => handlers.find((h) => h.team === team).fn();
186
+ click('small-team');
187
+ assert.equal(state.teamShape, 'small-team', 'first click answers');
188
+ click('small-team');
189
+ assert.equal(state.teamShape, null, 'the SAME pill again unsays it — this is the mis-read bug');
190
+ click('small-team');
191
+ assert.equal(state.teamShape, 'small-team', 'and a third click answers again');
192
+ click('community');
193
+ assert.equal(state.teamShape, 'community', 'a DIFFERENT pill replaces rather than clears');
194
+ });