@bongos/core 1.21.150 → 1.21.152

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 (48) hide show
  1. package/.bongos-core.json +52 -52
  2. package/docs/copy-inventory.md +16 -16
  3. package/docs/copy-registry.json +16 -16
  4. package/docs/module-api-changelog.md +4 -0
  5. package/docs/modules-contract.md +29 -0
  6. package/docs/page-readings.json +27 -26
  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.js +16 -4
  18. package/modules/ideas/module.json +1 -0
  19. package/modules/lifecycle/module.json +1 -0
  20. package/modules/memory/module.json +1 -0
  21. package/modules/npm-release/module.json +1 -0
  22. package/modules/onboarding/module.json +1 -0
  23. package/modules/page-notes/module.json +1 -0
  24. package/modules/pixel-art/module.json +1 -0
  25. package/modules/platform-identity/module.json +1 -0
  26. package/modules/provisioning/module.json +1 -0
  27. package/modules/public-landing/module.json +1 -0
  28. package/modules/render-deploy/module.json +1 -0
  29. package/modules/security/module.json +1 -0
  30. package/modules/sessions/module.json +1 -0
  31. package/modules/specialities/module.json +1 -0
  32. package/modules/status-ui/module.json +1 -0
  33. package/modules/ui-design/module.json +1 -0
  34. package/package-lock.json +2 -2
  35. package/package.json +1 -1
  36. package/release-notes.json +12 -0
  37. package/scripts/gds/credential-presence.js +10 -0
  38. package/scripts/gds/module-test-runner/README.md +3 -3
  39. package/scripts/gds/module-test-runner/module-tests.yml +18 -6
  40. package/scripts/gds/module-test-runner.js +92 -36
  41. package/scripts/gds/module.js +4 -2
  42. package/src/module-api.js +1 -1
  43. package/src/module-loader/catalog.js +15 -1
  44. package/src/module-loader/manifest-schema.js +40 -1
  45. package/tests/hall_catalog_world.mjs +4 -1
  46. package/tests/module_catalog.mjs +34 -0
  47. package/tests/module_manifest.mjs +36 -0
  48. package/tests/module_test_runner.mjs +70 -17
@@ -5200,7 +5200,7 @@
5200
5200
  "surface": "builders-hall",
5201
5201
  "text": "Could not load modules.",
5202
5202
  "file": "modules/hall-ui/public/modules.js",
5203
- "line": 361,
5203
+ "line": 373,
5204
5204
  "origin": "js-notice",
5205
5205
  "confidence": "certain"
5206
5206
  },
@@ -5389,7 +5389,7 @@
5389
5389
  "surface": "builders-hall",
5390
5390
  "text": "Could not reach the submit endpoint.",
5391
5391
  "file": "modules/hall-ui/public/modules.js",
5392
- "line": 340,
5392
+ "line": 352,
5393
5393
  "origin": "js-notice",
5394
5394
  "confidence": "certain"
5395
5395
  },
@@ -9277,7 +9277,7 @@
9277
9277
  "surface": "builders-hall",
9278
9278
  "text": "No maintenance declared — nobody is on the hook for this module as the core advances.",
9279
9279
  "file": "modules/hall-ui/public/modules.js",
9280
- "line": 92,
9280
+ "line": 104,
9281
9281
  "origin": "js-markup",
9282
9282
  "confidence": "certain"
9283
9283
  },
@@ -9655,7 +9655,7 @@
9655
9655
  "surface": "builders-hall",
9656
9656
  "text": "Not declared in module.json — this is who ships the module.",
9657
9657
  "file": "modules/hall-ui/public/modules.js",
9658
- "line": 62,
9658
+ "line": 63,
9659
9659
  "origin": "js-markup",
9660
9660
  "confidence": "certain"
9661
9661
  },
@@ -9988,7 +9988,7 @@
9988
9988
  "surface": "builders-hall",
9989
9989
  "text": "Nothing to submit — every module here ships with the core.",
9990
9990
  "file": "modules/hall-ui/public/modules.js",
9991
- "line": 301,
9991
+ "line": 313,
9992
9992
  "origin": "js-text-assign",
9993
9993
  "confidence": "certain"
9994
9994
  },
@@ -13165,7 +13165,7 @@
13165
13165
  "surface": "builders-hall",
13166
13166
  "text": "Taken out of the store. Your copy keeps working, but it will get no more updates.",
13167
13167
  "file": "modules/hall-ui/public/modules.js",
13168
- "line": 113,
13168
+ "line": 125,
13169
13169
  "origin": "js-markup",
13170
13170
  "confidence": "certain"
13171
13171
  },
@@ -16792,7 +16792,7 @@
16792
16792
  "surface": "builders-hall",
16793
16793
  "text": "built here",
16794
16794
  "file": "modules/hall-ui/public/modules.js",
16795
- "line": 53,
16795
+ "line": 54,
16796
16796
  "origin": "js-markup",
16797
16797
  "confidence": "certain"
16798
16798
  },
@@ -16972,7 +16972,7 @@
16972
16972
  "surface": "builders-hall",
16973
16973
  "text": "delisted · no more updates",
16974
16974
  "file": "modules/hall-ui/public/modules.js",
16975
- "line": 113,
16975
+ "line": 125,
16976
16976
  "origin": "js-markup",
16977
16977
  "confidence": "certain"
16978
16978
  },
@@ -18061,7 +18061,7 @@
18061
18061
  "surface": "builders-hall",
