@bongos/core 1.24.8 → 1.24.10
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 +131 -86
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +8 -0
- package/clients/bongos-client/index.cjs +8 -0
- package/clients/bongos-client/index.d.ts +11 -1
- package/clients/bongos-client/index.mjs +8 -0
- package/docs/adr/0385-money-lives-with-a-processor-credits-stay-a-project-meter.md +1 -1
- package/docs/api/openapi.json +185 -6
- package/docs/api-reference.md +7 -3
- package/docs/architecture.md +2 -2
- package/docs/copy-inventory.md +58 -28
- package/docs/copy-registry.json +333 -33
- package/docs/module-api-changelog.md +4 -0
- package/docs/modules-contract.md +3 -3
- package/docs/page-inventory.json +34 -4
- package/docs/page-readings.json +294 -237
- package/migrations/core_287_module_prices_cash_only.sql +24 -0
- package/modules/hall-ui/public/ai-studio.html +2 -2
- package/modules/hall-ui/public/atlas.html +2 -2
- package/modules/hall-ui/public/blockers.html +2 -2
- package/modules/hall-ui/public/board-room.html +2 -2
- package/modules/hall-ui/public/city.html +2 -2
- package/modules/hall-ui/public/collab.html +2 -2
- package/modules/hall-ui/public/commands.html +2 -2
- package/modules/hall-ui/public/copy-desk.html +2 -2
- package/modules/hall-ui/public/craft-mode.js +1 -1
- package/modules/hall-ui/public/deploy.html +2 -2
- package/modules/hall-ui/public/diagrams.html +2 -2
- package/modules/hall-ui/public/drachmae.html +2 -2
- package/modules/hall-ui/public/fleet.html +2 -2
- package/modules/hall-ui/public/gate.html +2 -2
- package/modules/hall-ui/public/goal-map.html +2 -2
- package/modules/hall-ui/public/goals.html +2 -2
- package/modules/hall-ui/public/government.html +2 -2
- package/modules/hall-ui/public/idea.html +2 -2
- package/modules/hall-ui/public/ideas.html +2 -2
- package/modules/hall-ui/public/index.html +2 -2
- package/modules/hall-ui/public/market-watch-rules.html +2 -2
- package/modules/hall-ui/public/market-watch-settings.css +217 -0
- package/modules/hall-ui/public/market-watch-settings.html +113 -0
- package/modules/hall-ui/public/market-watch-settings.js +230 -0
- package/modules/hall-ui/public/market-watch-settings.states.json +14 -0
- package/modules/hall-ui/public/modules.html +2 -2
- package/modules/hall-ui/public/modules.js +5 -0
- package/modules/hall-ui/public/my-agents.html +2 -2
- package/modules/hall-ui/public/primer.html +2 -2
- package/modules/hall-ui/public/profile.html +2 -2
- package/modules/hall-ui/public/project-settings.html +2 -2
- package/modules/hall-ui/public/ranks.html +2 -2
- package/modules/hall-ui/public/roadmap.html +2 -2
- package/modules/hall-ui/public/roster.html +2 -2
- package/modules/hall-ui/public/sessions.html +2 -2
- package/modules/hall-ui/public/settings.html +2 -2
- package/modules/hall-ui/public/shell.js +3 -0
- package/modules/hall-ui/public/street.html +2 -2
- package/modules/hall-ui/public/studio.html +2 -2
- package/modules/hall-ui/public/task.html +2 -2
- package/modules/hall-ui/public/thinking.html +2 -2
- package/modules/hall-ui/public/tweak-editor.html +2 -2
- package/modules/hall-ui/public/watch.html +2 -2
- package/modules/hall-ui/public/work.html +2 -2
- package/modules/hall-ui/records/market-watch-settings.md +11 -0
- package/modules/market-watch/module.json +3 -2
- package/modules/market-watch/routes/settings.js +128 -0
- package/modules/market-watch/settings.js +207 -0
- package/modules/provisioning/starter-bundles.js +11 -6
- package/modules/ui-design/kit/serve.js +1 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/bongos/module-store-cli.js +21 -21
- package/scripts/bongos/module.js +8 -8
- package/src/bongos/module-listing.js +47 -20
- package/src/bongos/module-scope-map.js +1 -0
- package/src/bongos/module-store.js +20 -12
- package/src/bongos/routes/modules.js +31 -21
- package/src/bongos/serve-internal.js +2 -2
- package/src/module-api.js +1 -1
- package/tests/hall_nav.mjs +4 -2
- package/tests/hall_page_gate_map.mjs +4 -0
- package/tests/market_watch_data_db.mjs +27 -0
- package/tests/market_watch_module.mjs +8 -4
- package/tests/market_watch_settings.mjs +392 -0
- package/tests/module_store_cli.mjs +14 -3
- package/tests/module_store_listing.mjs +65 -14
- package/tests/module_store_price.mjs +97 -26
- package/tests/module_store_registry_migration.mjs +11 -0
- package/tests/nav_permission_atoms.mjs +3 -2
|
@@ -3274,5 +3274,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
3274
3274
|
landed since 1.24.6 with no explicit bump. run 41030210485. (task 1002620)
|
|
3275
3275
|
1.24.8 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3276
3276
|
landed since 1.24.7 with no explicit bump. run 41031365595. (task 1002620)
|
|
3277
|
+
1.24.9 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3278
|
+
landed since 1.24.8 with no explicit bump. run 41035048464. (task 1002620)
|
|
3279
|
+
1.24.10 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3280
|
+
landed since 1.24.9 with no explicit bump. run 41037036590. (task 1002620)
|
|
3277
3281
|
---------------------------------------------------------------------------
|
|
3278
3282
|
```
|
package/docs/modules-contract.md
CHANGED
|
@@ -176,7 +176,7 @@ closed on every unknown, including a ledger read it cannot complete.
|
|
|
176
176
|
|
|
177
177
|
**Attribution (`author`/`origin`/`license`/`maintainer`) is portable metadata, not a cross-Bongos link** — each repo runs its own Bongos with its own builder identities ([ADR 0100](adr/0100-two-repo-instance-model.md) §3), so credit travels *with the module* rather than through a foreign key ([ADR 0107](adr/0107-module-upstreaming-contribution-to-core-catalog.md) §2). `bongos module new` stamps all four as TODO placeholders (license defaults to `AGPL-3.0`) so a module carries its authorship from the day it's scaffolded, not bolted on later at upstream-submit time.
|
|
178
178
|
|
|
179
|
-
**`bongos module store [--sort <part>] [--max-cents N] [--
|
|
179
|
+
**`bongos module store [--sort <part>] [--max-cents N] [--json]`** (task 1003811) is the **store** from the terminal: what the catalog lists, in its order — listed modules ranked, then New ones, unranked — with each module's score, price and place (parent, and sub-category once approved). It asks `GET /store/modules`, the same read the hall's "In the store" group makes, and filters, ranks and caps nothing itself: the quality floor, the ranking and the cap of ten per sub-category live only in `src/bongos/module-listing.js`, so the hall and the terminal cannot disagree about which modules are the best. `tests/module_store_cli.mjs` sends the same queries through the API and the CLI and requires the same modules in the same order.
|
|
180
180
|
|
|
181
181
|
**`bongos module list [--catalog] [--search <text>] [--json]`** ([ADR 0107](adr/0107-module-upstreaming-contribution-to-core-catalog.md) §2/§3, [ADR 0167](adr/0167-module-catalog-source-vs-provenance.md)) is the browsable catalog from the terminal: every module on disk with its enabled state, its author + origin credit, and its upkeep posture. `--catalog` narrows to the **core-shipped** modules — the shared catalog an instance opts into (§6, default-off). Two axes travel on each row and they are *not* the same question: **`source`** (which tree ships it — the core package or this instance's own repo, read structurally from the loader's discovery root, [ADR 0108](adr/0108-instance-composition-configurable-root.md) §1) and **`provenance`** (who built it, derived from the declared `origin`). A core module that declares no attribution is credited to the platform and the credit is **marked inferred** (`*`) rather than left blank or silently invented. The hall's Modules tab renders the same model (`src/module-loader/catalog.js`) via `GET /modules`, so the two surfaces cannot drift.
|
|
182
182
|
|
|
@@ -400,8 +400,8 @@ Run `bongos upgrade` to confirm coreVersion compatibility, then `node scripts/bo
|
|
|
400
400
|
- **Tester feedback** (task 1003806, ADR 0344 D5). While a version is on the tester channel, what tester projects report about it becomes its Tester feedback part: the share of testers whose install worked and who hit no runtime errors, blended with ten neutral testers so a small sample cannot score high — `round(100 × (went well + 5) / (testers + 10))`. Reports from after the version left the tester channel, and the author's own, never count; under 3 testers it is not scored yet. The rule is `assessTesterFeedback` in `scripts/bongos/module-assess-installs.js`.
|
|
401
401
|
- **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.
|
|
402
402
|
- **Sorting by a part** (task 1003800). `GET /store/modules?sort=<part>` orders the listed modules by one part a buyer cares about: `tests`, `install`, `reliability`, `tester_feedback` or `docs` (the response lists them as `sort_parts`, and says which one it applied as `sort`). Modules with a score for that part come first, highest first; a tie goes to the higher overall score, then the module key. A module with no score for that part goes last, so missing data never wins or loses a place on its own. New modules are not sorted: they are never ranked. Any other `sort` value is refused with a 400. Without `sort`, the listed modules are in the ranking below; New stays in key order. The rule is `sortByPart` in `src/bongos/module-listing.js`.
|
|
403
|
-
- **Setting a price** (task 1004894). A module's author sets its price with `bongos module price <key>
|
|
404
|
-
- **The ranking, and a maximum price** (task 1003808, owner decision 2026-10-23). Without `sort`, listed modules are ranked **quality first**: highest overall score first; between equal scores, free modules first, then the lowest cash price,
|
|
403
|
+
- **Setting a price** (task 1004894; cash only since task 1004989). A module's author sets its price with `bongos module price <key> --cents N` (or `--cents N` on `bongos module publish`, which sets the price right after the upload), or `POST /store/modules/:key/price { cents }` (the `module.submit` permission, the same one that publishes, and only the author passes; a delisted module takes no new price). The amount is a whole number of cents, 0 or more; 0 makes the module free. **Credits never price or buy a module** ([ADR 0385](adr/0385-money-lives-with-a-processor-credits-stay-a-project-meter.md) decision 2): the route refuses a `credits` field by name (`credit_price_refused`), the CLI refuses `--credits`, and `migrations/core_287_module_prices_cash_only.sql` refuses `price_credits` on any new row in the database (NOT VALID, so the old rows stay readable). An old row priced only in credits reads as **price coming** (`price.coming: true`): the module stays listed, is never buyable with credits, and its author sees `price_prompt` on `GET /store/modules/:key/listing` asking for a cash price (owner, 2026-10-29). An old row that offered the module at 0 credits stays free, as it was. Every change appends a row to the price history (in one transaction, the module row locked) naming who set it and when, so the history is the audit of what each price replaced, and the newest is current: it is what the catalog shows and what acquire charges. A paid price may be set before buying exists (owner, 2026-10-26): the catalog lists the module with its price and `buyable: false`, `bongos module store` prints it as not yet buyable, and acquire keeps refusing it without an entitlement. When buying ships (task 1003788), `BUYING_OPEN` in `src/bongos/module-listing.js` is the one switch to flip; a price-coming module stays unbuyable even then. Price is never an input to the score (ADR 0343 D6).
|
|
404
|
+
- **The ranking, and a maximum price** (task 1003808, owner decision 2026-10-23). Without `sort`, listed modules are ranked **quality first**: highest overall score first; between equal scores, free modules first, then the lowest cash price, a price still coming last, then the module key. Price never buys a better place, it only orders modules the score could not tell apart (and it is never an input to the score, ADR 0343 D6). The response states the rule as `ranking`, and each entry carries its current `price` (`cents`, `free`, `coming`) — never a credit amount. A buyer may add `?max_cents=` (a whole number, 0 or more): modules that cost more are left out of both lists, free modules always stay, and a module whose price is still coming has no cash price to compare, so a cap leaves it out. There is no credit cap; `?max_credits=` is refused. The applied cap comes back as `max_price`. The rules are `rankListed` and `withinMaxPrice` in `src/bongos/module-listing.js`.
|
|
405
405
|
- **The cap: at most ten per sub-category** (task 1003809, [ADR 0342](adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md) D2). Above the floor, at most **ten** modules are listed in each approved sub-category: the first ten in the ranking above, so a buyer's `sort` or maximum price reorders or narrows those ten but never lets the eleventh in. The cap is never applied to a parent. A module whose sub-category is only proposed is listed under its parent and counts toward no cap, and a New module is not ranked, so it neither takes a slot nor is held by one. The catalog returns the cap as `cap`. The rule is `applyCap` in `src/bongos/module-listing.js`.
|
|
406
406
|
- **Why a module is not listed** (task 1003810). `GET /store/modules/:key/listing` says where one module stands, judging the same newest version the catalog does: `listed` (true or false), a `reason` (`not_assessed`, `security_not_passed`, `no_score`, `below_floor`, `delisted`, `no_version`, `over_cap`, `new` or `at_or_above_floor`), `why` in a sentence and `next_step` saying what would change it. A failed Security gate is told apart from one that has not finished, and names what it found to the module's author only (to anyone else it would point at a weakness not fixed yet); below the floor names the score, the floor and the weakest parts. It carries the same `parts`, `strengths`, `weaknesses` and `unmeasured` as the catalog, plus `security`. Any signed-in builder can read it. Past the cap it is `over_cap`, which names the score, the module's place in its sub-category and the cap, so an author can tell being eleventh apart from being below the floor. Both responses carry the module's `category` (`parent`, `parent_title`, and `sub` and `label` once its sub-category is approved). The rule is `explainPlacement` in `src/bongos/module-listing.js`.
|
|
407
407
|
- **Sub-categories are approved before they count** (task 1004355, ADR 0342 D3). A module names `category: { parent, sub }` in `module.json`; `GET /store/subcategories` lists the approved ones under each of the eight parents. A `sub` the store has not seen under that parent is **proposed** at publish (labelled from its key) and the publish answer's `category` says so (`status: "proposed"`, `live: false`): until a Metic+ person decides, the module sits under its parent only and counts toward no cap. The review queue (`GET /store/subcategories/queue`, atom `module.subcategory.review`, metic + archon via `government_033`) shows each proposal with the modules that named it and its near-duplicate names; `POST /store/subcategories/:id/approve { label?, sub_key? }` makes it live, renamed first if asked (a rename onto an existing key is refused — merge instead), and `POST /store/subcategories/:id/merge { into }` folds it into an approved one and moves its modules there. A later publish naming a merged key lands on its target. Where a module sits is `store_module_categories` (core_278), apart from the manifest; `readModuleCategories` in `src/bongos/module-subcategories.js` is the read the cap uses.
|
package/docs/page-inventory.json
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
"An id changes only when the host prefix, the data-page value or the file name changes; that is a rename, and records keyed on the old id move with it."
|
|
11
11
|
],
|
|
12
12
|
"counts": {
|
|
13
|
-
"pages":
|
|
13
|
+
"pages": 50,
|
|
14
14
|
"surfaces": 3,
|
|
15
|
-
"with_states":
|
|
16
|
-
"states":
|
|
15
|
+
"with_states": 43,
|
|
16
|
+
"states": 371
|
|
17
17
|
},
|
|
18
18
|
"surfaces": [
|
|
19
19
|
{
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"at": "modules/hall-ui/public",
|
|
23
23
|
"answers_at": "host prefix builders.",
|
|
24
24
|
"origin": "https://builders.{apex}",
|
|
25
|
-
"pages":
|
|
25
|
+
"pages": 38
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"id": "landing",
|
|
@@ -783,6 +783,36 @@
|
|
|
783
783
|
"out"
|
|
784
784
|
]
|
|
785
785
|
},
|
|
786
|
+
{
|
|
787
|
+
"id": "builders:market-watch-settings",
|
|
788
|
+
"surface": "builders",
|
|
789
|
+
"module": "hall-ui",
|
|
790
|
+
"page": "market-watch-settings",
|
|
791
|
+
"id_from": "data-page",
|
|
792
|
+
"title": "Market Watch",
|
|
793
|
+
"document_title": "Market Watch settings — {{worldName}}",
|
|
794
|
+
"path": "/market-watch-settings",
|
|
795
|
+
"url": "https://builders.{apex}/market-watch-settings",
|
|
796
|
+
"files": [
|
|
797
|
+
"modules/hall-ui/public/market-watch-settings.html",
|
|
798
|
+
"modules/hall-ui/public/style.css",
|
|
799
|
+
"modules/hall-ui/public/market-watch-settings.css",
|
|
800
|
+
"modules/hall-ui/public/dom-utils.js",
|
|
801
|
+
"modules/hall-ui/public/shell-trail.js",
|
|
802
|
+
"modules/hall-ui/public/craft-mode.js",
|
|
803
|
+
"modules/hall-ui/public/shell.js",
|
|
804
|
+
"modules/hall-ui/public/palette.js",
|
|
805
|
+
"modules/hall-ui/public/hall-kit.js",
|
|
806
|
+
"modules/hall-ui/public/market-watch-settings.js"
|
|
807
|
+
],
|
|
808
|
+
"states_files": [
|
|
809
|
+
"modules/hall-ui/public/market-watch-settings.states.json"
|
|
810
|
+
],
|
|
811
|
+
"states": [
|
|
812
|
+
"gauge",
|
|
813
|
+
"out"
|
|
814
|
+
]
|
|
815
|
+
},
|
|
786
816
|
{
|
|
787
817
|
"id": "builders:modules",
|
|
788
818
|
"surface": "builders",
|