@bongos/core 1.21.83 → 1.21.85

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 (36) hide show
  1. package/.bongos-core.json +50 -40
  2. package/clients/bongos-client/index.d.ts +1 -1
  3. package/docs/adr/0369-ship-mode-decides-who-starts-a-ship-not-how-it-lands.md +1 -0
  4. package/docs/api/openapi.json +7 -0
  5. package/docs/api-reference.md +1 -1
  6. package/docs/copy-inventory.md +32 -28
  7. package/docs/copy-registry.json +70 -34
  8. package/docs/module-api-changelog.md +4 -0
  9. package/docs/page-inventory.json +2 -1
  10. package/docs/page-readings.json +121 -113
  11. package/modules/lifecycle/page-tweak-hold.js +12 -0
  12. package/modules/lifecycle/routes/tasks.js +4 -3
  13. package/modules/lifecycle/ship-card.js +18 -1
  14. package/modules/provisioning/birth.js +28 -1
  15. package/modules/provisioning/routes/provisioning.js +3 -1
  16. package/modules/public-landing/public/projects.html +46 -5
  17. package/modules/public-landing/public/projects.states.json +1 -0
  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-finish.js +4 -2
  22. package/scripts/gds/ship-flow.js +4 -2
  23. package/scripts/gds/ship-grade-steps.js +7 -2
  24. package/scripts/gds/ship-land.js +2 -2
  25. package/src/bongos/project-settings.js +16 -2
  26. package/src/branding.js +3 -0
  27. package/src/module-api.js +1 -1
  28. package/tests/held_tweak_reporting.mjs +164 -0
  29. package/tests/page_tweak_hold.mjs +1 -2
  30. package/tests/projects_hub.mjs +1 -1
  31. package/tests/projects_hub_app_step.mjs +1 -1
  32. package/tests/provision_settings_apply.mjs +4 -1
  33. package/tests/provisioning_settings_env.mjs +3 -1
  34. package/tests/wizard_physics_more.mjs +5 -5
  35. package/tests/wizard_ship_mode.mjs +187 -0
  36. package/tests/wizard_six_screens.mjs +3 -2
@@ -5,7 +5,7 @@
5
5
  "adr": "0341 D3",
6
6
  "reread": "node scripts/gds/page-reader.js --stale",
7
7
  "how": ["Generated by node scripts/gds/page-reader.js (BV2.TW04, task 1004315; ADR 0341 D3). Do not hand-edit.","One entry per page of docs/page-inventory.json. Lines are in page order: the default state first, and a line only another state shows sits where that state shows it, with its state named.","placement: placed = a docs/copy-registry.json row renders it (file, line, string_id); shared = shell text every page of the surface carries (top bar, sidebar, footer), with its row when the registry has one; unplaced = the registry cannot place it (a rewrite becomes an engineer task, ADR 0341 D4).","text keeps {…} where the registry row has a hole, or where a value the page read from its API was filled in. A string that is only such data is counted under omitted.data, not listed.","reading_hash is over the non-shared lines (key, section, text); files_hash is over the page's inventory files. --check compares files_hash only and never opens a browser.","Rendered through the hall-preview harness (hall) and the ui-design kit stub (landing, status), at 1280x800 with the clock pinned, so a reading is the fixture world's page."],