18062
18062
  "text": "restart it",
18063
18063
  "file": "modules/hall-ui/public/modules.js",
18064
- "line": 129,
18064
+ "line": 141,
18065
18065
  "origin": "js-markup",
18066
18066
  "confidence": "certain"
18067
18067
  },
@@ -18277,7 +18277,7 @@
18277
18277
  "surface": "builders-hall",
18278
18278
  "text": "submit for review",
18279
18279
  "file": "modules/hall-ui/public/modules.js",
18280
- "line": 175,
18280
+ "line": 187,
18281
18281
  "origin": "js-markup",
18282
18282
  "confidence": "certain"
18283
18283
  },
@@ -18808,7 +18808,7 @@
18808
18808
  "surface": "builders-hall",
18809
18809
  "text": "upkeep undeclared",
18810
18810
  "file": "modules/hall-ui/public/modules.js",
18811
- "line": 92,
18811
+ "line": 104,
18812
18812
  "origin": "js-markup",
18813
18813
  "confidence": "certain"
18814
18814
  },
@@ -18889,7 +18889,7 @@
18889
18889
  "surface": "builders-hall",
18890
18890
  "text": "waits for a restart",
18891
18891
  "file": "modules/hall-ui/public/modules.js",
18892
- "line": 127,
18892
+ "line": 139,
18893
18893
  "origin": "js-markup",
18894
18894
  "confidence": "certain"
18895
18895
  },
@@ -19204,7 +19204,7 @@
19204
19204
  "surface": "builders-hall",
19205
19205
  "text": "{…} and above can enable or disable a module",
19206
19206
  "file": "modules/hall-ui/public/modules.js",
19207
- "line": 173,
19207
+ "line": 185,
19208
19208
  "origin": "js-markup",
19209
19209
  "confidence": "certain"
19210
19210
  },
@@ -19555,7 +19555,7 @@
19555
19555
  "surface": "builders-hall",
19556
19556
  "text": "{…} {…} — how-to",
19557
19557
  "file": "modules/hall-ui/public/modules.js",
19558
- "line": 416,
19558
+ "line": 428,
19559
19559
  "origin": "js-text-assign",
19560
19560
  "confidence": "certain"
19561
19561
  },
@@ -19627,7 +19627,7 @@
19627
19627
  "surface": "builders-hall",
19628
19628
  "text": "{…} — how to use it",
19629
19629
  "file": "modules/hall-ui/public/modules.js",
19630
- "line": 418,
19630
+ "line": 430,
19631
19631
  "origin": "js-text-assign",
19632
19632
  "confidence": "certain"
19633
19633
  },
@@ -19762,7 +19762,7 @@
19762
19762
  "surface": "builders-hall",
19763
19763
  "text": "· version",
19764
19764
  "file": "modules/hall-ui/public/modules.js",
19765
- "line": 421,
19765
+ "line": 433,
19766
19766
  "origin": "js-markup",
19767
19767
  "confidence": "certain"
19768
19768
  },
@@ -3137,5 +3137,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
3137
3137
  landed since 1.21.148 with no explicit bump. run 39329687123. (task 1002620)
3138
3138
  1.21.150 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3139
3139
  landed since 1.21.149 with no explicit bump. run 39331860470. (task 1002620)
3140
+ 1.21.151 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
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)
3140
3144
  ---------------------------------------------------------------------------
