@bongos/core 1.20.74 → 1.20.75

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 (35) hide show
  1. package/.bongos-core.json +45 -40
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +2 -0
  4. package/clients/bongos-client/index.cjs +2 -0
  5. package/clients/bongos-client/index.d.ts +4 -0
  6. package/clients/bongos-client/index.mjs +2 -0
  7. package/docs/api/openapi.json +79 -3
  8. package/docs/api-reference.md +3 -2
  9. package/docs/copy-inventory.md +447 -373
  10. package/docs/copy-registry.json +1157 -468
  11. package/docs/module-api-changelog.md +2 -0
  12. package/docs/page-inventory.json +6 -1
  13. package/docs/page-readings.json +1044 -650
  14. package/modules/provisioning/routes/provisioning.js +35 -0
  15. package/modules/public-landing/public/assets/cosmos.css +1 -1
  16. package/modules/public-landing/public/projects.html +589 -63
  17. package/modules/public-landing/public/projects.probes.json +8 -5
  18. package/modules/public-landing/public/projects.states.json +19 -14
  19. package/modules/ui-design/kit/lib.js +4 -2
  20. package/modules/ui-design/kit/serve.js +5 -0
  21. package/package-lock.json +2 -2
  22. package/package.json +1 -1
  23. package/release-notes.json +6 -0
  24. package/src/module-api.js +1 -1
  25. package/tests/projects_hub.mjs +9 -5
  26. package/tests/projects_hub_app_status.mjs +1 -1
  27. package/tests/projects_hub_app_step.mjs +10 -10
  28. package/tests/projects_hub_look.mjs +7 -7
  29. package/tests/projects_hub_module_picker.mjs +9 -9
  30. package/tests/projects_hub_pre_uat.mjs +2 -1
  31. package/tests/wizard_demo.mjs +1 -1
  32. package/tests/wizard_draft_resume.mjs +1 -1
  33. package/tests/wizard_front_door.mjs +11 -7
  34. package/tests/wizard_intent_resume.mjs +9 -9
  35. package/tests/wizard_physics.mjs +264 -0
@@ -21,6 +21,9 @@
21
21
  // An `adopt` ALSO passes the credential
22
22
  // preflight — ../credential-preflight.js,
23
23
  // task 1002909; greenfield is exempt; a full box → 409, ../capacity-gate.js)
24
+ // POST /provisioning/physics-check — the planet-physics read before anything exists:
25
+ // the screening stop + the soft-limit table
26
+ // for the answers so far; writes nothing (task 1004418)
24
27
  // GET /provisioning/instances — list the caller's instances
25
28
  // GET /provisioning/instances/:id — read one of the caller's instances
26
29
  // (also SELF-HEALS its catalog projection,
@@ -196,6 +199,14 @@ module.exports = function provisioningRoutes() {
196
199
  max: 10,
197
200
  key: (req) => (req.builder ? `b:${req.builder.id}` : clientIp(req)),
198
201
  });
202
+ // Limiter for the planet-physics read (task 1004418). Signed-in and writes nothing,
203
+ // but the wizard asks it as the founder answers the four questions, so it is a
204
+ // repeated check like the slug one: 60 a minute is roomy for a person clicking
205
+ // through and sheds a loop. Keyed on the BUILDER for the slug check's reason.
206
+ const physicsCheckRateLimit = makeAskRateLimiter({
207
+ max: 60,
208
+ key: (req) => (req.builder ? `b:${req.builder.id}` : clientIp(req)),
209
+ });
199
210
 
200
211
  // Route ORDER is deliberate (the box.js precedent): the Archon-gated routes are
201
212
  // declared FIRST, then the any-builder routes. The route-rank auditor
@@ -285,6 +296,30 @@ module.exports = function provisioningRoutes() {
285
296
  }
286
297
  });
287
298
 
299
+ // POST /provisioning/physics-check — the planet-physics questions' read BEFORE anything
300
+ // exists (task 1004418, BV2.PS07). The create wizard asks it as the founder answers:
301
+ // would this description stop at the screening screen, and which options do the
302
+ // answers so far hide, grey or annotate (the PS02 soft-limit table, spec D6)? It is
303
+ // the same screen and the same table the create runs, so the screens can never
304
+ // disagree with the Create. Writes nothing, and the soft limits stay advice
305
+ // (`enforced: false`); the create still re-checks everything itself.
306
+ router.post('/provisioning/physics-check', auth.requireBuilder, physicsCheckRateLimit, (req, res) => {
307
+ if (validateOrRespond(req, res, {
308
+ description: { type: 'string', maxLength: provisioning.DESCRIPTION_MAX },
309
+ detail: { type: 'object' },
310
+ })) return;
311
+ const body = req.body || {};
312
+ const detailFault = badProjectDetail(body.detail);
313
+ if (detailFault) return res.fail(detailFault.code, { status: 400, message: detailFault.message });
314
+ const screened = screenedOut(body.description);
315
+ res.set('Cache-Control', 'no-store');
316
+ res.json({
317
+ stop: !!screened,
318
+ message: screened ? screened.message : null,
319
+ soft_limits: provisioning.softLimitsFor(body.detail || {}),
320
+ });
321
+ });
322
+
288
323
  // POST /provisioning/instances — request a new instance. rank: any authenticated
289
324
  // builder (own resource) for `byo-host`, and for their FIRST live `cloud-host` (task
290
325
  // 1004412, ADR 0354). A further cloud-host needs provisioning.fleet.manage, and
@@ -1603,7 +1603,7 @@ p.sec-p{font-size:var(--fs-lede);font-weight:500;color:var(--ink-soft);line-heig
1603
1603
  /* the six-step strip as the rail: six hairlines, a 7px dot, one lit step on the
1604
1604
  accent with its halo, the number in the display voice, the name in the label
1605
1605
  face; a step already answered (role=button) stays a way back */
1606
- #view-new .steps{display:grid;grid-template-columns:repeat(9,1fr);gap:0 10px;align-items:start;margin:0 0 40px;}
1606
+ #view-new .steps{display:grid;grid-template-columns:repeat(10,1fr);gap:0 10px;align-items:start;margin:0 0 40px;}
1607
1607
  #view-new .steps li{display:block;position:relative;border-top:1px solid var(--rule);padding:12px 0 0;gap:0;}
1608
1608
  #view-new .steps li::before{content:"";position:absolute;top:-4px;left:0;right:auto;width:7px;height:7px;margin:0;border-radius:50%;border:1px solid var(--rule);background:var(--bg);}
1609
1609
  #view-new .steps .snum{display:block;width:auto;height:auto;border:0;border-radius:0;background:none;font-family:var(--font-display);font-weight:300;font-size:22px;letter-spacing:-.02em;line-height:1.1;color:var(--ink-faint);margin-bottom:2px;}