8
- "counts": {"pages":44,"lines":5098,"placed":1624,"shared":410,"unplaced":3064,"omitted_data":2546},
8
+ "counts": {"pages":44,"lines":5106,"placed":1628,"shared":410,"unplaced":3068,"omitted_data":2546},
9
9
  "pages": [
10
10
  {
11
11
  "id": "builders:atlas",
@@ -4578,10 +4578,10 @@
4578
4578
  "id": "landing:projects",
4579
4579
  "surface": "landing",
4580
4580
  "title": "{{productName}} — projects",
4581
- "states_read": ["out-map","in-map","in-map-projects","in-map-profile","in-map-kbd","in-map-search","in-map-mine-on","in-table","in-table-by-builders","in-mine","in-manage","in-manage-address","in-manage-planet","in-manage-card","in-manage-look","in-manage-kind","in-manage-invite","in-manage-invite-handoff","in-manage-invite-guild","in-manage-app-live","in-manage-app-building","in-manage-app-failed","in-manage-app-retry","in-manage-app-offer","in-manage-app-connect","in-manage-snag","in-manage-gone","in-manage-missing","out-manage","in-new","in-new-fork-ticked","in-new-terms-refused","in-new-fork-demo","in-new-demo-what","in-new-demo-review-address","in-new-what","in-new-name-prefilled","in-new-checks","in-new-checks-filled","in-new-checks-entity","in-new-review","in-new-review-code","in-new-review-address","in-new-review-app","in-new-review-extras","in-new-review-team","in-new-review-run","in-new-review-confirmed","in-new-look","in-new-done","in-new-resume-offer","in-new-look-custom","out-new","out-map-projects","card","card-noart","card-self","in-manage-demo","in-mine-dns-pending","in-manage-dns-pending","in-mine-empty","card-floor","card-backdrop","in-new-done-live"],
4582
- "files_hash": "7869b0f619a5d281",
4583
- "reading_hash": "5ea4f4e0911a1cba",
4584
- "counts": {"lines":911,"placed":223,"shared":21,"unplaced":667},
4581
+ "states_read": ["out-map","in-map","in-map-projects","in-map-profile","in-map-kbd","in-map-search","in-map-mine-on","in-table","in-table-by-builders","in-mine","in-manage","in-manage-address","in-manage-planet","in-manage-card","in-manage-look","in-manage-kind","in-manage-invite","in-manage-invite-handoff","in-manage-invite-guild","in-manage-app-live","in-manage-app-building","in-manage-app-failed","in-manage-app-retry","in-manage-app-offer","in-manage-app-connect","in-manage-snag","in-manage-gone","in-manage-missing","out-manage","in-new","in-new-fork-ticked","in-new-terms-refused","in-new-fork-demo","in-new-demo-what","in-new-demo-review-address","in-new-what","in-new-name-prefilled","in-new-checks","in-new-checks-filled","in-new-checks-entity","in-new-review","in-new-review-code","in-new-review-address","in-new-review-app","in-new-review-extras","in-new-review-team","in-new-review-run","in-new-review-ship","in-new-review-confirmed","in-new-look","in-new-done","in-new-resume-offer","in-new-look-custom","out-new","out-map-projects","card","card-noart","card-self","in-manage-demo","in-mine-dns-pending","in-manage-dns-pending","in-mine-empty","card-floor","card-backdrop","in-new-done-live"],
4582
+ "files_hash": "bc8a696000bbb24d",
4583
+ "reading_hash": "f36b4a70808934f5",
4584
+ "counts": {"lines":919,"placed":227,"shared":21,"unplaced":671},
4585
4585
  "omitted": {"data":141},
4586
4586
  "notes": [],
4587
4587
  "lines": [
@@ -4600,14 +4600,14 @@
4600
4600
  {"key":"L0013","section":"Mercury is alive.","text":"your projects page","placement":"unplaced","state":"in-new-done-live"},
4601
4601
  {"key":"L0014","section":"Mercury is alive.","text":"Your project is answering at","placement":"unplaced","state":"in-new-done-live"},
4602
4602
  {"key":"L0015","section":"Mercury is alive.","text":". Finish the steps below and the hall is yours.","placement":"unplaced","state":"in-new-done-live"},
4603
- {"key":"L0016","section":"Invite builders","text":"Invite builders","placement":"placed","file":"modules/public-landing/public/projects.html","line":2016,"string_id":"20786b02f47a","state":"in-new-done-live"},
4604
- {"key":"L0017","section":"Invite builders","text":"Optional. Invite people by GitHub username. The invite comes from your project’s hall, and you can invite anyone later.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2017,"string_id":"4cb1fddfb7bf","state":"in-new-done-live"},
4603
+ {"key":"L0016","section":"Invite builders","text":"Invite builders","placement":"placed","file":"modules/public-landing/public/projects.html","line":2041,"string_id":"20786b02f47a","state":"in-new-done-live"},
4604
+ {"key":"L0017","section":"Invite builders","text":"Optional. Invite people by GitHub username. The invite comes from your project’s hall, and you can invite anyone later.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2042,"string_id":"4cb1fddfb7bf","state":"in-new-done-live"},
4605
4605
  {"key":"L0018","section":"Invite builders","text":"GitHub username","placement":"placed","file":"modules/public-landing/public/projects.html","line":1315,"string_id":"a5257c88eb07","attr":"placeholder","state":"in-new-done-live"},
4606
4606
  {"key":"L0019","section":"Invite builders","text":"Invite","placement":"unplaced","state":"in-new-done-live"},
4607
4607
  {"key":"L0020","section":"Invite builders","text":"Skip","placement":"unplaced","state":"in-new-done-live"},
4608
4608
  {"key":"L0021","section":"Invite builders","text":"You can invite builders any time from","placement":"unplaced","state":"in-new-done-live"},
4609
4609
  {"key":"L0022","section":"Invite builders","text":"the project’s own page","placement":"unplaced","state":"in-new-done-live"},
4610
- {"key":"L0023","section":"Your steps — the parts only you can play","text":"Your steps — the parts only you can play","placement":"placed","file":"modules/public-landing/public/projects.html","line":2033,"string_id":"8391cfe0dd03","state":"in-new-done-live"},
4610
+ {"key":"L0023","section":"Your steps — the parts only you can play","text":"Your steps — the parts only you can play","placement":"placed","file":"modules/public-landing/public/projects.html","line":2058,"string_id":"8391cfe0dd03","state":"in-new-done-live"},
4611
4611
  {"key":"L0024","section":"Your steps — the parts only you can play","text":"Wire GitHub sign-in","placement":"unplaced","state":"in-new-done-live"},
4612
4612
  {"key":"L0025","section":"Your steps — the parts only you can play","text":"This platform is {…} on a local address, and GitHub refuses app setups it can’t reach over the {…} internet — so the one-click flow can’t complete here. On a publicly-addressed platform this is one click.","placement":"unplaced","state":"in-new-done-live"},
4613
4613
  {"key":"L0026","section":"Your steps — the parts only you can play","text":"Prefer to create an OAuth app by hand?","placement":"unplaced","state":"in-new-done-live"},
@@ -4616,12 +4616,12 @@
4616
4616
  {"key":"L0029","section":"Your steps — the parts only you can play","text":"Continue","placement":"unplaced","state":"in-new-done-live"},
4617
4617
  {"key":"L0030","section":"Your steps — the parts only you can play","text":"Add or remove modules later in","placement":"unplaced","state":"in-new-done-live"},
4618
4618
  {"key":"L0031","section":"Your steps — the parts only you can play","text":"the project’s settings","placement":"unplaced","state":"in-new-done-live"},
4619
- {"key":"L0032","section":"Your steps — the parts only you can play","text":"These steps are the same however a project is created.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2044,"string_id":"c33b28f6f397","state":"in-new-done-live"},
4619
+ {"key":"L0032","section":"Your steps — the parts only you can play","text":"These steps are the same however a project is created.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2069,"string_id":"c33b28f6f397","state":"in-new-done-live"},
4620
4620
  {"key":"L0033","section":"Your steps — the parts only you can play","text":"Start another project","placement":"unplaced","state":"in-new-done-live"},
4621
- {"key":"L0034","section":"footer","text":"A non-profit, capture-resistant commons.","placement":"shared","file":"modules/public-landing/public/projects.html","line":2060,"string_id":"afe83bbbd0d4","state":"in-new-done-live","occurrences":18},
4622
- {"key":"L0035","section":"footer","text":"Built by agents, on","placement":"shared","file":"modules/public-landing/public/projects.html","line":2060,"string_id":"ee7d8b276a29","state":"in-new-done-live","occurrences":18},
4621
+ {"key":"L0034","section":"footer","text":"A non-profit, capture-resistant commons.","placement":"shared","file":"modules/public-landing/public/projects.html","line":2085,"string_id":"afe83bbbd0d4","state":"in-new-done-live","occurrences":18},
4622
+ {"key":"L0035","section":"footer","text":"Built by agents, on","placement":"shared","file":"modules/public-landing/public/projects.html","line":2085,"string_id":"ee7d8b276a29","state":"in-new-done-live","occurrences":18},
4623
4623
  {"key":"L0036","section":"footer","text":"Cloud Bongos","placement":"shared","file":"modules/public-landing/public/projects.html","line":748,"string_id":"eeda19200aeb","state":"in-new-done-live","occurrences":18},
4624
- {"key":"L0037","section":"footer","text":"Open source","placement":"shared","file":"modules/public-landing/public/projects.html","line":2060,"string_id":"d6314ddcc1d0","state":"in-new-done-live","occurrences":18},
4624
+ {"key":"L0037","section":"footer","text":"Open source","placement":"shared","file":"modules/public-landing/public/projects.html","line":2085,"string_id":"d6314ddcc1d0","state":"in-new-done-live","occurrences":18},
4625
4625
  {"key":"L0038","section":"footer","text":"AGPL-3.0","placement":"shared","state":"in-new-done-live","occurrences":18},
4626
4626
  {"key":"L0039","section":"navigation","text":"About","placement":"shared","state":"in-new-done-live","occurrences":18},
4627
4627
  {"key":"L0040","section":"navigation","text":"Docs","placement":"shared","state":"in-new-done-live","occurrences":18},
@@ -4636,7 +4636,7 @@
4636
4636
  {"key":"L0049","section":"Setting up Mercury","text":"your projects page","placement":"unplaced","state":"in-new-done"},
4637
4637
  {"key":"L0050","section":"Setting up Mercury","text":"Raising the server, database, and address — nothing needed from you.","placement":"unplaced","state":"in-new-done"},
4638
4638
  {"key":"L0051","section":"Setting up Mercury","text":"Jump","placement":"unplaced","state":"in-new-done"},
4639
- {"key":"L0052","section":"Setting up Mercury","text":"Arrows or A and D steer, space jumps.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2006,"string_id":"23d29225956a","state":"in-new-done"},
4639
+ {"key":"L0052","section":"Setting up Mercury","text":"Arrows or A and D steer, space jumps.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2031,"string_id":"23d29225956a","state":"in-new-done"},
4640
4640
  {"key":"L0053","section":"Setting up Mercury","text":"Best: 0 of 3 projects","placement":"unplaced","state":"in-new-done"},
4641
4641
  {"key":"L0054","section":"page top","text":"New {…}","placement":"unplaced","state":"in-new-demo-what"},
4642
4642
  {"key":"L0055","section":"page top","text":"← Your projects","placement":"placed","file":"modules/public-landing/public/projects.html","line":1042,"string_id":"b675934f9d39","state":"in-manage"},
@@ -4987,8 +4987,8 @@
4987
4987
  {"key":"L0400","section":"page top","text":"Cloud Bongos","placement":"placed","file":"modules/public-landing/public/projects.html","line":748,"string_id":"eeda19200aeb"},
4988
4988
  {"key":"L0401","section":"page top","text":"this platform","placement":"placed","file":"modules/public-landing/public/projects.html","line":851,"string_id":"b2d6dad7c766"},
4989
4989
  {"key":"L0402","section":"page top","text":"← Back","placement":"placed","file":"modules/public-landing/public/projects.html","line":1456,"string_id":"5df2baabf82e","state":"in-new-fork-demo"},
4990
- {"key":"L0403","section":"Give it a look.","text":"Give it a look.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1967,"string_id":"f6e9a4d6fc76","state":"in-new-look"},
4991
- {"key":"L0404","section":"Give it a look.","text":"So builders always know which project they’re in.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1968,"string_id":"84d900949f32","state":"in-new-look"},
4990
+ {"key":"L0403","section":"Give it a look.","text":"Give it a look.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1992,"string_id":"f6e9a4d6fc76","state":"in-new-look"},
4991
+ {"key":"L0404","section":"Give it a look.","text":"So builders always know which project they’re in.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1993,"string_id":"84d900949f32","state":"in-new-look"},
4992
4992
  {"key":"L0405","section":"Give it a look.","text":"Pick a look","placement":"unplaced","state":"in-new-look"},
4993
4993
  {"key":"L0406","section":"Give it a look.","text":"The chrome world","placement":"unplaced","state":"in-new-look"},
4994
4994
  {"key":"L0407","section":"Give it a look.","text":"Salmon on pale grey. The platform’s own look.","placement":"unplaced","state":"in-new-look"},
@@ -5012,8 +5012,8 @@
5012
5012
  {"key":"L0425","section":"Give it a look.","text":"Light mode","placement":"unplaced","state":"in-new-look"},
5013
5013
  {"key":"L0426","section":"Give it a look.","text":"Dark mode","placement":"unplaced","state":"in-new-look"},
5014
5014
  {"key":"L0427","section":"Give it a look.","text":"Mercury · Game · new repo · {…}.example.com","placement":"unplaced","state":"in-new-look"},
5015
- {"key":"L0428","section":"Give it a look.","text":"Create my project","placement":"placed","file":"modules/public-landing/public/projects.html","line":1974,"string_id":"330038e92a44","state":"in-new-look"},
5016
- {"key":"L0429","section":"Give it a look.","text":"Right after, you’ll get the few steps only you can do.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1976,"string_id":"f2527f43a06d","state":"in-new-look"},
5015
+ {"key":"L0428","section":"Give it a look.","text":"Create my project","placement":"placed","file":"modules/public-landing/public/projects.html","line":1999,"string_id":"330038e92a44","state":"in-new-look"},
5016
+ {"key":"L0429","section":"Give it a look.","text":"Right after, you’ll get the few steps only you can do.","placement":"placed","file":"modules/public-landing/public/projects.html","line":2001,"string_id":"f2527f43a06d","state":"in-new-look"},
5017
5017
  {"key":"L0430","section":"A few quick checks.","text":"A few quick checks.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1590,"string_id":"63a164caa4aa","state":"in-new-checks"},
5018
5018
  {"key":"L0431","section":"A few quick checks.","text":"These decide which legal and payout options we can offer.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1591,"string_id":"c51a588fd405","state":"in-new-checks"},
5019
5019
  {"key":"L0432","section":"A few quick checks.","text":"Where are you?","placement":"placed","file":"modules/public-landing/public/projects.html","line":1596,"string_id":"022fd33fabed","state":"in-new-checks"},
@@ -5370,7 +5370,7 @@
5370
5370
  {"key":"L0783","section":"Check what we set up.","text":"Search your repos…","placement":"placed","file":"modules/public-landing/public/projects.html","line":1718,"string_id":"3a0ba637acad","attr":"placeholder","state":"in-new-review-code"},
5371
5371
  {"key":"L0784","section":"Check what we set up.","text":"No repositories match “”.","placement":"unplaced","state":"in-new-review-code"},
5372
5372
  {"key":"L0785","section":"Check what we set up.","text":"We never change it: public stays public, private stays private.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1722,"string_id":"94af1e958179","state":"in-new-review-code"},
5373
- {"key":"L0786","section":"Check what we set up.","text":"Edit","placement":"unplaced","state":"in-new-demo-review-address","occurrences":6},
5373
+ {"key":"L0786","section":"Check what we set up.","text":"Edit","placement":"unplaced","state":"in-new-demo-review-address","occurrences":7},
5374
5374
  {"key":"L0787","section":"Check what we set up.","text":"Address","placement":"unplaced","state":"in-new-demo-review-address"},
5375
5375
  {"key":"L0788","section":"Check what we set up.","text":"{…}.example.com","placement":"unplaced","state":"in-new-review-confirmed"},
5376
5376
  {"key":"L0789","section":"Check what we set up.","text":"Your own domain. Your projects page walks you through pointing it here.","placement":"unplaced","state":"in-new-review-confirmed"},
@@ -5401,101 +5401,109 @@
5401
5401
  {"key":"L0814","section":"Check what we set up.","text":"Search extras…","placement":"placed","file":"modules/public-landing/public/projects.html","line":1857,"string_id":"74f80d9e1abc","attr":"placeholder","state":"in-new-review-extras"},
5402
5402
  {"key":"L0815","section":"Check what we set up.","text":"Every project also has the same 18 core parts, always on: the platform, its work tracking and the builders’ hall.","placement":"unplaced","state":"in-new-review-extras"},
5403
5403
  {"key":"L0816","section":"Check what we set up.","text":"Team size","placement":"placed","file":"modules/public-landing/public/projects.html","line":1872,"string_id":"2542cdb8ca69","state":"in-new-demo-review-address"},
5404
- {"key":"L0817","section":"Check what we set up.","text":"2 people now","placement":"unplaced","state":"in-new-review-team"},
5405
- {"key":"L0818","section":"Check what we set up.","text":"About 5 by month three · people you invite.","placement":"unplaced","state":"in-new-review-team"},
5406
- {"key":"L0819","section":"Check what we set up.","text":"One person","placement":"placed","file":"modules/public-landing/public/projects.html","line":1876,"string_id":"3d085c437cdd","state":"in-new-review"},
5407
- {"key":"L0820","section":"Check what we set up.","text":"A team","placement":"placed","file":"modules/public-landing/public/projects.html","line":1877,"string_id":"3cc8f26a3e24","state":"in-new-review-team"},
5408
- {"key":"L0821","section":"Check what we set up.","text":"People at the start, you included","placement":"placed","file":"modules/public-landing/public/projects.html","line":1880,"string_id":"088f9d52d056","state":"in-new-review-team"},
5409
- {"key":"L0822","section":"Check what we set up.","text":"We guess about 5 people by month three. Adjust it if you know better.","placement":"unplaced","state":"in-new-review-team"},
5410
- {"key":"L0823","section":"Check what we set up.","text":"Adjust month three","placement":"placed","file":"modules/public-landing/public/projects.html","line":1888,"string_id":"c684f20e82de","state":"in-new-review-team"},
5411
- {"key":"L0824","section":"Check what we set up.","text":"Who can join?","placement":"placed","file":"modules/public-landing/public/projects.html","line":1891,"string_id":"66c9b4b830ff","state":"in-new-review-team"},
5412
- {"key":"L0825","section":"Check what we set up.","text":"People I invite","placement":"placed","file":"modules/public-landing/public/projects.html","line":1893,"string_id":"22fb59ddffa5","state":"in-new-review-team"},
5413
- {"key":"L0826","section":"Check what we set up.","text":"Anyone can apply","placement":"placed","file":"modules/public-landing/public/projects.html","line":1894,"string_id":"2bea869cf0f7","state":"in-new-review-team"},
5414
- {"key":"L0827","section":"Check what we set up.","text":"Just you.","placement":"unplaced","state":"in-new-review"},
5415
- {"key":"L0828","section":"Check what we set up.","text":"3 people","placement":"unplaced","state":"in-new-demo-review-address"},
5416
- {"key":"L0829","section":"Check what we set up.","text":"4 hours each. When the time box runs out, we ask if you want to keep it.","placement":"unplaced","state":"in-new-demo-review-address"},
5417
- {"key":"L0830","section":"Check what we set up.","text":"Rewards","placement":"unplaced","state":"in-new-demo-review-address"},
5418
- {"key":"L0831","section":"Check what we set up.","text":"Not decided yet","placement":"unplaced","state":"in-new-review-team"},
5419
- {"key":"L0832","section":"Check what we set up.","text":"Intent only. You set the real terms later.","placement":"unplaced","state":"in-new-review-team"},
5420
- {"key":"L0833","section":"Check what we set up.","text":"None","placement":"unplaced","state":"in-new-demo-review-address"},
5421
- {"key":"L0834","section":"Check what we set up.","text":"It’s a {…}, for learning.","placement":"unplaced","state":"in-new-demo-review-address"},
5422
- {"key":"L0835","section":"Check what we set up.","text":"We run","placement":"placed","file":"modules/public-landing/public/projects.html","line":1923,"string_id":"f533b87cea7a","state":"in-new-demo-review-address"},
5423
- {"key":"L0836","section":"Check what we set up.","text":"Some of it","placement":"placed","file":"modules/public-landing/public/projects.html","line":1928,"string_id":"0d6142d47f8e","state":"in-new-review-run","occurrences":2},
5424
- {"key":"L0837","section":"Check what we set up.","text":"Hosting, Starting module kit, Module marketplace: buy, Builder guild access","placement":"unplaced","state":"in-new-review-run"},
5425
- {"key":"L0838","section":"Check what we set up.","text":"Everything, for you","placement":"placed","file":"modules/public-landing/public/projects.html","line":1927,"string_id":"654dfc6855b5","state":"in-new-demo-review-address"},
5426
- {"key":"L0839","section":"Check what we set up.","text":"On my machines","placement":"placed","file":"modules/public-landing/public/projects.html","line":1929,"string_id":"accb3d6b7e10","state":"in-new-review-run"},
5427
- {"key":"L0840","section":"Check what we set up.","text":"Free core only","placement":"placed","file":"modules/public-landing/public/projects.html","line":1930,"string_id":"1497b6e85da0","state":"in-new-review-run"},
5428
- {"key":"L0841","section":"Check what we set up.","text":"Your hybrid suite","placement":"placed","file":"modules/public-landing/public/projects.html","line":1934,"string_id":"63535be9eb75","state":"in-new-review-run"},
5429
- {"key":"L0842","section":"Check what we set up.","text":"Hosting","placement":"unplaced","state":"in-new-review-run"},
5430
- {"key":"L0843","section":"Check what we set up.","text":"Labor payment and HR","placement":"placed","file":"modules/public-landing/public/projects.html","line":1937,"string_id":"65ec327451c0","state":"in-new-review-run"},
5431
- {"key":"L0844","section":"Check what we set up.","text":"Starting module kit","placement":"placed","file":"modules/public-landing/public/projects.html","line":1938,"string_id":"a63316df318a","state":"in-new-review-run"},
5432
- {"key":"L0845","section":"Check what we set up.","text":"Module marketplace: buy","placement":"placed","file":"modules/public-landing/public/projects.html","line":1939,"string_id":"34a7872cc0f6","state":"in-new-review-run"},
5433
- {"key":"L0846","section":"Check what we set up.","text":"Module marketplace: sell","placement":"placed","file":"modules/public-landing/public/projects.html","line":1940,"string_id":"b34c8d4cc6d7","state":"in-new-review-run"},
5434
- {"key":"L0847","section":"Check what we set up.","text":"Builder guild access","placement":"placed","file":"modules/public-landing/public/projects.html","line":1941,"string_id":"0379baef7921","state":"in-new-review-run"},
5435
- {"key":"L0848","section":"Check what we set up.","text":"Create a builder guild","placement":"placed","file":"modules/public-landing/public/projects.html","line":1942,"string_id":"1a8c7472a7b0","state":"in-new-review-run"},
5436
- {"key":"L0849","section":"Check what we set up.","text":"Company creation","placement":"placed","file":"modules/public-landing/public/projects.html","line":1943,"string_id":"f0bcc3a2ff77","state":"in-new-review-run"},
5437
- {"key":"L0850","section":"Check what we set up.","text":"Expert consulting","placement":"placed","file":"modules/public-landing/public/projects.html","line":1944,"string_id":"70e3e447cf7c","state":"in-new-review-run"},
5438
- {"key":"L0851","section":"Check what we set up.","text":"Public marketed project","placement":"placed","file":"modules/public-landing/public/projects.html","line":1945,"string_id":"392b3876e595","state":"in-new-review-run"},
5439
- {"key":"L0852","section":"Check what we set up.","text":"Hosting, payouts and the {…} kit, managed.","placement":"unplaced","state":"in-new-review"},
5440
- {"key":"L0853","section":"Check what we set up.","text":"A {…} is all managed and {…} to your team.","placement":"unplaced","state":"in-new-demo-review-address"},
5441
- {"key":"L0854","section":"Check what we set up.","text":"Looks right, continue","placement":"placed","file":"modules/public-landing/public/projects.html","line":1957,"string_id":"2f400cf7bff0","state":"in-new-demo-review-address"},
5442
- {"key":"L0855","section":"What are you making?{…}","text":"What are you making?","placement":"placed","file":"modules/public-landing/public/projects.html","line":1557,"string_id":"0de8e7d6db3a","state":"in-new-demo-what"},
5443
- {"key":"L0856","section":"What are you making?{…}","text":"Name","placement":"unplaced","state":"in-new-demo-what"},
5444
- {"key":"L0857","section":"What are you making?{…}","text":"Moonbase","placement":"unplaced","attr":"placeholder","state":"in-new-demo-what"},
5445
- {"key":"L0858","section":"What are you making?{…}","text":"its handle on the platform:","placement":"unplaced","state":"in-new-name-prefilled"},
5446
- {"key":"L0859","section":"What are you making?{…}","text":"Kind","placement":"unplaced","state":"in-new-demo-what"},
5447
- {"key":"L0860","section":"What are you making?{…}","text":"Game","placement":"unplaced","state":"in-new-demo-what"},
5448
- {"key":"L0861","section":"What are you making?{…}","text":"Research","placement":"unplaced","state":"in-new-demo-what"},
5449
- {"key":"L0862","section":"What are you making?{…}","text":"Business","placement":"unplaced","state":"in-new-demo-what"},
5450
- {"key":"L0863","section":"What are you making?{…}","text":"Non-profit","placement":"unplaced","state":"in-new-demo-what"},
5451
- {"key":"L0864","section":"What are you making?{…}","text":"Not sure","placement":"placed","file":"modules/public-landing/public/projects.html","line":1569,"string_id":"1ad2e4e0a89e","state":"in-new-demo-what"},
5452
- {"key":"L0865","section":"What are you making?{…}","text":"In a sentence","placement":"placed","file":"modules/public-landing/public/projects.html","line":1573,"string_id":"fa123fc3eda3","state":"in-new-demo-what"},
5453
- {"key":"L0866","section":"What are you making?{…}","text":"(optional — puts it on the public map)","placement":"placed","file":"modules/public-landing/public/projects.html","line":1573,"string_id":"1e4a3b17c34d","state":"in-new-demo-what"},
5454
- {"key":"L0867","section":"What are you making?{…}","text":"A co-op space game built by its players","placement":"placed","file":"modules/public-landing/public/projects.html","line":1574,"string_id":"9e63686515c4","attr":"placeholder","state":"in-new-demo-what"},
5455
- {"key":"L0868","section":"What are you making?{…}","text":"Continue","placement":"unplaced","state":"in-new-demo-what"},
5456
- {"key":"L0869","section":"Try a demo.","text":"Try a demo.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1515,"string_id":"64e08f62d974","state":"in-new-fork-demo"},
5457
- {"key":"L0870","section":"Try a demo.","text":"A small, time-boxed project to learn by doing. You can keep it at the end.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1516,"string_id":"7307d49b93d0","state":"in-new-fork-demo"},
5458
- {"key":"L0871","section":"Try a demo.","text":"People, you included","placement":"placed","file":"modules/public-landing/public/projects.html","line":1518,"string_id":"1aad9d74d45d","state":"in-new-fork-demo"},
5459
- {"key":"L0872","section":"Try a demo.","text":"Hours each","placement":"placed","file":"modules/public-landing/public/projects.html","line":1525,"string_id":"980106c03cfe","state":"in-new-fork-demo"},
5460
- {"key":"L0873","section":"Try a demo.","text":"Your idea","placement":"placed","file":"modules/public-landing/public/projects.html","line":1533,"string_id":"69d41637ccf0","state":"in-new-fork-demo"},
5461
- {"key":"L0874","section":"Try a demo.","text":"A voting app for movie night","placement":"placed","file":"modules/public-landing/public/projects.html","line":1534,"string_id":"02951f951543","attr":"placeholder","state":"in-new-fork-demo"},
5462
- {"key":"L0875","section":"Try a demo.","text":"3 people × 4 hours = 12 builder-hours.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1536,"string_id":"8525371bf56a","state":"in-new-fork-demo"},
5463
- {"key":"L0876","section":"Try a demo.","text":"Enough for a small version. Trim it to one shared list, voting and a winner reveal; accounts and notifications will not fit.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1536,"string_id":"9150fa905ba4","state":"in-new-fork-demo"},
5464
- {"key":"L0877","section":"Try a demo.","text":"Invite by GitHub handle","placement":"placed","file":"modules/public-landing/public/projects.html","line":1538,"string_id":"3f2e43c432aa","state":"in-new-fork-demo"},
5465
- {"key":"L0878","section":"Try a demo.","text":"teammate’s handle","placement":"placed","file":"modules/public-landing/public/projects.html","line":1539,"string_id":"787275f310ed","attr":"placeholder","state":"in-new-fork-demo","occurrences":2},
5466
- {"key":"L0879","section":"Try a demo.","text":"And one more","placement":"placed","file":"modules/public-landing/public/projects.html","line":1541,"string_id":"54bf9a39d47f","state":"in-new-fork-demo"},
5467
- {"key":"L0880","section":"Try a demo.","text":"An unkept demo goes offline after 30 days. We warn you first, and it can come back.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1545,"string_id":"a116d2432c29","state":"in-new-fork-demo"},
5468
- {"key":"L0881","section":"Try a demo.","text":"Continue","placement":"unplaced","state":"in-new-fork-demo"},
5469
- {"key":"L0882","section":"page top","text":"· checked just now","placement":"unplaced","state":"in-map"},
5470
- {"key":"L0883","section":"page top","text":"you build here","placement":"unplaced","state":"in-map","occurrences":2},
5471
- {"key":"L0884","section":"page top","text":"standing up","placement":"unplaced","state":"in-map"},
5472
- {"key":"L0885","section":"page top","text":"unreachable","placement":"unplaced","state":"in-map"},
5473
- {"key":"L0886","section":"page top","text":"· since {…}","placement":"unplaced","state":"in-map","occurrences":2},
5474
- {"key":"L0887","section":"page top","text":"snagged","placement":"unplaced","state":"in-map"},
5475
- {"key":"L0888","section":"page top","text":"drag","placement":"unplaced"},
5476
- {"key":"L0889","section":"page top","text":"pan","placement":"unplaced"},
5477
- {"key":"L0890","section":"page top","text":"scroll","placement":"unplaced"},
5478
- {"key":"L0891","section":"page top","text":"zoom","placement":"unplaced"},
5479
- {"key":"L0892","section":"page top","text":"click a project","placement":"placed","file":"modules/public-landing/public/projects.html","line":860,"string_id":"2735c2eb8bc6"},
5480
- {"key":"L0893","section":"page top","text":"open it","placement":"placed","file":"modules/public-landing/public/projects.html","line":860,"string_id":"453a2469b584"},
5481
- {"key":"L0894","section":"{…}","text":"Runs","placement":"unplaced","state":"card-floor","occurrences":3},
5482
- {"key":"L0895","section":"{…}","text":"tidewater.cloudbongos.com","placement":"unplaced","state":"card-floor"},
5483
- {"key":"L0896","section":"{…}","text":"Listed","placement":"unplaced","state":"card-floor","occurrences":3},
5484
- {"key":"L0897","section":"{…}","text":"Apply to join","placement":"placed","file":"modules/public-landing/public/projects.html","line":1220,"string_id":"766def944c53","state":"card-floor"},
5485
- {"key":"L0898","section":"page top","text":"builders","placement":"unplaced","state":"card"},
5486
- {"key":"L0899","section":"page top","text":"shipped in 30 days","placement":"placed","file":"modules/public-landing/public/projects.html","line":937,"string_id":"75d4a6fa0422","state":"card"},
5487
- {"key":"L0900","section":"Cloud Bongos","text":"Cloud Bongos","placement":"placed","file":"modules/public-landing/public/projects.html","line":748,"string_id":"eeda19200aeb","state":"card-self"},
5488
- {"key":"L0901","section":"Cloud Bongos","text":"this platform","placement":"placed","file":"modules/public-landing/public/projects.html","line":851,"string_id":"b2d6dad7c766","state":"card-self"},
5489
- {"key":"L0902","section":"Cloud Bongos","text":"yours","placement":"unplaced","state":"card-self"},
5490
- {"key":"L0903","section":"Cloud Bongos","text":"Runs","placement":"unplaced","state":"card-self"},
5491
- {"key":"L0904","section":"Cloud Bongos","text":"Home →","placement":"unplaced","state":"card-self"},
5492
- {"key":"L0905","section":"Cloud Bongos","text":"Builders' hall","placement":"placed","file":"modules/public-landing/public/projects.html","line":899,"string_id":"90a128c97eae","state":"card-self"},
5493
- {"key":"L0906","section":"{…}","text":"you build here","placement":"unplaced","state":"card-noart","occurrences":2},
5494
- {"key":"L0907","section":"{…}","text":"{…}-circles.cloudbongos.com","placement":"unplaced","state":"card-noart"},
5495
- {"key":"L0908","section":"{…}","text":"Type","placement":"unplaced","state":"card"},
5496
- {"key":"L0909","section":"{…}","text":"Game","placement":"unplaced","state":"card"},
5497
- {"key":"L0910","section":"{…}","text":"example.com","placement":"unplaced","state":"card"},
5498
- {"key":"L0911","section":"{…}","text":"Builders' hall","placement":"placed","file":"modules/public-landing/public/projects.html","line":899,"string_id":"90a128c97eae","state":"card"}
5404
+ {"key":"L0817","section":"Check what we set up.","text":"3 people","placement":"unplaced","state":"in-new-demo-review-address"},
5405
+ {"key":"L0818","section":"Check what we set up.","text":"4 hours each. When the time box runs out, we ask if you want to keep it.","placement":"unplaced","state":"in-new-demo-review-address"},
5406
+ {"key":"L0819","section":"Check what we set up.","text":"Rewards","placement":"unplaced","state":"in-new-demo-review-address"},
5407
+ {"key":"L0820","section":"Check what we set up.","text":"None","placement":"unplaced","state":"in-new-demo-review-address"},
5408
+ {"key":"L0821","section":"Check what we set up.","text":"It’s a {…}, for learning.","placement":"unplaced","state":"in-new-demo-review-address"},
5409
+ {"key":"L0822","section":"Check what we set up.","text":"We run","placement":"placed","file":"modules/public-landing/public/projects.html","line":1923,"string_id":"f533b87cea7a","state":"in-new-demo-review-address"},
5410
+ {"key":"L0823","section":"Check what we set up.","text":"Everything, for you","placement":"placed","file":"modules/public-landing/public/projects.html","line":1927,"string_id":"654dfc6855b5","state":"in-new-demo-review-address"},
5411
+ {"key":"L0824","section":"Check what we set up.","text":"A {…} is all managed and {…} to your team.","placement":"unplaced","state":"in-new-demo-review-address"},
5412
+ {"key":"L0825","section":"Check what we set up.","text":"Shipping","placement":"unplaced","state":"in-new-demo-review-address"},
5413
+ {"key":"L0826","section":"Check what we set up.","text":"Auto (recommended)","placement":"placed","file":"modules/public-landing/public/projects.html","line":1965,"string_id":"caf18d1a2b8e","state":"in-new-demo-review-address"},
5414
+ {"key":"L0827","section":"Check what we set up.","text":"The AI ships finished work on its own. You can change this later in your project’s settings.","placement":"unplaced","state":"in-new-demo-review-address"},
5415
+ {"key":"L0828","section":"Check what we set up.","text":"2 people now","placement":"unplaced","state":"in-new-review-team"},
5416
+ {"key":"L0829","section":"Check what we set up.","text":"About 5 by month three · people you invite.","placement":"unplaced","state":"in-new-review-team"},
5417
+ {"key":"L0830","section":"Check what we set up.","text":"One person","placement":"placed","file":"modules/public-landing/public/projects.html","line":1876,"string_id":"3d085c437cdd","state":"in-new-review"},
5418
+ {"key":"L0831","section":"Check what we set up.","text":"A team","placement":"placed","file":"modules/public-landing/public/projects.html","line":1877,"string_id":"3cc8f26a3e24","state":"in-new-review-team"},
5419
+ {"key":"L0832","section":"Check what we set up.","text":"People at the start, you included","placement":"placed","file":"modules/public-landing/public/projects.html","line":1880,"string_id":"088f9d52d056","state":"in-new-review-team"},
5420
+ {"key":"L0833","section":"Check what we set up.","text":"We guess about 5 people by month three. Adjust it if you know better.","placement":"unplaced","state":"in-new-review-team"},
5421
+ {"key":"L0834","section":"Check what we set up.","text":"Adjust month three","placement":"placed","file":"modules/public-landing/public/projects.html","line":1888,"string_id":"c684f20e82de","state":"in-new-review-team"},
5422
+ {"key":"L0835","section":"Check what we set up.","text":"Who can join?","placement":"placed","file":"modules/public-landing/public/projects.html","line":1891,"string_id":"66c9b4b830ff","state":"in-new-review-team"},
5423
+ {"key":"L0836","section":"Check what we set up.","text":"People I invite","placement":"placed","file":"modules/public-landing/public/projects.html","line":1893,"string_id":"22fb59ddffa5","state":"in-new-review-team"},
5424
+ {"key":"L0837","section":"Check what we set up.","text":"Anyone can apply","placement":"placed","file":"modules/public-landing/public/projects.html","line":1894,"string_id":"2bea869cf0f7","state":"in-new-review-team"},
5425
+ {"key":"L0838","section":"Check what we set up.","text":"Not decided yet","placement":"unplaced","state":"in-new-review-team"},
5426
+ {"key":"L0839","section":"Check what we set up.","text":"Intent only. You set the real terms later.","placement":"unplaced","state":"in-new-review-team"},
5427
+ {"key":"L0840","section":"Check what we set up.","text":"Just you.","placement":"unplaced","state":"in-new-review"},
5428
+ {"key":"L0841","section":"Check what we set up.","text":"Some of it","placement":"placed","file":"modules/public-landing/public/projects.html","line":1928,"string_id":"0d6142d47f8e","state":"in-new-review-run","occurrences":2},
5429
+ {"key":"L0842","section":"Check what we set up.","text":"Hosting, Starting module kit, Module marketplace: buy, Builder guild access","placement":"unplaced","state":"in-new-review-run"},
5430
+ {"key":"L0843","section":"Check what we set up.","text":"On my machines","placement":"placed","file":"modules/public-landing/public/projects.html","line":1929,"string_id":"accb3d6b7e10","state":"in-new-review-run"},
5431
+ {"key":"L0844","section":"Check what we set up.","text":"Free core only","placement":"placed","file":"modules/public-landing/public/projects.html","line":1930,"string_id":"1497b6e85da0","state":"in-new-review-run"},
5432
+ {"key":"L0845","section":"Check what we set up.","text":"Your hybrid suite","placement":"placed","file":"modules/public-landing/public/projects.html","line":1934,"string_id":"63535be9eb75","state":"in-new-review-run"},
5433
+ {"key":"L0846","section":"Check what we set up.","text":"Hosting","placement":"unplaced","state":"in-new-review-run"},
5434
+ {"key":"L0847","section":"Check what we set up.","text":"Labor payment and HR","placement":"placed","file":"modules/public-landing/public/projects.html","line":1937,"string_id":"65ec327451c0","state":"in-new-review-run"},
5435
+ {"key":"L0848","section":"Check what we set up.","text":"Starting module kit","placement":"placed","file":"modules/public-landing/public/projects.html","line":1938,"string_id":"a63316df318a","state":"in-new-review-run"},
5436
+ {"key":"L0849","section":"Check what we set up.","text":"Module marketplace: buy","placement":"placed","file":"modules/public-landing/public/projects.html","line":1939,"string_id":"34a7872cc0f6","state":"in-new-review-run"},
5437
+ {"key":"L0850","section":"Check what we set up.","text":"Module marketplace: sell","placement":"placed","file":"modules/public-landing/public/projects.html","line":1940,"string_id":"b34c8d4cc6d7","state":"in-new-review-run"},
5438
+ {"key":"L0851","section":"Check what we set up.","text":"Builder guild access","placement":"placed","file":"modules/public-landing/public/projects.html","line":1941,"string_id":"0379baef7921","state":"in-new-review-run"},
5439
+ {"key":"L0852","section":"Check what we set up.","text":"Create a builder guild","placement":"placed","file":"modules/public-landing/public/projects.html","line":1942,"string_id":"1a8c7472a7b0","state":"in-new-review-run"},
5440
+ {"key":"L0853","section":"Check what we set up.","text":"Company creation","placement":"placed","file":"modules/public-landing/public/projects.html","line":1943,"string_id":"f0bcc3a2ff77","state":"in-new-review-run"},
5441
+ {"key":"L0854","section":"Check what we set up.","text":"Expert consulting","placement":"placed","file":"modules/public-landing/public/projects.html","line":1944,"string_id":"70e3e447cf7c","state":"in-new-review-run"},
5442
+ {"key":"L0855","section":"Check what we set up.","text":"Public marketed project","placement":"placed","file":"modules/public-landing/public/projects.html","line":1945,"string_id":"392b3876e595","state":"in-new-review-run"},
5443
+ {"key":"L0856","section":"Check what we set up.","text":"Hosting, payouts and the {…} kit, managed.","placement":"unplaced","state":"in-new-review"},
5444
+ {"key":"L0857","section":"Check what we set up.","text":"Manual","placement":"unplaced","state":"in-new-review-ship","occurrences":2},
5445
+ {"key":"L0858","section":"Check what we set up.","text":"The AI waits for you to approve each ship. You can change this later in your project’s settings.","placement":"unplaced","state":"in-new-review-ship"},
5446
+ {"key":"L0859","section":"Check what we set up.","text":"When the AI finishes a task","placement":"placed","file":"modules/public-landing/public/projects.html","line":1962,"string_id":"61346f5e6ac1","state":"in-new-review-ship"},
5447
+ {"key":"L0860","section":"Check what we set up.","text":"The AI ships finished work on its own. You don’t run any commands.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1966,"string_id":"28be59585de3","state":"in-new-review-ship"},
5448
+ {"key":"L0861","section":"Check what we set up.","text":"The AI stops before each ship and waits for you to approve it.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1971,"string_id":"3813606fd319","state":"in-new-review-ship"},
5449
+ {"key":"L0862","section":"Check what we set up.","text":"Looks right, continue","placement":"placed","file":"modules/public-landing/public/projects.html","line":1982,"string_id":"2f400cf7bff0","state":"in-new-demo-review-address"},
5450
+ {"key":"L0863","section":"What are you making?{…}","text":"What are you making?","placement":"placed","file":"modules/public-landing/public/projects.html","line":1557,"string_id":"0de8e7d6db3a","state":"in-new-demo-what"},
5451
+ {"key":"L0864","section":"What are you making?{…}","text":"Name","placement":"unplaced","state":"in-new-demo-what"},
5452
+ {"key":"L0865","section":"What are you making?{…}","text":"Moonbase","placement":"unplaced","attr":"placeholder","state":"in-new-demo-what"},
5453
+ {"key":"L0866","section":"What are you making?{…}","text":"its handle on the platform:","placement":"unplaced","state":"in-new-name-prefilled"},
5454
+ {"key":"L0867","section":"What are you making?{…}","text":"Kind","placement":"unplaced","state":"in-new-demo-what"},
5455
+ {"key":"L0868","section":"What are you making?{…}","text":"Game","placement":"unplaced","state":"in-new-demo-what"},
5456
+ {"key":"L0869","section":"What are you making?{…}","text":"Research","placement":"unplaced","state":"in-new-demo-what"},
5457
+ {"key":"L0870","section":"What are you making?{…}","text":"Business","placement":"unplaced","state":"in-new-demo-what"},
5458
+ {"key":"L0871","section":"What are you making?{…}","text":"Non-profit","placement":"unplaced","state":"in-new-demo-what"},
5459
+ {"key":"L0872","section":"What are you making?{…}","text":"Not sure","placement":"placed","file":"modules/public-landing/public/projects.html","line":1569,"string_id":"1ad2e4e0a89e","state":"in-new-demo-what"},
5460
+ {"key":"L0873","section":"What are you making?{…}","text":"In a sentence","placement":"placed","file":"modules/public-landing/public/projects.html","line":1573,"string_id":"fa123fc3eda3","state":"in-new-demo-what"},
5461
+ {"key":"L0874","section":"What are you making?{…}","text":"(optional — puts it on the public map)","placement":"placed","file":"modules/public-landing/public/projects.html","line":1573,"string_id":"1e4a3b17c34d","state":"in-new-demo-what"},
5462
+ {"key":"L0875","section":"What are you making?{…}","text":"A co-op space game built by its players","placement":"placed","file":"modules/public-landing/public/projects.html","line":1574,"string_id":"9e63686515c4","attr":"placeholder","state":"in-new-demo-what"},
5463
+ {"key":"L0876","section":"What are you making?{…}","text":"Continue","placement":"unplaced","state":"in-new-demo-what"},
5464
+ {"key":"L0877","section":"Try a demo.","text":"Try a demo.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1515,"string_id":"64e08f62d974","state":"in-new-fork-demo"},
5465
+ {"key":"L0878","section":"Try a demo.","text":"A small, time-boxed project to learn by doing. You can keep it at the end.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1516,"string_id":"7307d49b93d0","state":"in-new-fork-demo"},
5466
+ {"key":"L0879","section":"Try a demo.","text":"People, you included","placement":"placed","file":"modules/public-landing/public/projects.html","line":1518,"string_id":"1aad9d74d45d","state":"in-new-fork-demo"},
5467
+ {"key":"L0880","section":"Try a demo.","text":"Hours each","placement":"placed","file":"modules/public-landing/public/projects.html","line":1525,"string_id":"980106c03cfe","state":"in-new-fork-demo"},
5468
+ {"key":"L0881","section":"Try a demo.","text":"Your idea","placement":"placed","file":"modules/public-landing/public/projects.html","line":1533,"string_id":"69d41637ccf0","state":"in-new-fork-demo"},
5469
+ {"key":"L0882","section":"Try a demo.","text":"A voting app for movie night","placement":"placed","file":"modules/public-landing/public/projects.html","line":1534,"string_id":"02951f951543","attr":"placeholder","state":"in-new-fork-demo"},
5470
+ {"key":"L0883","section":"Try a demo.","text":"3 people × 4 hours = 12 builder-hours.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1536,"string_id":"8525371bf56a","state":"in-new-fork-demo"},
5471
+ {"key":"L0884","section":"Try a demo.","text":"Enough for a small version. Trim it to one shared list, voting and a winner reveal; accounts and notifications will not fit.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1536,"string_id":"9150fa905ba4","state":"in-new-fork-demo"},
5472
+ {"key":"L0885","section":"Try a demo.","text":"Invite by GitHub handle","placement":"placed","file":"modules/public-landing/public/projects.html","line":1538,"string_id":"3f2e43c432aa","state":"in-new-fork-demo"},
5473
+ {"key":"L0886","section":"Try a demo.","text":"teammate’s handle","placement":"placed","file":"modules/public-landing/public/projects.html","line":1539,"string_id":"787275f310ed","attr":"placeholder","state":"in-new-fork-demo","occurrences":2},
5474
+ {"key":"L0887","section":"Try a demo.","text":"And one more","placement":"placed","file":"modules/public-landing/public/projects.html","line":1541,"string_id":"54bf9a39d47f","state":"in-new-fork-demo"},
5475
+ {"key":"L0888","section":"Try a demo.","text":"An unkept demo goes offline after 30 days. We warn you first, and it can come back.","placement":"placed","file":"modules/public-landing/public/projects.html","line":1545,"string_id":"a116d2432c29","state":"in-new-fork-demo"},
5476
+ {"key":"L0889","section":"Try a demo.","text":"Continue","placement":"unplaced","state":"in-new-fork-demo"},
5477
+ {"key":"L0890","section":"page top","text":"· checked just now","placement":"unplaced","state":"in-map"},
5478
+ {"key":"L0891","section":"page top","text":"you build here","placement":"unplaced","state":"in-map","occurrences":2},
5479
+ {"key":"L0892","section":"page top","text":"standing up","placement":"unplaced","state":"in-map"},
5480
+ {"key":"L0893","section":"page top","text":"unreachable","placement":"unplaced","state":"in-map"},
5481
+ {"key":"L0894","section":"page top","text":"· since {…}","placement":"unplaced","state":"in-map","occurrences":2},
5482
+ {"key":"L0895","section":"page top","text":"snagged","placement":"unplaced","state":"in-map"},
5483
+ {"key":"L0896","section":"page top","text":"drag","placement":"unplaced"},
5484
+ {"key":"L0897","section":"page top","text":"pan","placement":"unplaced"},
5485
+ {"key":"L0898","section":"page top","text":"scroll","placement":"unplaced"},
5486
+ {"key":"L0899","section":"page top","text":"zoom","placement":"unplaced"},
5487
+ {"key":"L0900","section":"page top","text":"click a project","placement":"placed","file":"modules/public-landing/public/projects.html","line":860,"string_id":"2735c2eb8bc6"},
5488
+ {"key":"L0901","section":"page top","text":"open it","placement":"placed","file":"modules/public-landing/public/projects.html","line":860,"string_id":"453a2469b584"},
5489
+ {"key":"L0902","section":"{…}","text":"Runs","placement":"unplaced","state":"card-floor","occurrences":3},
5490
+ {"key":"L0903","section":"{…}","text":"tidewater.cloudbongos.com","placement":"unplaced","state":"card-floor"},
5491
+ {"key":"L0904","section":"{…}","text":"Listed","placement":"unplaced","state":"card-floor","occurrences":3},
5492
+ {"key":"L0905","section":"{…}","text":"Apply to join","placement":"placed","file":"modules/public-landing/public/projects.html","line":1220,"string_id":"766def944c53","state":"card-floor"},
5493
+ {"key":"L0906","section":"page top","text":"builders","placement":"unplaced","state":"card"},
5494
+ {"key":"L0907","section":"page top","text":"shipped in 30 days","placement":"placed","file":"modules/public-landing/public/projects.html","line":937,"string_id":"75d4a6fa0422","state":"card"},
5495
+ {"key":"L0908","section":"Cloud Bongos","text":"Cloud Bongos","placement":"placed","file":"modules/public-landing/public/projects.html","line":748,"string_id":"eeda19200aeb","state":"card-self"},
5496
+ {"key":"L0909","section":"Cloud Bongos","text":"this platform","placement":"placed","file":"modules/public-landing/public/projects.html","line":851,"string_id":"b2d6dad7c766","state":"card-self"},
5497
+ {"key":"L0910","section":"Cloud Bongos","text":"yours","placement":"unplaced","state":"card-self"},
5498
+ {"key":"L0911","section":"Cloud Bongos","text":"Runs","placement":"unplaced","state":"card-self"},
5499
+ {"key":"L0912","section":"Cloud Bongos","text":"Home →","placement":"unplaced","state":"card-self"},
5500
+ {"key":"L0913","section":"Cloud Bongos","text":"Builders' hall","placement":"placed","file":"modules/public-landing/public/projects.html","line":899,"string_id":"90a128c97eae","state":"card-self"},
5501
+ {"key":"L0914","section":"{…}","text":"you build here","placement":"unplaced","state":"card-noart","occurrences":2},
5502
+ {"key":"L0915","section":"{…}","text":"{…}-circles.cloudbongos.com","placement":"unplaced","state":"card-noart"},
5503
+ {"key":"L0916","section":"{…}","text":"Type","placement":"unplaced","state":"card"},
5504
+ {"key":"L0917","section":"{…}","text":"Game","placement":"unplaced","state":"card"},
5505
+ {"key":"L0918","section":"{…}","text":"example.com","placement":"unplaced","state":"card"},
5506
+ {"key":"L0919","section":"{…}","text":"Builders' hall","placement":"placed","file":"modules/public-landing/public/projects.html","line":899,"string_id":"90a128c97eae","state":"card"}
5499
5507
  ]
5500
5508
  },
5501
5509
  {
@@ -65,7 +65,19 @@ const HELD_NOT_ARMED = Object.freeze({
65
65
  reason: 'held for the artist (ADR 0341 D7): a page tweak lands only after its artist approves it',
66
66
  });
67
67
 
68
+ // The closing sentence of the PR body a ship opens (task 1004379). The stock
69
+ // text promised auto-merge, and a held round's PR is deliberately not armed, so
70
+ // the reader of a held PR was told the opposite of what would happen. Both PR
71
+ // writers (the server's publish route and ship.js's ci-land) end with this.
72
+ const ARMED_PR_SENTENCE = 'Auto-merge is enabled — GitHub lands it once the required checks pass.';
73
+ const HELD_PR_SENTENCE = 'Auto-merge is NOT enabled: this page tweak waits for its artist to approve it in the studio (ADR 0341 D7). It lands only after that approval.';
74
+ function prMergeSentence(held) {
75
+ return held ? HELD_PR_SENTENCE : ARMED_PR_SENTENCE;
76
+ }
77
+
68
78
  module.exports = {
79
+ HELD_PR_SENTENCE,
80
+ prMergeSentence,
69
81
  HELD_NOT_ARMED,
70
82
  HOLD_STATE,
71
83
  isPageTweak,
@@ -36,7 +36,7 @@ const { gradeQualityWhere } = require('../db-shared');
36
36
  const { helperJoinSql } = require('../page-tweak-artist'); // task 1004432: a page tweak's applier as a helper
37
37
  const auth = api;
38
38
  const db = require('../db');
39
- const pageTweakReads = require('../page-tweak-reads'); const { HELD_NOT_ARMED } = require('../page-tweak-hold'); // ADR 0341 D7 (tests stub the read)
39
+ const pageTweakReads = require('../page-tweak-reads'); const { HELD_NOT_ARMED, prMergeSentence } = require('../page-tweak-hold'); // ADR 0341 D7 (tests stub the read)
40
40
  const hierarchy = require('../hierarchy');
41
41
  const { suggestCriteria } = require('../criterion-suggest');
42
42
  // The orphan-task advisory (task 1002539) — pure, fail-open; see goal-advisory.js.
@@ -1176,12 +1176,13 @@ module.exports = function buildTasksRouter() {
1176
1176
  const builderLogin = await db.getLastClaimHolder(id)
1177
1177
  .then((h) => (h ? h.github_login : req.builder.github_login), () => null);
1178
1178
  const builderLine = prAssign.prBuilderLine(builderLogin);
1179
+ const held = await pageTweakReads.heldForArtistFailClosed(id); // ADR 0341 D7: read before the body names it (task 1004379)
1179
1180
  const body =
1180
1181
  `Auto-opened by GDS server-mediated publish (ADR 0055) for task ${id}.` +
1181
1182
  `${builderLine ? ` ${builderLine}` : ''}\n\n` +
1182
1183
  `${deHashRefs(valueSummary) || '(no value summary)'}\n\n` +
1183
1184
  `Merging triggers .github/workflows/deploy-prod.yml -> ${branding().domains.publicOrigin}. ` +
1184
- `Auto-merge is enabled — GitHub lands it once the required checks pass.`;
1185
+ prMergeSentence(held);
1185
1186
  const pr = await githubPush.openOrFindPullRequest({ branch, title, body });
1186
1187
  // Best-effort by contract (pr-assign.js never rejects); the catch is for a future
1187
1188
  // edit that forgets — an assignment must not be able to fail a pushed ship.
@@ -1191,7 +1192,7 @@ module.exports = function buildTasksRouter() {
1191
1192
  // builder nothing, and the commonest cause is a repo with allow_auto_merge OFF —
1192
1193
  // a permanent condition that reads exactly like a transient blip.
1193
1194
  // task 1004322 (ADR 0341 D7): a page tweak held for its artist is PUBLISHED, never armed.
1194
- const autoMergeResult = (await pageTweakReads.heldForArtistFailClosed(id)) ? HELD_NOT_ARMED : await githubPush.enableAutoMergeDetailed({ nodeId: pr.node_id });
1195
+ const autoMergeResult = held ? HELD_NOT_ARMED : await githubPush.enableAutoMergeDetailed({ nodeId: pr.node_id });
1195
1196
  const autoMerge = autoMergeResult.ok;
1196
1197
  // task 1139 (ADR 0058): attest the author's trust tier on the pushed sha so the
1197
1198
  // gate-review check can auto-approve a Metic+ author's gate-surface PR with no
@@ -78,6 +78,15 @@ const STAGES = Object.freeze({
78
78
  headline: (id) => `Task #${id} grade failed`,
79
79
  at: 4, currentKind: 'failed',
80
80
  },
81
+ // task 1004379: a page tweak whose grade PASSED and that now waits for its
82
+ // artist (ADR 0341 D7). It sits at completed, which stageFor() would read as a
83
+ // failed grade, so the caller names this stage explicitly (ship-finish.js
84
+ // finishHeld). The grade is done; the confirm node is the artist's to take.
85
+ held: {
86
+ tone: 'info', icon: 'ti-palette', statusWord: 'Waiting for the artist',
87
+ headline: (id) => `Task #${id} passed — waiting for the artist`,
88
+ at: 4, currentKind: 'held',
89
+ },
81
90
  });
82
91
 
83
92
  // Map a post-grade task status to a ship-family card stage. (claimed/review are
@@ -139,6 +148,8 @@ const GRADE_FAILED = 'grade failed';
139
148
  // task 1002892: the confirm node's word when the grade did not RUN. Two words, so
140
149
  // the " → " joint logic that already keeps 'grade failed' intact covers it too.
141
150
  const NOT_GRADED = 'not graded';
151
+ // task 1004379: the confirm node's word while a passed page tweak waits for its artist.
152
+ const AWAITING_ARTIST = 'awaiting artist';
142
153
 
143
154
  // The journey, mapped: one entry per PIPELINE node, conjugated + classified by
144
155
  // position relative to the current node (`cfg.at`). Both renderers consume this
@@ -158,6 +169,7 @@ function trailSteps(cfg) {
158
169
  // cfg.trailWord is set only by the outage override in buildCardModel; every
159
170
  // other caller leaves it undefined and gets GRADE_FAILED exactly as before.
160
171
  if (cfg.currentKind === 'failed') return { word: cfg.trailWord || GRADE_FAILED, state: 'current', checked: false, bold: true };
172
+ if (cfg.currentKind === 'held') return { word: AWAITING_ARTIST, state: 'current', checked: false, bold: true };
161
173
  if (cfg.currentKind === 'done') return { word: f.done, state: 'current', checked: true, bold: true };
162
174
  return { word: f.active, state: 'current', checked: false, bold: true }; // 'active'
163
175
  }
@@ -219,6 +231,7 @@ const DISCIPLINE_SKILL = { ui: 'design' };
219
231
  function nextActionFor(stage, { taskId, discipline, sandboxUrl } = {}) {
220
232
  if (stage === 'shipped') return { kind: 'prompt', label: 'Start next task', cmd: '/builder-start' };
221
233
  if (stage === 'confirmed') return { kind: 'prompt', label: 'Land it', cmd: '/merge-mode' };
234
+ if (stage === 'held') return { kind: 'prompt', label: 'Start next task', cmd: '/builder-start' };
222
235
  if (stage === 'failed') return { kind: 'prompt', label: 'Fix & re-grade', cmd: `node scripts/gds/ship.js ${taskId} --regrade` };
223
236
  if (stage === 'review') return { kind: 'link', label: 'Open in sandbox', url: sandboxUrl || '' };
224
237
  if (stage === 'claimed') {
@@ -391,7 +404,9 @@ function buildCardModel(input = {}) {
391
404
  }
392
405
  // Credits
393
406
  let creditsText = null;
394
- if (stage === 'failed') {
407
+ if (stage === 'held') {
408
+ creditsText = 'none yet — paid when the artist approves and it lands';
409
+ } else if (stage === 'failed') {
395
410
  creditsText = 'none — held at completed';
396
411
  } else if (credits.awarded != null) {
397
412
  const total = fmtInt(credits.total);
@@ -448,6 +463,8 @@ function buildCardModel(input = {}) {
448
463
  // states the automatic reality rather than implying a required command.
449
464
  deployText = 'landing automatically';
450
465
  }
466
+ } else if (stage === 'held') {
467
+ deployText = 'waiting for the artist to approve it in the studio';
451
468
  } else {
452
469
  deployText = 'not deployed';
453
470
  }