3141
3145
  ```
@@ -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
@@ -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":46,"lines":5554,"placed":1701,"shared":398,"unplaced":3455,"omitted_data":3576},
8
+ "counts": {"pages":46,"lines":5555,"placed":1702,"shared":398,"unplaced":3455,"omitted_data":3591},
9
9
  "pages": [
10
10
  {
11
11
  "id": "builders:atlas",
@@ -1885,10 +1885,10 @@
1885
1885
  "surface": "builders",
1886
1886
  "title": "Modules",
1887
1887
  "states_read": ["browse","search-empty","lens","details","out"],
1888
- "files_hash": "cb3129f7cdb72342",
1889
- "reading_hash": "e37d27e205c7ba63",
1890
- "counts": {"lines":48,"placed":19,"shared":8,"unplaced":21},
1891
- "omitted": {"data":76},
1888
+ "files_hash": "e878f38787714158",
1889
+ "reading_hash": "819811b4ef5cfa9a",
1890
+ "counts": {"lines":49,"placed":20,"shared":8,"unplaced":21},
1891
+ "omitted": {"data":91},
1892
1892
  "notes": ["details: an action failed (page.click: Timeout 6000ms exceeded.); read as it stood"],
1893
1893
  "lines": [
1894
1894
  {"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/hall-ui/public/shell.js","line":872,"string_id":"87cee78ca134"},
@@ -1912,33 +1912,34 @@
1912
1912
  {"key":"L0019","section":"Module catalog","text":"modules","placement":"unplaced"},
1913
1913
  {"key":"L0020","section":"Module catalog","text":"16 from the {…}","placement":"unplaced"},
1914
1914
  {"key":"L0021","section":"Module catalog","text":"of {…}","placement":"placed","file":"modules/hall-ui/public/roadmap.js","line":341,"string_id":"5e7a2220c6a9"},
1915
- {"key":"L0022","section":"Module catalog","text":"built here","placement":"placed","file":"modules/hall-ui/public/modules.js","line":53,"string_id":"a87a3c30b1b5","occurrences":17},
1915
+ {"key":"L0022","section":"Module catalog","text":"built here","placement":"placed","file":"modules/hall-ui/public/modules.js","line":54,"string_id":"a87a3c30b1b5","occurrences":17},
1916
1916
  {"key":"L0023","section":"Module catalog","text":"can go upstream","placement":"unplaced"},
1917
1917
  {"key":"L0024","section":"Module catalog","text":"no upkeep","placement":"unplaced"},
1918
1918
  {"key":"L0025","section":"Module catalog","text":"every module owned","placement":"unplaced"},
1919
1919
  {"key":"L0026","section":"Module catalog","text":"Shipped with the core","placement":"placed","file":"modules/hall-ui/public/modules.html","line":59,"string_id":"b94a6b5b3d8c"},
1920
1920
  {"key":"L0027","section":"Module catalog","text":"No catalog module matches that {…}.","placement":"unplaced","state":"search-empty"},
1921
1921
  {"key":"L0028","section":"Module catalog","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":12},
1922
- {"key":"L0029","section":"Module catalog","text":"by","placement":"unplaced","occurrences":17},
1923
- {"key":"L0030","section":"Module catalog","text":"upkeep","placement":"unplaced","occurrences":17},
1924
- {"key":"L0031","section":"Module catalog","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":3},
1925
- {"key":"L0032","section":"Module catalog","text":"from","placement":"unplaced","occurrences":2},
1926
- {"key":"L0033","section":"Module catalog","text":"{…}-loaded","placement":"unplaced"},
1927
- {"key":"L0034","section":"Module catalog","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07"},
1928
- {"key":"L0035","section":"Module catalog","text":"sessions","placement":"placed","file":"modules/hall-ui/public/task.js","line":467,"string_id":"732b4c935e36"},
1929
- {"key":"L0036","section":"Module catalog","text":"Built by this project","placement":"placed","file":"modules/hall-ui/public/modules.html","line":70,"string_id":"b51edc826cbe"},
1930
- {"key":"L0037","section":"Module catalog","text":"submit for review","placement":"placed","file":"modules/hall-ui/public/modules.js","line":175,"string_id":"0215b2cdca8c"},
1931
- {"key":"L0038","section":"Module catalog","text":"A module built here can be submitted upstream for review, so it can join the shared catalog with your name and this project credited.","placement":"placed","file":"modules/hall-ui/public/modules.html","line":74,"string_id":"2e17d7e236d9"},
1932
- {"key":"L0039","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":520,"string_id":"1883ad7f07fc"},
1933
- {"key":"L0040","section":"Module catalog","text":"Builders hall · this session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":810,"string_id":"fd1903586e8e"},
1934
- {"key":"L0041","section":"What are you doing now?","text":"What are you doing now?","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":811,"string_id":"60853319f290"},
1935
- {"key":"L0042","section":"What are you doing now?","text":"Pick one. You can switch any time from the top bar.","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":812,"string_id":"4f87d5b17b54"},
1936
- {"key":"L0043","section":"What are you doing now?","text":"Building","placement":"unplaced"},
1937
- {"key":"L0044","section":"What are you doing now?","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":3},
1938
- {"key":"L0045","section":"What are you doing now?","text":"Artistry","placement":"unplaced"},
1939
- {"key":"L0046","section":"What are you doing now?","text":"Ideating","placement":"unplaced"},
1940
- {"key":"L0047","section":"What are you doing now?","text":"Turn thoughts into {…}.","placement":"unplaced"},
1941
- {"key":"L0048","section":"What are you doing now?","text":"Ask me again next session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":815,"string_id":"fa86bf403775"}
1922
+ {"key":"L0029","section":"Module catalog","text":"in","placement":"placed","file":"modules/hall-ui/public/settings-specialities.js","line":130,"string_id":"4b0ca7d7171f","occurrences":15},
1923
+ {"key":"L0030","section":"Module catalog","text":"by","placement":"unplaced","occurrences":17},
1924
+ {"key":"L0031","section":"Module catalog","text":"upkeep","placement":"unplaced","occurrences":17},
1925
+ {"key":"L0032","section":"Module catalog","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":3},
1926
+ {"key":"L0033","section":"Module catalog","text":"from","placement":"unplaced","occurrences":2},
1927
+ {"key":"L0034","section":"Module catalog","text":"{…}-loaded","placement":"unplaced"},
1928
+ {"key":"L0035","section":"Module catalog","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07"},
1929
+ {"key":"L0036","section":"Module catalog","text":"sessions","placement":"placed","file":"modules/hall-ui/public/task.js","line":467,"string_id":"732b4c935e36"},
1930
+ {"key":"L0037","section":"Module catalog","text":"Built by this project","placement":"placed","file":"modules/hall-ui/public/modules.html","line":70,"string_id":"b51edc826cbe"},
1931
+ {"key":"L0038","section":"Module catalog","text":"submit for review","placement":"placed","file":"modules/hall-ui/public/modules.js","line":187,"string_id":"0215b2cdca8c"},
1932
+ {"key":"L0039","section":"Module catalog","text":"A module built here can be submitted upstream for review, so it can join the shared catalog with your name and this project credited.","placement":"placed","file":"modules/hall-ui/public/modules.html","line":74,"string_id":"2e17d7e236d9"},
1933
+ {"key":"L0040","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":520,"string_id":"1883ad7f07fc"},
1934
+ {"key":"L0041","section":"Module catalog","text":"Builders hall · this session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":810,"string_id":"fd1903586e8e"},
1935
+ {"key":"L0042","section":"What are you doing now?","text":"What are you doing now?","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":811,"string_id":"60853319f290"},
1936
+ {"key":"L0043","section":"What are you doing now?","text":"Pick one. You can switch any time from the top bar.","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":812,"string_id":"4f87d5b17b54"},
1937
+ {"key":"L0044","section":"What are you doing now?","text":"Building","placement":"unplaced"},
1938
+ {"key":"L0045","section":"What are you doing now?","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":3},
1939
+ {"key":"L0046","section":"What are you doing now?","text":"Artistry","placement":"unplaced"},
1940
+ {"key":"L0047","section":"What are you doing now?","text":"Ideating","placement":"unplaced"},
1941
+ {"key":"L0048","section":"What are you doing now?","text":"Turn thoughts into {…}.","placement":"unplaced"},
1942
+ {"key":"L0049","section":"What are you doing now?","text":"Ask me again next session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":815,"string_id":"fa86bf403775"}
1942
1943
  ]
1943
1944
  },
1944
1945
  {
@@ -4,6 +4,7 @@
4
4
  "description": "Declarative agent definitions (.claude/agents/*.md) reconciled at deploy into a DB-backed registry (agents_definitions) plus a per-fire ledger (agents_runs) — BONGOS-V1 goal 1000038, Phase 1. Files-are-source: agents-sync upserts file-sourced definitions and never clobbers an instance-authored db row, and stamps author_rank from the author's LIVE DB rank because a committed file cannot grant authority (ADR 0016). Spawns consume the EXISTING `grade` port (runSubagentCached), which is fixed read-only, so v1 agents are observe-and-report only — no write principals — and every fire bills through the shared LLM cost cache. default:false: shipped is not enabled, and an instance opts in per ADR 0083. spend.requiresPayer (task 1003884): a fire spends real money for whoever called it (~$0.90, and POST /agents/:name/invoke answers 202 without waiting), so the core refuses to ENABLE this module on an instance whose join door is `open` with no payer configured — an account created seconds ago would otherwise spend the instance's money with nobody to bill. Every run then records its payer beside cost_usd (agents_002_payer.sql) and a per-payer monthly ceiling fails closed when it is exhausted OR unreadable (lib/spend-ceiling.js) — distinct from lib/fire-budget.js, which stays a rate ceiling.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "work" },
7
8
  "default": false,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["agents"], "pollers": ["event-router"], "migrations": true },
@@ -4,6 +4,7 @@
4
4
  "description": "The Multi-Agent System's autonomy surfaces (ADR 0024): the $0 deterministic autonomy gate (System 3 — a precheck route + the gate CLI, inert until OTB_AUTONOMY_ENABLED=1), the conductor mid-flight dispatch CLI (Phase 4), the Architect bounded first-principles --scope audit CLI (Phase 5), and the in-process routine timers (System 4 / ADR 0078 amendment — the weekly peer-vote-tally poller). A core-domain module carved out of the GDS core in BV1.R83 (ADR 0093 §1); default-on because the autonomy machinery + the durable routine timer ship to every instance (both are inert/no-op until armed or the pool is reachable). Cross-cutting: it OBSERVES lifecycle events. The routine timer reaches the lifecycle `tallyPeerVotes` capability through the published doorway (a tracked lifecycle leak until R86), never a core require; the precheck route + the gate/conductor/architect CLIs travel with this domain (the CLIs stay under scripts/, outside the kernel boundary, so they may still read the ideas/economy/lifecycle signals + the grader directly). Registers no port — core never calls back in.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.11.0",
7
+ "category": { "parent": "work" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": {
@@ -4,6 +4,7 @@
4
4
  "description": "The per-builder PREFERENCE domain — the wandering knob (how readily the agent opens off-task threads, rank-clamped), per-skill model ceilings, per-sound + per-event-sound on/off, and the render-widgets toggle — plus builder-needs (the 'the system needs an input from you' list). A core-domain module carved out of the GDS core in BV1.R80 (ADR 0093 §1); default-on because every instance configures its own builders. The `/me/*-prefs` routes mount here; the `GET /me` aggregator stays a thin core facade that resolves the `builder-settings` kernel PORT for its wandering/render/needs slices (02-module-map §2).",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.8.0",
7
+ "category": { "parent": "people" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["settings"] },
@@ -4,6 +4,7 @@
4
4
  "description": "The COPY half of the design contract (goal 1000074, the artist's loop). Named for the editorial desk copy passes over before it is published — which is exactly the job, and which keeps the module key off the generic word 'copy' that the branding contract already owns (branding.copy.tagline/hallName/notFound). ADR 0081 made the repo the source of truth for design TOKENS and component surfaces; there was no equivalent for user-facing TEXT. This module owns that half: the FLAG — anyone, in any role, marks a string or a whole surface as needing an artist's attention, with a required reason — and the QUEUE an artist reads it from. The inventory a flag points at is the committed registry docs/copy-registry.json, generated by scripts/gds/copy-inventory.js (R01); this module reads it and never writes it. R03 (task 1003114) added the PROPOSAL: an artist writes the replacement wording and it becomes a GDS task carrying a patch, which scripts/gds/copy-apply.js lands as a real diff under a claim — the design half's adapter.export() contract (ADR 0081) applied to text. NO LIVE CMS is the goal's hard non-goal: nothing here can change a rendered string. A flag is a work request; a proposal is a work request with a suggested fix; the fix ships as a claimed, graded GDS task like every other change. default-on — every instance shows a person words, so every instance can flag them.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.8.0",
7
+ "category": { "parent": "quality" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["copy-desk", "copy-desk-artist"], "migrations": true, "skills": ["tweak"] },
@@ -4,6 +4,7 @@
4
4
  "description": "The thirteen design-STYLE skills split out of ui-design (task 1004470, owner ruling on blocker 1000139): the taste core (design-taste-frontend, high-end-visual-design, redesign-existing-projects), the impeccable craft method, the /style session, the four looks (minimalist-ui, industrial-brutalist-ui, gpt-taste, stitch-design-taste) and the image family (image-to-code, imagegen-frontend-web, imagegen-frontend-mobile, brandkit). Every one is an in-house rebuild or a first-party original (ADR 0220, ADR 0231), carrying the PLATFORM PREAMBLE from skills/PREAMBLE.md and governed by the vendoring policy in skills/policy.json (ADR 0198). ui-design keeps the method every instance needs — /design, the two sync skills, the contract, the kit and the style library (modules/ui-design/styles/, which these skills name as their palette source) — and stays default-on; these are opt-in because their descriptions alone are ~5,000 chars resident in every session. /design names them when this module is on and says plainly that they are off when it is not. Declaration-only: no routes, no migrations, no port.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "pages" },
7
8
  "default": false,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "skills": ["design-taste-frontend", "high-end-visual-design", "redesign-existing-projects", "impeccable", "style", "minimalist-ui", "industrial-brutalist-ui", "gpt-taste", "stitch-design-taste", "image-to-code", "imagegen-frontend-web", "imagegen-frontend-mobile", "brandkit"] },
@@ -4,6 +4,7 @@
4
4
  "description": "Outbound ship broadcast + the inbound #ideas/#bugs bot + the #support answerer + role-sync + channel management + account-link state. Mirror only, never authority (ADR 0033).",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.4.0",
7
+ "category": { "parent": "communication" },
7
8
  "default": false,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": {
@@ -4,6 +4,7 @@
4
4
  "description": "Credit allocation (the cost-plus + kind-multiplier reward model), the cost ledger + dashboard rollups, builder streaks, achievements/gamification, and the leaderboard. A core-domain module carved out of the GDS core in BV1.R77 (ADR 0093 §1-2); default-on because every instance rewards its own builders. Registers the `reward` kernel PORT the lifecycle resolves at confirm/ship/claim time.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.7.0",
7
+ "category": { "parent": "money" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["cost", "credits", "earnings", "leaderboard", "reward"] },
@@ -4,6 +4,7 @@
4
4
  "description": "Discord-style configurable ranks and permissions (ADR 0151, BONGOS-V1 goal 1000030; renamed governance\u2192government by ADR 0174). Permissions are the atomic authority unit and the four ranks (xenos/thetes/metic/archon) are the positions in the government; this module owns the code-defined permission catalog (each key flagged `system` = trust-boundary, `substrate` = enforced out of band, or operational = delegable) plus the compatibility seed that reproduces the rank thresholds exactly. A core-domain module, default-on: a Cloud Bongos instance ships configurable ranks the way it ships its status page. The word `role` is deliberately absent here \u2014 it is reserved for the three crafts (Artist, Ideator, Builder). Preserves ADR 0016 (authority resolved server-side, per request, uncached).",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.18.0",
7
+ "category": { "parent": "people" },
7
8
  "default": true,
8
9
  "maintenance": {
9
10
  "status": "core-maintained"
@@ -4,6 +4,7 @@
4
4
  "description": "The grade-a-diff adversarial worker panel (Narc/Quality/Hacker/Efficiency) + deterministic route-rank/permission-path pre-passes + the scoring rubric. A core-domain module carved out of the GDS core in BV1.R73 (ADR 0091); default-on because every instance grades its own ships. Registers the `grade` kernel PORT the lifecycle resolves at confirm/ship time.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.6.0",
7
+ "category": { "parent": "quality" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": {
@@ -4,6 +4,7 @@
4
4
  "description": "The authenticated builders' hall served at builders.<apex> (builders.example.com) — the roster, work board, standing/karma, leaderboard, achievements, primer, system maps, settings, and the Archon-only watch/gate pages, all polling /api/bongos/* and the read-only /api/bongos/public/* surface. The largest WEB-SURFACE core-domain module (~13k LOC), carved out of the GDS core in BV1.R85 (ADR 0093 §1; 02-module-map §6). default-on: a Cloud Bongos instance ships its hall like it ships its status page. Registers no port and contributes no routes — it declares a webSurface (host prefix + static dir). Unlike the generic status surface, the hall keeps its dedicated serving block in serve-internal.js (the builders.<apex> + apex /builders/* shim, canonical redirects, the citizen/Archon page gates, asset-stamping, and the module hall-widget injection) — the webSurfaces declaration is the discovery + scope-map + window.__MODULES__ record; serve-internal serves it from this module's public/ dir with that richer machinery. The me/public/leaderboard read endpoints it renders stay SHARED core in routes/{me,public,builders}.js (the status surface + the off-box mirror read them too).",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.11.0",
7
+ "category": { "parent": "pages" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": {
@@ -3,8 +3,9 @@
3
3
  // ADR 0107 §9 (task 1776) + §2/§3 the browsable catalog (task 1001772);
4
4
  // redesigned onto the oversight family's row in task 1003472. Jobs:
5
5
  // 1. BROWSE the catalog — every module the core ships that this instance can
6
- // enable, each with its author + origin credit, filterable by one search
7
- // over name/author/origin/licence and a state lens. Split from the
6
+ // enable, each with its author + origin credit and its category (ADR 0342),
7
+ // filterable by one search over name/author/origin/licence/category and a
8
+ // state lens. Split from the
8
9
  // instance's OWN modules by `source` (which TREE it ships from — the core
9
10
  // package or this repo), which GET /api/bongos/modules reads structurally
10
11
  // off the loader's discovery roots. That is a different axis from
@@ -73,7 +74,8 @@
73
74
  function matchesQuery(m, q) {
74
75
  if (!q) return true;
75
76
  const credit = m.credit || {};
76
- return [m.key, m.title, m.description, credit.author, credit.origin, m.license]
77
+ const cat = m.category || {};
78
+ return [m.key, m.title, m.description, credit.author, credit.origin, m.license, cat.parentTitle, cat.sub]
77
79
  .some((f) => f && String(f).toLowerCase().includes(q));
78
80
  }
79
81
  function matchesLens(m) {
@@ -82,6 +84,16 @@
82
84
  return true;
83
85
  }
84
86
 
87
+ // Where the module is browsed (ADR 0342): the parent's label, and the
88
+ // sub-category once one is approved. The label comes from the server's row
89
+ // (catalog.js), so the hall keeps no copy of the parent list.
90
+ function categoryFact(m) {
91
+ const c = m.category;
92
+ if (!c || !c.parentTitle) return '';
93
+ const sub = c.sub ? ` · ${escapeHtml(c.sub)}` : '';
94
+ return `<span class="ov-fact">in <b>${escapeHtml(c.parentTitle)}</b>${sub}</span>`;
95
+ }
96
+
85
97
  // Upkeep posture (ADR 0107 §7 / ADR 0166) — who keeps this module true as the
86
98
  // core advances. Colour marks the EXCEPTION: an unowned entry is the thing the
87
99
  // policy exists to catch, so it is the warn pill; a maintained one is a plain
@@ -185,7 +197,7 @@
185
197
  <div class="ov-row__main">
186
198
  <span class="ov-row__title">${escapeHtml(m.title || m.key)}<span class="ov-mono">${escapeHtml(m.key)}</span></span>
187
199
  ${desc ? `<p class="ov-row__sub mod-row__desc">${escapeHtml(desc)}</p>` : ''}
188
- <div class="ov-row__facts">${provenancePill(m)}${attributionFacts(m)}${upkeepFact(m)}${howtoFact(m)}${delistedFact(m)}${restartFact(m)}</div>
200
+ <div class="ov-row__facts">${provenancePill(m)}${categoryFact(m)}${attributionFacts(m)}${upkeepFact(m)}${howtoFact(m)}${delistedFact(m)}${restartFact(m)}</div>
189
201
  ${lines ? `<details class="mod-more"${openKeys.has(m.key) ? ' open' : ''}><summary aria-label="Details for ${escapeHtml(m.title || m.key)}"></summary>${lines}</details>` : ''}
190
202
  </div>
191
203
  <div class="ov-row__right mod-row__right">${rightHtml(m)}</div>
@@ -4,6 +4,7 @@
4
4
  "description": "The idea inbox (capture, triage, criterion-proposal ratification) and the blockers queue — the methodology surfaces that feed the backlog. A core-domain module carved out of the GDS core in BV1.R78 (ADR 0093 §1); default-on because every instance captures ideas and tracks what's stuck on its owner. Registers the `ideas.capture` kernel PORT the discord #ideas inbound resolves (ADR 0093 §5 — retiring the temporary `captureIdea` doorway leak).",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.8.0",
7
+ "category": { "parent": "work" },
7
8
  "default": true,
8
9
  "maintenance": {
9
10
  "status": "core-maintained"
@@ -4,6 +4,7 @@
4
4
  "description": "The build state machine \u2014 tasks \u00b7 claims \u00b7 versions \u00b7 done-when criteria \u00b7 goals \u00b7 dependencies \u00b7 the claim\u2192ship\u2192grade\u2192credit lifecycle \u00b7 override requests \u00b7 the ship/confirm/promote orchestration \u00b7 github-push + merge-lease + conflict-resolve + the publish reconciler. The LAST and most-coupled core domain carved out of the GDS core in BV1.R86 (ADR 0093 \u00a71,\u00a73, 02-module-map \u00a74 \u2014 kept whole, never split). default-on; every instance runs the lifecycle. Registers the `lifecycle` kernel PORT (createTask \u00b7 VOTABLE_TASK_STATUSES \u00b7 classifyTaskKind \u00b7 tallyPeerVotes + the work-tracking reads) that core read routes + the ideas/discord/autonomy modules resolve. As a transaction-participant it RESOLVES the `reward` + `onboarding` ports inside its claim/ship/confirm txns \u2014 but via resolveOptional (graceful, like sessions\u2192reward), so consumes is empty: a vanilla instance without those modules degrades the credit/onboarding writes to best-effort no-ops, it does not fail.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.12.0",
7
+ "category": { "parent": "work" },
7
8
  "default": true,
8
9
  "maintenance": {
9
10
  "status": "core-maintained"
@@ -4,6 +4,7 @@
4
4
  "description": "Per-builder session memory, the lexical recall/search retrieval layer (ADR 0060), and durable learnings. A core-domain module carved out of the GDS core in BV1.R72 (ADR 0091); default-on because every instance needs the build system's memory.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.5.0",
7
+ "category": { "parent": "knowledge" },
7
8
  "default": true,
8
9
  "maintenance": {
9
10
  "status": "core-maintained"
@@ -4,6 +4,7 @@
4
4
  "description": "The deploy page for a project that publishes an npm package from its GitHub repo — where every recently shipped task has got to (not merged, merged, in a version, live, released) and each version's list of work, read from the release notes the package itself carries (task 1002622) — and the same line on a task's own page (task 1004301). Built for the Bongos hall, which publishes @bongos/core; off everywhere else.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "hosting" },
7
8
  "default": false,
8
9
  "author": "Cloud Bongos",
9
10
  "origin": "Cloud Bongos core",
@@ -4,6 +4,7 @@
4
4
  "description": "The newcomer ADMISSION + ORIENTATION domain — the public access-request → Archon-approval gate, the server-ticked onboarding state machine (the 'Path into the City' checklist that graduates a Xenos to Thetes), the friction analyzer (feedback-without-asking on consented onboarding transcripts), and the evergreen newcomer-chore restock (a fresh first-builder task is always waiting). A core-domain module carved out of the GDS core in BV1.R81 (ADR 0093 §1); default-on because every instance onboards its own builders. The access-requests admission routes mount here; the core lifecycle (db.js claim/ship), auth callbacks, and the me/builders profile readers resolve the `onboarding` kernel PORT for the state-machine + restock surface they need — never importing the module.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.532",
7
+ "category": { "parent": "people" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["onboarding"], "migrations": true },
@@ -4,6 +4,7 @@
4
4
  "description": "An artist's feedback doc on one hall page (task 1004496, goal 1000095 WA6). In Artistry mode the palette button opens a doc for the page you are on: as long as it needs to be, with uploaded reference images (PNG, JPG, GIF, WebP, up to 4 MB, eight per doc). On submit an AI splits it into separate ideas in the idea inbox, each attributed to the artist and linking back to the doc, and the doc stays as the page's design reference, readable from the page (?note=N) and from every idea it became. Owner decisions 2026-10-04: an AI splits it; images only. Kept apart from the copy desk on purpose: that module may hold no wording, and a feedback doc is wording about a page (not of it). default-on, like the copy desk: every instance has pages an artist can comment on.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "pages" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "migrations": true,
@@ -4,6 +4,7 @@
4
4
  "description": "The five pixel-art SKILLS an instance with a pixel-art world turns on: otb-tile-generate, otb-design-review, otb-character-review, otb-feedback-capture and otb-figma-sync (task 1004470, owner ruling on blocker 1000139). They were orphans in the core's .claude/skills/: docs attributed them to art-pipeline / character-anim, neither of which has a module.json (ADR 0272), and modules/art-pipeline/ never publishes because it carries copyrighted reference maps (ADR 0098). This module carries ONLY the skill text, never a reference map, a palette, a rubric or the generation pipeline — those stay with the instance's own art-pipeline host module, which the skills read at their documented paths. default: false because most instances have no pixel-art world, and every skill description is resident in every session whether it is used or not. Declaration-only: no routes, no migrations, no port, so turning it off withdraws only these skills.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "pages" },
7
8
  "default": false,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "skills": ["otb-tile-generate", "otb-design-review", "otb-character-review", "otb-feedback-capture", "otb-figma-sync"] },
@@ -4,6 +4,7 @@
4
4
  "description": "The Cloud Bongos hub identity-provider surface (ADR 0141): platform accounts, an SSO client registry, and an OAuth authorization-code login handoff so one platform account reaches any hosted project's builders hall with no second GitHub sign-in. Identity ONLY — the hub never mints or carries rank/credits/admission (the ADR 0016 trust boundary). Enabled ONLY on the hub instance (cloudbongos.com); ordinary hosted + self-hosted instances leave it off, so it adds zero attack surface for the common case.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.14.0",
7
+ "category": { "parent": "people" },
7
8
  "default": false,
8
9
  "author": "Cloud Bongos",
9
10
  "origin": "Cloud Bongos platform (cloudbongos.com)",
@@ -4,6 +4,7 @@
4
4
  "description": "Stand up + operate a Cloud Bongos instance's own infrastructure (server, database, domain, DNS, TLS) via the API, so an owner does not manage infra by hand (ADR 0111). Owns the web-tier REQUEST + STATE surface only: it enqueues provisioning intents + reads instance state — it holds NO cloud-provider tokens and calls NO cloud API. A separate control-plane runner (scripts/gds/provision.js, task P3) is the sole token-holder that drains the intents. Distinct from the `hosting` module (ADR 0092), which brokers compute WORKLOADS.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.14.0",
7
+ "category": { "parent": "hosting" },
7
8
  "default": false,
8
9
  "author": "Cloud Bongos",
9
10
  "origin": "Cloud Bongos core",
@@ -4,6 +4,7 @@
4
4
  "description": "The instance's public front door served at the APEX ROOT — the landing page (/), the projects hub (/projects, and the /create redirect into its ?view=new wizard), the three footer doors (/privacy, /terms, /contact) and every asset behind them. The third WEB-SURFACE core-domain module after status-ui (BV1.R84) and hall-ui (BV1.R85), carved in task 1003322 (ADR 0218; named in ADR 0197 §8 — the front door keeps its own key, because a customer of the ui-design capability is not part of it). default-on: an instance ships its front door like it ships its hall. Registers no port and contributes no routes — it declares a webSurface, and where hall-ui and status-ui name a Host PREFIX this one declares apexRoot:true, since the apex is whatever host is left once the subdomains are taken (ADR 0218 §2; host:\"\" is rejected, because every host string startsWith \"\"). Like the hall, the declaration is the discovery + scope-map + window.__MODULES__ record: the bytes are served by platform-server.js's dedicated landing block, which keeps the apex-only sentinel strip, the branding-token stamp and the ?v= content stamp and only re-points its root at this module's public/ dir. Disabling the module removes the front door outright — the apex then answers the game-less 404 tail. The world it renders (DESIGN.md, the token contract, the direction records) is the INSTANCE's; the method for building one stays in modules/ui-design/.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "pages" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": {
@@ -4,6 +4,7 @@
4
4
  "description": "The deploy page for a project whose app deploys through Render: the service's Render deploys, each tied to its commit and the Bongos tasks it carried, what is live now, and deploy and roll back behind a two-step confirm (task 1004270). Off in every hall until its owner turns it on.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "hosting" },
7
8
  "default": false,
8
9
  "author": "Cloud Bongos",
9
10
  "origin": "Cloud Bongos core",
@@ -4,6 +4,7 @@
4
4
  "description": "The red-team / vulnerability-report intake and the bounty payout system (rank-gated Metic+): the /builder-redteam skill files a report, the Archon dashboard adjudicates (confirm/dispute/fix/link-fix), and the env-aware bounty table sets the per-severity drachmae payout. A core-domain module carved out of the GDS core in BV1.R79 (ADR 0093 §1; 02-module-map §5 — security-the-FEATURE, NOT security-the-property, which stays kernel). default-on because every instance can take red-team reports. Registers the `security` kernel PORT the core /public/bounty-table resolves for the payout schedule. Also owns the scan-before-install surface (goal 1000055): the artifact-scan engine (quarantine/manifest/mirror) and the security_tool_scans record — POST Metic+, GET every rank.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.8.0",
7
+ "category": { "parent": "quality" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["reports", "scans"], "migrations": true },
@@ -4,6 +4,7 @@
4
4
  "description": "The session-records corpus + its data plane (POST /sessions upload, the Archon-gated cross-builder /sessions/search + /sessions/:id deep-dive + /sessions/upload-health, the server-side signal that a builder's session uploads have silently stopped), the BFG 'read-the-room' cross-builder scorer (ADR 0026 §6B), and the session-pulse / stale-claim heartbeat helpers. A core-domain module carved out of the GDS core in BV1.R82 (ADR 0093 §1); default-on because every instance records its builders' sessions for the BFG. Like the memory module, sessions registers no port — core never calls back into it: the ship-time digest write is an HTTP POST to the module's own /sessions route, and the only outward dependency is the economy `reward` kernel PORT it resolves (session token reward + sumCreditsForTasks) at upload time.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.10.0",
7
+ "category": { "parent": "knowledge" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": { "routes": ["sessions"], "pollers": ["session-reward-reconcile", "session-upload-health"] },
@@ -4,6 +4,7 @@
4
4
  "description": "Role SUB-SPECIALITIES — a named bundle of knowledge, skills and an interaction contract that sits UNDER a craft (task 1003855; ADR 0296). A craft says how you work (engineer / ideator / artist / ui); a speciality says what you work ON and how a subject-matter expert wants to be engaged inside it. Deliberately a thin layer over three surfaces that already exist — discipline-modes.json for craft->playbook, behavior_prefs.interaction for the per-session contract (a speciality contract rides that SAME GET /me -> Conductor path rather than adding a second one), and the ADR 0083 manifest for declared skills; the only new machinery is the knowledge bundle. Training is two-fold per the owner's 2026-09-17 ruling: documents the builder supplied, plus learnings captured from sessions worked in the speciality (pointing at existing `learnings` rows, never a second corpus). Owned per-builder OR per-project, each carrying its owner's sharing decision (private / project / public) and an explicit sellable flag — the flag records intent only, because ADR 0107 defers the marketplace and there is nothing to list on. default-on: a speciality is how an instance's expertise enters the platform, so it ships like the hall and the status page.",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.19.0",
7
+ "category": { "parent": "people" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "migrations": true,
@@ -4,6 +4,7 @@
4
4
  "description": "The public build-status dashboard served at status.<apex> (status.example.com) — the live up/down banner, version-progress rollups, cost summary, recent ships, leaderboard, and the ecosystem fingerprint, all polling the read-only /api/bongos/public/* surface every 60s. A WEB-SURFACE core-domain module carved out of the GDS core in BV1.R84 (ADR 0093 §1; 02-module-map §6 — a web surface is first-class). default-on: a Cloud Bongos instance ships its status page like it ships its hall. Registers no port and contributes no routes — it declares a webSurface (host prefix + static dir) the loader hands serve-internal, which serves the module's public/ dir on the matching host exactly as it served public-status/ before. The public read endpoints it renders stay SHARED core in routes/public.js (the hall + the off-box mirror read them too).",
5
5
  "version": "1.0.0",
6
6
  "coreVersion": "^1.11.0",
7
+ "category": { "parent": "pages" },
7
8
  "default": true,
8
9
  "maintenance": { "status": "core-maintained" },
9
10
  "contributes": {