@bongos/core 1.19.670 → 1.19.672

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.670",
6
- "core_contract": "1.19.670",
7
- "source_commit": "8bd867dda772e1b204c7932e1f386eff9a18955f",
5
+ "core_version": "1.19.672",
6
+ "core_contract": "1.19.672",
7
+ "source_commit": "72bde195eed5440b4cad741c01a811727d96a4d4",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-11T16:30:19.479Z",
9
+ "built_at": "2026-09-11T17:51:22.900Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 474,
13
13
  "agent_docs_stubbed": 24,
14
- "functional_verbatim": 2117,
14
+ "functional_verbatim": 2120,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2615,
20
- "tree_sha256": "2b95ae714107f111f69a22dc7453ae4cf4b963a33d811f179fc01dc54b3d80ba",
19
+ "file_count": 2618,
20
+ "tree_sha256": "8fafd38c0b191dd28e39e21d624b758762e3316f76c64b203860de48e6539679",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -387,7 +387,7 @@
387
387
  {
388
388
  "path": "clients/bongos-client/index.d.ts",
389
389
  "mode": "0000644",
390
- "sha256": "a82dc5f2fdcf44a1abff4bd8ba0aec70cc49004ad5feae72c362e8b45c5f04e5"
390
+ "sha256": "e1d2929cc1373aca2d24879b9fbbbbfcd1ef77c850565aca7dba0130ff1ac43b"
391
391
  },
