@bongos/core 1.19.372 → 1.19.374
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 +54 -34
- package/.claude/skills/goal-create/SKILL.md +7 -4
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +4 -0
- package/clients/bongos-client/index.cjs +4 -0
- package/clients/bongos-client/index.d.ts +5 -1
- package/clients/bongos-client/index.mjs +4 -0
- package/docs/adr/0161-publish-on-merge.md +1 -1
- package/docs/adr/0180-dependency-intake-and-drift-policy.md +6 -0
- package/docs/api/openapi.json +79 -4
- package/docs/api-reference.md +5 -3
- package/docs/copy-inventory.md +6 -3
- package/docs/copy-registry.json +32 -5
- package/modules/builder-settings/profile-nudge-prefs.js +125 -0
- package/modules/builder-settings/routes/settings.js +48 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +4 -0
- package/modules/hall-ui/public/goal-inbox.js +10 -0
- package/modules/hall-ui/public/index.html +4 -0
- package/modules/hall-ui/public/profile-nudge.js +122 -0
- package/modules/lifecycle/goal-category.js +28 -0
- package/modules/lifecycle/routes/goals.js +10 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/bump-version.js +41 -1
- package/scripts/gds/fitness-checks-write-validation.js +1 -0
- package/scripts/gds/ship-land.js +94 -3
- package/src/module-api.js +5 -1
- package/tests/bump_version.mjs +77 -1
- package/tests/goal_category.mjs +28 -0
- package/tests/profile_nudge_prefs.mjs +97 -0
- package/tests/ship_push_diagnosis.mjs +78 -0
- package/tests/sound_player.mjs +38 -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.374",
|
|
6
|
+
"core_contract": "1.19.374",
|
|
7
|
+
"source_commit": "ef487914ca1cc1439cbbe614d215ac0bcc4a7a11",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-08-25T22:
|
|
9
|
+
"built_at": "2026-08-25T22:31:01.224Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 334,
|
|
13
13
|
"agent_docs_stubbed": 22,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 1549,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 1905,
|
|
20
|
+
"tree_sha256": "7a78e601f7e02412f566e605aed571ee145c0daa03911d7f8ad188e9369fd34f",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/blocker-review/SKILL.md",
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
{
|
|
148
148
|
"path": ".claude/skills/goal-create/SKILL.md",
|
|
149
149
|
"mode": "0000644",
|
|
150
|
-
"sha256": "
|
|
150
|
+
"sha256": "88494b0c9604992c43fb0efbb5d2cc34de51fd3645e7d65b22a65f0538e8f26f"
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
"path": ".claude/skills/goal-review/SKILL.md",
|
|
@@ -347,12 +347,12 @@
|
|
|
347
347
|
{
|
|
348
348
|
"path": "clients/bongos-client/README.md",
|
|
349
349
|
"mode": "0000644",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "4855d865dbe79d1d6b9d774c8cbf480c36c6a3eae28392845850efb0689a6997"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
354
354
|
"mode": "0000644",
|
|
355
|
-
"sha256": "
|
|
355
|
+
"sha256": "e5bde7c338fc07f45f8f58dec2fa8826c0ea11d85c33146c9b6e7bdcc7049ba2"
|
|
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": "8f3092af15067a6ed54092a10b4d43cd64eda7ae8fec0e50fe43de91428c9157"
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
"path": "clients/bongos-client/index.d.ts",
|
|
369
369
|
"mode": "0000644",
|
|
370
|
-
"sha256": "
|
|
370
|
+
"sha256": "70cc0227b4003bf47a6942656c8ce652c9884022cee81006c0c73e552eec6361"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.mjs",
|
|
374
374
|
"mode": "0000644",
|
|
375
|
-
"sha256": "
|
|
375
|
+
"sha256": "819100f31cb468e82a0f2684a0e16b5ae1252cf91ef30b1923398af968ee5170"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/package.json",
|
|
@@ -1277,7 +1277,7 @@
|
|
|
1277
1277
|
{
|
|
1278
1278
|
"path": "docs/adr/0161-publish-on-merge.md",
|
|
1279
1279
|
"mode": "0000644",
|
|
1280
|
-
"sha256": "
|
|
1280
|
+
"sha256": "b625ad07227ce25f8fe082fa9ccd93d3d704fd726aceb967d1f43677e164239a"
|
|
1281
1281
|
},
|
|
1282
1282
|
{
|
|
1283
1283
|
"path": "docs/adr/0162-review-gates-retired-rank-consistent-ci-only.md",
|
|
@@ -1382,7 +1382,7 @@
|
|
|
1382
1382
|
{
|
|
1383
1383
|
"path": "docs/adr/0180-dependency-intake-and-drift-policy.md",
|
|
1384
1384
|
"mode": "0000644",
|
|
1385
|
-
"sha256": "
|
|
1385
|
+
"sha256": "9d50f2f71de5c4eba8d5af40aca201c6e054b1eec937a9e1342d1bb3b4ce45c1"
|
|
1386
1386
|
},
|
|
1387
1387
|
{
|
|
1388
1388
|
"path": "docs/adr/0181-teardown-state-gate-and-address-retention.md",
|
|
@@ -1472,12 +1472,12 @@
|
|
|
1472
1472
|
{
|
|
1473
1473
|
"path": "docs/api-reference.md",
|
|
1474
1474
|
"mode": "0000644",
|
|
1475
|
-
"sha256": "
|
|
1475
|
+
"sha256": "5972f14220674de9bcb4fbcdbe6859f208555bf0adc3de70ccefd64544545344"
|
|
1476
1476
|
},
|
|
1477
1477
|
{
|
|
1478
1478
|
"path": "docs/api/openapi.json",
|
|
1479
1479
|
"mode": "0000644",
|
|
1480
|
-
"sha256": "
|
|
1480
|
+
"sha256": "342d1060be381a873d917c47037097e9f2561546900c4ca16986aed10913c553"
|
|
1481
1481
|
},
|
|
1482
1482
|
{
|
|
1483
1483
|
"path": "docs/architecture.md",
|
|
@@ -1502,12 +1502,12 @@
|
|
|
1502
1502
|
{
|
|
1503
1503
|
"path": "docs/copy-inventory.md",
|
|
1504
1504
|
"mode": "0000644",
|
|
1505
|
-
"sha256": "
|
|
1505
|
+
"sha256": "5805bd8d2f443b028c4f6934ce1619254d3e6dc47f2ebc3f24ced87f5614066f"
|
|
1506
1506
|
},
|
|
1507
1507
|
{
|
|
1508
1508
|
"path": "docs/copy-registry.json",
|
|
1509
1509
|
"mode": "0000644",
|
|
1510
|
-
"sha256": "
|
|
1510
|
+
"sha256": "11839e3afac4b57f3a230f32bfa004a08ed34d0315ec94096cd0f83949b104a5"
|
|
1511
1511
|
},
|
|
1512
1512
|
{
|
|
1513
1513
|
"path": "docs/design-contract.md",
|
|
@@ -2609,6 +2609,11 @@
|
|
|
2609
2609
|
"mode": "0000644",
|
|
2610
2610
|
"sha256": "5d79d4f6f0e24b0ae9731a31ebabadc43faa3b6a423d31800b664960dc16145c"
|
|
2611
2611
|
},
|
|
2612
|
+
{
|
|
2613
|
+
"path": "modules/builder-settings/profile-nudge-prefs.js",
|
|
2614
|
+
"mode": "0000644",
|
|
2615
|
+
"sha256": "26935726b1b388fb90793145d22f95641b2222a7b8ee29b2ed418bb2725f9fba"
|
|
2616
|
+
},
|
|
2612
2617
|
{
|
|
2613
2618
|
"path": "modules/builder-settings/render-prefs.js",
|
|
2614
2619
|
"mode": "0000644",
|
|
@@ -2617,7 +2622,7 @@
|
|
|
2617
2622
|
{
|
|
2618
2623
|
"path": "modules/builder-settings/routes/settings.js",
|
|
2619
2624
|
"mode": "0000644",
|
|
2620
|
-
"sha256": "
|
|
2625
|
+
"sha256": "e1de49abd66d5dece54d5a794bb1af28469028903b022f3d7b1e2c453ea0b851"
|
|
2621
2626
|
},
|
|
2622
2627
|
{
|
|
2623
2628
|
"path": "modules/builder-settings/settings.js",
|
|
@@ -2907,7 +2912,7 @@
|
|
|
2907
2912
|
{
|
|
2908
2913
|
"path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
|
|
2909
2914
|
"mode": "0000644",
|
|
2910
|
-
"sha256": "
|
|
2915
|
+
"sha256": "8f3092af15067a6ed54092a10b4d43cd64eda7ae8fec0e50fe43de91428c9157"
|
|
2911
2916
|
},
|
|
2912
2917
|
{
|
|
2913
2918
|
"path": "modules/dev-box/app/test/unit.mjs",
|
|
@@ -3557,7 +3562,7 @@
|
|
|
3557
3562
|
{
|
|
3558
3563
|
"path": "modules/hall-ui/public/goal-inbox.js",
|
|
3559
3564
|
"mode": "0000644",
|
|
3560
|
-
"sha256": "
|
|
3565
|
+
"sha256": "71836d70e751ea8c7363c3217931a2cdfaeea38b770b90e564baf69cfe75f40f"
|
|
3561
3566
|
},
|
|
3562
3567
|
{
|
|
3563
3568
|
"path": "modules/hall-ui/public/goals-lib.js",
|
|
@@ -3667,7 +3672,7 @@
|
|
|
3667
3672
|
{
|
|
3668
3673
|
"path": "modules/hall-ui/public/index.html",
|
|
3669
3674
|
"mode": "0000644",
|
|
3670
|
-
"sha256": "
|
|
3675
|
+
"sha256": "78cb8c70e92e70d996a8f1694b7b01bf893f6aa3f210bc297e48cdd961b971ae"
|
|
3671
3676
|
},
|
|
3672
3677
|
{
|
|
3673
3678
|
"path": "modules/hall-ui/public/md-reader.js",
|
|
@@ -3754,6 +3759,11 @@
|
|
|
3754
3759
|
"mode": "0000644",
|
|
3755
3760
|
"sha256": "40f6f44283aa7dba25a2c983d77b6e6f53f40eefef3394122d34f7f42fc5f676"
|
|
3756
3761
|
},
|
|
3762
|
+
{
|
|
3763
|
+
"path": "modules/hall-ui/public/profile-nudge.js",
|
|
3764
|
+
"mode": "0000644",
|
|
3765
|
+
"sha256": "b86a8a2b12e30671cc00a4495fbc9789967d38622ce803f1ffc2d95ae45b7d03"
|
|
3766
|
+
},
|
|
3757
3767
|
{
|
|
3758
3768
|
"path": "modules/hall-ui/public/profile.html",
|
|
3759
3769
|
"mode": "0000644",
|
|
@@ -4102,7 +4112,7 @@
|
|
|
4102
4112
|
{
|
|
4103
4113
|
"path": "modules/lifecycle/goal-category.js",
|
|
4104
4114
|
"mode": "0000644",
|
|
4105
|
-
"sha256": "
|
|
4115
|
+
"sha256": "5b64317b3c687a08c80d0ebe78619b6b4bb8a9cdf4cf37673a0f29785fd5a7ca"
|
|
4106
4116
|
},
|
|
4107
4117
|
{
|
|
4108
4118
|
"path": "modules/lifecycle/goal-conflicts.js",
|
|
@@ -4212,7 +4222,7 @@
|
|
|
4212
4222
|
{
|
|
4213
4223
|
"path": "modules/lifecycle/routes/goals.js",
|
|
4214
4224
|
"mode": "0000644",
|
|
4215
|
-
"sha256": "
|
|
4225
|
+
"sha256": "db587e3a79c76671cdba1900bfdce156d62d0ef270319adb82a3b0805f3d091c"
|
|
4216
4226
|
},
|
|
4217
4227
|
{
|
|
4218
4228
|
"path": "modules/lifecycle/routes/help-requests.js",
|
|
@@ -4902,12 +4912,12 @@
|
|
|
4902
4912
|
{
|
|
4903
4913
|
"path": "package-lock.json",
|
|
4904
4914
|
"mode": "0000644",
|
|
4905
|
-
"sha256": "
|
|
4915
|
+
"sha256": "eb5cb1b57d8467f5d70ced6de47f1963a802fe5ae00bbaf960befcf5000efa75"
|
|
4906
4916
|
},
|
|
4907
4917
|
{
|
|
4908
4918
|
"path": "package.json",
|
|
4909
4919
|
"mode": "0000644",
|
|
4910
|
-
"sha256": "
|
|
4920
|
+
"sha256": "61856d92a07e11bb5aa53a7ab2be103c7cf31e555a616086f603fdea79485344"
|
|
4911
4921
|
},
|
|
4912
4922
|
{
|
|
4913
4923
|
"path": "public-docs/index.html",
|
|
@@ -5367,7 +5377,7 @@
|
|
|
5367
5377
|
{
|
|
5368
5378
|
"path": "scripts/gds/bump-version.js",
|
|
5369
5379
|
"mode": "0000644",
|
|
5370
|
-
"sha256": "
|
|
5380
|
+
"sha256": "7289ba7894edd4ae6154615f2464c55ee8c8835f3c61988dbad2354aaafeac2e"
|
|
5371
5381
|
},
|
|
5372
5382
|
{
|
|
5373
5383
|
"path": "scripts/gds/capture.js",
|
|
@@ -5587,7 +5597,7 @@
|
|
|
5587
5597
|
{
|
|
5588
5598
|
"path": "scripts/gds/fitness-checks-write-validation.js",
|
|
5589
5599
|
"mode": "0000644",
|
|
5590
|
-
"sha256": "
|
|
5600
|
+
"sha256": "7501680e8b657a1002c185750951f16af1b2e7e30c04c72a3f03a94d286e02c4"
|
|
5591
5601
|
},
|
|
5592
5602
|
{
|
|
5593
5603
|
"path": "scripts/gds/fitness-lib.js",
|
|
@@ -6257,7 +6267,7 @@
|
|
|
6257
6267
|
{
|
|
6258
6268
|
"path": "scripts/gds/ship-land.js",
|
|
6259
6269
|
"mode": "0000644",
|
|
6260
|
-
"sha256": "
|
|
6270
|
+
"sha256": "72efd4268060fb5ddf8a176d91baf01353dc1e82594d70feef029c45f748d8f9"
|
|
6261
6271
|
},
|
|
6262
6272
|
{
|
|
6263
6273
|
"path": "scripts/gds/ship-memory-sync.js",
|
|
@@ -6792,7 +6802,7 @@
|
|
|
6792
6802
|
{
|
|
6793
6803
|
"path": "src/module-api.js",
|
|
6794
6804
|
"mode": "0000644",
|
|
6795
|
-
"sha256": "
|
|
6805
|
+
"sha256": "abace193194919c4b75a9c461890b24be8e8c06093311c956c91894305980725"
|
|
6796
6806
|
},
|
|
6797
6807
|
{
|
|
6798
6808
|
"path": "src/module-loader/catalog.js",
|
|
@@ -7217,7 +7227,7 @@
|
|
|
7217
7227
|
{
|
|
7218
7228
|
"path": "tests/bump_version.mjs",
|
|
7219
7229
|
"mode": "0000644",
|
|
7220
|
-
"sha256": "
|
|
7230
|
+
"sha256": "b7c9d529eba81e1e7ea11aaed734e3a30355483cf69972453c3bb03fdd3aab97"
|
|
7221
7231
|
},
|
|
7222
7232
|
{
|
|
7223
7233
|
"path": "tests/cap_newcomer_tasks.mjs",
|
|
@@ -7767,7 +7777,7 @@
|
|
|
7767
7777
|
{
|
|
7768
7778
|
"path": "tests/goal_category.mjs",
|
|
7769
7779
|
"mode": "0000644",
|
|
7770
|
-
"sha256": "
|
|
7780
|
+
"sha256": "05d46d4dcfd3a3b21ef0fc258263081cf4e624bdef4348daf84a90da589387c3"
|
|
7771
7781
|
},
|
|
7772
7782
|
{
|
|
7773
7783
|
"path": "tests/goal_category_ui.mjs",
|
|
@@ -8704,6 +8714,11 @@
|
|
|
8704
8714
|
"mode": "0000644",
|
|
8705
8715
|
"sha256": "ff73579dd2416a81648d85dcd5d1a77cb776c32047bd0cc7897dff132cbae5b7"
|
|
8706
8716
|
},
|
|
8717
|
+
{
|
|
8718
|
+
"path": "tests/profile_nudge_prefs.mjs",
|
|
8719
|
+
"mode": "0000644",
|
|
8720
|
+
"sha256": "a7f70fa612494593438565f4bd1e3d454a3dbca862c8396a7dcb252d38e3e489"
|
|
8721
|
+
},
|
|
8707
8722
|
{
|
|
8708
8723
|
"path": "tests/profile_rollup_consent.mjs",
|
|
8709
8724
|
"mode": "0000644",
|
|
@@ -9219,6 +9234,11 @@
|
|
|
9219
9234
|
"mode": "0000644",
|
|
9220
9235
|
"sha256": "5c0d5961408ac202eb53fe648c4c8b00e5552b231b35f39a39e006b705cb34f1"
|
|
9221
9236
|
},
|
|
9237
|
+
{
|
|
9238
|
+
"path": "tests/ship_push_diagnosis.mjs",
|
|
9239
|
+
"mode": "0000644",
|
|
9240
|
+
"sha256": "d69bad6c8b3a01434b4fd5230f2b781bbe7fd9938df3d96b2a4ef34906287e54"
|
|
9241
|
+
},
|
|
9222
9242
|
{
|
|
9223
9243
|
"path": "tests/ship_resume.mjs",
|
|
9224
9244
|
"mode": "0000644",
|
|
@@ -9292,7 +9312,7 @@
|
|
|
9292
9312
|
{
|
|
9293
9313
|
"path": "tests/sound_player.mjs",
|
|
9294
9314
|
"mode": "0000644",
|
|
9295
|
-
"sha256": "
|
|
9315
|
+
"sha256": "5b42ae4236e203c69feb3b8885ebec3a5f2b0d7f6880128536dfe5b8088fd4e8"
|
|
9296
9316
|
},
|
|
9297
9317
|
{
|
|
9298
9318
|
"path": "tests/sound_prefs.mjs",
|
|
@@ -63,6 +63,7 @@ Everything here is your call. It is presented in Phase 4 as a proposal, not as q
|
|
|
63
63
|
- **Title** — the outcome the goal owns, not a task list. One line.
|
|
64
64
|
- **`description`** — 2–4 sentences: what is true when this goal is achieved, and what it explicitly does not cover.
|
|
65
65
|
- **`scope_modules`** — infer from the planned work's file paths, then **verify every key against `moduleKeys()`**. An unknown key is a hard `400 unknown_module` (the response helpfully returns the full valid roster). Keep it tight: the wall is set here and only here. **No covering key?** Do not invent one — file a `kind='refactor'` prep task scoped to `kernel` to extend `MODULE_GLOBS`, and make this goal's tasks depend on it.
|
|
66
|
+
- **`category_id`** — the goal's HUMAN category (task 1003277; ADR 0192 — advisory, it gates nothing). Read the live set with `GET /api/gds/work-categories` (never hard-code the labels), infer the best fit from the goal's outcome and its `scope_modules`, and state your pick in the Phase-4 approval round like every other drafted field. **When nothing in the set fits, that is a designed prompt, not an error**: do NOT silently pick the nearest, and do NOT leave it null and move on — surface the gap in the gray-area round and offer to create a new category (`POST /api/gds/work-categories` with `{"label":"..."}`; a duplicate slug converges on the existing row), then use it. Creating uncategorised stays legal — if the user declines to name one, POST the goal without `category_id` and note that the 201 body will carry a `category_advisory` reminding whoever looks next.
|
|
66
67
|
- **`succeeds_goal_id`** — set it when carrying an achieved goal forward. `POST /goals` validates the predecessor exists *before* creating, so a bad ref can't orphan a goal; it then stamps the predecessor's `succeeded_by_goal_id`. Archiving the predecessor is a **separate** call.
|
|
67
68
|
- **Criteria — 2 to 4.** A goal's criteria are narrower than a version's: each should plausibly anchor 2–5 tasks. Draft `criterion_id` as a stable kebab slug (position-independent, and what `criterion_ids` on `POST /tasks` should reference); `criterion_md` is the outcome prose.
|
|
68
69
|
- **Seed tasks — 3 to 8.** Per criterion, with `kind`, a one-line done-when, `criterion_ids: ["<slug>"]`, and dependency edges. Omit `touches[]` (advisory, ADR 0049 — backfilled from the real diff at ship). Never hand-set `requires_rank` (auto-derives, ADR 0084). Proof tasks use `kind='verify'`; exploration uses `kind='spike'` (and spikes are deliberately left in backlog).
|
|
@@ -72,7 +73,7 @@ Everything here is your call. It is presented in Phase 4 as a proposal, not as q
|
|
|
72
73
|
Two rounds at most, both via **AskUserQuestion**.
|
|
73
74
|
|
|
74
75
|
1. **Gray-area round — at most one round, at most 4 questions, often zero.** A question earns its place only if the work is genuinely underspecified on it, reasonable people would disagree, **and** the answer changes the goal's shape. Put your recommendation first and leave room for "Other". Legitimate gray areas: where this goal's boundary falls against an adjacent one; whether a module belongs inside the wall or is a dependency; whether this succeeds a prior goal or replaces it; whether a criterion belongs to this goal or the version. **Do not ask** anything the goal board, the criteria list, or `moduleKeys()` already answers, and never ask a yes/no rubber-stamp.
|
|
75
|
-
2. **The approval round — always exactly one, always last.** Present the goal (title · `scope_modules` · join policy · succeeds), the **numbered** criteria, and the seed-task table. Then one question: **Create it** / **Goal + criteria only** (skip the seed tasks) / **Edit first** / **Cancel**. Number the criteria so the user edits by number rather than by copy/paste.
|
|
76
|
+
2. **The approval round — always exactly one, always last.** Present the goal (title · category · `scope_modules` · join policy · succeeds), the **numbered** criteria, and the seed-task table. Then one question: **Create it** / **Goal + criteria only** (skip the seed tasks) / **Edit first** / **Cancel**. Number the criteria so the user edits by number rather than by copy/paste.
|
|
76
77
|
|
|
77
78
|
## Phase 5 — Land it (write order: goal → criteria → tasks)
|
|
78
79
|
|
|
@@ -81,10 +82,12 @@ The order is forced: a criterion needs `goal_id`, a task needs both `goal_id` an
|
|
|
81
82
|
> **Always `--body-file`, never inline `--body`, for anything carrying a title, description or criterion prose.** Those strings are authored in this session and routinely contain an apostrophe ("the builder's hall"), which terminates a single-quoted shell argument and corrupts the JSON — or, with a hostile string, runs whatever follows on the builder's machine. Write the body to a temp `.json` file and pass its path. On Windows also heed `scripts/gds/CLAUDE.md`: do **not** create that file with `Out-File`/`>` (the UTF-8 BOM breaks `JSON.parse`), and never pipe `api.js` through `2>&1` (its banner goes to stderr by design).
|
|
82
83
|
|
|
83
84
|
```
|
|
84
|
-
# 5a — the goal. STRICT validation: exactly these
|
|
85
|
-
# (version_id*, title*, description, scope_modules[], succeeds_goal_id).
|
|
85
|
+
# 5a — the goal. STRICT validation: exactly these seven fields are accepted
|
|
86
|
+
# (version_id*, title*, subtitle, description, scope_modules[], succeeds_goal_id, category_id).
|
|
86
87
|
# ANY other key is a 400 unknown_field — do NOT pass criteria, tasks, lead or visibility.
|
|
87
|
-
# goal.json: {"version_id":"<ver>","title":"...","description":"...","scope_modules":["<key>"]}
|
|
88
|
+
# goal.json: {"version_id":"<ver>","title":"...","description":"...","scope_modules":["<key>"],"category_id":<id>}
|
|
89
|
+
# category_id comes from GET /api/gds/work-categories (task 1003277); omitting it is
|
|
90
|
+
# legal — the 201 body then carries a category_advisory, never a refusal.
|
|
88
91
|
# carry-forward: add "succeeds_goal_id":<prior_goal_id>
|
|
89
92
|
node scripts/gds/api.js POST /api/gds/goals --body-file <path-to-goal.json>
|
|
90
93
|
# → 201 {ok, goal, succeeds_goal_id}. CAPTURE goal.id.
|
|
@@ -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
|
+
- 320 operations across 52 resource groups
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
@@ -501,6 +501,10 @@ function createClient(opts = {}) {
|
|
|
501
501
|
patchMeModelAllocation: (args) => request("PATCH", "/me/model-allocation", { hasBody: true }, args),
|
|
502
502
|
// PATCH /me/profile — rank: any-builder — PATCH /me/profile
|
|
503
503
|
patchMeProfile: (args) => request("PATCH", "/me/profile", { hasBody: true }, args),
|
|
504
|
+
// GET /me/profile-nudge — rank: any-builder — GET /me/profile-nudge
|
|
505
|
+
getMeProfileNudge: (args) => request("GET", "/me/profile-nudge", { hasBody: false }, args),
|
|
506
|
+
// PATCH /me/profile-nudge — rank: any-builder — PATCH /me/profile-nudge
|
|
507
|
+
patchMeProfileNudge: (args) => request("PATCH", "/me/profile-nudge", { hasBody: true }, args),
|
|
504
508
|
// GET /me/recent-ships — rank: any-builder — GET /me/recent-ships
|
|
505
509
|
getMeRecentShips: (args) => request("GET", "/me/recent-ships", { hasBody: false }, args),
|
|
506
510
|
// GET /me/render — rank: any-builder — GET /me/render
|
|
@@ -500,6 +500,10 @@ function createClient(opts = {}) {
|
|
|
500
500
|
patchMeModelAllocation: (args) => request("PATCH", "/me/model-allocation", { hasBody: true }, args),
|
|
501
501
|
// PATCH /me/profile — rank: any-builder — PATCH /me/profile
|
|
502
502
|
patchMeProfile: (args) => request("PATCH", "/me/profile", { hasBody: true }, args),
|
|
503
|
+
// GET /me/profile-nudge — rank: any-builder — GET /me/profile-nudge
|
|
504
|
+
getMeProfileNudge: (args) => request("GET", "/me/profile-nudge", { hasBody: false }, args),
|
|
505
|
+
// PATCH /me/profile-nudge — rank: any-builder — PATCH /me/profile-nudge
|
|
506
|
+
patchMeProfileNudge: (args) => request("PATCH", "/me/profile-nudge", { hasBody: true }, args),
|
|
503
507
|
// GET /me/recent-ships — rank: any-builder — GET /me/recent-ships
|
|
504
508
|
getMeRecentShips: (args) => request("GET", "/me/recent-ships", { hasBody: false }, args),
|
|
505
509
|
// GET /me/render — rank: any-builder — GET /me/render
|
|
@@ -252,7 +252,7 @@ export interface PostGoalsIdTransferResponse { ok: boolean; goal: unknown; chang
|
|
|
252
252
|
export interface PostGoalsReorderRequest { version_id: string; ordered_ids: number[] }
|
|
253
253
|
export interface PostGoalsReorderResponse { ok: boolean; goals: unknown }
|
|
254
254
|
export interface PostGoalsRequest { version_id: string; title: string; subtitle?: string; description?: string; scope_modules?: string[]; succeeds_goal_id?: number; category_id?: number }
|
|
255
|
-
export interface PostGoalsResponse { ok: boolean; goal: unknown; succeeds_goal_id: unknown }
|
|
255
|
+
export interface PostGoalsResponse { ok: boolean; goal: unknown; succeeds_goal_id: unknown; category_advisory: unknown }
|
|
256
256
|
export interface PostGovernmentAssignmentsRequest { builder_id: number; rank_key: string }
|
|
257
257
|
export interface PostGovernmentBoardItemsItemIdVotesRequest { direction: string; reason_md?: string; section_key?: string }
|
|
258
258
|
export interface PostGovernmentBoardItemsRequest { subject_type: string; proposal: Record<string, unknown>; rationale_md?: string; acknowledge_self_removal?: boolean }
|
|
@@ -787,6 +787,10 @@ export interface BongosClient {
|
|
|
787
787
|
patchMeModelAllocation(args?: RequestArgs): Promise<ApiResponse>;
|
|
788
788
|
/** PATCH /me/profile — rank: any-builder */
|
|
789
789
|
patchMeProfile(args?: RequestArgs & { body?: PatchMeProfileRequest }): Promise<PatchMeProfileResponse>;
|
|
790
|
+
/** GET /me/profile-nudge — rank: any-builder */
|
|
791
|
+
getMeProfileNudge(args?: RequestArgs): Promise<ApiResponse>;
|
|
792
|
+
/** PATCH /me/profile-nudge — rank: any-builder */
|
|
793
|
+
patchMeProfileNudge(args?: RequestArgs): Promise<ApiResponse>;
|
|
790
794
|
/** GET /me/recent-ships — rank: any-builder */
|
|
791
795
|
getMeRecentShips(args?: RequestArgs): Promise<GetMeRecentShipsResponse>;
|
|
792
796
|
/** GET /me/render — rank: any-builder */
|
|
@@ -497,6 +497,10 @@ export function createClient(opts = {}) {
|
|
|
497
497
|
patchMeModelAllocation: (args) => request("PATCH", "/me/model-allocation", { hasBody: true }, args),
|
|
498
498
|
// PATCH /me/profile — rank: any-builder — PATCH /me/profile
|
|
499
499
|
patchMeProfile: (args) => request("PATCH", "/me/profile", { hasBody: true }, args),
|
|
500
|
+
// GET /me/profile-nudge — rank: any-builder — GET /me/profile-nudge
|
|
501
|
+
getMeProfileNudge: (args) => request("GET", "/me/profile-nudge", { hasBody: false }, args),
|
|
502
|
+
// PATCH /me/profile-nudge — rank: any-builder — PATCH /me/profile-nudge
|
|
503
|
+
patchMeProfileNudge: (args) => request("PATCH", "/me/profile-nudge", { hasBody: true }, args),
|
|
500
504
|
// GET /me/recent-ships — rank: any-builder — GET /me/recent-ships
|
|
501
505
|
getMeRecentShips: (args) => request("GET", "/me/recent-ships", { hasBody: false }, args),
|
|
502
506
|
// GET /me/render — rank: any-builder — GET /me/render
|
|
@@ -22,7 +22,7 @@ The consumption side (ADR 0136's subscription) was never the problem; supply was
|
|
|
22
22
|
|
|
23
23
|
1. **Every merge to `main` publishes.** A `publish` workflow fires on the `unit` check succeeding on a main push (never on a red suite), builds via `package-core` — the fail-closed no-leak gate and `--self-verify` pin check run inside the build — publishes (restricted), and tags `core-v<version>`.
|
|
24
24
|
2. **CI bumps PATCH only.** When a merge lands without a human bump, `scripts/gds/bump-version.js` bumps the patch and writes the changelog line (shape-preserving; pinned by `tests/bump_version.mjs`). A **minor or major stays a deliberate in-task human edit** — it is a statement about the doorway surface, and it decides what patch-channel subscribers receive unattended (ADR 0136). CI is not allowed to make that call.
|
|
25
|
-
3. **Token custody reverses, knowingly.** A standing npm **write** Automation token (`NPM_TOKEN`) and a fine-grained **contents:write** PAT (`RELEASE_PUSH_TOKEN`, for the bump commit — the default `GITHUB_TOKEN` cannot push past the required `unit` check) live as GitHub Actions secrets. This is exactly the surface 0137 declined; the owner accepted it with the incidents as evidence. Mitigations: the lane is **default-inert** behind the repo variable `PUBLISH_ON_MERGE=1` (an owner kill-switch symmetrical to `gating.js`), packages publish `restricted`, and the no-leak gate structurally cannot upload a leaking artifact.
|
|
25
|
+
3. **Token custody reverses, knowingly.** A standing npm **write** Automation token (`NPM_TOKEN`) and a fine-grained **contents:write** PAT (`RELEASE_PUSH_TOKEN`, for the bump commit — the default `GITHUB_TOKEN` cannot push past the required `unit` check) live as GitHub Actions secrets. This is exactly the surface 0137 declined; the owner accepted it with the incidents as evidence. **Superseded for the npm half at task 1003202 (2026-08-25):** the write token is gone — the lane publishes via OIDC trusted publishing (ADR 0180), so no long-lived npm credential exists to steal. `RELEASE_PUSH_TOKEN` remains, as the bump commit still needs contents:write. Mitigations: the lane is **default-inert** behind the repo variable `PUBLISH_ON_MERGE=1` (an owner kill-switch symmetrical to `gating.js`), packages publish `restricted`, and the no-leak gate structurally cannot upload a leaking artifact.
|
|
26
26
|
4. **Idempotent by version-compare.** The bump commit re-triggers `unit` → `publish`, which then finds HEAD's version already on npm and no-ops. npm's duplicate-version rejection is the backstop; concurrent merges queue behind a no-cancel concurrency group.
|
|
27
27
|
|
|
28
28
|
## Consequences
|
|
@@ -31,6 +31,12 @@ The consensus post-Shai-Hulud control is a **release-age cooldown** (don't insta
|
|
|
31
31
|
|
|
32
32
|
The publish-on-merge lane (ADR 0161) authenticates with a long-lived `NPM_TOKEN` repository secret — exactly the credential class the Sept-2025 attacks monetized, and why GitHub revoked classic tokens and capped granular ones at 90 days. Decision: **adopt npm trusted publishing (OIDC)** — no long-lived secret, provenance for free. It needs a one-time owner action on npmjs.com (register the repo+workflow as a trusted publisher for `@bongos/core`), filed as a blocker. **Until then** the granular `NPM_TOKEN` remains a *documented exception*: 90-day expiry, publish-only scope, rotated on expiry.
|
|
33
33
|
|
|
34
|
+
> **Landed 2026-08-25 — task 1003202, blocker 1000115 resolved.** The owner registered the trusted publisher; `publish.yml` now carries `id-token: write` and publishes with no secret. Three things this needed that the decision above did not anticipate, each of which fails SILENTLY if missed:
|
|
35
|
+
>
|
|
36
|
+
> - **npm ≥ 11.5.1.** Node 22 ships npm 10.x, which ignores the OIDC token and publishes unauthenticated. The lane now installs a pinned npm and refuses to continue below that version.
|
|
37
|
+
> - **Provenance had to be turned OFF.** Trusted publishing enables it by default and npm *refuses* to generate provenance from a **private source repository** — so the "provenance for free" clause above does not apply to this repo, and leaving the default would have failed every publish.
|
|
38
|
+
> - **The registry could no longer answer "is this version taken?".** `@bongos/core` is private, so an unauthenticated `npm view` is a flat `E404` rather than a "no", and OIDC authenticates `npm publish` and nothing else. Keeping that check would have skipped the auto-bump on every run and collided on the published version — **breaking after exactly one release**. The lane now reads its own `release: core X.Y.Z` commits (`laneReleasedVersions`), which need no auth and are the source the cascade terminator already trusts.
|
|
39
|
+
|
|
34
40
|
## What this deliberately does not cover
|
|
35
41
|
|
|
36
42
|
New-dependency *intake vetting* (registry existence/age/download checks — the slopsquatting defense) lives in the weekly patrol (task 1003128), and one-off vulnerability *fixes* (sharp ≥ 0.35 for the libvips CVEs, the colyseus chain for nanoid) are ordinary tasks that shrink the baseline — filed in the idea inbox at adoption time.
|
package/docs/api/openapi.json
CHANGED
|
@@ -8204,6 +8204,79 @@
|
|
|
8204
8204
|
]
|
|
8205
8205
|
}
|
|
8206
8206
|
},
|
|
8207
|
+
"/me/profile-nudge": {
|
|
8208
|
+
"get": {
|
|
8209
|
+
"operationId": "get_me_profile_nudge",
|
|
8210
|
+
"tags": [
|
|
8211
|
+
"me"
|
|
8212
|
+
],
|
|
8213
|
+
"summary": "GET /me/profile-nudge",
|
|
8214
|
+
"description": "The \"Complete your profile\" nudge dismissal (task 1002802 / P06). The nudge itself is a DISMISSIBLE line item in the hall's needs-attention inbox — the replacement for the profile-setup wizard Decision 2 rejected. These two routes own only the dismissal FLAG; whether anything is actually missing is composed by the caller, which already holds both inputs (preferred_disciplines from GET /me, bio from GET /me/cross-project — bio lives on the platform identity account, and this module must never reach across to that one). rank: any-builder — own profile config; same posture as /me/render.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
8215
|
+
"x-rank": "any-builder",
|
|
8216
|
+
"x-source": "modules/builder-settings/routes/settings.js",
|
|
8217
|
+
"responses": {
|
|
8218
|
+
"200": {
|
|
8219
|
+
"description": "Success."
|
|
8220
|
+
},
|
|
8221
|
+
"400": {
|
|
8222
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8223
|
+
},
|
|
8224
|
+
"401": {
|
|
8225
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8226
|
+
},
|
|
8227
|
+
"403": {
|
|
8228
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8229
|
+
}
|
|
8230
|
+
},
|
|
8231
|
+
"security": [
|
|
8232
|
+
{
|
|
8233
|
+
"builderSession": []
|
|
8234
|
+
}
|
|
8235
|
+
]
|
|
8236
|
+
},
|
|
8237
|
+
"patch": {
|
|
8238
|
+
"operationId": "patch_me_profile_nudge",
|
|
8239
|
+
"tags": [
|
|
8240
|
+
"me"
|
|
8241
|
+
],
|
|
8242
|
+
"summary": "PATCH /me/profile-nudge",
|
|
8243
|
+
"description": "PATCH the dismissal. Body: { dismissed: <bool> | null } — null clears the override so the nudge can come back (the undismiss path). Sibling behavior keys are preserved by applyPatch.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
8244
|
+
"x-rank": "any-builder",
|
|
8245
|
+
"x-source": "modules/builder-settings/routes/settings.js",
|
|
8246
|
+
"requestBody": {
|
|
8247
|
+
"required": false,
|
|
8248
|
+
"content": {
|
|
8249
|
+
"application/json": {
|
|
8250
|
+
"schema": {
|
|
8251
|
+
"type": "object",
|
|
8252
|
+
"additionalProperties": true
|
|
8253
|
+
}
|
|
8254
|
+
}
|
|
8255
|
+
},
|
|
8256
|
+
"x-validated": false,
|
|
8257
|
+
"x-body-undocumented": true
|
|
8258
|
+
},
|
|
8259
|
+
"responses": {
|
|
8260
|
+
"200": {
|
|
8261
|
+
"description": "Success."
|
|
8262
|
+
},
|
|
8263
|
+
"400": {
|
|
8264
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8265
|
+
},
|
|
8266
|
+
"401": {
|
|
8267
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8268
|
+
},
|
|
8269
|
+
"403": {
|
|
8270
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8271
|
+
}
|
|
8272
|
+
},
|
|
8273
|
+
"security": [
|
|
8274
|
+
{
|
|
8275
|
+
"builderSession": []
|
|
8276
|
+
}
|
|
8277
|
+
]
|
|
8278
|
+
}
|
|
8279
|
+
},
|
|
8207
8280
|
"/me/recent-ships": {
|
|
8208
8281
|
"get": {
|
|
8209
8282
|
"operationId": "get_me_recent_ships",
|
|
@@ -18019,12 +18092,14 @@
|
|
|
18019
18092
|
"type": "boolean"
|
|
18020
18093
|
},
|
|
18021
18094
|
"goal": {},
|
|
18022
|
-
"succeeds_goal_id": {}
|
|
18095
|
+
"succeeds_goal_id": {},
|
|
18096
|
+
"category_advisory": {}
|
|
18023
18097
|
},
|
|
18024
18098
|
"required": [
|
|
18025
18099
|
"ok",
|
|
18026
18100
|
"goal",
|
|
18027
|
-
"succeeds_goal_id"
|
|
18101
|
+
"succeeds_goal_id",
|
|
18102
|
+
"category_advisory"
|
|
18028
18103
|
]
|
|
18029
18104
|
},
|
|
18030
18105
|
"PostGovernmentAssignmentsRequest": {
|
|
@@ -20077,9 +20152,9 @@
|
|
|
20077
20152
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
20078
20153
|
}
|
|
20079
20154
|
},
|
|
20080
|
-
"x-endpoint-count":
|
|
20155
|
+
"x-endpoint-count": 320,
|
|
20081
20156
|
"x-schema-count": 353,
|
|
20082
|
-
"x-undocumented-bodies":
|
|
20157
|
+
"x-undocumented-bodies": 9,
|
|
20083
20158
|
"x-response-schemas": 237,
|
|
20084
20159
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
20085
20160
|
}
|
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. 320 endpoints across 52 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/<redacted>.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -327,7 +327,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
327
327
|
| POST | `/api/bongos/llm-cache/lookup` | `metic+archon` | `cache_key`, `tokens_saved_est` | POST /llm-cache/lookup — hit/miss + atomic hit_count bump. |
|
|
328
328
|
| POST | `/api/bongos/llm-cache/store` | `metic+archon` | `spec`, `result_stdout`, `result_cost_usd` | POST /llm-cache/store — upsert a freshly-produced result. |
|
|
329
329
|
|
|
330
|
-
## `me` (
|
|
330
|
+
## `me` (27)
|
|
331
331
|
|
|
332
332
|
| Method | Path | Rank | Body | Description |
|
|
333
333
|
|---|---|---|---|---|
|
|
@@ -347,6 +347,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
347
347
|
| GET | `/api/bongos/me/model-allocation` | `any-builder` | — | |
|
|
348
348
|
| PATCH | `/api/bongos/me/model-allocation` | `any-builder` | _undocumented_ | PATCH the model allocation. |
|
|
349
349
|
| PATCH | `/api/bongos/me/profile` | `any-builder` | `display_name`, `bio`, `links` | the caller's OWN profile fields (P02, task 1002798; spec Decision 4): bio, typed links, account display name. |
|
|
350
|
+
| GET | `/api/bongos/me/profile-nudge` | `any-builder` | — | The "Complete your profile" nudge dismissal (task 1002802 / P06). |
|
|
351
|
+
| PATCH | `/api/bongos/me/profile-nudge` | `any-builder` | _undocumented_ | PATCH the dismissal. |
|
|
350
352
|
| GET | `/api/bongos/me/recent-ships` | `any-builder` | — | Tasks this builder has shipped, most recent first. |
|
|
351
353
|
| GET | `/api/bongos/me/render` | `any-builder` | — | Per-builder "render widgets" knob (task 1279, shares the behavior_prefs jsonb / migration 119). |
|
|
352
354
|
| PATCH | `/api/bongos/me/render` | `any-builder` | _undocumented_ | PATCH the render knob. |
|
|
@@ -587,5 +589,5 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
587
589
|
|
|
588
590
|
---
|
|
589
591
|
|
|
590
|
-
>
|
|
592
|
+
> 9 write endpoint(s) take a JSON body with no declared validator schema — their fields are not yet machine-documented. Adding a `validateOrRespond` schema (`src/bongos/routes/_helpers.js`) surfaces them here automatically.
|
|
591
593
|
|
package/docs/copy-inventory.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
> Deterministic on a given tree — regenerate and commit rather than hand-editing.
|
|
5
5
|
> Machine-readable twin: [`copy-registry.json`](copy-registry.json).
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**1403 strings** across 3 surfaces · 1244 distinct pieces of copy · 1403 certain, 0 heuristic · 129 shown in more than one place.
|
|
8
8
|
|
|
9
9
|
## Surfaces
|
|
10
10
|
|
|
11
11
|
| surface | lives at | files | strings |
|
|
12
12
|
|---|---|---|---|
|
|
13
|
-
| `builders-hall` | `modules/hall-ui/public` |
|
|
13
|
+
| `builders-hall` | `modules/hall-ui/public` | 71 | 1113 |
|
|
14
14
|
| `status-dashboard` | `modules/status-ui/public` | 4 | 98 |
|
|
15
15
|
| `landing` | `public-landing` | 2 | 192 |
|
|
16
16
|
|
|
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
78
78
|
| `3837f6d586a3` | 2x | Copy the task prompt to your clipboard | modules/hall-ui/public/goals-render.js:266, modules/hall-ui/public/work.js:362 |
|
|
79
79
|
| … | | _89 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1113 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -136,6 +136,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
136
136
|
| `303f8d90266f` | certain | Achievements could not be loaded. | `modules/hall-ui/public/builders.js:1136` |
|
|
137
137
|
| `6ca31dd5eb91` | certain | Acknowledge the primer | `modules/hall-ui/public/primer.html:65` |
|
|
138
138
|
| `4461b13f95c2` | certain | Actions apply at once. Closing stops and deletes the box; you can start a fresh one anytime. | `modules/hall-ui/public/settings.html:162` |
|
|
139
|
+
| `62eded408097` | certain | Add {…} | `modules/hall-ui/public/profile-nudge.js:68` |
|
|
139
140
|
| `7cf0163d4cde` | certain | Aggregate totals across every recorded work session. | `modules/hall-ui/public/sessions.html:35` |
|
|
140
141
|
| `8b736e365191` | certain | All builders | `modules/hall-ui/public/hall-render.js:998` |
|
|
141
142
|
| `b5e03617b319` | certain | All goals | `modules/hall-ui/public/goals.html:41` |
|
|
@@ -238,6 +239,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
238
239
|
| `530d83153e17` | certain | Codebase detail | `modules/hall-ui/public/atlas.html:41` |
|
|
239
240
|
| `c72c97dc33fe` | certain | Collab — {{worldName}} | `modules/hall-ui/public/collab.html:6` |
|
|
240
241
|
| `c72c97dc33fe` | certain | Collab — {{worldName}} | `modules/hall-ui/public/collab.html:6` |
|
|
242
|
+
| `cfc287c42263` | certain | Complete your profile | `modules/hall-ui/public/profile-nudge.js:62` |
|
|
241
243
|
| `2867c85d196d` | certain | Confirm that verification for #{…} actually passed? | `modules/hall-ui/public/task.js:327` |
|
|
242
244
|
| `9b16a22bf24c` | certain | Connect Discord & join the server | `modules/hall-ui/public/hall-render.js:814` |
|
|
243
245
|
| `9b16a22bf24c` | certain | Connect Discord & join the server | `modules/hall-ui/public/settings.js:826` |
|
|
@@ -770,6 +772,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
770
772
|
| `14d32a35c15f` | certain | Show my cross-project record | `modules/hall-ui/public/settings.js:579` |
|
|
771
773
|
| `dc0f9fe50a65` | certain | Show the setup guide again | `modules/hall-ui/public/index.html:55` |
|
|
772
774
|
| `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:369` |
|
|
775
|
+
| `838b17fa8d93` | certain | Shown on your public profile — it helps others know what you work on. | `modules/hall-ui/public/profile-nudge.js:69` |
|
|
773
776
|
| `2f12d46f96ca` | certain | Sign in from the app. | `modules/hall-ui/public/hall-render.js:609` |
|
|
774
777
|
| `19ab56cc3932` | certain | Sign in to filter to your goals | `modules/hall-ui/public/goals-page.js:821` |
|
|
775
778
|
| `b057dfbf49c5` | certain | Sign in when Claude prompts you. | `modules/hall-ui/public/hall-render.js:609` |
|