@bongos/core 1.19.816 → 1.19.817
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 +44 -34
- package/.claude/skills/worktree-clean/SKILL.md +3 -2
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +6 -0
- package/clients/bongos-client/index.cjs +6 -0
- package/clients/bongos-client/index.d.ts +9 -0
- package/clients/bongos-client/index.mjs +6 -0
- package/docs/api/openapi.json +178 -3
- package/docs/api-reference.md +5 -2
- package/docs/copy-inventory.md +41 -38
- package/docs/copy-registry.json +67 -40
- package/docs/module-api-changelog.md +2 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +6 -0
- package/modules/government/catalog.js +1 -1
- package/modules/hall-ui/public/settings-specialities.js +56 -2
- package/modules/hall-ui/public/settings.html +1 -0
- package/modules/lifecycle/routes/task-route-helpers.js +50 -3
- package/modules/specialities/db.js +41 -2
- package/modules/specialities/migrations/specialities_002_offered.sql +57 -0
- package/modules/specialities/routes/specialities.js +64 -0
- package/modules/specialities/specialities.js +30 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/category-advisory-guard.js +49 -8
- package/scripts/gds/stale-worktrees.js +50 -6
- package/src/module-api.js +1 -1
- package/tests/government_require_permission.mjs +90 -14
- package/tests/migration_allocation.mjs +70 -0
- package/tests/speciality_offered.mjs +212 -0
- package/tests/stale_worktrees.mjs +54 -0
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.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.817",
|
|
6
|
+
"core_contract": "1.19.817",
|
|
7
|
+
"source_commit": "2cd2ebaa97da0505de1aa9f67f9c0448f99fb48d",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-17T08:
|
|
9
|
+
"built_at": "2026-09-17T08:31:54.468Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 489,
|
|
13
13
|
"agent_docs_stubbed": 26,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2217,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2732,
|
|
20
|
+
"tree_sha256": "0b07201d08f28e66901393208deb86879c60a66d8729e32a7dd7da80ffdd7aef",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -252,7 +252,7 @@
|
|
|
252
252
|
{
|
|
253
253
|
"path": ".claude/skills/worktree-clean/SKILL.md",
|
|
254
254
|
"mode": "0000644",
|
|
255
|
-
"sha256": "
|
|
255
|
+
"sha256": "6548fe1de89c6909def02b76f022cae739c5b129d179a63538b9a1ab252e5030"
|
|
256
256
|
},
|
|
257
257
|
{
|
|
258
258
|
"path": ".devcontainer/Dockerfile",
|
|
@@ -347,12 +347,12 @@
|
|
|
347
347
|
{
|
|
348
348
|
"path": "clients/bongos-client/README.md",
|
|
349
349
|
"mode": "0000644",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "3db2ef5abdfe42a0e950339728759742ac017fdbcae1ed1b8e8b00798773df09"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
354
354
|
"mode": "0000644",
|
|
355
|
-
"sha256": "
|
|
355
|
+
"sha256": "cd6c84faa0f4d65498108d2681fff1b7089c6ee80212af6d7bf29c5d29c77ee1"
|
|
356
356
|
},
|
|
357
357
|
{
|
|
358
358
|
"path": "clients/bongos-client/examples/hello-world.mjs",
|
|
@@ -362,17 +362,17 @@
|
|
|
362
362
|
{
|
|
363
363
|
"path": "clients/bongos-client/index.cjs",
|
|
364
364
|
"mode": "0000644",
|
|
365
|
-
"sha256": "
|
|
365
|
+
"sha256": "0b9c1a362adc59ce61f6b0b6f92f47103f6060810cbcf90ee87391b255a1d96f"
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
"path": "clients/bongos-client/index.d.ts",
|
|
369
369
|
"mode": "0000644",
|
|
370
|
-
"sha256": "
|
|
370
|
+
"sha256": "d2b1b59658899d95484cea739fad158009c1d5365881854b117e8350e09521d3"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.mjs",
|
|
374
374
|
"mode": "0000644",
|
|
375
|
-
"sha256": "
|
|
375
|
+
"sha256": "9cf6c38c64ba9a7f753ba393daddd7c3f76e246f34b713130eb81e77973e23de"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/package.json",
|
|
@@ -1982,12 +1982,12 @@
|
|
|
1982
1982
|
{
|
|
1983
1983
|
"path": "docs/api-reference.md",
|
|
1984
1984
|
"mode": "0000644",
|
|
1985
|
-
"sha256": "
|
|
1985
|
+
"sha256": "74c345407b073635a4b9eaa54b72a92e543a1d4e9a893b0a3c688ef32bdc86b0"
|
|
1986
1986
|
},
|
|
1987
1987
|
{
|
|
1988
1988
|
"path": "docs/api/openapi.json",
|
|
1989
1989
|
"mode": "0000644",
|
|
1990
|
-
"sha256": "
|
|
1990
|
+
"sha256": "28a4aec3929aefa72cfdffc1bcad6eba5ce1d3bb00518e28eddee631f219dfe5"
|
|
1991
1991
|
},
|
|
1992
1992
|
{
|
|
1993
1993
|
"path": "docs/architecture.md",
|
|
@@ -2012,12 +2012,12 @@
|
|
|
2012
2012
|
{
|
|
2013
2013
|
"path": "docs/copy-inventory.md",
|
|
2014
2014
|
"mode": "0000644",
|
|
2015
|
-
"sha256": "
|
|
2015
|
+
"sha256": "4e21dfe9140f8da88b5ba49d7d2c380196408073253e915198ab5f9cdbeab933"
|
|
2016
2016
|
},
|
|
2017
2017
|
{
|
|
2018
2018
|
"path": "docs/copy-registry.json",
|
|
2019
2019
|
"mode": "0000644",
|
|
2020
|
-
"sha256": "
|
|
2020
|
+
"sha256": "cb8da77e04f8fa238c513bf2fc04f4f00a13527022e2fbb34dd607ddced16bdd"
|
|
2021
2021
|
},
|
|
2022
2022
|
{
|
|
2023
2023
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2542,7 +2542,7 @@
|
|
|
2542
2542
|
{
|
|
2543
2543
|
"path": "docs/module-api-changelog.md",
|
|
2544
2544
|
"mode": "0000644",
|
|
2545
|
-
"sha256": "
|
|
2545
|
+
"sha256": "7311b40a7f58f9a8e6467a1e97a51154c728ba9e91c1486cd06bd5b1b388371d"
|
|
2546
2546
|
},
|
|
2547
2547
|
{
|
|
2548
2548
|
"path": "docs/modules-contract.md",
|
|
@@ -4077,7 +4077,7 @@
|
|
|
4077
4077
|
{
|
|
4078
4078
|
"path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
|
|
4079
4079
|
"mode": "0000644",
|
|
4080
|
-
"sha256": "
|
|
4080
|
+
"sha256": "0b9c1a362adc59ce61f6b0b6f92f47103f6060810cbcf90ee87391b255a1d96f"
|
|
4081
4081
|
},
|
|
4082
4082
|
{
|
|
4083
4083
|
"path": "modules/dev-box/app/test/unit.mjs",
|
|
@@ -4327,7 +4327,7 @@
|
|
|
4327
4327
|
{
|
|
4328
4328
|
"path": "modules/government/catalog.js",
|
|
4329
4329
|
"mode": "0000644",
|
|
4330
|
-
"sha256": "
|
|
4330
|
+
"sha256": "da48187e485a7528bdd705c49df7a28c4ce6a3aad3c2885589f06dd4c8214840"
|
|
4331
4331
|
},
|
|
4332
4332
|
{
|
|
4333
4333
|
"path": "modules/government/config.js",
|
|
@@ -5257,7 +5257,7 @@
|
|
|
5257
5257
|
{
|
|
5258
5258
|
"path": "modules/hall-ui/public/settings-specialities.js",
|
|
5259
5259
|
"mode": "0000644",
|
|
5260
|
-
"sha256": "
|
|
5260
|
+
"sha256": "384aa465d951e97d8d3e2b7633eff49d1d82e63bdd63baf0b38cf81482c4716d"
|
|
5261
5261
|
},
|
|
5262
5262
|
{
|
|
5263
5263
|
"path": "modules/hall-ui/public/settings.css",
|
|
@@ -5267,7 +5267,7 @@
|
|
|
5267
5267
|
{
|
|
5268
5268
|
"path": "modules/hall-ui/public/settings.html",
|
|
5269
5269
|
"mode": "0000644",
|
|
5270
|
-
"sha256": "
|
|
5270
|
+
"sha256": "4bea1273047e2fbb90f76f01892cb82da7aeaa1417f91a267249512a5e216993"
|
|
5271
5271
|
},
|
|
5272
5272
|
{
|
|
5273
5273
|
"path": "modules/hall-ui/public/settings.js",
|
|
@@ -5842,7 +5842,7 @@
|
|
|
5842
5842
|
{
|
|
5843
5843
|
"path": "modules/lifecycle/routes/task-route-helpers.js",
|
|
5844
5844
|
"mode": "0000644",
|
|
5845
|
-
"sha256": "
|
|
5845
|
+
"sha256": "c82bfa19da18a2b952ad4e2a0311ef983050fd0a4c8a095c8fb3f3581f3a4801"
|
|
5846
5846
|
},
|
|
5847
5847
|
{
|
|
5848
5848
|
"path": "modules/lifecycle/routes/task-write-routes.js",
|
|
@@ -7297,13 +7297,18 @@
|
|
|
7297
7297
|
{
|
|
7298
7298
|
"path": "modules/specialities/db.js",
|
|
7299
7299
|
"mode": "0000644",
|
|
7300
|
-
"sha256": "
|
|
7300
|
+
"sha256": "3e060dfa1aa11f4ca6c1949bb36599e24c33cfca6ba983c1ce740de67f6e1152"
|
|
7301
7301
|
},
|
|
7302
7302
|
{
|
|
7303
7303
|
"path": "modules/specialities/migrations/specialities_001_specialities.sql",
|
|
7304
7304
|
"mode": "0000644",
|
|
7305
7305
|
"sha256": "055210da2726c1d17457900a9b44566c58f371b3206365c5352474114be57251"
|
|
7306
7306
|
},
|
|
7307
|
+
{
|
|
7308
|
+
"path": "modules/specialities/migrations/specialities_002_offered.sql",
|
|
7309
|
+
"mode": "0000644",
|
|
7310
|
+
"sha256": "5d2c6a648b0a7eb85893c2a3302af721206cc0ca0f58420cb4281e427b86de7a"
|
|
7311
|
+
},
|
|
7307
7312
|
{
|
|
7308
7313
|
"path": "modules/specialities/module.json",
|
|
7309
7314
|
"mode": "0000644",
|
|
@@ -7312,12 +7317,12 @@
|
|
|
7312
7317
|
{
|
|
7313
7318
|
"path": "modules/specialities/routes/specialities.js",
|
|
7314
7319
|
"mode": "0000644",
|
|
7315
|
-
"sha256": "
|
|
7320
|
+
"sha256": "132b28199202c742045c17bd930889d1a3327af1b17445d45d592bfc472bed76"
|
|
7316
7321
|
},
|
|
7317
7322
|
{
|
|
7318
7323
|
"path": "modules/specialities/specialities.js",
|
|
7319
7324
|
"mode": "0000644",
|
|
7320
|
-
"sha256": "
|
|
7325
|
+
"sha256": "413477a716f3a60abc0763bccfb10a593c4eb19301131de0230eb3d72ffee299"
|
|
7321
7326
|
},
|
|
7322
7327
|
{
|
|
7323
7328
|
"path": "modules/status-ui/CLAUDE.md",
|
|
@@ -7792,12 +7797,12 @@
|
|
|
7792
7797
|
{
|
|
7793
7798
|
"path": "package-lock.json",
|
|
7794
7799
|
"mode": "0000644",
|
|
7795
|
-
"sha256": "
|
|
7800
|
+
"sha256": "73cd517987ad21a5984113cb38b81cd9221d3247574a773a5f8d1f47a9908921"
|
|
7796
7801
|
},
|
|
7797
7802
|
{
|
|
7798
7803
|
"path": "package.json",
|
|
7799
7804
|
"mode": "0000644",
|
|
7800
|
-
"sha256": "
|
|
7805
|
+
"sha256": "1243bf07a179e236a3e11fd4d64c5c4545609883f59448022ac9d36901d9eaca"
|
|
7801
7806
|
},
|
|
7802
7807
|
{
|
|
7803
7808
|
"path": "public-docs/index.html",
|
|
@@ -8062,7 +8067,7 @@
|
|
|
8062
8067
|
{
|
|
8063
8068
|
"path": "scripts/gds/category-advisory-guard.js",
|
|
8064
8069
|
"mode": "0000644",
|
|
8065
|
-
"sha256": "
|
|
8070
|
+
"sha256": "a71ac076299b9e37bf8e0a6ff8761f8ba3059271b2596b6ee8941fc24533357d"
|
|
8066
8071
|
},
|
|
8067
8072
|
{
|
|
8068
8073
|
"path": "scripts/gds/cf-tunnel.js",
|
|
@@ -9182,7 +9187,7 @@
|
|
|
9182
9187
|
{
|
|
9183
9188
|
"path": "scripts/gds/stale-worktrees.js",
|
|
9184
9189
|
"mode": "0000644",
|
|
9185
|
-
"sha256": "
|
|
9190
|
+
"sha256": "9f6ce80e5325f4cfe68cfa6cb82bec52d594af7e461b6734724819b23cbb0d37"
|
|
9186
9191
|
},
|
|
9187
9192
|
{
|
|
9188
9193
|
"path": "scripts/gds/start.js",
|
|
@@ -9687,7 +9692,7 @@
|
|
|
9687
9692
|
{
|
|
9688
9693
|
"path": "src/module-api.js",
|
|
9689
9694
|
"mode": "0000644",
|
|
9690
|
-
"sha256": "
|
|
9695
|
+
"sha256": "36b08b101d2abb1c85207dedcc0ff4f6893496731afb19b10e6c4680c1c303c4"
|
|
9691
9696
|
},
|
|
9692
9697
|
{
|
|
9693
9698
|
"path": "src/module-loader/catalog.js",
|
|
@@ -11287,7 +11292,7 @@
|
|
|
11287
11292
|
{
|
|
11288
11293
|
"path": "tests/government_require_permission.mjs",
|
|
11289
11294
|
"mode": "0000644",
|
|
11290
|
-
"sha256": "
|
|
11295
|
+
"sha256": "95a5215153c5d98f4fe9ecd3d36ca1ce76d9c486abef8f69dfca0ce3d5cfb006"
|
|
11291
11296
|
},
|
|
11292
11297
|
{
|
|
11293
11298
|
"path": "tests/government_resolver.mjs",
|
|
@@ -11977,7 +11982,7 @@
|
|
|
11977
11982
|
{
|
|
11978
11983
|
"path": "tests/migration_allocation.mjs",
|
|
11979
11984
|
"mode": "0000644",
|
|
11980
|
-
"sha256": "
|
|
11985
|
+
"sha256": "adc1a84f0b251a99471bd4f14367d949432476b0d504bff4de3ae0167eadfb30"
|
|
11981
11986
|
},
|
|
11982
11987
|
{
|
|
11983
11988
|
"path": "tests/migration_namespace.mjs",
|
|
@@ -13239,6 +13244,11 @@
|
|
|
13239
13244
|
"mode": "0000644",
|
|
13240
13245
|
"sha256": "9de6fbffd858190096bc22d556ccae101a6206adeee05bb146bd2a0a1a59d15c"
|
|
13241
13246
|
},
|
|
13247
|
+
{
|
|
13248
|
+
"path": "tests/speciality_offered.mjs",
|
|
13249
|
+
"mode": "0000644",
|
|
13250
|
+
"sha256": "13d7be30c41855ac4a39689bc88ea2be2c896ca071b884bbd0e81cc9c29bc180"
|
|
13251
|
+
},
|
|
13242
13252
|
{
|
|
13243
13253
|
"path": "tests/spike_task_map.mjs",
|
|
13244
13254
|
"mode": "0000644",
|
|
@@ -13267,7 +13277,7 @@
|
|
|
13267
13277
|
{
|
|
13268
13278
|
"path": "tests/stale_worktrees.mjs",
|
|
13269
13279
|
"mode": "0000644",
|
|
13270
|
-
"sha256": "
|
|
13280
|
+
"sha256": "3cc48273341fe8e71ba928ec7c474533d510b74d5b107cad6e3af278219ccd41"
|
|
13271
13281
|
},
|
|
13272
13282
|
{
|
|
13273
13283
|
"path": "tests/start_env_guard.mjs",
|
|
@@ -8,8 +8,9 @@ description: >-
|
|
|
8
8
|
|
|
9
9
|
## What this skill does
|
|
10
10
|
|
|
11
|
-
1. `node scripts/gds/stale-worktrees.js` — the list. A worktree is **stale** when its branch is an ancestor of `origin/main` (the land happened) or the branch is gone (the ship deleted it). Detached worktrees
|
|
12
|
-
2. Show the stale list to the builder (names + why).
|
|
11
|
+
1. `node scripts/gds/stale-worktrees.js` — the list. A worktree is **stale** when its branch is an ancestor of `origin/main` (the land happened) or the branch is gone (the ship deleted it). Detached worktrees, unmerged branches, and branches sitting exactly at `origin/main` (a claim worktree with no commits yet — task 1003912) are **live** and never touched. Run `git fetch origin` first so "merged into main" reflects today's main, not the last fetch. The same call also names **husks** — directories under `.claude/worktrees/` that git does not list as worktrees at all (step 6).
|
|
12
|
+
2. Show the stale list to the builder (names + why). A worktree holding a **live claim** should not appear: an unmerged branch is live, and since task 1003912 so is a branch still sitting exactly at `origin/main` — the window between `worktree.js add` and the builder's first commit, during which a live claim's tree really did read as "merged into main".
|
|
13
|
+
- Do not treat that as a guarantee. This list is derived from git alone, with no knowledge of who holds what, so **if a name on it looks like someone's live claim, ask before removing it.** The assurance this replaced — that a current claim could not possibly be listed — is exactly what would stop an agent double-checking.
|
|
13
14
|
3. For each stale name: `node scripts/gds/worktree.js remove <name>`. That helper unlinks any node_modules junction BEFORE `git worktree remove`, which is the whole reason raw git is off-limits here (learning in `scripts/gds/CLAUDE.md` → "Gotchas / invariants"; the `git-guard.js` PreToolUse hook blocks the raw form).
|
|
14
15
|
- A worktree with untracked leftovers (`.playwright-mcp/`, a stray screenshot) refuses without `--force`. Show the `git -C <path> status --porcelain` output; if it is only untracked junk, re-run with `--force`. If it shows **modified tracked files**, skip it and report — someone's uncommitted work is not this skill's to delete.
|
|
15
16
|
4. `git worktree prune` — clears any registrations whose directory is already gone.
|
|
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
|
|
|
5
5
|
by hand; it regenerates when the spec changes, so it can never drift from the routes.
|
|
6
6
|
|
|
7
7
|
- API version: **v1** (served at `/api/bongos/v1`)
|
|
8
|
-
-
|
|
8
|
+
- 393 operations across 59 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -857,6 +857,12 @@ function createClient(opts = {}) {
|
|
|
857
857
|
postSpecialitiesIdDocuments: (args) => request("POST", "/specialities/{id}/documents", { hasBody: true }, args),
|
|
858
858
|
// DELETE /specialities/{id}/documents/{docId} — rank: any-builder — DELETE /specialities/:id/documents/:docId
|
|
859
859
|
deleteSpecialitiesIdDocumentsDocId: (args) => request("DELETE", "/specialities/{id}/documents/{docId}", { hasBody: false }, args),
|
|
860
|
+
// POST /specialities/{id}/offer — rank: metic+archon — POST /specialities/:id/offer
|
|
861
|
+
postSpecialitiesIdOffer: (args) => request("POST", "/specialities/{id}/offer", { hasBody: true }, args),
|
|
862
|
+
// POST /specialities/{id}/unoffer — rank: metic+archon — POST /specialities/:id/unoffer
|
|
863
|
+
postSpecialitiesIdUnoffer: (args) => request("POST", "/specialities/{id}/unoffer", { hasBody: true }, args),
|
|
864
|
+
// GET /specialities/offered — rank: any-builder — GET /specialities/offered
|
|
865
|
+
getSpecialitiesOffered: (args) => request("GET", "/specialities/offered", { hasBody: false }, args),
|
|
860
866
|
},
|
|
861
867
|
"sso": {
|
|
862
868
|
// POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
|
|
@@ -856,6 +856,12 @@ function createClient(opts = {}) {
|
|
|
856
856
|
postSpecialitiesIdDocuments: (args) => request("POST", "/specialities/{id}/documents", { hasBody: true }, args),
|
|
857
857
|
// DELETE /specialities/{id}/documents/{docId} — rank: any-builder — DELETE /specialities/:id/documents/:docId
|
|
858
858
|
deleteSpecialitiesIdDocumentsDocId: (args) => request("DELETE", "/specialities/{id}/documents/{docId}", { hasBody: false }, args),
|
|
859
|
+
// POST /specialities/{id}/offer — rank: metic+archon — POST /specialities/:id/offer
|
|
860
|
+
postSpecialitiesIdOffer: (args) => request("POST", "/specialities/{id}/offer", { hasBody: true }, args),
|
|
861
|
+
// POST /specialities/{id}/unoffer — rank: metic+archon — POST /specialities/:id/unoffer
|
|
862
|
+
postSpecialitiesIdUnoffer: (args) => request("POST", "/specialities/{id}/unoffer", { hasBody: true }, args),
|
|
863
|
+
// GET /specialities/offered — rank: any-builder — GET /specialities/offered
|
|
864
|
+
getSpecialitiesOffered: (args) => request("GET", "/specialities/offered", { hasBody: false }, args),
|
|
859
865
|
},
|
|
860
866
|
"sso": {
|
|
861
867
|
// POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
|
|
@@ -137,6 +137,7 @@ export interface GetSessionsMineResponse { sessions: unknown; count: unknown }
|
|
|
137
137
|
export interface GetSessionsSearchResponse { sessions: unknown; count: unknown; total: unknown; totals: unknown; limit: unknown; offset: unknown }
|
|
138
138
|
export interface GetSpecialitiesIdDocumentsResponse { documents: unknown }
|
|
139
139
|
export interface GetSpecialitiesIdResponse { speciality: unknown }
|
|
140
|
+
export interface GetSpecialitiesOfferedResponse { suggestions: unknown }
|
|
140
141
|
export interface GetSpecialitiesResponse { specialities: unknown }
|
|
141
142
|
export interface GetSsoPubkeyResponse { alg: unknown; format: unknown; public_key_b64: unknown }
|
|
142
143
|
export interface GetTaskRecommendationsForMeResponse { recommendations: unknown; count: unknown }
|
|
@@ -385,6 +386,8 @@ export interface PostSpecialitiesIdAbandonResponse { ok: boolean; was_active: un
|
|
|
385
386
|
export interface PostSpecialitiesIdAdoptResponse { adoption: unknown }
|
|
386
387
|
export interface PostSpecialitiesIdDocumentsRequest { title: string; body_md: string; source?: string }
|
|
387
388
|
export interface PostSpecialitiesIdDocumentsResponse { skipped?: boolean; reason?: unknown; document?: unknown }
|
|
389
|
+
export interface PostSpecialitiesIdOfferResponse { speciality: unknown }
|
|
390
|
+
export interface PostSpecialitiesIdUnofferResponse { speciality: unknown }
|
|
388
391
|
export interface PostSpecialitiesRequest { name: string; discipline: string; summary?: string; contract_md?: string; visibility?: string; sellable?: boolean }
|
|
389
392
|
export interface PostSpecialitiesResponse { speciality: unknown }
|
|
390
393
|
export interface PostSsoActivityRollupRequest { client_id: string; client_secret: string; github_id: StringifiableId; credits?: number; tasks_shipped?: number; karma?: number; rank?: string; disciplines?: unknown; recent_ships?: unknown }
|
|
@@ -1219,6 +1222,12 @@ export interface BongosClient {
|
|
|
1219
1222
|
postSpecialitiesIdDocuments(args: RequestArgs & { body: PostSpecialitiesIdDocumentsRequest }): Promise<PostSpecialitiesIdDocumentsResponse>;
|
|
1220
1223
|
/** DELETE /specialities/{id}/documents/{docId} — rank: any-builder */
|
|
1221
1224
|
deleteSpecialitiesIdDocumentsDocId(args?: RequestArgs): Promise<DeleteSpecialitiesIdDocumentsDocIdResponse>;
|
|
1225
|
+
/** POST /specialities/{id}/offer — rank: metic+archon */
|
|
1226
|
+
postSpecialitiesIdOffer(args?: RequestArgs): Promise<PostSpecialitiesIdOfferResponse>;
|
|
1227
|
+
/** POST /specialities/{id}/unoffer — rank: metic+archon */
|
|
1228
|
+
postSpecialitiesIdUnoffer(args?: RequestArgs): Promise<PostSpecialitiesIdUnofferResponse>;
|
|
1229
|
+
/** GET /specialities/offered — rank: any-builder */
|
|
1230
|
+
getSpecialitiesOffered(args?: RequestArgs): Promise<GetSpecialitiesOfferedResponse>;
|
|
1222
1231
|
};
|
|
1223
1232
|
"sso": {
|
|
1224
1233
|
/** POST /sso/activity/rollup — rank: public */
|
|
@@ -853,6 +853,12 @@ export function createClient(opts = {}) {
|
|
|
853
853
|
postSpecialitiesIdDocuments: (args) => request("POST", "/specialities/{id}/documents", { hasBody: true }, args),
|
|
854
854
|
// DELETE /specialities/{id}/documents/{docId} — rank: any-builder — DELETE /specialities/:id/documents/:docId
|
|
855
855
|
deleteSpecialitiesIdDocumentsDocId: (args) => request("DELETE", "/specialities/{id}/documents/{docId}", { hasBody: false }, args),
|
|
856
|
+
// POST /specialities/{id}/offer — rank: metic+archon — POST /specialities/:id/offer
|
|
857
|
+
postSpecialitiesIdOffer: (args) => request("POST", "/specialities/{id}/offer", { hasBody: true }, args),
|
|
858
|
+
// POST /specialities/{id}/unoffer — rank: metic+archon — POST /specialities/:id/unoffer
|
|
859
|
+
postSpecialitiesIdUnoffer: (args) => request("POST", "/specialities/{id}/unoffer", { hasBody: true }, args),
|
|
860
|
+
// GET /specialities/offered — rank: any-builder — GET /specialities/offered
|
|
861
|
+
getSpecialitiesOffered: (args) => request("GET", "/specialities/offered", { hasBody: false }, args),
|
|
856
862
|
},
|
|
857
863
|
"sso": {
|
|
858
864
|
// POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
|
package/docs/api/openapi.json
CHANGED
|
@@ -14901,6 +14901,44 @@
|
|
|
14901
14901
|
]
|
|
14902
14902
|
}
|
|
14903
14903
|
},
|
|
14904
|
+
"/specialities/offered": {
|
|
14905
|
+
"get": {
|
|
14906
|
+
"operationId": "get_specialities_offered",
|
|
14907
|
+
"tags": [
|
|
14908
|
+
"specialities"
|
|
14909
|
+
],
|
|
14910
|
+
"summary": "GET /specialities/offered",
|
|
14911
|
+
"description": "GET /specialities/offered — the suggestions for THIS builder. Mounted before '/specialities/:id' would otherwise capture 'offered' as an id.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
14912
|
+
"x-rank": "any-builder",
|
|
14913
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
14914
|
+
"responses": {
|
|
14915
|
+
"200": {
|
|
14916
|
+
"description": "Success.",
|
|
14917
|
+
"content": {
|
|
14918
|
+
"application/json": {
|
|
14919
|
+
"schema": {
|
|
14920
|
+
"$ref": "#/components/schemas/GetSpecialitiesOfferedResponse"
|
|
14921
|
+
}
|
|
14922
|
+
}
|
|
14923
|
+
}
|
|
14924
|
+
},
|
|
14925
|
+
"400": {
|
|
14926
|
+
"$ref": "#/components/responses/BadRequest"
|
|
14927
|
+
},
|
|
14928
|
+
"401": {
|
|
14929
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
14930
|
+
},
|
|
14931
|
+
"403": {
|
|
14932
|
+
"$ref": "#/components/responses/Forbidden"
|
|
14933
|
+
}
|
|
14934
|
+
},
|
|
14935
|
+
"security": [
|
|
14936
|
+
{
|
|
14937
|
+
"builderSession": []
|
|
14938
|
+
}
|
|
14939
|
+
]
|
|
14940
|
+
}
|
|
14941
|
+
},
|
|
14904
14942
|
"/specialities/{id}": {
|
|
14905
14943
|
"get": {
|
|
14906
14944
|
"operationId": "get_specialities_id",
|
|
@@ -15292,6 +15330,116 @@
|
|
|
15292
15330
|
]
|
|
15293
15331
|
}
|
|
15294
15332
|
},
|
|
15333
|
+
"/specialities/{id}/offer": {
|
|
15334
|
+
"post": {
|
|
15335
|
+
"operationId": "post_specialities_id_offer",
|
|
15336
|
+
"tags": [
|
|
15337
|
+
"specialities"
|
|
15338
|
+
],
|
|
15339
|
+
"summary": "POST /specialities/:id/offer",
|
|
15340
|
+
"description": "── offering: a project puts its name behind a speciality ───────────────── OFFERING IS CURATION, NOT OWNERSHIP, so it is gated differently from every other write here. Editing your own speciality is yours; recommending one to everybody on the instance is a claim on their attention and their sessions, which is the same act `project.curate` already governs for featuring a project (metic floor). An owner may therefore edit a speciality they cannot offer, and a curator may offer one they do not own — which is correct: the two decisions are about different things.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `project.curate` (all required).",
|
|
15341
|
+
"x-rank": "metic+archon",
|
|
15342
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15343
|
+
"x-permissions": [
|
|
15344
|
+
"project.curate"
|
|
15345
|
+
],
|
|
15346
|
+
"parameters": [
|
|
15347
|
+
{
|
|
15348
|
+
"name": "id",
|
|
15349
|
+
"in": "path",
|
|
15350
|
+
"required": true,
|
|
15351
|
+
"schema": {
|
|
15352
|
+
"type": "string"
|
|
15353
|
+
},
|
|
15354
|
+
"description": "Path parameter `id`."
|
|
15355
|
+
}
|
|
15356
|
+
],
|
|
15357
|
+
"responses": {
|
|
15358
|
+
"200": {
|
|
15359
|
+
"description": "Success.",
|
|
15360
|
+
"content": {
|
|
15361
|
+
"application/json": {
|
|
15362
|
+
"schema": {
|
|
15363
|
+
"$ref": "#/components/schemas/PostSpecialitiesIdOfferResponse"
|
|
15364
|
+
}
|
|
15365
|
+
}
|
|
15366
|
+
}
|
|
15367
|
+
},
|
|
15368
|
+
"400": {
|
|
15369
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15370
|
+
},
|
|
15371
|
+
"401": {
|
|
15372
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15373
|
+
},
|
|
15374
|
+
"403": {
|
|
15375
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15376
|
+
},
|
|
15377
|
+
"404": {
|
|
15378
|
+
"$ref": "#/components/responses/NotFound"
|
|
15379
|
+
}
|
|
15380
|
+
},
|
|
15381
|
+
"security": [
|
|
15382
|
+
{
|
|
15383
|
+
"builderSession": []
|
|
15384
|
+
}
|
|
15385
|
+
]
|
|
15386
|
+
}
|
|
15387
|
+
},
|
|
15388
|
+
"/specialities/{id}/unoffer": {
|
|
15389
|
+
"post": {
|
|
15390
|
+
"operationId": "post_specialities_id_unoffer",
|
|
15391
|
+
"tags": [
|
|
15392
|
+
"specialities"
|
|
15393
|
+
],
|
|
15394
|
+
"summary": "POST /specialities/:id/unoffer",
|
|
15395
|
+
"description": "**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `project.curate` (all required).",
|
|
15396
|
+
"x-rank": "metic+archon",
|
|
15397
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
15398
|
+
"x-permissions": [
|
|
15399
|
+
"project.curate"
|
|
15400
|
+
],
|
|
15401
|
+
"parameters": [
|
|
15402
|
+
{
|
|
15403
|
+
"name": "id",
|
|
15404
|
+
"in": "path",
|
|
15405
|
+
"required": true,
|
|
15406
|
+
"schema": {
|
|
15407
|
+
"type": "string"
|
|
15408
|
+
},
|
|
15409
|
+
"description": "Path parameter `id`."
|
|
15410
|
+
}
|
|
15411
|
+
],
|
|
15412
|
+
"responses": {
|
|
15413
|
+
"200": {
|
|
15414
|
+
"description": "Success.",
|
|
15415
|
+
"content": {
|
|
15416
|
+
"application/json": {
|
|
15417
|
+
"schema": {
|
|
15418
|
+
"$ref": "#/components/schemas/PostSpecialitiesIdUnofferResponse"
|
|
15419
|
+
}
|
|
15420
|
+
}
|
|
15421
|
+
}
|
|
15422
|
+
},
|
|
15423
|
+
"400": {
|
|
15424
|
+
"$ref": "#/components/responses/BadRequest"
|
|
15425
|
+
},
|
|
15426
|
+
"401": {
|
|
15427
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
15428
|
+
},
|
|
15429
|
+
"403": {
|
|
15430
|
+
"$ref": "#/components/responses/Forbidden"
|
|
15431
|
+
},
|
|
15432
|
+
"404": {
|
|
15433
|
+
"$ref": "#/components/responses/NotFound"
|
|
15434
|
+
}
|
|
15435
|
+
},
|
|
15436
|
+
"security": [
|
|
15437
|
+
{
|
|
15438
|
+
"builderSession": []
|
|
15439
|
+
}
|
|
15440
|
+
]
|
|
15441
|
+
}
|
|
15442
|
+
},
|
|
15295
15443
|
"/sso/activity/rollup": {
|
|
15296
15444
|
"post": {
|
|
15297
15445
|
"operationId": "post_sso_activity_rollup",
|
|
@@ -19685,6 +19833,15 @@
|
|
|
19685
19833
|
"speciality"
|
|
19686
19834
|
]
|
|
19687
19835
|
},
|
|
19836
|
+
"GetSpecialitiesOfferedResponse": {
|
|
19837
|
+
"type": "object",
|
|
19838
|
+
"properties": {
|
|
19839
|
+
"suggestions": {}
|
|
19840
|
+
},
|
|
19841
|
+
"required": [
|
|
19842
|
+
"suggestions"
|
|
19843
|
+
]
|
|
19844
|
+
},
|
|
19688
19845
|
"GetSpecialitiesResponse": {
|
|
19689
19846
|
"type": "object",
|
|
19690
19847
|
"properties": {
|
|
@@ -23733,6 +23890,24 @@
|
|
|
23733
23890
|
"document": {}
|
|
23734
23891
|
}
|
|
23735
23892
|
},
|
|
23893
|
+
"PostSpecialitiesIdOfferResponse": {
|
|
23894
|
+
"type": "object",
|
|
23895
|
+
"properties": {
|
|
23896
|
+
"speciality": {}
|
|
23897
|
+
},
|
|
23898
|
+
"required": [
|
|
23899
|
+
"speciality"
|
|
23900
|
+
]
|
|
23901
|
+
},
|
|
23902
|
+
"PostSpecialitiesIdUnofferResponse": {
|
|
23903
|
+
"type": "object",
|
|
23904
|
+
"properties": {
|
|
23905
|
+
"speciality": {}
|
|
23906
|
+
},
|
|
23907
|
+
"required": [
|
|
23908
|
+
"speciality"
|
|
23909
|
+
]
|
|
23910
|
+
},
|
|
23736
23911
|
"PostSpecialitiesRequest": {
|
|
23737
23912
|
"type": "object",
|
|
23738
23913
|
"properties": {
|
|
@@ -24759,9 +24934,9 @@
|
|
|
24759
24934
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
24760
24935
|
}
|
|
24761
24936
|
},
|
|
24762
|
-
"x-endpoint-count":
|
|
24763
|
-
"x-schema-count":
|
|
24937
|
+
"x-endpoint-count": 393,
|
|
24938
|
+
"x-schema-count": 432,
|
|
24764
24939
|
"x-undocumented-bodies": 9,
|
|
24765
|
-
"x-response-schemas":
|
|
24940
|
+
"x-response-schemas": 296,
|
|
24766
24941
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
24767
24942
|
}
|
package/docs/api-reference.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Bongos API reference
|
|
4
4
|
|
|
5
|
-
> **Generated from the live route files** — the route file is authoritative.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 393 endpoints across 63 route files.
|
|
6
6
|
> Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
|
|
7
7
|
|
|
8
8
|
Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -592,7 +592,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
592
592
|
| GET | `/api/bongos/sessions/search` | `metic+archon` | — | cross-builder corpus search (BFG-principal posture until 6C.1). |
|
|
593
593
|
| GET | `/api/bongos/sessions/upload-health` | `metic+archon` | — | GET /sessions/upload-health — the answer to "has anyone's session upload silently stopped?", which before task 1003865 existed ONLY as a … |
|
|
594
594
|
|
|
595
|
-
## `specialities` (
|
|
595
|
+
## `specialities` (12)
|
|
596
596
|
|
|
597
597
|
| Method | Path | Rank | Body | Description |
|
|
598
598
|
|---|---|---|---|---|
|
|
@@ -605,6 +605,9 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
605
605
|
| GET | `/api/bongos/specialities/:id/documents` | `any-builder` | — | |
|
|
606
606
|
| POST | `/api/bongos/specialities/:id/documents` | `any-builder` | `title`, `body_md`, `source` | ── training (a): the owner's own documents ─────────────────────────────── |
|
|
607
607
|
| DELETE | `/api/bongos/specialities/:id/documents/:docId` | `any-builder` | — | |
|
|
608
|
+
| POST | `/api/bongos/specialities/:id/offer` | `metic+archon` | — | ── offering: a project puts its name behind a speciality ───────────────── OFFERING IS CURATION, NOT OWNERSHIP, so it is gated differentl… |
|
|
609
|
+
| POST | `/api/bongos/specialities/:id/unoffer` | `metic+archon` | — | |
|
|
610
|
+
| GET | `/api/bongos/specialities/offered` | `any-builder` | — | GET /specialities/offered — the suggestions for THIS builder. |
|
|
608
611
|
|
|
609
612
|
## `sso` (8)
|
|
610
613
|
|