@bongos/core 1.21.151 → 1.21.153

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 (55) hide show
  1. package/.bongos-core.json +73 -58
  2. package/docs/copy-inventory.md +323 -317
  3. package/docs/copy-registry.json +423 -369
  4. package/docs/module-api-changelog.md +4 -0
  5. package/docs/modules-contract.md +30 -0
  6. package/docs/page-readings.json +234 -227
  7. package/modules/agents/module.json +1 -0
  8. package/modules/autonomy/module.json +1 -0
  9. package/modules/builder-settings/module.json +1 -0
  10. package/modules/copy-desk/module.json +1 -0
  11. package/modules/design-styles/module.json +1 -0
  12. package/modules/discord/module.json +1 -0
  13. package/modules/economy/module.json +1 -0
  14. package/modules/government/module.json +1 -0
  15. package/modules/grading/module.json +1 -0
  16. package/modules/hall-ui/module.json +1 -0
  17. package/modules/hall-ui/public/modules.html +13 -0
  18. package/modules/hall-ui/public/modules.js +101 -4
  19. package/modules/hall-ui/public/modules.states.json +2 -1
  20. package/modules/hall-ui/records/catalog.md +2 -0
  21. package/modules/ideas/module.json +1 -0
  22. package/modules/lifecycle/github-failure.js +50 -0
  23. package/modules/lifecycle/module.json +1 -0
  24. package/modules/lifecycle/routes/tasks.js +2 -2
  25. package/modules/memory/module.json +1 -0
  26. package/modules/npm-release/module.json +1 -0
  27. package/modules/onboarding/module.json +1 -0
  28. package/modules/page-notes/module.json +1 -0
  29. package/modules/pixel-art/module.json +1 -0
  30. package/modules/platform-identity/module.json +1 -0
  31. package/modules/provisioning/github-setup.js +51 -1
  32. package/modules/provisioning/module.json +1 -0
  33. package/modules/provisioning/routes/provisioning.js +7 -2
  34. package/modules/public-landing/module.json +1 -0
  35. package/modules/public-landing/public/projects.html +33 -0
  36. package/modules/render-deploy/module.json +1 -0
  37. package/modules/security/module.json +1 -0
  38. package/modules/sessions/module.json +1 -0
  39. package/modules/specialities/module.json +1 -0
  40. package/modules/status-ui/module.json +1 -0
  41. package/modules/ui-design/module.json +1 -0
  42. package/package-lock.json +2 -2
  43. package/package.json +1 -1
  44. package/release-notes.json +20 -0
  45. package/scripts/gds/module.js +4 -2
  46. package/src/bongos/module-listing.js +76 -2
  47. package/src/module-api.js +1 -1
  48. package/src/module-loader/catalog.js +15 -1
  49. package/src/module-loader/manifest-schema.js +40 -1
  50. package/tests/github_failure.mjs +79 -0
  51. package/tests/github_install_nudge.mjs +219 -0
  52. package/tests/hall_catalog_world.mjs +23 -3
  53. package/tests/module_catalog.mjs +34 -0
  54. package/tests/module_manifest.mjs +36 -0
  55. package/tests/module_store_listing.mjs +78 -1
@@ -3139,5 +3139,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
3139
3139
  landed since 1.21.149 with no explicit bump. run 39331860470. (task 1002620)
3140
3140
  1.21.151 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3141
3141
  landed since 1.21.150 with no explicit bump. run 39667670641. (task 1002620)
3142
+ 1.21.152 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3143
+ landed since 1.21.151 with no explicit bump. run 39671625798. (task 1002620)
3144
+ 1.21.153 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3145
+ landed since 1.21.152 with no explicit bump. run 39675693737. (task 1002620)
3142
3146
  ---------------------------------------------------------------------------