392
392
  {
393
393
  "path": "clients/bongos-client/index.mjs",
@@ -1912,12 +1912,12 @@
1912
1912
  {
1913
1913
  "path": "docs/api-reference.md",
1914
1914
  "mode": "0000644",
1915
- "sha256": "fe08952e837f4e79243823d66876f2413ca1d743c22bc2a287c18275616692d4"
1915
+ "sha256": "93eeff755bd089165265cf0f2c7f21e36803ff9519266512f834891d1ff6dc60"
1916
1916
  },
1917
1917
  {
1918
1918
  "path": "docs/api/openapi.json",
1919
1919
  "mode": "0000644",
1920
- "sha256": "db8be14055cc32b31376585ad954e1e91a8b1cbe77401bad3d5215c1d3b419aa"
1920
+ "sha256": "0d47d92e4e20e0f7d2a9ea9a1a4c643ed2e22103cd6ef5081377b22540993670"
1921
1921
  },
1922
1922
  {
1923
1923
  "path": "docs/architecture.md",
@@ -1942,12 +1942,12 @@
1942
1942
  {
1943
1943
  "path": "docs/copy-inventory.md",
1944
1944
  "mode": "0000644",
1945
- "sha256": "9faae742143a1492fe9bbc3075bb6cfa87efa9eebd2225d98743e708f138110f"
1945
+ "sha256": "2ef3bae15b679d797a2fc7210085c54b527eec3be3b4ec397dc3e043725d3a02"
1946
1946
  },
1947
1947
  {
1948
1948
  "path": "docs/copy-registry.json",
1949
1949
  "mode": "0000644",
1950
- "sha256": "fa55c6a5c2a89e7ac27dcbb12b8efe5c7d812e5386aeb4726412419d53ac577f"
1950
+ "sha256": "88b6a409123033b93bfe079e807774acd263ea14739ca8851b4ae24e4a89247a"
1951
1951
  },
1952
1952
  {
1953
1953
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2792,7 +2792,7 @@
2792
2792
  {
2793
2793
  "path": "docs/module-api-changelog.md",
2794
2794
  "mode": "0000644",
2795
- "sha256": "3ae8c777f5212119f103d906a17893b73817b206b538a212f53dc01001443357"
2795
+ "sha256": "84eeb3cde0e92fb5bf32038fc8cd5abd7f5cc059c71cf0273a50873fc1325abe"
2796
2796
  },
2797
2797
  {
2798
2798
  "path": "docs/modules-contract.md",
@@ -6482,7 +6482,7 @@
6482
6482
  {
6483
6483
  "path": "modules/provisioning/provisioning.js",
6484
6484
  "mode": "0000644",
6485
- "sha256": "39635718015b8fcb0cf5d21f3769e292e129bfe312b5802d073ef63b0d8b7b1e"
6485
+ "sha256": "32083b07e4c676f9a68e0b78df3e5f5a0cea45fe0cb168a32fe1180165c99fbe"
6486
6486
  },
6487
6487
  {
6488
6488
  "path": "modules/provisioning/rate-limit.js",
@@ -6494,6 +6494,11 @@
6494
6494
  "mode": "0000644",
6495
6495
  "sha256": "4c933aad1307378496d47960e24c9d797a1f122f28aefa27b769f336e4cf2e75"
6496
6496
  },
6497
+ {
6498
+ "path": "modules/provisioning/routes/body-validators.js",
6499
+ "mode": "0000644",
6500
+ "sha256": "c59c59f842a0bab6bc45370a902d6db4a1b0e39a902eb115a12abaa59fc48dc9"
6501
+ },
6497
6502
  {
6498
6503
  "path": "modules/provisioning/routes/callback-page.js",
6499
6504
  "mode": "0000644",
@@ -6502,7 +6507,7 @@
6502
6507
  {
6503
6508
  "path": "modules/provisioning/routes/provisioning.js",
6504
6509
  "mode": "0000644",
6505
- "sha256": "14fda38bbfd01404c16e48c626247cbfacd956889e25aab6c65cf1b746b5e3e7"
6510
+ "sha256": "202dcfb416317eda72696455ace487d36021377d87a6c122df9561bc087939a8"
6506
6511
  },
6507
6512
  {
6508
6513
  "path": "modules/provisioning/starter-bundles.js",
@@ -6757,7 +6762,7 @@
6757
6762
  {
6758
6763
  "path": "modules/public-landing/public/assets/cosmos.css",
6759
6764
  "mode": "0000644",
6760
- "sha256": "17637a0fd4eafddcd3235dec51c0ff196a8b39360918ab7a4c0370fc21d3a20f"
6765
+ "sha256": "2e05801f13227c5d6d0b26f9f0c476ad767fd9bbe2c034f82a3e315045781eb9"
6761
6766
  },
6762
6767
  {
6763
6768
  "path": "modules/public-landing/public/assets/verro-medallion.png",
@@ -7017,7 +7022,7 @@
7017
7022
  {
7018
7023
  "path": "modules/public-landing/public/projects.html",
7019
7024
  "mode": "0000644",
7020
- "sha256": "864b6ee7a8b1866196d6595914f614e388a51c2a160fd86f454ab4a32a4740d5"
7025
+ "sha256": "75de00858d851cb13278bff0fd1fac7b174eca3577d481c91475f83bb1274be7"
7021
7026
  },
7022
7027
  {
7023
7028
  "path": "modules/public-landing/public/projects.probes.json",
@@ -7027,7 +7032,7 @@
7027
7032
  {
7028
7033
  "path": "modules/public-landing/public/projects.states.json",
7029
7034
  "mode": "0000644",
7030
- "sha256": "a2d3ecc5e893bcaa5632c2d693d5b642c7041cc285e382d572954284ad64e241"
7035
+ "sha256": "53274a02ab69d8fbf602b408ea6aaeb22caaa9031489cc315855067ea956fc7e"
7031
7036
  },
7032
7037
  {
7033
7038
  "path": "modules/public-landing/public/terms.html",
@@ -7762,12 +7767,12 @@
7762
7767
  {
7763
7768
  "path": "package-lock.json",
7764
7769
  "mode": "0000644",
7765
- "sha256": "56e1f3d38ea08d502a77017a9ba9722349740d7c3577a7ffb1b9135d87612d62"
7770
+ "sha256": "46ab99aa32c6280e6c1bd7af17f26e534c1bcd45a43e873c9f2526ddd856dfae"
7766
7771
  },
7767
7772
  {
7768
7773
  "path": "package.json",
7769
7774
  "mode": "0000644",
7770
- "sha256": "9ba86a842073a1c0721d3bcbea43ff5a159a243c73b55031ae65ba524f345cbf"
7775
+ "sha256": "c460db604d8c3d230a2a7af526c3bfe9288d5a9d1a4136d728ad81315b1bd177"
7771
7776
  },
7772
7777
  {
7773
7778
  "path": "public-docs/index.html",
@@ -9527,7 +9532,7 @@
9527
9532
  {
9528
9533
  "path": "src/module-api.js",
9529
9534
  "mode": "0000644",
9530
- "sha256": "06583dcc270fa2f445c15716a48602247303e40769e20cd4332297c2bb6bd9d5"
9535
+ "sha256": "057af9f0fddf1697d3368c2cddee50970b2319da68b2e73df11a3baa84f1be60"
9531
9536
  },
9532
9537
  {
9533
9538
  "path": "src/module-loader/catalog.js",
@@ -12009,6 +12014,11 @@
12009
12014
  "mode": "0000644",
12010
12015
  "sha256": "361a8baae6b15efa86bdb366076b6ba2ad237f2fa63d600bee879db19042dbef"
12011
12016
  },
12017
+ {
12018
+ "path": "tests/project_type_editable.mjs",
12019
+ "mode": "0000644",
12020
+ "sha256": "9d2432b2f7ad937415213e3cdbdb98aca5dd8e0c6eff5d73757ca0e873e89b8b"
12021
+ },
12012
12022
  {
12013
12023
  "path": "tests/project_visibility_db.mjs",
12014
12024
  "mode": "0000644",
@@ -12027,7 +12037,7 @@
12027
12037
  {
12028
12038
  "path": "tests/projects_hub_pre_uat.mjs",
12029
12039
  "mode": "0000644",
12030
- "sha256": "e16e0488e1364a09503cec17a85e19ed6045fd8c6430c472c050934e1cad4013"
12040
+ "sha256": "fb64eb311c363c0b649b2b79ab24627058bc3756ea0616769140793934a717b0"
12031
12041
  },
12032
12042
  {
12033
12043
  "path": "tests/promote_goal_id.mjs",
@@ -13054,6 +13064,11 @@
13054
13064
  "mode": "0000644",
13055
13065
  "sha256": "74ffbc7e4585e651d00ab879ece6f3d23089d7c9ae7acb15483d3752b47bbdc0"
13056
13066
  },
13067
+ {
13068
+ "path": "tests/wizard_intent_resume.mjs",
13069
+ "mode": "0000644",
13070
+ "sha256": "d3d6fe02e18598ea9a146b3af7c3dff96a69a68ca9e95a7227e3c6549bbd6cc4"
13071
+ },
13057
13072
  {
13058
13073
  "path": "tests/wizard_preselect_why.mjs",
13059
13074
  "mode": "0000644",
@@ -178,8 +178,8 @@ export interface PatchProjectsIdFeaturedRequest { featured: boolean }
178
178
  export interface PatchProjectsIdFeaturedResponse { project: unknown }
179
179
  export interface PatchProjectsIdStatusRequest { status: string }
180
180
  export interface PatchProjectsIdStatusResponse { project: unknown }
181
- export interface PatchProvisioningInstancesIdDetailRequest { description?: string; detail?: Record<string, unknown>; modules?: string[] }
182
- export interface PatchProvisioningInstancesIdDetailResponse { ok: boolean; description: unknown; detail: unknown; options: unknown; publish: unknown; modules: unknown }
181
+ export interface PatchProvisioningInstancesIdDetailRequest { description?: string; detail?: Record<string, unknown>; modules?: string[]; type?: string }
182
+ export interface PatchProvisioningInstancesIdDetailResponse { ok: boolean; description: unknown; detail: unknown; options: unknown; publish: unknown; modules: unknown; type: unknown }
183
183
  export interface PatchProvisioningInstancesIdSettingsResponse { ok: boolean; saved: unknown; planet: unknown; push: unknown }
184
184
  export interface PatchTaskRecommendationsIdRequest { status: "declined" | "withdrawn" }
185
185
  export interface PatchTaskRecommendationsIdResponse { ok: boolean; recommendation: unknown }
@@ -11710,7 +11710,7 @@
11710
11710
  "provisioning"
11711
11711
  ],
11712
11712
  "summary": "PATCH /provisioning/instances/:id/detail",
11713
- "description": "── The optional project detail (task 1002334, goal 1000046) ────────────── PATCH /provisioning/instances/:id/detail — answer (or re-answer) the wizard's OPTIONAL creation steps after creation. Body: any subset of { description, detail, modules }. rank: any authenticated builder (own resource; archon may change any — same gate as settings). THIS ROUTE IS WHAT MAKES THE STEP SKIPPABLE. Skipping at creation leaves the project dark-matter — off the map and un-joinable (ADR 0182 D4) — and that is a supported default only because there is a way back. Without this route \"optional\" would mean \"permanently unpublishable\", i.e. a dead end, which is precisely what criterion `proj-detail-interview` refuses. Deliberately NOT a settings-apply: nothing here is a policy the running instance obeys, so there is no web.env to patch and no restart to queue. The answers live on the platform row until a catalog row materializes (the provisioning_007 `type` precedent), and R16 (task 1002335) is the surface that reads `description` to compute publishability and name what is still missing. `modules` rides the SAME route for the same reason (BV1.R23, task 1002342, ADR 0245): step 4 of the wizard is skippable exactly as step 3 is, so it needs the same way back, and it lands on the same platform row under the same ownership gate. Only an ARRAY is a change — an omitted or null key leaves the column alone, so the \"never asked\" NULL (ADR 0240 §2) can never be written by a later edit. The always-on core stays unremovable by construction: badModuleSelection refuses its keys and `effectiveModules` re-adds it on read. AN ANSWER CAN BE TAKEN BACK (task 1003577). `detail` merges, so before this the first `team_shape` an owner sent was permanent — and \"never answered\" is a state `effectiveModules` reads (ADR 0240), not merely the absence of one. Sending `detail: { <key>: null }` UN-ANSWERS that question: the key is dropped from the jsonb, so the row reads back exactly as one that was never asked and the bundle the answer moved moves back. Only null does it — an empty string or any other value is still refused as off-vocabulary, and `detail: {}` still changes nothing, because a form that collected no answers is not asking for any to be erased.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
11713
+ "description": "── The optional project detail (task 1002334, goal 1000046) ────────────── PATCH /provisioning/instances/:id/detail — answer (or re-answer) the wizard's OPTIONAL creation steps after creation. Body: any subset of { description, detail, modules }. rank: any authenticated builder (own resource; archon may change any — same gate as settings). THIS ROUTE IS WHAT MAKES THE STEP SKIPPABLE. Skipping at creation leaves the project dark-matter — off the map and un-joinable (ADR 0182 D4) — and that is a supported default only because there is a way back. Without this route \"optional\" would mean \"permanently unpublishable\", i.e. a dead end, which is precisely what criterion `proj-detail-interview` refuses. Deliberately NOT a settings-apply: nothing here is a policy the running instance obeys, so there is no web.env to patch and no restart to queue. The answers live on the platform row until a catalog row materializes (the provisioning_007 `type` precedent), and R16 (task 1002335) is the surface that reads `description` to compute publishability and name what is still missing. `modules` rides the SAME route for the same reason (BV1.R23, task 1002342, ADR 0245): step 4 of the wizard is skippable exactly as step 3 is, so it needs the same way back, and it lands on the same platform row under the same ownership gate. Only an ARRAY is a change — an omitted or null key leaves the column alone, so the \"never asked\" NULL (ADR 0240 §2) can never be written by a later edit. The always-on core stays unremovable by construction: badModuleSelection refuses its keys and `effectiveModules` re-adds it on read. `type` RIDES IT TOO (task 1003504), and for the third time the same argument: the wizard's Type step declared something at creation and nothing owner-facing could change it afterwards, so task 1002772 had to narrow the wizard's own promise and stop saying \"you can change it later\". This is the route that earns the sentence back. It belongs here rather than on the settings channel for the mModules reason — a type is a DECLARATION on the platform row, not a policy the running instance obeys, so nothing is pushed to the project and nothing restarts. One consequence is worth naming, because the owner has to be told it: for a project whose picker was SKIPPED, `modules` is NULL and effectiveModules resolves the type's starter bundle at read time (ADR 0240 §2) — so changing the type moves the extras too. A set the owner picked for themselves is stored and never moves. The reply carries `modules` on every patch precisely so the caller learns which happened without a follow-up GET. AN ANSWER CAN BE TAKEN BACK (task 1003577). `detail` merges, so before this the first `team_shape` an owner sent was permanent — and \"never answered\" is a state `effectiveModules` reads (ADR 0240), not merely the absence of one. Sending `detail: { <key>: null }` UN-ANSWERS that question: the key is dropped from the jsonb, so the row reads back exactly as one that was never asked and the bundle the answer moved moves back. Only null does it — an empty string or any other value is still refused as off-vocabulary, and `detail: {}` still changes nothing, because a form that collected no answers is not asking for any to be erased.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
11714
11714
  "x-rank": "any-builder",
11715
11715
  "x-source": "modules/provisioning/routes/provisioning.js",
11716
11716
  "parameters": [
@@ -18856,6 +18856,10 @@
18856
18856
  "type": "string"
18857
18857
  },
18858
18858
  "maxItems": 50
18859
+ },
18860
+ "type": {
18861
+ "type": "string",
18862
+ "maxLength": 40
18859
18863
  }
18860
18864
  },
18861
18865
  "additionalProperties": false
@@ -18870,7 +18874,8 @@
18870
18874
  "detail": {},
18871
18875
  "options": {},
18872
18876
  "publish": {},
18873
- "modules": {}
18877
+ "modules": {},
18878
+ "type": {}
18874
18879
  },
18875
18880
  "required": [
18876
18881
  "ok",
@@ -18878,7 +18883,8 @@
18878
18883
  "detail",
18879
18884
  "options",
18880
18885
  "publish",
18881
- "modules"
18886
+ "modules",
18887
+ "type"
18882
18888
  ]
18883
18889
  },
18884
18890
  "PatchProvisioningInstancesIdSettingsResponse": {
@@ -474,7 +474,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
474
474
  | GET | `/api/bongos/provisioning/instances` | `any-builder` | — | GET /provisioning/instances — the caller's own instances + each open intent. |
475
475
  | POST | `/api/bongos/provisioning/instances` | `any-builder` | `slug`, `target_ref`, `hosting_shape`, `domain`, `no_address`, `tier`, `onboard_mode`, `type`, `description`, `detail`, `modules` | POST /provisioning/instances — request a new instance. |
476
476
  | GET | `/api/bongos/provisioning/instances/:id` | `any-builder` | — | GET /provisioning/instances/:id — read one instance (the manage page's read). |
477
- | PATCH | `/api/bongos/provisioning/instances/:id/detail` | `any-builder` | `description`, `detail`, `modules` | ── The optional project detail (task 1002334, goal 1000046) ────────────── PATCH /provisioning/instances/:id/detail — answer (or re-answe… |
477
+ | PATCH | `/api/bongos/provisioning/instances/:id/detail` | `any-builder` | `description`, `detail`, `modules`, `type` | ── The optional project detail (task 1002334, goal 1000046) ────────────── PATCH /provisioning/instances/:id/detail — answer (or re-answe… |
478
478
  | POST | `/api/bongos/provisioning/instances/:id/domain` | `any-builder` | `domain` | POST /provisioning/instances/:id/domain — give the caller's OWN instance its address (task 1002692, gap 5: no path existed to add a domai… |
479
479
  | POST | `/api/bongos/provisioning/instances/:id/force-teardown` | `metic+archon` | — | POST /provisioning/instances/:id/force-teardown — Archon tears down ANY instance. |
480
480
  | POST | `/api/bongos/provisioning/instances/:id/github-app` | `any-builder` | `account` | POST /provisioning/instances/:id/github-app — mint a GitHub-App-Manifest onboarding link for the caller's OWN instance (task 2080, ADR 01… |