@bongos/core 1.20.2 → 1.20.4
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 +53 -38
- package/README.md +9 -18
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +2 -0
- package/clients/bongos-client/index.cjs +2 -0
- package/clients/bongos-client/index.d.ts +3 -0
- package/clients/bongos-client/index.mjs +2 -0
- package/docs/adr/0073-secrets-scan-exclude-uri-detector.md +1 -1
- package/docs/adr/0310-a-speciality-offers-skills-and-the-adopter-chooses-them.md +1 -1
- package/docs/api/openapi.json +70 -3
- package/docs/api-reference.md +3 -2
- package/docs/copy-inventory.md +32 -18
- package/docs/copy-registry.json +153 -27
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +2 -1
- package/docs/page-readings.json +112 -72
- package/modules/hall-ui/public/settings-specialities.js +169 -5
- package/modules/hall-ui/public/settings.css +52 -1
- package/modules/hall-ui/public/settings.states.json +2 -1
- package/modules/hall-ui/records/panel-family.md +2 -0
- package/modules/specialities/routes/specialities.js +27 -0
- package/modules/specialities/skills.js +109 -13
- package/modules/specialities/specialities.js +4 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/gds/control-manifest.js +9 -0
- package/scripts/gds/doc-control-claims.js +168 -0
- package/scripts/gds/fitness.js +1 -0
- package/scripts/hall-preview/server.js +4 -0
- package/src/bongos/module-scope-map.js +1 -1
- package/src/module-api.js +1 -1
- package/tests/doc_control_claims.mjs +133 -0
- package/tests/speciality_skills.mjs +76 -1
- package/tests/speciality_walkthrough_ui.mjs +218 -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.20.
|
|
6
|
-
"core_contract": "1.20.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.20.4",
|
|
6
|
+
"core_contract": "1.20.4",
|
|
7
|
+
"source_commit": "cb1154ab6f5663fcf5ec4b1b2de9d59f4d53c0cf",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-30T03:24:03.992Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 554,
|
|
13
13
|
"agent_docs_stubbed": 25,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2611,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3191,
|
|
20
|
+
"tree_sha256": "979ab93ed2588479c67154f837a646ebb982d48e470267a63835464662744650",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -312,7 +312,7 @@
|
|
|
312
312
|
{
|
|
313
313
|
"path": "README.md",
|
|
314
314
|
"mode": "0000644",
|
|
315
|
-
"sha256": "
|
|
315
|
+
"sha256": "9c9e99127efafe70d60e1d464f07815397e436e69dc0b82c2e67f41dbd8dc8d6"
|
|
316
316
|
},
|
|
317
317
|
{
|
|
318
318
|
"path": "bin/bongos.js",
|
|
@@ -322,12 +322,12 @@
|
|
|
322
322
|
{
|
|
323
323
|
"path": "clients/bongos-client/README.md",
|
|
324
324
|
"mode": "0000644",
|
|
325
|
-
"sha256": "
|
|
325
|
+
"sha256": "aeb6b6285117097aa891b659cdcaf20755098355556a9bfa6e11557c8f980366"
|
|
326
326
|
},
|
|
327
327
|
{
|
|
328
328
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
329
329
|
"mode": "0000644",
|
|
330
|
-
"sha256": "
|
|
330
|
+
"sha256": "1b36ddb96f6ca78135b0628b18f53d68c04c7ce950b60bb7916d2fcb08544474"
|
|
331
331
|
},
|
|
332
332
|
{
|
|
333
333
|
"path": "clients/bongos-client/examples/hello-world.mjs",
|
|
@@ -337,17 +337,17 @@
|
|
|
337
337
|
{
|
|
338
338
|
"path": "clients/bongos-client/index.cjs",
|
|
339
339
|
"mode": "0000644",
|
|
340
|
-
"sha256": "
|
|
340
|
+
"sha256": "65ba46030b9c7eec610029bd6fa0e55bc660618a81d50e3af1293f795a533a1c"
|
|
341
341
|
},
|
|
342
342
|
{
|
|
343
343
|
"path": "clients/bongos-client/index.d.ts",
|
|
344
344
|
"mode": "0000644",
|
|
345
|
-
"sha256": "
|
|
345
|
+
"sha256": "922701156282c55e3d7aa4a4ed4746fe47a579a189fd76065f868b21e319045a"
|
|
346
346
|
},
|
|
347
347
|
{
|
|
348
348
|
"path": "clients/bongos-client/index.mjs",
|
|
349
349
|
"mode": "0000644",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "3b4c0ae08ee72672d580355da8fd99109d075d85c650516f8b273641ddbff3f6"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "clients/bongos-client/package.json",
|
|
@@ -787,7 +787,7 @@
|
|
|
787
787
|
{
|
|
788
788
|
"path": "docs/adr/0073-secrets-scan-exclude-uri-detector.md",
|
|
789
789
|
"mode": "0000644",
|
|
790
|
-
"sha256": "
|
|
790
|
+
"sha256": "05107d37f497f8f5d8d1ca4d2a8d19e688fc9258352d7b9bfe1976c4ab1fee79"
|
|
791
791
|
},
|
|
792
792
|
{
|
|
793
793
|
"path": "docs/adr/0074-memory-map-stays-light.md",
|
|
@@ -2017,7 +2017,7 @@
|
|
|
2017
2017
|
{
|
|
2018
2018
|
"path": "docs/adr/0310-a-speciality-offers-skills-and-the-adopter-chooses-them.md",
|
|
2019
2019
|
"mode": "0000644",
|
|
2020
|
-
"sha256": "
|
|
2020
|
+
"sha256": "7641ba652bf937b55808ef0f6e10f14654800d60ad9bfb4326cd407fc1b8adcf"
|
|
2021
2021
|
},
|
|
2022
2022
|
{
|
|
2023
2023
|
"path": "docs/adr/0311-an-idea-is-a-permanent-origin-tag.md",
|
|
@@ -2227,12 +2227,12 @@
|
|
|
2227
2227
|
{
|
|
2228
2228
|
"path": "docs/api-reference.md",
|
|
2229
2229
|
"mode": "0000644",
|
|
2230
|
-
"sha256": "
|
|
2230
|
+
"sha256": "46c90700bd3b16d25e1c7b7753f270b23a7ec801fd7ca2c6c9d88125e270eca6"
|
|
2231
2231
|
},
|
|
2232
2232
|
{
|
|
2233
2233
|
"path": "docs/api/openapi.json",
|
|
2234
2234
|
"mode": "0000644",
|
|
2235
|
-
"sha256": "
|
|
2235
|
+
"sha256": "5d4be73b912ed2682fbcab207b4c83d58ca6530712de5ba350bbcb69b545079c"
|
|
2236
2236
|
},
|
|
2237
2237
|
{
|
|
2238
2238
|
"path": "docs/architecture.md",
|
|
@@ -2257,12 +2257,12 @@
|
|
|
2257
2257
|
{
|
|
2258
2258
|
"path": "docs/copy-inventory.md",
|
|
2259
2259
|
"mode": "0000644",
|
|
2260
|
-
"sha256": "
|
|
2260
|
+
"sha256": "3c78ba6c1c958d024141c68f2b99e71a665a042d2bccd187cb9ae3676c00b502"
|
|
2261
2261
|
},
|
|
2262
2262
|
{
|
|
2263
2263
|
"path": "docs/copy-registry.json",
|
|
2264
2264
|
"mode": "0000644",
|
|
2265
|
-
"sha256": "
|
|
2265
|
+
"sha256": "920b392dc53e07b5b290f8add28f9b1a3a50f9b2a13391c2a649250084656c5f"
|
|
2266
2266
|
},
|
|
2267
2267
|
{
|
|
2268
2268
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2762,7 +2762,7 @@
|
|
|
2762
2762
|
{
|
|
2763
2763
|
"path": "docs/module-api-changelog.md",
|
|
2764
2764
|
"mode": "0000644",
|
|
2765
|
-
"sha256": "
|
|
2765
|
+
"sha256": "fc86b2b7f4ff0f0825ddbef82d3d33286d642a86e5f4dcf6fb62d6ad2efe3558"
|
|
2766
2766
|
},
|
|
2767
2767
|
{
|
|
2768
2768
|
"path": "docs/modules-contract.md",
|
|
@@ -2847,12 +2847,12 @@
|
|
|
2847
2847
|
{
|
|
2848
2848
|
"path": "docs/page-inventory.json",
|
|
2849
2849
|
"mode": "0000644",
|
|
2850
|
-
"sha256": "
|
|
2850
|
+
"sha256": "d5242323bc5db540dfa190d5b89c92af0bf6e0a36419d141705fb4d7f51ea39c"
|
|
2851
2851
|
},
|
|
2852
2852
|
{
|
|
2853
2853
|
"path": "docs/page-readings.json",
|
|
2854
2854
|
"mode": "0000644",
|
|
2855
|
-
"sha256": "
|
|
2855
|
+
"sha256": "5397c8af5143f2e9a16f008bae0cd172713f641e1d810c87113f01e620499172"
|
|
2856
2856
|
},
|
|
2857
2857
|
{
|
|
2858
2858
|
"path": "docs/project-context.template.md",
|
|
@@ -5502,12 +5502,12 @@
|
|
|
5502
5502
|
{
|
|
5503
5503
|
"path": "modules/hall-ui/public/settings-specialities.js",
|
|
5504
5504
|
"mode": "0000644",
|
|
5505
|
-
"sha256": "
|
|
5505
|
+
"sha256": "9bc109f2e947f1db1525b937d350f46e5231cc14a9dd5db8fa1c97a2b46fe6d1"
|
|
5506
5506
|
},
|
|
5507
5507
|
{
|
|
5508
5508
|
"path": "modules/hall-ui/public/settings.css",
|
|
5509
5509
|
"mode": "0000644",
|
|
5510
|
-
"sha256": "
|
|
5510
|
+
"sha256": "d73ab35cd887285813fe8d3f3f13ec8b0e2d179b1a9fb3cc910ea6caa7131607"
|
|
5511
5511
|
},
|
|
5512
5512
|
{
|
|
5513
5513
|
"path": "modules/hall-ui/public/settings.html",
|
|
@@ -5522,7 +5522,7 @@
|
|
|
5522
5522
|
{
|
|
5523
5523
|
"path": "modules/hall-ui/public/settings.states.json",
|
|
5524
5524
|
"mode": "0000644",
|
|
5525
|
-
"sha256": "
|
|
5525
|
+
"sha256": "54f12d63deb961cfe6d13ad0d9ccd6ca1defbc3a4bce1c036e2d93ed4281951b"
|
|
5526
5526
|
},
|
|
5527
5527
|
{
|
|
5528
5528
|
"path": "modules/hall-ui/public/shell.js",
|
|
@@ -5757,7 +5757,7 @@
|
|
|
5757
5757
|
{
|
|
5758
5758
|
"path": "modules/hall-ui/records/panel-family.md",
|
|
5759
5759
|
"mode": "0000644",
|
|
5760
|
-
"sha256": "
|
|
5760
|
+
"sha256": "42e0d8cbb266e912c5ab034d2a88f11da310d4a4a8f61a87ce86a08b154d32d9"
|
|
5761
5761
|
},
|
|
5762
5762
|
{
|
|
5763
5763
|
"path": "modules/hall-ui/records/reading-rooms.md",
|
|
@@ -8317,17 +8317,17 @@
|
|
|
8317
8317
|
{
|
|
8318
8318
|
"path": "modules/specialities/routes/specialities.js",
|
|
8319
8319
|
"mode": "0000644",
|
|
8320
|
-
"sha256": "
|
|
8320
|
+
"sha256": "b12e3feba6f79e96f8e43ae41252d1136c37575b9a79201cbffb87d91b4f237c"
|
|
8321
8321
|
},
|
|
8322
8322
|
{
|
|
8323
8323
|
"path": "modules/specialities/skills.js",
|
|
8324
8324
|
"mode": "0000644",
|
|
8325
|
-
"sha256": "
|
|
8325
|
+
"sha256": "82b024a99907bee711ac83ba838430d2f253705ce4f5c083680c3b5fd909b24c"
|
|
8326
8326
|
},
|
|
8327
8327
|
{
|
|
8328
8328
|
"path": "modules/specialities/specialities.js",
|
|
8329
8329
|
"mode": "0000644",
|
|
8330
|
-
"sha256": "
|
|
8330
|
+
"sha256": "a27607e3760d1fb31d1f6e78d920cc8ab0a94e0add3ea7497d4989637ce3173a"
|
|
8331
8331
|
},
|
|
8332
8332
|
{
|
|
8333
8333
|
"path": "modules/status-ui/CLAUDE.md",
|
|
@@ -8822,12 +8822,12 @@
|
|
|
8822
8822
|
{
|
|
8823
8823
|
"path": "package-lock.json",
|
|
8824
8824
|
"mode": "0000644",
|
|
8825
|
-
"sha256": "
|
|
8825
|
+
"sha256": "a2051b26efcb3819d5b8190bff59b4695bbd0cd69efed2f95a4af8717e6a1c38"
|
|
8826
8826
|
},
|
|
8827
8827
|
{
|
|
8828
8828
|
"path": "package.json",
|
|
8829
8829
|
"mode": "0000644",
|
|
8830
|
-
"sha256": "
|
|
8830
|
+
"sha256": "895cf915952f0155ee5d26315afd456d0630e5ab39ce65c22fa10bc0fa5aa7ae"
|
|
8831
8831
|
},
|
|
8832
8832
|
{
|
|
8833
8833
|
"path": "public-docs/index.html",
|
|
@@ -8847,7 +8847,7 @@
|
|
|
8847
8847
|
{
|
|
8848
8848
|
"path": "release-notes.json",
|
|
8849
8849
|
"mode": "0000644",
|
|
8850
|
-
"sha256": "
|
|
8850
|
+
"sha256": "b0f0a951c309fec69d3e8c0a4b30516bf56b1fcb4ce24490d84a89bd14ed01a0"
|
|
8851
8851
|
},
|
|
8852
8852
|
{
|
|
8853
8853
|
"path": "scripts/bongos-mcp.js",
|
|
@@ -9197,7 +9197,7 @@
|
|
|
9197
9197
|
{
|
|
9198
9198
|
"path": "scripts/gds/control-manifest.js",
|
|
9199
9199
|
"mode": "0000644",
|
|
9200
|
-
"sha256": "
|
|
9200
|
+
"sha256": "063e4e14f040bf78de4a8212222405cc361520d2475453b1d516329a7ca9f070"
|
|
9201
9201
|
},
|
|
9202
9202
|
{
|
|
9203
9203
|
"path": "scripts/gds/copy-apply.js",
|
|
@@ -9319,6 +9319,11 @@
|
|
|
9319
9319
|
"mode": "0000644",
|
|
9320
9320
|
"sha256": "17d0fbc570b6dea3dfcf2425058510cd70b23f066fdf1ed751072852713284a3"
|
|
9321
9321
|
},
|
|
9322
|
+
{
|
|
9323
|
+
"path": "scripts/gds/doc-control-claims.js",
|
|
9324
|
+
"mode": "0000644",
|
|
9325
|
+
"sha256": "94c89c10620d3d6678fa3b1a8decebc6d338c0b0b2a3799880e49311d2cd2770"
|
|
9326
|
+
},
|
|
9322
9327
|
{
|
|
9323
9328
|
"path": "scripts/gds/docs-entropy.js",
|
|
9324
9329
|
"mode": "0000644",
|
|
@@ -9407,7 +9412,7 @@
|
|
|
9407
9412
|
{
|
|
9408
9413
|
"path": "scripts/gds/fitness.js",
|
|
9409
9414
|
"mode": "0000644",
|
|
9410
|
-
"sha256": "
|
|
9415
|
+
"sha256": "dee3e8db3ad7fff3c1e30a59aa58bab00972cba9710bd463e10ab8a3edc71e38"
|
|
9411
9416
|
},
|
|
9412
9417
|
{
|
|
9413
9418
|
"path": "scripts/gds/gate-review.js",
|
|
@@ -10522,7 +10527,7 @@
|
|
|
10522
10527
|
{
|
|
10523
10528
|
"path": "scripts/hall-preview/server.js",
|
|
10524
10529
|
"mode": "0000644",
|
|
10525
|
-
"sha256": "
|
|
10530
|
+
"sha256": "4529909a899a52180c5876d926be2ef2dc42a8bffef43d84c38dd9d399f2c5d2"
|
|
10526
10531
|
},
|
|
10527
10532
|
{
|
|
10528
10533
|
"path": "scripts/hall-preview/task-visual.js",
|
|
@@ -10732,7 +10737,7 @@
|
|
|
10732
10737
|
{
|
|
10733
10738
|
"path": "src/bongos/module-scope-map.js",
|
|
10734
10739
|
"mode": "0000644",
|
|
10735
|
-
"sha256": "
|
|
10740
|
+
"sha256": "cc78b33cc9d0fca6d217a7c6aaf66f64de9cbe1447a352fc769eb8556207a453"
|
|
10736
10741
|
},
|
|
10737
10742
|
{
|
|
10738
10743
|
"path": "src/bongos/module-store.js",
|
|
@@ -10942,7 +10947,7 @@
|
|
|
10942
10947
|
{
|
|
10943
10948
|
"path": "src/module-api.js",
|
|
10944
10949
|
"mode": "0000644",
|
|
10945
|
-
"sha256": "
|
|
10950
|
+
"sha256": "e3e6394ab165f0c08e998c0c43fe18d1ec92872a84490deb7a9a01712656c024"
|
|
10946
10951
|
},
|
|
10947
10952
|
{
|
|
10948
10953
|
"path": "src/module-loader/catalog.js",
|
|
@@ -12184,6 +12189,11 @@
|
|
|
12184
12189
|
"mode": "0000644",
|
|
12185
12190
|
"sha256": "f51d3c747fbb3201ed3388abb1386d0547c3a3be70d7ad7237b9a0f5fdd2347b"
|
|
12186
12191
|
},
|
|
12192
|
+
{
|
|
12193
|
+
"path": "tests/doc_control_claims.mjs",
|
|
12194
|
+
"mode": "0000644",
|
|
12195
|
+
"sha256": "499d0436bc000e9d1749d99d3e1e9886cb1a4bdd4388f5a165bc099359c7132a"
|
|
12196
|
+
},
|
|
12187
12197
|
{
|
|
12188
12198
|
"path": "tests/docs_entropy.mjs",
|
|
12189
12199
|
"mode": "0000644",
|
|
@@ -15427,7 +15437,12 @@
|
|
|
15427
15437
|
{
|
|
15428
15438
|
"path": "tests/speciality_skills.mjs",
|
|
15429
15439
|
"mode": "0000644",
|
|
15430
|
-
"sha256": "
|
|
15440
|
+
"sha256": "dddd0c7c5544dacdfd65160d720814a5a71fd74708e7e7beac5964bb59b633fc"
|
|
15441
|
+
},
|
|
15442
|
+
{
|
|
15443
|
+
"path": "tests/speciality_walkthrough_ui.mjs",
|
|
15444
|
+
"mode": "0000644",
|
|
15445
|
+
"sha256": "bc83406501c682b33a19ac7a0a1fa23a07f9e52654c265e2513b5f73b3311f3c"
|
|
15431
15446
|
},
|
|
15432
15447
|
{
|
|
15433
15448
|
"path": "tests/spike_task_map.mjs",
|
package/README.md
CHANGED
|
@@ -48,28 +48,19 @@ When it finishes, open Claude Code and run `/builder-start` to see what tasks ar
|
|
|
48
48
|
|
|
49
49
|
## Secrets scanning
|
|
50
50
|
|
|
51
|
-
We keep secrets (`.env` files, API keys, private keys) out of the repo with
|
|
51
|
+
We keep secrets (`.env` files, API keys, private keys) out of the repo with three layers. The CI and patrol layers are **instance topology**: `.github/` is excluded from the published core artifact, so an instance that wants them carries its own copies.
|
|
52
52
|
|
|
53
|
-
- **
|
|
53
|
+
- **Prevent — the secret-gate hook** (`.claude/hooks/secret-gate.js`, wired in `.claude/settings.json`). A Claude Code PreToolUse hook that refuses to write secret-shaped content (provider-prefixed tokens, PEM blocks) into the working tree or a shell. It is the cooperative layer: it fails open on any error, so the two gates below are what actually hold.
|
|
54
|
+
- **Gate — the CI secret scan** (the `Secret scan` step in `.github/workflows/unit.yml`). Every PR runs a pinned, checksum-verified gitleaks over the checked-out tree against `.gitleaks.toml`. This must pass before merge. It scans current files, not history.
|
|
55
|
+
- **Patrol — the weekly history scan** (`scripts/gds/redteam-patrol.js`, run by `.github/workflows/redteam-patrol.yml`). Scans the full git history with the same config, which is how a secret committed and later deleted is still caught.
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
node scripts/gds/install-git-hooks.js
|
|
57
|
-
```
|
|
57
|
+
A local pre-commit hook is optional and an instance addition: this repo tracks `.husky/pre-push` (the ADR 0043 permission gate, a separate wall) but no secrets pre-commit hook. If your instance adds hooks under `.husky/`, activate them once per clone with `node scripts/gds/install-git-hooks.js` (it no-ops on a checkout without a `.husky/`; `node scripts/gds/doctor.js` reports which case you're in).
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
### If a scan blocks you, here's how to investigate
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- **CI scan** (`.github/workflows/secrets-scan.yml`) — every PR to `main` runs TruffleHog over the **full git history**. This must pass before merge.
|
|
66
|
-
|
|
67
|
-
### If a commit is blocked, here's how to investigate
|
|
68
|
-
|
|
69
|
-
1. **Read the output.** The hook prints the offending file(s) and why.
|
|
70
|
-
2. **Is it a real secret?** Then it must never be committed. Remove it from the commit (`git restore --staged <file>`), and move the value out of the repo — local secrets go in `.env.local` (gitignored; run `/builder-setup`); production secrets live in your instance's secret store, never in the tree. If it was *already committed in an earlier commit*, the history scan will keep failing until the history is scrubbed — flag this to the owner, since rewriting shared history needs care.
|
|
71
|
-
3. **Is it a false positive?** (e.g. an example key in docs, a test fixture, a Stripe `pk_test_` publishable key.) Add a path regex — one per line — to `.husky/secrets-allowlist.txt` (created on first use). Both the hook and CI read that allowlist. Keep entries narrow and only add them after confirming the match is genuinely not a secret.
|
|
72
|
-
4. **Genuine emergency commit** (you're sure it's clean and need to move now): `git commit --no-verify` skips the local hook — but CI will still scan the PR, so this only defers the check, it doesn't bypass it.
|
|
61
|
+
1. **Read the output.** The hook and gitleaks both name the offending file and the rule that matched.
|
|
62
|
+
2. **Is it a real secret?** Then it must never be committed. Remove it from the commit (`git restore --staged <file>`), and move the value out of the repo — local secrets go in `.env.local` (gitignored; run `/builder-setup`); production secrets live in your instance's secret store, never in the tree. If it was *already committed in an earlier commit*, the weekly history patrol will keep reporting it until the history is scrubbed — flag this to the owner, since rewriting shared history needs care.
|
|
63
|
+
3. **Is it a false positive?** (e.g. an example key in docs, a test fixture, a Stripe `pk_test_` publishable key.) Add a narrow path to the `[allowlist]` in `.gitleaks.toml`, and the matching entry to the `ALLOWLIST` in `.claude/hooks/secret-gate.js` — the two lists are kept in step. Only add one after confirming the match is genuinely not a secret.
|
|
73
64
|
|
|
74
65
|
## If your CLI starts 401'ing
|
|
75
66
|
|
|
@@ -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
|
+
- 455 operations across 69 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -979,6 +979,8 @@ function createClient(opts = {}) {
|
|
|
979
979
|
deleteSpecialitiesIdDocumentsDocId: (args) => request("DELETE", "/specialities/{id}/documents/{docId}", { hasBody: false }, args),
|
|
980
980
|
// POST /specialities/{id}/offer — rank: metic+archon — POST /specialities/:id/offer
|
|
981
981
|
postSpecialitiesIdOffer: (args) => request("POST", "/specialities/{id}/offer", { hasBody: true }, args),
|
|
982
|
+
// GET /specialities/{id}/skills — rank: any-builder — GET /specialities/:id/skills
|
|
983
|
+
getSpecialitiesIdSkills: (args) => request("GET", "/specialities/{id}/skills", { hasBody: false }, args),
|
|
982
984
|
// PUT /specialities/{id}/skills — rank: any-builder — PUT /specialities/:id/skills
|
|
983
985
|
putSpecialitiesIdSkills: (args) => request("PUT", "/specialities/{id}/skills", { hasBody: true }, args),
|
|
984
986
|
// POST /specialities/{id}/unoffer — rank: metic+archon — POST /specialities/:id/unoffer
|
|
@@ -978,6 +978,8 @@ function createClient(opts = {}) {
|
|
|
978
978
|
deleteSpecialitiesIdDocumentsDocId: (args) => request("DELETE", "/specialities/{id}/documents/{docId}", { hasBody: false }, args),
|
|
979
979
|
// POST /specialities/{id}/offer — rank: metic+archon — POST /specialities/:id/offer
|
|
980
980
|
postSpecialitiesIdOffer: (args) => request("POST", "/specialities/{id}/offer", { hasBody: true }, args),
|
|
981
|
+
// GET /specialities/{id}/skills — rank: any-builder — GET /specialities/:id/skills
|
|
982
|
+
getSpecialitiesIdSkills: (args) => request("GET", "/specialities/{id}/skills", { hasBody: false }, args),
|
|
981
983
|
// PUT /specialities/{id}/skills — rank: any-builder — PUT /specialities/:id/skills
|
|
982
984
|
putSpecialitiesIdSkills: (args) => request("PUT", "/specialities/{id}/skills", { hasBody: true }, args),
|
|
983
985
|
// POST /specialities/{id}/unoffer — rank: metic+archon — POST /specialities/:id/unoffer
|
|
@@ -157,6 +157,7 @@ export interface GetSessionsSearchResponse { sessions: unknown; count: unknown;
|
|
|
157
157
|
export interface GetSoftwareUpdateResponse { ok: boolean; update: unknown; door: unknown; can_update: unknown }
|
|
158
158
|
export interface GetSpecialitiesIdDocumentsResponse { documents: unknown }
|
|
159
159
|
export interface GetSpecialitiesIdResponse { speciality: unknown }
|
|
160
|
+
export interface GetSpecialitiesIdSkillsResponse { speciality: unknown; adopted: boolean; enabled: unknown; skills: unknown }
|
|
160
161
|
export interface GetSpecialitiesOfferedResponse { suggestions: unknown }
|
|
161
162
|
export interface GetSpecialitiesResponse { specialities: unknown }
|
|
162
163
|
export interface GetSsoPubkeyResponse { alg: unknown; format: unknown; public_key_b64: unknown }
|
|
@@ -1398,6 +1399,8 @@ export interface BongosClient {
|
|
|
1398
1399
|
deleteSpecialitiesIdDocumentsDocId(args?: RequestArgs): Promise<DeleteSpecialitiesIdDocumentsDocIdResponse>;
|
|
1399
1400
|
/** POST /specialities/{id}/offer — rank: metic+archon */
|
|
1400
1401
|
postSpecialitiesIdOffer(args?: RequestArgs): Promise<PostSpecialitiesIdOfferResponse>;
|
|
1402
|
+
/** GET /specialities/{id}/skills — rank: any-builder */
|
|
1403
|
+
getSpecialitiesIdSkills(args?: RequestArgs): Promise<GetSpecialitiesIdSkillsResponse>;
|
|
1401
1404
|
/** PUT /specialities/{id}/skills — rank: any-builder */
|
|
1402
1405
|
putSpecialitiesIdSkills(args: RequestArgs & { body: PutSpecialitiesIdSkillsRequest }): Promise<PutSpecialitiesIdSkillsResponse>;
|
|
1403
1406
|
/** POST /specialities/{id}/unoffer — rank: metic+archon */
|
|
@@ -975,6 +975,8 @@ export function createClient(opts = {}) {
|
|
|
975
975
|
deleteSpecialitiesIdDocumentsDocId: (args) => request("DELETE", "/specialities/{id}/documents/{docId}", { hasBody: false }, args),
|
|
976
976
|
// POST /specialities/{id}/offer — rank: metic+archon — POST /specialities/:id/offer
|
|
977
977
|
postSpecialitiesIdOffer: (args) => request("POST", "/specialities/{id}/offer", { hasBody: true }, args),
|
|
978
|
+
// GET /specialities/{id}/skills — rank: any-builder — GET /specialities/:id/skills
|
|
979
|
+
getSpecialitiesIdSkills: (args) => request("GET", "/specialities/{id}/skills", { hasBody: false }, args),
|
|
978
980
|
// PUT /specialities/{id}/skills — rank: any-builder — PUT /specialities/:id/skills
|
|
979
981
|
putSpecialitiesIdSkills: (args) => request("PUT", "/specialities/{id}/skills", { hasBody: true }, args),
|
|
980
982
|
// POST /specialities/{id}/unoffer — rank: metic+archon — POST /specialities/:id/unoffer
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Date:** 2026-06-20
|
|
4
4
|
**Context:** Secrets-scanning gate (`.github/workflows/secrets-scan.yml` + the `.husky/pre-commit` early-catch). Tasks [#1318](https://example.com/builders#/task/1318) and [#1320](https://example.com/builders#/task/1320). Relates to [ADR 0022](0022-secrets-policy.md) (secrets policy) and [ADR 0071](0071-box-confirm-before-destroyed-and-drift-reconcile.md) (dev-box teardown — the trigger).
|
|
5
|
-
**Status:**
|
|
5
|
+
**Status:** Superseded — the TruffleHog gate this ADR tunes did not survive the core extraction; the live CI secret scan is gitleaks in the unit workflow against `.gitleaks.toml` (task 1003126, ADR 0022). Kept as the record of why the URI detector was excluded. Marked by task 1003418.
|
|
6
6
|
**Track:** `internal` (development system / CI gates).
|
|
7
7
|
|
|
8
8
|
## Problem — a noisy detector turned a green gate red repo-wide
|
|
@@ -75,7 +75,7 @@ Already shipped in `specialities_catalog`: `owner_kind` (`builder` | `project`),
|
|
|
75
75
|
Deliberately separate tasks, because the middle one is where the ruling lives and it should not be a sub-bullet of a schema change:
|
|
76
76
|
|
|
77
77
|
1. **Schema + validation** — the offered set on the catalog, the enabled set on the adoption, `validateDraft`, the routes. Refuses a skill the instance does not have. *Built in task 1004072 (`skills` / `enabled_skills`, specialities_003, `modules/specialities/skills.js`).*
|
|
78
|
-
2. **The walkthrough** — the adoption flow that presents each skill and takes a decision. The ruling's real deliverable.
|
|
78
|
+
2. **The walkthrough** — the adoption flow that presents each skill and takes a decision. The ruling's real deliverable. *Built in task 1004073 (`GET /specialities/:id/skills`, `skills.explainSkill`, the hall settings panel). The consequence above came true: skill descriptions are model-facing, so a SKILL.md may now carry optional people-facing `plain:` / `reach-for:` / `cost:` lines, and the walkthrough says so when it had to derive the words instead.*
|
|
79
79
|
3. **Injection** — the enabled set reaches the session through the contract the Conductor already injects; a line naming the skills this builder leans on, per [ADR 0296](0296-a-role-speciality-is-data-over-three-existing-surfaces.md)'s pattern of using surfaces that exist.
|
|
80
80
|
|
|
81
81
|
Nothing is built by this ADR. It is the decision task 1003978 asked to be made first.
|
package/docs/api/openapi.json
CHANGED
|
@@ -17998,6 +17998,56 @@
|
|
|
17998
17998
|
}
|
|
17999
17999
|
},
|
|
18000
18000
|
"/specialities/{id}/skills": {
|
|
18001
|
+
"get": {
|
|
18002
|
+
"operationId": "get_specialities_id_skills",
|
|
18003
|
+
"tags": [
|
|
18004
|
+
"specialities"
|
|
18005
|
+
],
|
|
18006
|
+
"summary": "GET /specialities/:id/skills",
|
|
18007
|
+
"description": "GET /specialities/:id/skills — what the adoption WALKTHROUGH shows (task 1004073, ADR 0310 §3): each skill the speciality offers, explained for the person deciding (what it does, when to reach for it, what it costs, what it needs), plus the caller's own enabled set and whether they hold it at all. Same visibility as GET /specialities/:id — 404 for a row you cannot see. An offered skill this instance no longer has comes back `installed: false`, so the walkthrough can say so instead of offering something that would 404. Read-only; rank: any builder who may see the speciality.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
18008
|
+
"x-rank": "any-builder",
|
|
18009
|
+
"x-source": "modules/specialities/routes/specialities.js",
|
|
18010
|
+
"parameters": [
|
|
18011
|
+
{
|
|
18012
|
+
"name": "id",
|
|
18013
|
+
"in": "path",
|
|
18014
|
+
"required": true,
|
|
18015
|
+
"schema": {
|
|
18016
|
+
"type": "string"
|
|
18017
|
+
},
|
|
18018
|
+
"description": "Path parameter `id`."
|
|
18019
|
+
}
|
|
18020
|
+
],
|
|
18021
|
+
"responses": {
|
|
18022
|
+
"200": {
|
|
18023
|
+
"description": "Success.",
|
|
18024
|
+
"content": {
|
|
18025
|
+
"application/json": {
|
|
18026
|
+
"schema": {
|
|
18027
|
+
"$ref": "#/components/schemas/GetSpecialitiesIdSkillsResponse"
|
|
18028
|
+
}
|
|
18029
|
+
}
|
|
18030
|
+
}
|
|
18031
|
+
},
|
|
18032
|
+
"400": {
|
|
18033
|
+
"$ref": "#/components/responses/BadRequest"
|
|
18034
|
+
},
|
|
18035
|
+
"401": {
|
|
18036
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
18037
|
+
},
|
|
18038
|
+
"403": {
|
|
18039
|
+
"$ref": "#/components/responses/Forbidden"
|
|
18040
|
+
},
|
|
18041
|
+
"404": {
|
|
18042
|
+
"$ref": "#/components/responses/NotFound"
|
|
18043
|
+
}
|
|
18044
|
+
},
|
|
18045
|
+
"security": [
|
|
18046
|
+
{
|
|
18047
|
+
"builderSession": []
|
|
18048
|
+
}
|
|
18049
|
+
]
|
|
18050
|
+
},
|
|
18001
18051
|
"put": {
|
|
18002
18052
|
"operationId": "put_specialities_id_skills",
|
|
18003
18053
|
"tags": [
|
|
@@ -23284,6 +23334,23 @@
|
|
|
23284
23334
|
"speciality"
|
|
23285
23335
|
]
|
|
23286
23336
|
},
|
|
23337
|
+
"GetSpecialitiesIdSkillsResponse": {
|
|
23338
|
+
"type": "object",
|
|
23339
|
+
"properties": {
|
|
23340
|
+
"speciality": {},
|
|
23341
|
+
"adopted": {
|
|
23342
|
+
"type": "boolean"
|
|
23343
|
+
},
|
|
23344
|
+
"enabled": {},
|
|
23345
|
+
"skills": {}
|
|
23346
|
+
},
|
|
23347
|
+
"required": [
|
|
23348
|
+
"speciality",
|
|
23349
|
+
"adopted",
|
|
23350
|
+
"enabled",
|
|
23351
|
+
"skills"
|
|
23352
|
+
]
|
|
23353
|
+
},
|
|
23287
23354
|
"GetSpecialitiesOfferedResponse": {
|
|
23288
23355
|
"type": "object",
|
|
23289
23356
|
"properties": {
|
|
@@ -29027,9 +29094,9 @@
|
|
|
29027
29094
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
29028
29095
|
}
|
|
29029
29096
|
},
|
|
29030
|
-
"x-endpoint-count":
|
|
29031
|
-
"x-schema-count":
|
|
29097
|
+
"x-endpoint-count": 455,
|
|
29098
|
+
"x-schema-count": 487,
|
|
29032
29099
|
"x-undocumented-bodies": 11,
|
|
29033
|
-
"x-response-schemas":
|
|
29100
|
+
"x-response-schemas": 331,
|
|
29034
29101
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
29035
29102
|
}
|
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. 455 endpoints across 81 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`.
|
|
@@ -688,7 +688,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
688
688
|
|---|---|---|---|---|
|
|
689
689
|
| GET | `/api/bongos/software-update` | `any-builder` | — | GET /software-update — Settings → Software update (task 1004296): this project's core, the newest release its channel allows, what the ve… |
|
|
690
690
|
|
|
691
|
-
## `specialities` (
|
|
691
|
+
## `specialities` (14)
|
|
692
692
|
|
|
693
693
|
| Method | Path | Rank | Body | Description |
|
|
694
694
|
|---|---|---|---|---|
|
|
@@ -702,6 +702,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
702
702
|
| POST | `/api/bongos/specialities/:id/documents` | `any-builder` | `title`, `body_md`, `source` | ── training (a): the owner's own documents ─────────────────────────────── |
|
|
703
703
|
| DELETE | `/api/bongos/specialities/:id/documents/:docId` | `any-builder` | — | |
|
|
704
704
|
| 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… |
|
|
705
|
+
| GET | `/api/bongos/specialities/:id/skills` | `any-builder` | — | GET /specialities/:id/skills — what the adoption WALKTHROUGH shows (task 1004073, ADR 0310 §3): each skill the speciality offers, explain… |
|
|
705
706
|
| PUT | `/api/bongos/specialities/:id/skills` | `any-builder` | `enabled_skills` | PUT /specialities/:id/skills — the caller's ENABLED set for a speciality they hold (task 1004072, ADR 0310 §2). |
|
|
706
707
|
| POST | `/api/bongos/specialities/:id/unoffer` | `metic+archon` | — | |
|
|
707
708
|
| GET | `/api/bongos/specialities/offered` | `any-builder` | — | GET /specialities/offered — the suggestions for THIS builder. |
|