3143
3147
  ```
@@ -83,6 +83,8 @@ Every module must have a `module.json` at its root (`modules/<key>/module.json`)
83
83
  // what update, rollout channels and re-assessment name (task 1003781).
84
84
  "coreVersion": "^1.4.0", // REQUIRED. semver range of CORE_VERSION this module supports.
85
85
  "default": false, // OPTIONAL (default false). Fail-safe when no config names it.
86
+ "category": { "parent": "communication", "sub": "team-chat" }, // OPTIONAL. Where it is browsed (ADR 0342):
87
+ // parent is one of the eight; sub is an approved sub-category, absent while pending.
86
88
  "author": "…", // OPTIONAL. Attribution (ADR 0107 §2) — portable, not a cross-Bongos FK.
87
89
  "origin": "…", // OPTIONAL. Origin instance/project this module was built in.
88
90
  "license": "AGPL-3.0", // OPTIONAL. License this module is offered under.
@@ -120,6 +122,33 @@ Every module must have a `module.json` at its root (`modules/<key>/module.json`)
120
122
 
121
123
  An unknown key throws at validate time — typos fail loud (top-level attribution fields have no closed allowlist; only `contributes` sub-keys do).
122
124
 
125
+ ### `category` — where a module is browsed and compared ([ADR 0342](adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md))
126
+
127
+ `"category": { "parent": "<key>", "sub": "<key>" }`. `parent` is one of eight fixed keys, and any
128
+ other value fails validation:
129
+
130
+ | `parent` | Shown as |
131
+ |---|---|
132
+ | `work` | Work & planning |
133
+ | `people` | Team & people |
134
+ | `quality` | Quality & review |
135
+ | `money` | Money |
136
+ | `communication` | Communication |
137
+ | `pages` | Pages & design |
138
+ | `hosting` | Hosting & deploy |
139
+ | `knowledge` | Knowledge |
140
+
141
+ `sub` is the module's one sub-category: the narrow set of modules it actually competes with, which
142
+ is where the store's ranking and its cap of ten apply. It must be a kebab-case key. Leave it out
143
+ while a new sub-category waits for a Metic+ approval; the module is then listed under its parent
144
+ only. The schema checks the sub-category's shape, not whether it has been approved. The block has
145
+ just these two keys, so a second sub-category is an error.
146
+
147
+ Every bundled module declares a parent (pinned by `tests/module_manifest.mjs`), and none declares a
148
+ sub-category yet. `GET /modules`, `bongos module list` (the CATEGORY column) and the hall Modules tab
149
+ all read the row's `category` (`{ parent, parentTitle, sub }`, or `null`) from
150
+ `src/module-loader/catalog.js`, and the search on both surfaces matches it.
151
+
123
152
  ### `spend` — "my surfaces spend real money for whoever calls them" ([ADR 0282](adr/0282-a-module-that-spends-for-its-callers-declares-a-payer-and-the-core-refuses-it-without-one.md))
124
153
 
125
154
  Declare `"spend": { "requiresPayer": true }` when a route of yours can spend money on behalf of the
@@ -363,6 +392,7 @@ Run `bongos upgrade` to confirm coreVersion compatibility, then `node scripts/gd
363
392
  - Gate: Metic+ (`module.submit`) for now. This is not `bongos module submit`, which proposes a module *into* core.
364
393
  - **A how-to is required** ([ADR 0347](adr/0347-every-store-module-ships-a-how-to.md)). `modules/<key>/HOWTO.md` is what a buyer reads — the store shows it as the module's page — so it is written for the person who installs the module, not for an AI working inside it (that is `CLAUDE.md`). It is plain Markdown: any AI or person can write it. Publish refuses the version unless it has these five level-2 headings, in any order and any case, each with some text under it: `## What it does`, `## Install and enable`, `## How to use it` (with one worked example), `## Configuration` ("None." is fine) and `## Limits and known issues` ("None known." is fine). HTML comments don't count as text, so the scaffold's prompts must be replaced. The refusal names each failing section. The check is one function, `checkHowto` in `scripts/gds/module-artifact.js`; the CLI runs it before uploading and the store runs it again on upload, so a hand-built upload can't skip it. `bongos module check` reports it as advice only — an upstream submit is not gated by it. Install and update don't re-check it, so a version published before the gate still installs. The file travels in the tarball, so its hash pins it to the version. An optional `howto.artifactUrl` in `module.json` (an `https://` link on `claude.ai`) is shown as an extra, never graded.
365
394
  - **Getting listed** (task 1003807, [ADR 0343](adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md)). Publishing a version does not by itself put it in the store's catalog, `GET /store/modules`. The catalog shows each module's newest version, judged by its current score. It must pass the Security gate first; a version that failed it, or has not been checked yet, is not listed. A new version with no install or reliability data yet is listed with a **New** label and is not ranked; the floor does not apply to it until it has a real score. Every other version is listed only if its overall score is **at least 50 out of 100**. Below that it is not listed at all. The floor is fixed in Bongos itself (`QUALITY_FLOOR` in `src/bongos/module-listing.js`) and returned in the catalog response; no author or instance setting moves it, and changing it is an owner-approved, reviewed task.
395
+ - **What a module is strong and weak at** (task 1003799, ADR 0343 D4). Each catalog entry also carries `parts` (the current result of Tests, Clean installs, Reliability, Tester feedback and How-to) and a reading of them: `strengths` (a part scored **80 or more**), `weaknesses` (a part scored **below the floor**) and `unmeasured` (a part with no score yet, which is never counted as weak). Each strength and weakness has a one-sentence `detail` saying what the number rests on. Security is not among them: every listed version has passed it. The reading is `readParts` in `src/bongos/module-listing.js`; the hall's Modules tab shows it in its "In the store" group, so two modules with the same overall score can be told apart.
366
396
 
367
397
  ### 7. Install from the store
368
398