@bongos/core 1.19.763 → 1.19.764
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 +26 -21
- package/docs/copy-inventory.md +29 -24
- package/docs/copy-registry.json +87 -41
- package/docs/module-api-changelog.md +2 -0
- package/modules/builder-settings/interaction-prefs.js +31 -10
- package/modules/hall-ui/public/panel.css +11 -0
- package/modules/hall-ui/public/settings-interaction.js +127 -0
- package/modules/hall-ui/public/settings.html +22 -0
- package/modules/hall-ui/public/settings.js +3 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/hall-preview/live-identity.js +1 -0
- package/src/module-api.js +1 -1
- package/tests/conductor.mjs +36 -0
- package/tests/hall_settings_world.mjs +49 -0
- package/tests/interaction_prefs.mjs +47 -8
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.764",
|
|
6
|
+
"core_contract": "1.19.764",
|
|
7
|
+
"source_commit": "7725fd4548c86b08962e0606e321fbf24a69a598",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-16T05:25:55.970Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 483,
|
|
13
13
|
"agent_docs_stubbed": 25,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2118,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2626,
|
|
20
|
+
"tree_sha256": "60cb64cd38bd994befb910ab1e86bffe5a5cc55c50a4bc9ca346c94bb67be1ec",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -1982,12 +1982,12 @@
|
|
|
1982
1982
|
{
|
|
1983
1983
|
"path": "docs/copy-inventory.md",
|
|
1984
1984
|
"mode": "0000644",
|
|
1985
|
-
"sha256": "
|
|
1985
|
+
"sha256": "72d5d822f7faf9b1b5c01710012cbf38d00c1abd3e1f45d1f69ddeb855f2e85b"
|
|
1986
1986
|
},
|
|
1987
1987
|
{
|
|
1988
1988
|
"path": "docs/copy-registry.json",
|
|
1989
1989
|
"mode": "0000644",
|
|
1990
|
-
"sha256": "
|
|
1990
|
+
"sha256": "a1c762c9adff79e6b9127c8782ed4455e03943d1821ce027765c19dba8697ba9"
|
|
1991
1991
|
},
|
|
1992
1992
|
{
|
|
1993
1993
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2512,7 +2512,7 @@
|
|
|
2512
2512
|
{
|
|
2513
2513
|
"path": "docs/module-api-changelog.md",
|
|
2514
2514
|
"mode": "0000644",
|
|
2515
|
-
"sha256": "
|
|
2515
|
+
"sha256": "22d609769231a31e56e7e03b27a67b14a70934edc95abaa04de3a4a979e9df83"
|
|
2516
2516
|
},
|
|
2517
2517
|
{
|
|
2518
2518
|
"path": "docs/modules-contract.md",
|
|
@@ -3697,7 +3697,7 @@
|
|
|
3697
3697
|
{
|
|
3698
3698
|
"path": "modules/builder-settings/interaction-prefs.js",
|
|
3699
3699
|
"mode": "0000644",
|
|
3700
|
-
"sha256": "
|
|
3700
|
+
"sha256": "22368cf35709440fb21edf90c9d61ea1f604f386439586745e057f4f4e4b2b88"
|
|
3701
3701
|
},
|
|
3702
3702
|
{
|
|
3703
3703
|
"path": "modules/builder-settings/model-alloc-prefs.js",
|
|
@@ -4977,7 +4977,7 @@
|
|
|
4977
4977
|
{
|
|
4978
4978
|
"path": "modules/hall-ui/public/panel.css",
|
|
4979
4979
|
"mode": "0000644",
|
|
4980
|
-
"sha256": "
|
|
4980
|
+
"sha256": "c677cc6d278c32ead80f137e2dde9d8eb1c738d6e41b235747c5b5a28e45cc0b"
|
|
4981
4981
|
},
|
|
4982
4982
|
{
|
|
4983
4983
|
"path": "modules/hall-ui/public/people.css",
|
|
@@ -5159,6 +5159,11 @@
|
|
|
5159
5159
|
"mode": "0000644",
|
|
5160
5160
|
"sha256": "8d50d0553d02d4cc0655c2bdf7d92710082daae6ea9bb0f150154c12c0abdeb5"
|
|
5161
5161
|
},
|
|
5162
|
+
{
|
|
5163
|
+
"path": "modules/hall-ui/public/settings-interaction.js",
|
|
5164
|
+
"mode": "0000644",
|
|
5165
|
+
"sha256": "ec4a94fece6d4fb7528578c96fdb94c8eba13c8786d885b317f0fa3c5152b1bf"
|
|
5166
|
+
},
|
|
5162
5167
|
{
|
|
5163
5168
|
"path": "modules/hall-ui/public/settings-sessions.js",
|
|
5164
5169
|
"mode": "0000644",
|
|
@@ -5172,12 +5177,12 @@
|
|
|
5172
5177
|
{
|
|
5173
5178
|
"path": "modules/hall-ui/public/settings.html",
|
|
5174
5179
|
"mode": "0000644",
|
|
5175
|
-
"sha256": "
|
|
5180
|
+
"sha256": "9f622b8bf5f369fb2c9064c61c9e15fd0390935385e7e0be3858b0979f084107"
|
|
5176
5181
|
},
|
|
5177
5182
|
{
|
|
5178
5183
|
"path": "modules/hall-ui/public/settings.js",
|
|
5179
5184
|
"mode": "0000644",
|
|
5180
|
-
"sha256": "
|
|
5185
|
+
"sha256": "609e7704d9447c095ad670da97779211b1af4105f9b3f014e80e191016154d49"
|
|
5181
5186
|
},
|
|
5182
5187
|
{
|
|
5183
5188
|
"path": "modules/hall-ui/public/settings.states.json",
|
|
@@ -7567,12 +7572,12 @@
|
|
|
7567
7572
|
{
|
|
7568
7573
|
"path": "package-lock.json",
|
|
7569
7574
|
"mode": "0000644",
|
|
7570
|
-
"sha256": "
|
|
7575
|
+
"sha256": "7a4d2aabf54b2b21ee005be28c58e4a693a3cace5f8d1f103682aa117e506071"
|
|
7571
7576
|
},
|
|
7572
7577
|
{
|
|
7573
7578
|
"path": "package.json",
|
|
7574
7579
|
"mode": "0000644",
|
|
7575
|
-
"sha256": "
|
|
7580
|
+
"sha256": "7cea1f421906224ec2f4b1d218bf8e5c4a8a7149a7d9c46f907caf86ff6839e0"
|
|
7576
7581
|
},
|
|
7577
7582
|
{
|
|
7578
7583
|
"path": "public-docs/index.html",
|
|
@@ -8982,7 +8987,7 @@
|
|
|
8982
8987
|
{
|
|
8983
8988
|
"path": "scripts/hall-preview/live-identity.js",
|
|
8984
8989
|
"mode": "0000644",
|
|
8985
|
-
"sha256": "
|
|
8990
|
+
"sha256": "45ee926a0bc32dde658e27dce1dc721e4f53152fe96b110875fd0f85f4329749"
|
|
8986
8991
|
},
|
|
8987
8992
|
{
|
|
8988
8993
|
"path": "scripts/hall-preview/refresh-fixtures.js",
|
|
@@ -9382,7 +9387,7 @@
|
|
|
9382
9387
|
{
|
|
9383
9388
|
"path": "src/module-api.js",
|
|
9384
9389
|
"mode": "0000644",
|
|
9385
|
-
"sha256": "
|
|
9390
|
+
"sha256": "aff2e67bbc496681f2f3862b7e512d44b9459be98b57d72cea820fb4038116eb"
|
|
9386
9391
|
},
|
|
9387
9392
|
{
|
|
9388
9393
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10107,7 +10112,7 @@
|
|
|
10107
10112
|
{
|
|
10108
10113
|
"path": "tests/conductor.mjs",
|
|
10109
10114
|
"mode": "0000644",
|
|
10110
|
-
"sha256": "
|
|
10115
|
+
"sha256": "bac8bdb1883b01354b1409205d63f0d12794c4d40e8f935b260c24af8b155267"
|
|
10111
10116
|
},
|
|
10112
10117
|
{
|
|
10113
10118
|
"path": "tests/confirm_attribution.mjs",
|
|
@@ -11117,7 +11122,7 @@
|
|
|
11117
11122
|
{
|
|
11118
11123
|
"path": "tests/hall_settings_world.mjs",
|
|
11119
11124
|
"mode": "0000644",
|
|
11120
|
-
"sha256": "
|
|
11125
|
+
"sha256": "cd36834107d4c6575efbefdc45b652b422a9f9f628862d1556af1c077e61f03a"
|
|
11121
11126
|
},
|
|
11122
11127
|
{
|
|
11123
11128
|
"path": "tests/hall_signout.mjs",
|
|
@@ -11362,7 +11367,7 @@
|
|
|
11362
11367
|
{
|
|
11363
11368
|
"path": "tests/interaction_prefs.mjs",
|
|
11364
11369
|
"mode": "0000644",
|
|
11365
|
-
"sha256": "
|
|
11370
|
+
"sha256": "1e01a44dc1ef5d454643e81737f77b5061e577a9275a22f5b98bd05ac541f1d7"
|
|
11366
11371
|
},
|
|
11367
11372
|
{
|
|
11368
11373
|
"path": "tests/join_application_note.mjs",
|
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
|
+
**1756 strings** across 3 surfaces · 1519 distinct pieces of copy · 1756 certain, 0 heuristic · 164 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` | 81 | 1277 |
|
|
14
14
|
| `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
|
|
15
15
|
| `landing` | `modules/public-landing/public` | 5 | 379 |
|
|
16
16
|
|
|
@@ -36,9 +36,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
36
36
|
|
|
37
37
|
| id | shown | text | where |
|
|
38
38
|
|---|---|---|---|
|
|
39
|
+
| `8c234d5c8bd4` | 8x | Could not save. Try again. | modules/hall-ui/public/settings-interaction.js:96, modules/hall-ui/public/settings.js:103, modules/hall-ui/public/settings.js:460 |
|
|
39
40
|
| `0fbe47b01d2c` | 8x | Reading the project… | modules/public-landing/public/projects.html:706, modules/public-landing/public/projects.html:743, modules/public-landing/public/projects.html:757 |
|
|
40
41
|
| `eeda19200aeb` | 7x | Cloud Bongos | modules/public-landing/public/projects.html:399, modules/public-landing/public/projects.html:501, modules/public-landing/public/projects.html:546 |
|
|
41
|
-
| `8c234d5c8bd4` | 7x | Could not save. Try again. | modules/hall-ui/public/settings.js:103, modules/hall-ui/public/settings.js:460, modules/hall-ui/public/settings.js:529 |
|
|
42
42
|
| `5df2baabf82e` | 6x | ← Back | modules/public-landing/public/projects.html:1053, modules/public-landing/public/projects.html:1084, modules/public-landing/public/projects.html:1123 |
|
|
43
43
|
| `afe83bbbd0d4` | 5x | A non-profit, capture-resistant commons. | modules/public-landing/public/contact.html:71, modules/public-landing/public/index.html:900, modules/public-landing/public/privacy.html:80 |
|
|
44
44
|
| `c661548d5140` | 5x | Next → | modules/public-landing/public/projects.html:1054, modules/public-landing/public/projects.html:1087, modules/public-landing/public/projects.html:1126 |
|
|
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
78
78
|
| `996edffc1966` | 2x | Access requests | modules/hall-ui/public/watch.html:46, modules/hall-ui/public/watch.html:61 |
|
|
79
79
|
| … | | _124 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1277 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -103,7 +103,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
103
103
|
| `05da3082c8c5` | certain | +{…} more | `modules/hall-ui/public/gate.js:134` |
|
|
104
104
|
| `9c8aba2b2fa4` | certain | , // membership | `modules/hall-ui/public/board-room.js:220` |
|
|
105
105
|
| `37964829d693` | certain | , and | `modules/hall-ui/public/government.html:55` |
|
|
106
|
-
| `9a663ca57b14` | certain | , claiming, and shipping show — render as rich in-feed widgets or as plain text. Widgets are prettier but spen | `modules/hall-ui/public/settings.html:
|
|
106
|
+
| `9a663ca57b14` | certain | , claiming, and shipping show — render as rich in-feed widgets or as plain text. Widgets are prettier but spen | `modules/hall-ui/public/settings.html:295` |
|
|
107
107
|
| `ac57fe1ccd6e` | certain | , follow its acceptance criteria, stay within touches[], /builder-ship | `modules/hall-ui/public/work.js:892` |
|
|
108
108
|
| `574acf2f93bb` | certain | , never quietly ratified — so a clock is worth proposing. The recommended sitting is | `modules/hall-ui/public/government.js:605` |
|
|
109
109
|
| `741e355954ac` | certain | , not at ship). | `modules/hall-ui/public/diagrams.html:52` |
|
|
@@ -131,7 +131,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
131
131
|
| `eff6b977b1d2` | certain | A self-drawing map of the codebase: what each module is, and what depends on it. Redrawn from the code on ever | `modules/hall-ui/public/atlas.html:31` |
|
|
132
132
|
| `6359b5afbc6b` | certain | A short path to finding your feet. Tick the steps you’ve done; the rest are tracked for you. | `modules/hall-ui/public/hall-widgets.js:60` |
|
|
133
133
|
| `58f7f6f0d8bd` | certain | A small app for your menu bar (Mac) or system tray (Windows): one switch to start and stop your dev box, with | `modules/hall-ui/public/settings.html:217` |
|
|
134
|
-
| `a3185a43c230` | certain | A sound plays at each turn of your work — a gentle chime when Claude finishes, a flourish when a task ships or | `modules/hall-ui/public/settings.html:
|
|
134
|
+
| `a3185a43c230` | certain | A sound plays at each turn of your work — a gentle chime when Claude finishes, a flourish when a task ships or | `modules/hall-ui/public/settings.html:330` |
|
|
135
135
|
| `83b1274f9088` | certain | A tally of recorded work sessions, and the latest five. The full record lives on the Sessions page. | `modules/hall-ui/public/watch.html:103` |
|
|
136
136
|
| `daf73127afff` | certain | A word on why | `modules/hall-ui/public/hall-render.js:294` |
|
|
137
137
|
| `1b326b0be1a4` | certain | A {…} — you are a {…}. Mingle pairs across crafts. | `modules/hall-ui/public/collab.js:196` |
|
|
@@ -216,9 +216,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
216
216
|
| `c1c7158e0a43` | certain | Category saved. | `modules/hall-ui/public/project-settings.js:214` |
|
|
217
217
|
| `0279db21e29a` | certain | Change in Settings → | `modules/hall-ui/public/hall-render.js:531` |
|
|
218
218
|
| `f040fb66f250` | certain | Changed files | `modules/hall-ui/public/gate.js:136` |
|
|
219
|
-
| `906c2947dfc1` | certain | Changes save at once and take effect the next time you start a session on this machine. | `modules/hall-ui/public/settings.html:
|
|
220
|
-
| `52384bdc035c` | certain | Changes save at once. Your new choice plays the next time that event fires. | `modules/hall-ui/public/settings.html:
|
|
221
|
-
| `cab7a9526ca1` | certain | Changes save the moment you pick. “Default” clears your override and falls back to the system's choice. | `modules/hall-ui/public/settings.html:
|
|
219
|
+
| `906c2947dfc1` | certain | Changes save at once and take effect the next time you start a session on this machine. | `modules/hall-ui/public/settings.html:341` |
|
|
220
|
+
| `52384bdc035c` | certain | Changes save at once. Your new choice plays the next time that event fires. | `modules/hall-ui/public/settings.html:354` |
|
|
221
|
+
| `cab7a9526ca1` | certain | Changes save the moment you pick. “Default” clears your override and falls back to the system's choice. | `modules/hall-ui/public/settings.html:324` |
|
|
222
222
|
| `4b714191b423` | certain | Changes touching protected build surfaces, held for your approval. | `modules/hall-ui/public/gate.js:243` |
|
|
223
223
|
| `e6982a9ff948` | certain | Charter library | `modules/hall-ui/public/government.js:799` |
|
|
224
224
|
| `f8725cf3ba62` | certain | Checking dependency order… | `modules/hall-ui/public/work.js:853` |
|
|
@@ -226,7 +226,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
226
226
|
| `aa3ba7d28a76` | certain | Checking your key… | `modules/hall-ui/public/settings.js:1138` |
|
|
227
227
|
| `b3d0e2af5176` | certain | Choose a goal first. | `modules/hall-ui/public/task.js:666` |
|
|
228
228
|
| `1c6b0e3ffc0e` | certain | Choose a setup | `modules/hall-ui/public/hall-render.js:779` |
|
|
229
|
-
| `6c88cdf417f1` | certain | Choose which sound plays for each build event — one when Claude waits for your input, another when a task ship | `modules/hall-ui/public/settings.html:
|
|
229
|
+
| `6c88cdf417f1` | certain | Choose which sound plays for each build event — one when Claude waits for your input, another when a task ship | `modules/hall-ui/public/settings.html:347` |
|
|
230
230
|
| `c10806b50c61` | certain | Claim task {…} | `modules/hall-ui/public/goals-render.js:345` |
|
|
231
231
|
| `c10806b50c61` | certain | Claim task {…} | `modules/hall-ui/public/work.js:467` |
|
|
232
232
|
| `84664050c372` | certain | Claimed by another builder | `modules/hall-ui/public/goals-render.js:351` |
|
|
@@ -311,10 +311,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
311
311
|
| `edd5bafbe075` | certain | Could not load the queue just now. | `modules/hall-ui/public/ideas.js:565` |
|
|
312
312
|
| `02bb0570996a` | certain | Could not load the ranks. | `modules/hall-ui/public/ranks.js:197` |
|
|
313
313
|
| `2878778cf9f3` | certain | Could not load this page. | `modules/hall-ui/public/watch.js:1357` |
|
|
314
|
-
| `4b0c8d94541c` | certain | Could not load your account. Reload the page to try again. | `modules/hall-ui/public/settings.js:
|
|
314
|
+
| `4b0c8d94541c` | certain | Could not load your account. Reload the page to try again. | `modules/hall-ui/public/settings.js:1397` |
|
|
315
315
|
| `2a9fb4046bc4` | certain | Could not load your rank. Return to the hall and try again. | `modules/hall-ui/public/ranks.js:196` |
|
|
316
316
|
| `9d533e811dec` | certain | Could not load your sessions: {…} | `modules/hall-ui/public/settings-sessions.js:114` |
|
|
317
|
-
| `64f9d51f0fa2` | certain | Could not load your settings. | `modules/hall-ui/public/settings.js:
|
|
317
|
+
| `64f9d51f0fa2` | certain | Could not load your settings. | `modules/hall-ui/public/settings.js:1400` |
|
|
318
318
|
| `de244c45d916` | certain | Could not load {…} | `modules/hall-ui/public/task.js:703` |
|
|
319
319
|
| `2366356926b4` | certain | Could not mark the primer just now. Try again. | `modules/hall-ui/public/primer.js:260` |
|
|
320
320
|
| `753987b5da13` | certain | Could not reach the submit endpoint. | `modules/hall-ui/public/modules.js:297` |
|
|
@@ -326,6 +326,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
326
326
|
| `b526ee0b8c48` | certain | Could not save just now. Try again. | `modules/hall-ui/public/builders.js:464` |
|
|
327
327
|
| `41a351aea8d4` | certain | Could not save the volume. Try again. | `modules/hall-ui/public/settings.js:221` |
|
|
328
328
|
| `5305186a4154` | certain | Could not save your choice. Try again. | `modules/hall-ui/public/settings.js:104` |
|
|
329
|
+
| `cfe6c5ceb3ef` | certain | Could not save your interaction profile. Try again. | `modules/hall-ui/public/settings-interaction.js:97` |
|
|
329
330
|
| `ea4fb30debd0` | certain | Could not save your key. Try again. | `modules/hall-ui/public/settings.js:1162` |
|
|
330
331
|
| `ef609f2c0cb3` | certain | Could not save your name. Try again. | `modules/hall-ui/public/settings.js:863` |
|
|
331
332
|
| `59ecd5c52f59` | certain | Could not save your preference. Try again. | `modules/hall-ui/public/builders.js:361` |
|
|
@@ -335,6 +336,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
335
336
|
| `f81ab95f1d88` | certain | Could not save your sound preference. Try again. | `modules/hall-ui/public/settings.js:241` |
|
|
336
337
|
| `f81ab95f1d88` | certain | Could not save your sound preference. Try again. | `modules/hall-ui/public/settings.js:331` |
|
|
337
338
|
| `14b698bc1042` | certain | Could not save your wandering level. Try again. | `modules/hall-ui/public/settings.js:461` |
|
|
339
|
+
| `8c234d5c8bd4` | certain | Could not save. Try again. | `modules/hall-ui/public/settings-interaction.js:96` |
|
|
338
340
|
| `8c234d5c8bd4` | certain | Could not save. Try again. | `modules/hall-ui/public/settings.js:103` |
|
|
339
341
|
| `8c234d5c8bd4` | certain | Could not save. Try again. | `modules/hall-ui/public/settings.js:460` |
|
|
340
342
|
| `8c234d5c8bd4` | certain | Could not save. Try again. | `modules/hall-ui/public/settings.js:529` |
|
|
@@ -396,7 +398,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
396
398
|
| `db7f370c0d38` | certain | Each builder’s dev box at a glance. | `modules/hall-ui/public/harbor.js:361` |
|
|
397
399
|
| `77b7e3abfb07` | certain | Each one touched a protected surface and stopped at the gate check. Approving records your seal on that commit | `modules/hall-ui/public/gate.html:48` |
|
|
398
400
|
| `0ddc87f11713` | certain | Each rank opens more of the system. You see full details for your current rank and the one directly above it; | `modules/hall-ui/public/ranks.html:47` |
|
|
399
|
-
| `7f1b1c32d360` | certain | Each slash-command can run on a different model. The system has a default for every skill; choose another to o | `modules/hall-ui/public/settings.html:
|
|
401
|
+
| `7f1b1c32d360` | certain | Each slash-command can run on a different model. The system has a default for every skill; choose another to o | `modules/hall-ui/public/settings.html:310` |
|
|
400
402
|
| `854a21d2eb39` | certain | Eight achievements recognize sustained contribution. Earned ones are highlighted; the rest show what’s left to | `modules/hall-ui/public/hall-widgets.js:197` |
|
|
401
403
|
| `daed038e1162` | certain | End every session, including this one? You will need to sign in again, and any CLI token will need re-issuing. | `modules/hall-ui/public/settings-sessions.js:94` |
|
|
402
404
|
| `8d2b4f119ee3` | certain | End session | `modules/hall-ui/public/settings-sessions.js:46` |
|
|
@@ -404,7 +406,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
404
406
|
| `58d381535285` | certain | Engagement reports | `modules/hall-ui/public/watch.html:137` |
|
|
405
407
|
| `bd7a40639a1c` | certain | Estimate (min) | `modules/hall-ui/public/task-detail.js:372` |
|
|
406
408
|
| `c15d1f0ddfb6` | certain | Estimation accuracy | `modules/hall-ui/public/watch.html:155` |
|
|
407
|
-
| `44f928d13699` | certain | Event sounds | `modules/hall-ui/public/settings.html:
|
|
409
|
+
| `44f928d13699` | certain | Event sounds | `modules/hall-ui/public/settings.html:346` |
|
|
408
410
|
| `8690c6424585` | certain | Every builder in {{worldName}} — rank, {{currency}}, karma, and active claims. | `modules/hall-ui/public/watch.html:69` |
|
|
409
411
|
| `34efbc699a88` | certain | Every builder's box, running ones first. Close a box to reclaim it; block a builder to keep them from opening | `modules/hall-ui/public/harbor.html:48` |
|
|
410
412
|
| `a97b064db76f` | certain | Every closed amendment sitting, ratified and returned alike, with the rule it was decided under. | `modules/hall-ui/public/government.js:839` |
|
|
@@ -478,11 +480,13 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
478
480
|
| `adac4cd8b973` | certain | Held pull requests | `modules/hall-ui/public/gate.html:47` |
|
|
479
481
|
| `ce8a068a34cf` | certain | Higher ranks only | `modules/hall-ui/public/sessions.html:40` |
|
|
480
482
|
| `d9bd3b703fe4` | certain | Hover an island to light its links, click one for its details, or open it from the index below. | `modules/hall-ui/public/atlas.html:68` |
|
|
483
|
+
| `0469a83cf1e8` | certain | How Claude talks to you | `modules/hall-ui/public/settings.html:260` |
|
|
481
484
|
| `68382894d8f9` | certain | How a planning session seeds each version's task pool, and how a version closes and archives its scope. | `modules/hall-ui/public/diagrams.html:85` |
|
|
482
485
|
| `0bab9286ea38` | certain | How each builder's shipped work has been graded over the past thirty days. | `modules/hall-ui/public/watch.html:76` |
|
|
483
486
|
| `fb7489e8b67c` | certain | How it has changed | `modules/hall-ui/public/government.js:839` |
|
|
484
487
|
| `ec3f26ff8137` | certain | How planning sessions feed each version's task pool and how a version closes. | `modules/hall-ui/public/diagrams.html:84` |
|
|
485
|
-
| `0bae5deb899d` | certain | How readily Claude opens a | `modules/hall-ui/public/settings.html:
|
|
488
|
+
| `0bae5deb899d` | certain | How readily Claude opens a | `modules/hall-ui/public/settings.html:277` |
|
|
489
|
+
| `63dbe9873b4e` | certain | How replies are pitched for you — the vocabulary assumed, how much hand-holding local tooling gets, how long a | `modules/hall-ui/public/settings.html:261` |
|
|
486
490
|
| `868cf6930d64` | certain | How task estimates compare with the time work actually took. | `modules/hall-ui/public/watch.html:156` |
|
|
487
491
|
| `81fa43a51f8f` | certain | How the system works | `modules/hall-ui/public/diagrams.html:32` |
|
|
488
492
|
| `06cb721a03e1` | certain | How the system works — {{worldName}} | `modules/hall-ui/public/diagrams.html:6` |
|
|
@@ -542,7 +546,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
542
546
|
| `9be8b839eff8` | certain | Last 7 days | `modules/hall-ui/public/hall-widgets.js:129` |
|
|
543
547
|
| `59f0bc78a28f` | certain | Last 90 days | `modules/hall-ui/public/hall-widgets.js:130` |
|
|
544
548
|
| `13bae4dfb28e` | certain | Last claimed by | `modules/hall-ui/public/task.js:549` |
|
|
545
|
-
| `1526a7ae8c85` | certain | Latest version: v{…}. | `modules/hall-ui/public/settings.js:
|
|
549
|
+
| `1526a7ae8c85` | certain | Latest version: v{…}. | `modules/hall-ui/public/settings.js:1485` |
|
|
546
550
|
| `7c9b7a89353b` | certain | Leave goal | `modules/hall-ui/public/goals-render.js:931` |
|
|
547
551
|
| `f192ff6563f9` | certain | Leave your GitHub username and an Archon will let you in. No coding needed to start — once you're approved, si | `modules/hall-ui/public/hall-render.js:294` |
|
|
548
552
|
| `d6a78b9e5368` | certain | Let it be for now | `modules/hall-ui/public/studio.js:203` |
|
|
@@ -613,7 +617,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
613
617
|
| `c255749ec989` | certain | No achievements earned yet. | `modules/hall-ui/public/builders.js:480` |
|
|
614
618
|
| `c255749ec989` | certain | No achievements earned yet. | `modules/hall-ui/public/profile.js:144` |
|
|
615
619
|
| `479c1a45f39d` | certain | No backlog tasks match these filters. Try widening them. | `modules/hall-ui/public/work.js:1120` |
|
|
616
|
-
| `83f62fc94271` | certain | No builder account found for this sign-in. | `modules/hall-ui/public/settings.js:
|
|
620
|
+
| `83f62fc94271` | certain | No builder account found for this sign-in. | `modules/hall-ui/public/settings.js:1405` |
|
|
617
621
|
| `6d6fd2314248` | certain | No cross-project activity reported yet. | `modules/hall-ui/public/profile.js:323` |
|
|
618
622
|
| `b1ada579483c` | certain | No custom ranks yet | `modules/hall-ui/public/government.js:358` |
|
|
619
623
|
| `6e2d2e11f84a` | certain | No description. | `modules/hall-ui/public/idea.js:122` |
|
|
@@ -808,7 +812,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
808
812
|
| `f7ed4ba07178` | certain | Roadmap — {{worldName}} | `modules/hall-ui/public/roadmap.html:6` |
|
|
809
813
|
| `b6596905f845` | certain | Said more than once | `modules/hall-ui/public/copy-desk.html:56` |
|
|
810
814
|
| `0c79b504aebe` | certain | Save key | `modules/hall-ui/public/settings.js:1073` |
|
|
811
|
-
| `11486793742e` | certain | Saves the moment you toggle; applies from your next session. | `modules/hall-ui/public/settings.html:
|
|
815
|
+
| `11486793742e` | certain | Saves the moment you toggle; applies from your next session. | `modules/hall-ui/public/settings.html:302` |
|
|
812
816
|
| `e8e4e49fe8f4` | certain | Saves when you press Save; shows everywhere at once. | `modules/hall-ui/public/settings.html:88` |
|
|
813
817
|
| `42cbc20a6ec8` | certain | Saves when you press Save; your next | `modules/hall-ui/public/settings.html:136` |
|
|
814
818
|
| `fc9d783ed0f5` | certain | Say why it is better. Whoever reviews this decides it from your reason, without asking you. | `modules/hall-ui/public/copy-desk.js:446` |
|
|
@@ -861,7 +865,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
861
865
|
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:434` |
|
|
862
866
|
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:591` |
|
|
863
867
|
| `8ad669ab2565` | certain | Sign out everywhere | `modules/hall-ui/public/settings.html:171` |
|
|
864
|
-
| `ecc12c1dd4de` | certain | Skill voices | `modules/hall-ui/public/settings.html:
|
|
868
|
+
| `ecc12c1dd4de` | certain | Skill voices | `modules/hall-ui/public/settings.html:309` |
|
|
865
869
|
| `87cee78ca134` | certain | Skip to content | `modules/hall-ui/public/shell.js:582` |
|
|
866
870
|
| `688ca7b6e30f` | certain | Slop — reads as machine-written | `modules/hall-ui/public/copy-desk.html:90` |
|
|
867
871
|
| `82df09a08476` | certain | So the Archon knows who you are | `modules/hall-ui/public/hall-render.js:294` |
|
|
@@ -1040,7 +1044,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1040
1044
|
| `158499e38ceb` | certain | Where you stand | `modules/hall-ui/public/ranks.html:36` |
|
|
1041
1045
|
| `b216e7af8140` | certain | Where your work runs and how it reaches production, in one diagram. Your | `modules/hall-ui/public/diagrams.html:74` |
|
|
1042
1046
|
| `d3a8b2b5b93f` | certain | Where {{currency}} and karma come from and where they go. | `modules/hall-ui/public/diagrams.html:67` |
|
|
1043
|
-
| `8f5954c06daa` | certain | Whether your session cards — what | `modules/hall-ui/public/settings.html:
|
|
1047
|
+
| `8f5954c06daa` | certain | Whether your session cards — what | `modules/hall-ui/public/settings.html:294` |
|
|
1044
1048
|
| `f9ab9eb870a6` | certain | While you wait: install the Claude desktop app at | `modules/hall-ui/public/hall-render.js:391` |
|
|
1045
1049
|
| `fe85463560e0` | certain | Who builds on this project, ranked by work shipped. This project's own ledger — unlike the cross-project direc | `modules/hall-ui/public/roster.html:28` |
|
|
1046
1050
|
| `7dbdb882e967` | certain | Who can find you. Your profile page can be public or private, and recruiters looking for builders are allowed | `modules/hall-ui/public/settings.html:111` |
|
|
@@ -1074,7 +1078,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1074
1078
|
| `d8c542541c15` | certain | You're not signed in yet. Sign in to manage your connections, your keys, your dev box and the way the hall beh | `modules/hall-ui/public/settings.html:41` |
|
|
1075
1079
|
| `7d26333b5fb0` | certain | Your asks | `modules/hall-ui/public/collab.html:69` |
|
|
1076
1080
|
| `59a66b5ac5dd` | certain | Your box is up — waiting for the terminal to come online (a few seconds after boot)… | `modules/hall-ui/public/box-panel.js:282` |
|
|
1077
|
-
| `f96bc227dba0` | certain | Your choice | `modules/hall-ui/public/settings.html:
|
|
1081
|
+
| `f96bc227dba0` | certain | Your choice | `modules/hall-ui/public/settings.html:318` |
|
|
1078
1082
|
| `ec388f700f01` | certain | Your dev box | `modules/hall-ui/public/settings.html:203` |
|
|
1079
1083
|
| `f20a4adfd5a8` | certain | Your dev box builds itself in a minute or two and the app chimes when it's ready. It lives in the menu bar on | `modules/hall-ui/public/hall-render.js:779` |
|
|
1080
1084
|
| `8b317a71e47d` | certain | Your dev box is asleep — wake it below. | `modules/hall-ui/public/box-panel.js:321` |
|
|
@@ -1083,6 +1087,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1083
1087
|
| `909b0b7c6ffa` | certain | Your display name | `modules/hall-ui/public/settings.html:84` |
|
|
1084
1088
|
| `51cae49539b5` | certain | Your files are kept | `modules/hall-ui/public/box-panel.js:323` |
|
|
1085
1089
|
| `a47f15b6a33c` | certain | Your image-generation key settings could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:1240` |
|
|
1090
|
+
| `00fb37fd5adf` | certain | Your interaction profile could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings-interaction.js:122` |
|
|
1086
1091
|
| `51fd6f1ecb2f` | certain | Your key | `modules/hall-ui/public/settings.js:1069` |
|
|
1087
1092
|
| `20d453b11ae5` | certain | Your name | `modules/hall-ui/public/hall-render.js:294` |
|
|
1088
1093
|
| `6dadadffa36e` | certain | Your name cannot be blank. | `modules/hall-ui/public/settings.js:832` |
|
|
@@ -1091,7 +1096,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1091
1096
|
| `5e0ec4cd1cfe` | certain | Your own row carries no controls. Nobody can change their own rank or standing — that guard is what stops the | `modules/hall-ui/public/watch.js:835` |
|
|
1092
1097
|
| `8fc605026acf` | certain | Your pending join {…}: {…} — awaiting approval. | `modules/hall-ui/public/goal-inbox.js:88` |
|
|
1093
1098
|
| `e91418db3962` | certain | Your preferences, {…}. | `modules/hall-ui/public/settings.js:856` |
|
|
1094
|
-
| `e91418db3962` | certain | Your preferences, {…}. | `modules/hall-ui/public/settings.js:
|
|
1099
|
+
| `e91418db3962` | certain | Your preferences, {…}. | `modules/hall-ui/public/settings.js:1414` |
|
|
1095
1100
|
| `b6dceaace783` | certain | Your profile page setting applies now — private already answers "not found" everywhere your profile is read. R | `modules/hall-ui/public/settings.html:119` |
|
|
1096
1101
|
| `f39746e3d66b` | certain | Your rendering preference could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:554` |
|
|
1097
1102
|
| `b2dfd7120052` | certain | Your request is sent ✓ | `modules/hall-ui/public/hall-render.js:391` |
|
|
@@ -1185,7 +1190,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1185
1190
|
| `f61d8fc1516d` | certain | new SSH identity | `modules/hall-ui/public/harbor.js:125` |
|
|
1186
1191
|
| `fdfb8b2ce948` | certain | new identity | `modules/hall-ui/public/box-panel.js:160` |
|
|
1187
1192
|
| `fdfb8b2ce948` | certain | new identity | `modules/hall-ui/public/box-panel.js:339` |
|
|
1188
|
-
| `86f235ddfe01` | certain | new thread | `modules/hall-ui/public/settings.html:
|
|
1193
|
+
| `86f235ddfe01` | certain | new thread | `modules/hall-ui/public/settings.html:278` |
|
|
1189
1194
|
| `b9f2e0d43c94` | certain | no clock | `modules/hall-ui/public/government.js:607` |
|
|
1190
1195
|
| `e02979266baf` | certain | no data | `modules/hall-ui/public/hall-kit.js:761` |
|
|
1191
1196
|
| `33ca71bef112` | certain | no tasks yet | `modules/hall-ui/public/goals-render.js:163` |
|
|
@@ -1200,7 +1205,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1200
1205
|
| `e90b5601ce16` | certain | objected to | `modules/hall-ui/public/board-room.js:168` |
|
|
1201
1206
|
| `351d56b80a6c` | certain | of all in-flight tasks shipped | `modules/hall-ui/public/roadmap.js:305` |
|
|
1202
1207
|
| `09172f45e6da` | certain | of the 90% needed | `modules/hall-ui/public/primer.html:101` |
|
|
1203
|
-
| `99f88f2af2ee` | certain | of work — a tangent, an investigation, an unprompted suggestion — instead of staying on your claimed task. It | `modules/hall-ui/public/settings.html:
|
|
1208
|
+
| `99f88f2af2ee` | certain | of work — a tangent, an investigation, an unprompted suggestion — instead of staying on your claimed task. It | `modules/hall-ui/public/settings.html:278` |
|
|
1204
1209
|
| `5e7a2220c6a9` | certain | of {…} | `modules/hall-ui/public/roadmap.js:295` |
|
|
1205
1210
|
| `36e3f6ba7bf4` | certain | older code | `modules/hall-ui/public/box-panel.js:202` |
|
|
1206
1211
|
| `759c12b5f983` | certain | oldest first | `modules/hall-ui/public/hall-widgets.js:134` |
|
package/docs/copy-registry.json
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
"generator": "scripts/gds/copy-inventory.js",
|
|
4
4
|
"goal": 1000074,
|
|
5
5
|
"counts": {
|
|
6
|
-
"strings":
|
|
7
|
-
"unique_ids":
|
|
8
|
-
"certain":
|
|
6
|
+
"strings": 1756,
|
|
7
|
+
"unique_ids": 1519,
|
|
8
|
+
"certain": 1756,
|
|
9
9
|
"heuristic": 0,
|
|
10
10
|
"duplicate_ids": 164
|
|
11
11
|
},
|
|
12
12
|
"surfaces": {
|
|
13
13
|
"builders-hall": {
|
|
14
14
|
"at": "modules/hall-ui/public",
|
|
15
|
-
"files":
|
|
16
|
-
"strings":
|
|
15
|
+
"files": 81,
|
|
16
|
+
"strings": 1277
|
|
17
17
|
},
|
|
18
18
|
"status-dashboard": {
|
|
19
19
|
"at": "modules/status-ui/public",
|
|
@@ -38,6 +38,22 @@
|
|
|
38
38
|
"The design-contract surface layout: `modules/ui-design/docs/design-contract.md` expects `src/ui/<surface>/`, which this tree does not use (there is no `src/ui/`; the adapters live in `modules/ui-design/adapters/`). Surface ids here are a MAPPING onto real paths, not evidence the contract layout exists."
|
|
39
39
|
],
|
|
40
40
|
"duplicates": [
|
|
41
|
+
{
|
|
42
|
+
"id": "8c234d5c8bd4",
|
|
43
|
+
"surface": "builders-hall",
|
|
44
|
+
"text": "Could not save. Try again.",
|
|
45
|
+
"occurrences": 8,
|
|
46
|
+
"at": [
|
|
47
|
+
"modules/hall-ui/public/settings-interaction.js:96",
|
|
48
|
+
"modules/hall-ui/public/settings.js:103",
|
|
49
|
+
"modules/hall-ui/public/settings.js:460",
|
|
50
|
+
"modules/hall-ui/public/settings.js:529",
|
|
51
|
+
"modules/hall-ui/public/settings.js:683",
|
|
52
|
+
"modules/hall-ui/public/settings.js:782",
|
|
53
|
+
"modules/hall-ui/public/settings.js:862",
|
|
54
|
+
"modules/hall-ui/public/settings.js:1161"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
41
57
|
{
|
|
42
58
|
"id": "0fbe47b01d2c",
|
|
43
59
|
"surface": "landing",
|
|
@@ -69,21 +85,6 @@
|
|
|
69
85
|
"modules/public-landing/public/projects.html:1148"
|
|
70
86
|
]
|
|
71
87
|
},
|
|
72
|
-
{
|
|
73
|
-
"id": "8c234d5c8bd4",
|
|
74
|
-
"surface": "builders-hall",
|
|
75
|
-
"text": "Could not save. Try again.",
|
|
76
|
-
"occurrences": 7,
|
|
77
|
-
"at": [
|
|
78
|
-
"modules/hall-ui/public/settings.js:103",
|
|
79
|
-
"modules/hall-ui/public/settings.js:460",
|
|
80
|
-
"modules/hall-ui/public/settings.js:529",
|
|
81
|
-
"modules/hall-ui/public/settings.js:683",
|
|
82
|
-
"modules/hall-ui/public/settings.js:782",
|
|
83
|
-
"modules/hall-ui/public/settings.js:862",
|
|
84
|
-
"modules/hall-ui/public/settings.js:1161"
|
|
85
|
-
]
|
|
86
|
-
},
|
|
87
88
|
{
|
|
88
89
|
"id": "5df2baabf82e",
|
|
89
90
|
"surface": "landing",
|
|
@@ -1467,7 +1468,7 @@
|
|
|
1467
1468
|
"occurrences": 2,
|
|
1468
1469
|
"at": [
|
|
1469
1470
|
"modules/hall-ui/public/settings.js:856",
|
|
1470
|
-
"modules/hall-ui/public/settings.js:
|
|
1471
|
+
"modules/hall-ui/public/settings.js:1414"
|
|
1471
1472
|
]
|
|
1472
1473
|
},
|
|
1473
1474
|
{
|
|
@@ -1946,7 +1947,7 @@
|
|
|
1946
1947
|
"surface": "builders-hall",
|
|
1947
1948
|
"text": ", claiming, and shipping show — render as rich in-feed widgets or as plain text. Widgets are prettier but spend tokens; plain text is cheaper with the same information.",
|
|
1948
1949
|
"file": "modules/hall-ui/public/settings.html",
|
|
1949
|
-
"line":
|
|
1950
|
+
"line": 295,
|
|
1950
1951
|
"origin": "html-text",
|
|
1951
1952
|
"confidence": "certain"
|
|
1952
1953
|
},
|
|
@@ -2198,7 +2199,7 @@
|
|
|
2198
2199
|
"surface": "builders-hall",
|
|
2199
2200
|
"text": "A sound plays at each turn of your work — a gentle chime when Claude finishes, a flourish when a task ships or your rank rises. Turn off any you would rather not hear.",
|
|
2200
2201
|
"file": "modules/hall-ui/public/settings.html",
|
|
2201
|
-
"line":
|
|
2202
|
+
"line": 330,
|
|
2202
2203
|
"origin": "html-text",
|
|
2203
2204
|
"confidence": "certain"
|
|
2204
2205
|
},
|
|
@@ -2963,7 +2964,7 @@
|
|
|
2963
2964
|
"surface": "builders-hall",
|
|
2964
2965
|
"text": "Changes save at once and take effect the next time you start a session on this machine.",
|
|
2965
2966
|
"file": "modules/hall-ui/public/settings.html",
|
|
2966
|
-
"line":
|
|
2967
|
+
"line": 341,
|
|
2967
2968
|
"origin": "html-text",
|
|
2968
2969
|
"confidence": "certain"
|
|
2969
2970
|
},
|
|
@@ -2972,7 +2973,7 @@
|
|
|
2972
2973
|
"surface": "builders-hall",
|
|
2973
2974
|
"text": "Changes save at once. Your new choice plays the next time that event fires.",
|
|
2974
2975
|
"file": "modules/hall-ui/public/settings.html",
|
|
2975
|
-
"line":
|
|
2976
|
+
"line": 354,
|
|
2976
2977
|
"origin": "html-text",
|
|
2977
2978
|
"confidence": "certain"
|
|
2978
2979
|
},
|
|
@@ -2981,7 +2982,7 @@
|
|
|
2981
2982
|
"surface": "builders-hall",
|
|
2982
2983
|
"text": "Changes save the moment you pick. “Default” clears your override and falls back to the system's choice.",
|
|
2983
2984
|
"file": "modules/hall-ui/public/settings.html",
|
|
2984
|
-
"line":
|
|
2985
|
+
"line": 324,
|
|
2985
2986
|
"origin": "html-text",
|
|
2986
2987
|
"confidence": "certain"
|
|
2987
2988
|
},
|
|
@@ -3053,7 +3054,7 @@
|
|
|
3053
3054
|
"surface": "builders-hall",
|
|
3054
3055
|
"text": "Choose which sound plays for each build event — one when Claude waits for your input, another when a task ships, a coin clink when {{currency}} arrive. Each event offers a small set of choices; more will be added as new audio ships.",
|
|
3055
3056
|
"file": "modules/hall-ui/public/settings.html",
|
|
3056
|
-
"line":
|
|
3057
|
+
"line": 347,
|
|
3057
3058
|
"origin": "html-text",
|
|
3058
3059
|
"confidence": "certain"
|
|
3059
3060
|
},
|
|
@@ -3818,7 +3819,7 @@
|
|
|
3818
3819
|
"surface": "builders-hall",
|
|
3819
3820
|
"text": "Could not load your account. Reload the page to try again.",
|
|
3820
3821
|
"file": "modules/hall-ui/public/settings.js",
|
|
3821
|
-
"line":
|
|
3822
|
+
"line": 1397,
|
|
3822
3823
|
"origin": "js-text-assign",
|
|
3823
3824
|
"confidence": "certain"
|
|
3824
3825
|
},
|
|
@@ -3845,7 +3846,7 @@
|
|
|
3845
3846
|
"surface": "builders-hall",
|
|
3846
3847
|
"text": "Could not load your settings.",
|
|
3847
3848
|
"file": "modules/hall-ui/public/settings.js",
|
|
3848
|
-
"line":
|
|
3849
|
+
"line": 1400,
|
|
3849
3850
|
"origin": "js-notice",
|
|
3850
3851
|
"confidence": "certain"
|
|
3851
3852
|
},
|
|
@@ -3948,6 +3949,15 @@
|
|
|
3948
3949
|
"origin": "js-notice",
|
|
3949
3950
|
"confidence": "certain"
|
|
3950
3951
|
},
|
|
3952
|
+
{
|
|
3953
|
+
"id": "cfe6c5ceb3ef",
|
|
3954
|
+
"surface": "builders-hall",
|
|
3955
|
+
"text": "Could not save your interaction profile. Try again.",
|
|
3956
|
+
"file": "modules/hall-ui/public/settings-interaction.js",
|
|
3957
|
+
"line": 97,
|
|
3958
|
+
"origin": "js-notice",
|
|
3959
|
+
"confidence": "certain"
|
|
3960
|
+
},
|
|
3951
3961
|
{
|
|
3952
3962
|
"id": "ea4fb30debd0",
|
|
3953
3963
|
"surface": "builders-hall",
|
|
@@ -4029,6 +4039,15 @@
|
|
|
4029
4039
|
"origin": "js-notice",
|
|
4030
4040
|
"confidence": "certain"
|
|
4031
4041
|
},
|
|
4042
|
+
{
|
|
4043
|
+
"id": "8c234d5c8bd4",
|
|
4044
|
+
"surface": "builders-hall",
|
|
4045
|
+
"text": "Could not save. Try again.",
|
|
4046
|
+
"file": "modules/hall-ui/public/settings-interaction.js",
|
|
4047
|
+
"line": 96,
|
|
4048
|
+
"origin": "js-text-assign",
|
|
4049
|
+
"confidence": "certain"
|
|
4050
|
+
},
|
|
4032
4051
|
{
|
|
4033
4052
|
"id": "8c234d5c8bd4",
|
|
4034
4053
|
"surface": "builders-hall",
|
|
@@ -4583,7 +4602,7 @@
|
|
|
4583
4602
|
"surface": "builders-hall",
|
|
4584
4603
|
"text": "Each slash-command can run on a different model. The system has a default for every skill; choose another to override it, or leave it on Default.",
|
|
4585
4604
|
"file": "modules/hall-ui/public/settings.html",
|
|
4586
|
-
"line":
|
|
4605
|
+
"line": 310,
|
|
4587
4606
|
"origin": "html-text",
|
|
4588
4607
|
"confidence": "certain"
|
|
4589
4608
|
},
|
|
@@ -4655,7 +4674,7 @@
|
|
|
4655
4674
|
"surface": "builders-hall",
|
|
4656
4675
|
"text": "Event sounds",
|
|
4657
4676
|
"file": "modules/hall-ui/public/settings.html",
|
|
4658
|
-
"line":
|
|
4677
|
+
"line": 346,
|
|
4659
4678
|
"origin": "html-text",
|
|
4660
4679
|
"confidence": "certain"
|
|
4661
4680
|
},
|
|
@@ -5316,6 +5335,15 @@
|
|
|
5316
5335
|
"origin": "html-text",
|
|
5317
5336
|
"confidence": "certain"
|
|
5318
5337
|
},
|
|
5338
|
+
{
|
|
5339
|
+
"id": "0469a83cf1e8",
|
|
5340
|
+
"surface": "builders-hall",
|
|
5341
|
+
"text": "How Claude talks to you",
|
|
5342
|
+
"file": "modules/hall-ui/public/settings.html",
|
|
5343
|
+
"line": 260,
|
|
5344
|
+
"origin": "html-text",
|
|
5345
|
+
"confidence": "certain"
|
|
5346
|
+
},
|
|
5319
5347
|
{
|
|
5320
5348
|
"id": "68382894d8f9",
|
|
5321
5349
|
"surface": "builders-hall",
|
|
@@ -5357,7 +5385,16 @@
|
|
|
5357
5385
|
"surface": "builders-hall",
|
|
5358
5386
|
"text": "How readily Claude opens a",
|
|
5359
5387
|
"file": "modules/hall-ui/public/settings.html",
|
|
5360
|
-
"line":
|
|
5388
|
+
"line": 277,
|
|
5389
|
+
"origin": "html-text",
|
|
5390
|
+
"confidence": "certain"
|
|
5391
|
+
},
|
|
5392
|
+
{
|
|
5393
|
+
"id": "63dbe9873b4e",
|
|
5394
|
+
"surface": "builders-hall",
|
|
5395
|
+
"text": "How replies are pitched for you — the vocabulary assumed, how much hand-holding local tooling gets, how long an answer runs, and how much of the work behind it is narrated. These reach every session you start. The defaults assume no software-engineering background; change any of them and the rest stay as they are.",
|
|
5396
|
+
"file": "modules/hall-ui/public/settings.html",
|
|
5397
|
+
"line": 261,
|
|
5361
5398
|
"origin": "html-text",
|
|
5362
5399
|
"confidence": "certain"
|
|
5363
5400
|
},
|
|
@@ -5897,7 +5934,7 @@
|
|
|
5897
5934
|
"surface": "builders-hall",
|
|
5898
5935
|
"text": "Latest version: v{…}.",
|
|
5899
5936
|
"file": "modules/hall-ui/public/settings.js",
|
|
5900
|
-
"line":
|
|
5937
|
+
"line": 1485,
|
|
5901
5938
|
"origin": "js-text-assign",
|
|
5902
5939
|
"confidence": "certain"
|
|
5903
5940
|
},
|
|
@@ -6536,7 +6573,7 @@
|
|
|
6536
6573
|
"surface": "builders-hall",
|
|
6537
6574
|
"text": "No builder account found for this sign-in.",
|
|
6538
6575
|
"file": "modules/hall-ui/public/settings.js",
|
|
6539
|
-
"line":
|
|
6576
|
+
"line": 1405,
|
|
6540
6577
|
"origin": "js-text-assign",
|
|
6541
6578
|
"confidence": "certain"
|
|
6542
6579
|
},
|
|
@@ -8291,7 +8328,7 @@
|
|
|
8291
8328
|
"surface": "builders-hall",
|
|
8292
8329
|
"text": "Saves the moment you toggle; applies from your next session.",
|
|
8293
8330
|
"file": "modules/hall-ui/public/settings.html",
|
|
8294
|
-
"line":
|
|
8331
|
+
"line": 302,
|
|
8295
8332
|
"origin": "html-text",
|
|
8296
8333
|
"confidence": "certain"
|
|
8297
8334
|
},
|
|
@@ -8768,7 +8805,7 @@
|
|
|
8768
8805
|
"surface": "builders-hall",
|
|
8769
8806
|
"text": "Skill voices",
|
|
8770
8807
|
"file": "modules/hall-ui/public/settings.html",
|
|
8771
|
-
"line":
|
|
8808
|
+
"line": 309,
|
|
8772
8809
|
"origin": "html-text",
|
|
8773
8810
|
"confidence": "certain"
|
|
8774
8811
|
},
|
|
@@ -10379,7 +10416,7 @@
|
|
|
10379
10416
|
"surface": "builders-hall",
|
|
10380
10417
|
"text": "Whether your session cards — what",
|
|
10381
10418
|
"file": "modules/hall-ui/public/settings.html",
|
|
10382
|
-
"line":
|
|
10419
|
+
"line": 294,
|
|
10383
10420
|
"origin": "html-text",
|
|
10384
10421
|
"confidence": "certain"
|
|
10385
10422
|
},
|
|
@@ -10685,7 +10722,7 @@
|
|
|
10685
10722
|
"surface": "builders-hall",
|
|
10686
10723
|
"text": "Your choice",
|
|
10687
10724
|
"file": "modules/hall-ui/public/settings.html",
|
|
10688
|
-
"line":
|
|
10725
|
+
"line": 318,
|
|
10689
10726
|
"origin": "html-text",
|
|
10690
10727
|
"confidence": "certain"
|
|
10691
10728
|
},
|
|
@@ -10761,6 +10798,15 @@
|
|
|
10761
10798
|
"origin": "js-markup",
|
|
10762
10799
|
"confidence": "certain"
|
|
10763
10800
|
},
|
|
10801
|
+
{
|
|
10802
|
+
"id": "00fb37fd5adf",
|
|
10803
|
+
"surface": "builders-hall",
|
|
10804
|
+
"text": "Your interaction profile could not be loaded. Reload the page to try again.",
|
|
10805
|
+
"file": "modules/hall-ui/public/settings-interaction.js",
|
|
10806
|
+
"line": 122,
|
|
10807
|
+
"origin": "js-markup",
|
|
10808
|
+
"confidence": "certain"
|
|
10809
|
+
},
|
|
10764
10810
|
{
|
|
10765
10811
|
"id": "51fd6f1ecb2f",
|
|
10766
10812
|
"surface": "builders-hall",
|
|
@@ -10838,7 +10884,7 @@
|
|
|
10838
10884
|
"surface": "builders-hall",
|
|
10839
10885
|
"text": "Your preferences, {…}.",
|
|
10840
10886
|
"file": "modules/hall-ui/public/settings.js",
|
|
10841
|
-
"line":
|
|
10887
|
+
"line": 1414,
|
|
10842
10888
|
"origin": "js-text-assign",
|
|
10843
10889
|
"confidence": "certain"
|
|
10844
10890
|
},
|
|
@@ -11684,7 +11730,7 @@
|
|
|
11684
11730
|
"surface": "builders-hall",
|
|
11685
11731
|
"text": "new thread",
|
|
11686
11732
|
"file": "modules/hall-ui/public/settings.html",
|
|
11687
|
-
"line":
|
|
11733
|
+
"line": 278,
|
|
11688
11734
|
"origin": "html-text",
|
|
11689
11735
|
"confidence": "certain"
|
|
11690
11736
|
},
|
|
@@ -11819,7 +11865,7 @@
|
|
|
11819
11865
|
"surface": "builders-hall",
|
|
11820
11866
|
"text": "of work — a tangent, an investigation, an unprompted suggestion — instead of staying on your claimed task. It never limits the work on the task itself. Your rank sets the starting point; newcomers stay locked low.",
|
|
11821
11867
|
"file": "modules/hall-ui/public/settings.html",
|
|
11822
|
-
"line":
|
|
11868
|
+
"line": 278,
|
|
11823
11869
|
"origin": "html-text",
|
|
11824
11870
|
"confidence": "certain"
|
|
11825
11871
|
},
|
|
@@ -2000,5 +2000,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2000
2000
|
landed since 1.19.761 with no explicit bump. run 35053643269. (task 1002620)
|
|
2001
2001
|
1.19.763 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2002
2002
|
landed since 1.19.762 with no explicit bump. run 35056690992. (task 1002620)
|
|
2003
|
+
1.19.764 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2004
|
+
landed since 1.19.763 with no explicit bump. run 35059447999. (task 1002620)
|
|
2003
2005
|
---------------------------------------------------------------------------
|
|
2004
2006
|
```
|
|
@@ -23,9 +23,26 @@
|
|
|
23
23
|
const RESERVED_KEY = 'interaction';
|
|
24
24
|
|
|
25
25
|
// Each field: allowed values (first = default), a short label per value, and a
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
26
|
+
// contract fragment injected when that value is the effective one.
|
|
27
|
+
//
|
|
28
|
+
// WHY THE DEFAULTS CARRY REAL TEXT, unlike wandering (task 1002514, clause 1 of
|
|
29
|
+
// criterion `accessibility-fluency-profile`). Wandering's default is "do what
|
|
30
|
+
// you'd naturally do", so injecting it would be noise — hence `inject:false` on
|
|
31
|
+
// its permissive levels. This knob's default is NOT that. `non_technical` /
|
|
32
|
+
// `new` / `concise` is a SPECIFIC accessible posture, the one CLAUDE.md §2 spells
|
|
33
|
+
// out as portable prose, and the builder who most needs it is exactly the one
|
|
34
|
+
// who never opens Settings. Leaving the default silent meant the accessible-by-
|
|
35
|
+
// default builder was the only builder the profile said nothing about — the
|
|
36
|
+
// profile worked for everyone who had already opted out of it.
|
|
37
|
+
//
|
|
38
|
+
// The exception that proves the rule is `machinery: show`, which really does mean
|
|
39
|
+
// "behave as you otherwise would" and so stays empty. A default earns injected
|
|
40
|
+
// text by encoding a posture, not by being a default.
|
|
41
|
+
//
|
|
42
|
+
// This does mean every session now carries a short contract. That is the point:
|
|
43
|
+
// the posture has to arrive somewhere, and a knob it can be tuned with beats
|
|
44
|
+
// prose it cannot. Task 1002515 removes the CLAUDE.md §2 duplication that this
|
|
45
|
+
// briefly doubles.
|
|
29
46
|
const FIELDS = {
|
|
30
47
|
technical_level: {
|
|
31
48
|
label: 'Technical level',
|
|
@@ -33,8 +50,7 @@ const FIELDS = {
|
|
|
33
50
|
values: {
|
|
34
51
|
non_technical: {
|
|
35
52
|
label: 'Non-technical (default)',
|
|
36
|
-
|
|
37
|
-
contract: '',
|
|
53
|
+
contract: 'Technical level: non-technical — do not assume software-engineering vocabulary, and define a term the first time you need it. Frame trade-offs as cost, time and what the end user will see, not as design patterns or framework taxonomy. Ask about outcomes and product behaviour; decide implementation details yourself and present them for confirmation.',
|
|
38
54
|
},
|
|
39
55
|
mixed: {
|
|
40
56
|
label: 'Some technical background',
|
|
@@ -52,7 +68,7 @@ const FIELDS = {
|
|
|
52
68
|
values: {
|
|
53
69
|
new: {
|
|
54
70
|
label: 'New to local tooling (default)',
|
|
55
|
-
contract: '',
|
|
71
|
+
contract: 'Toolchain familiarity: new — walk local tooling (package managers, ports, env vars, shells) through step by step rather than naming a command and moving on. Where a supported UI path exists, give that before the terminal one.',
|
|
56
72
|
},
|
|
57
73
|
comfortable: {
|
|
58
74
|
label: 'Comfortable with local tooling',
|
|
@@ -66,7 +82,7 @@ const FIELDS = {
|
|
|
66
82
|
values: {
|
|
67
83
|
concise: {
|
|
68
84
|
label: 'Concise (default)',
|
|
69
|
-
contract: '',
|
|
85
|
+
contract: 'Verbosity: concise — lead with the answer and stop; they will ask for more if they want it.',
|
|
70
86
|
},
|
|
71
87
|
detailed: {
|
|
72
88
|
label: 'Detailed',
|
|
@@ -94,6 +110,9 @@ const FIELDS = {
|
|
|
94
110
|
values: {
|
|
95
111
|
show: {
|
|
96
112
|
label: 'Show the work (default)',
|
|
113
|
+
// Deliberately the one empty default left (see the FIELDS preamble).
|
|
114
|
+
// `show` means "narrate as you otherwise would", which is the absence of
|
|
115
|
+
// an instruction — there is no posture here to spend context stating.
|
|
97
116
|
contract: '',
|
|
98
117
|
},
|
|
99
118
|
quiet: {
|
|
@@ -135,9 +154,11 @@ function effectiveProfile(behaviorPrefs) {
|
|
|
135
154
|
return out;
|
|
136
155
|
}
|
|
137
156
|
|
|
138
|
-
// The session-injected contract:
|
|
139
|
-
// paragraph
|
|
140
|
-
//
|
|
157
|
+
// The session-injected contract: every effective field's fragment joined into
|
|
158
|
+
// one paragraph — defaults included, because the accessible default IS a posture
|
|
159
|
+
// (see the FIELDS preamble). Fields whose effective value carries no fragment
|
|
160
|
+
// contribute nothing, so the string stays as short as the profile is plain.
|
|
161
|
+
// Empty only if every effective field is fragment-less, which no live profile is.
|
|
141
162
|
function contractFor(behaviorPrefs) {
|
|
142
163
|
const eff = effectiveProfile(behaviorPrefs);
|
|
143
164
|
const parts = [];
|
|
@@ -92,6 +92,17 @@
|
|
|
92
92
|
.prow--pick[aria-disabled="true"] { cursor: default; }
|
|
93
93
|
.prow--pick[aria-disabled="true"] .prow__label { color: var(--ink-soft); }
|
|
94
94
|
|
|
95
|
+
/* a pick GROUP: several independent single-selects in one panel (the interaction
|
|
96
|
+
profile, task 1002514). A fieldset so each group's legend is its radiogroup's
|
|
97
|
+
accessible name — the browser's own border/padding is stripped, because the
|
|
98
|
+
grouping here is carried by the legend and the rule above it, not by a box. */
|
|
99
|
+
.pgroup { border: 0; padding: 0; margin: 0; min-width: 0; }
|
|
100
|
+
.pgroup + .pgroup { margin-top: var(--sp-md); }
|
|
101
|
+
.pgroup > legend { padding: 0; margin-bottom: 2px; }
|
|
102
|
+
/* the group's blurb sits under the legend, above its rows — so the first row's
|
|
103
|
+
top rule reads as the start of the choices rather than a divider mid-sentence */
|
|
104
|
+
.pgroup > .prow__desc { margin: 0 0 var(--sp-hair); }
|
|
105
|
+
|
|
95
106
|
/* the action row at a panel's foot: buttons and their status on one line */
|
|
96
107
|
.row-end,
|
|
97
108
|
.settings-card, .craft-actions, .artkey-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-xs); margin-top: var(--sp-sm); }
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// modules/hall-ui/public/settings-interaction.js — the "How Claude talks to you"
|
|
2
|
+
// panel on /builders/settings (task 2010's profile, delivered by task 1002514).
|
|
3
|
+
//
|
|
4
|
+
// WHY THE PANEL EXISTS. The interaction profile shipped complete except for a
|
|
5
|
+
// way to set it: interaction-prefs.js stored it, GET/PATCH /me/interaction served
|
|
6
|
+
// it, and the conductor hook already injected the resolved contract into every
|
|
7
|
+
// session — but settings.js had 18 `wandering` references and 0 `interaction`
|
|
8
|
+
// ones, so the profile was reachable only by a raw API call. In practice that
|
|
9
|
+
// meant nobody had one.
|
|
10
|
+
//
|
|
11
|
+
// Its own file rather than more of settings.js, on the settings-sessions.js
|
|
12
|
+
// precedent and for the same stated reason: settings.js sits against the
|
|
13
|
+
// 1500-line size ratchet (adding this inline pushed it to 1601 and regressed the
|
|
14
|
+
// budget). The panel is self-contained — it shares nothing with the rest of the
|
|
15
|
+
// page but the `window.OTB` toolkit and the generated API client, both globals
|
|
16
|
+
// loaded before it.
|
|
17
|
+
//
|
|
18
|
+
// THE ONE SHAPE DIFFERENCE FROM WANDERING, which is the sibling to read first:
|
|
19
|
+
// wandering is a single level, so it is one radiogroup. This payload is a FIELD
|
|
20
|
+
// CATALOG — several independent fields, each with its own value set — so each
|
|
21
|
+
// field is its own single-select and a PATCH carries only the field that changed
|
|
22
|
+
// ({ <field>: <value> }). The route merges, so the untouched fields keep their
|
|
23
|
+
// values and a field never explicitly set keeps falling back to its default.
|
|
24
|
+
|
|
25
|
+
(() => {
|
|
26
|
+
'use strict';
|
|
27
|
+
|
|
28
|
+
const API = '/api/bongos';
|
|
29
|
+
const { escapeHtml, $ } = window.OTB;
|
|
30
|
+
const toast = (msg) => window.OTB.toast(msg);
|
|
31
|
+
const api = window.BongosClient.createClient({ baseUrl: '', credentials: 'same-origin', throwOnError: false });
|
|
32
|
+
|
|
33
|
+
const toAuth = () => window.location.assign(`${API}/auth/web/start`);
|
|
34
|
+
|
|
35
|
+
function render(data) {
|
|
36
|
+
const wrap = $('#interaction-rows');
|
|
37
|
+
if (!wrap) return;
|
|
38
|
+
const fields = Array.isArray(data && data.fields) ? data.fields : [];
|
|
39
|
+
const eff = (data && data.effective) || {};
|
|
40
|
+
if (fields.length === 0) {
|
|
41
|
+
wrap.innerHTML = window.OTBKit.emptyStateHtml('No interaction settings registered.');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// A fieldset per field so the field's label is its radiogroup's accessible
|
|
45
|
+
// name — four independent single-selects, not one flat list of radios.
|
|
46
|
+
wrap.innerHTML = fields.map((f) => {
|
|
47
|
+
const chosenValue = eff[f.field];
|
|
48
|
+
const rows = (f.values || []).map((v) => {
|
|
49
|
+
const id = `interaction-${f.field}-${v.value}`;
|
|
50
|
+
const chosen = v.value === chosenValue;
|
|
51
|
+
// No "default" tag here, deliberately: interaction-prefs.js already ends
|
|
52
|
+
// every default value's LABEL with "(default)", so adding the row tag the
|
|
53
|
+
// wandering picker uses rendered "Non-technical (default) · DEFAULT".
|
|
54
|
+
// One source for the word, and it is the label the API already ships.
|
|
55
|
+
return (
|
|
56
|
+
`<label class="prow prow--pick" for="${id}">` +
|
|
57
|
+
`<input class="pradio" type="radio" name="interaction-${escapeHtml(f.field)}" id="${id}"` +
|
|
58
|
+
` value="${escapeHtml(v.value)}" data-field="${escapeHtml(f.field)}"${chosen ? ' checked' : ''}>` +
|
|
59
|
+
'<span class="prow__main">' +
|
|
60
|
+
`<span class="prow__label">${escapeHtml(v.label)}</span>` +
|
|
61
|
+
'</span></label>'
|
|
62
|
+
);
|
|
63
|
+
}).join('');
|
|
64
|
+
return (
|
|
65
|
+
`<fieldset class="pgroup" id="interaction-field-${escapeHtml(f.field)}">` +
|
|
66
|
+
`<legend class="prow__label">${escapeHtml(f.label)}</legend>` +
|
|
67
|
+
`<p class="prow__desc">${escapeHtml(f.blurb || '')}</p>` +
|
|
68
|
+
rows +
|
|
69
|
+
'</fieldset>'
|
|
70
|
+
);
|
|
71
|
+
}).join('');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// The human label for a saved value, for the status line — falls back to the
|
|
75
|
+
// raw value rather than going blank if the catalog and the payload disagree.
|
|
76
|
+
function labelFor(data, field, value) {
|
|
77
|
+
const f = (Array.isArray(data && data.fields) ? data.fields : []).find((x) => x.field === field);
|
|
78
|
+
const v = f && (f.values || []).find((x) => x.value === value);
|
|
79
|
+
return (v && v.label) || value;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async function save(field, value, input) {
|
|
83
|
+
const status = $('#interaction-status');
|
|
84
|
+
if (status) status.textContent = 'Saving…';
|
|
85
|
+
if (input) input.disabled = true;
|
|
86
|
+
try {
|
|
87
|
+
const res = await api.request('PATCH', `${API}/me/interaction`, { body: { [field]: value } });
|
|
88
|
+
if (res.status === 401) { toAuth(); return; }
|
|
89
|
+
if (!res.ok) throw new Error(`interaction PATCH → ${res.status}`);
|
|
90
|
+
render(res.data);
|
|
91
|
+
const msg = `Saved — ${labelFor(res.data, field, value)}.`;
|
|
92
|
+
if (status) status.textContent = msg;
|
|
93
|
+
toast(msg);
|
|
94
|
+
} catch (err) {
|
|
95
|
+
console.error('[settings] save interaction failed', err);
|
|
96
|
+
if (status) status.textContent = 'Could not save. Try again.';
|
|
97
|
+
toast('Could not save your interaction profile. Try again.');
|
|
98
|
+
if (input) input.disabled = false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async function setup() {
|
|
103
|
+
try {
|
|
104
|
+
const res = await api.request('GET', `${API}/me/interaction`);
|
|
105
|
+
if (res.status === 401) { toAuth(); return; }
|
|
106
|
+
if (!res.ok) throw new Error(`interaction GET → ${res.status}`);
|
|
107
|
+
render(res.data);
|
|
108
|
+
$('#interaction-scroll').hidden = false;
|
|
109
|
+
// Delegate the change so post-render radios stay wired.
|
|
110
|
+
$('#interaction-rows').addEventListener('change', (e) => {
|
|
111
|
+
const r = e.target.closest('.pradio');
|
|
112
|
+
if (!r || r.disabled || !r.checked) return;
|
|
113
|
+
const field = r.getAttribute('data-field');
|
|
114
|
+
if (field) save(field, r.value, r);
|
|
115
|
+
});
|
|
116
|
+
} catch (err) {
|
|
117
|
+
// Its own try/catch, like every other section: a failing endpoint shows this
|
|
118
|
+
// panel's own error rather than taking the settings page down with it.
|
|
119
|
+
console.error('[settings] failed to load interaction', err);
|
|
120
|
+
$('#interaction-scroll').hidden = false;
|
|
121
|
+
$('#interaction-rows').innerHTML =
|
|
122
|
+
'<p class="voices-empty">Your interaction profile could not be loaded. Reload the page to try again.</p>';
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
setup();
|
|
127
|
+
})();
|
|
@@ -251,6 +251,24 @@
|
|
|
251
251
|
|
|
252
252
|
<!-- ============ group: preferences ============ -->
|
|
253
253
|
|
|
254
|
+
<!-- INTERACTION PROFILE — how replies are pitched for you (task 2010,
|
|
255
|
+
delivered in task 1002514). GET/PATCH /api/bongos/me/interaction.
|
|
256
|
+
Several independent fields, each its own single-select; the resolved
|
|
257
|
+
contract is injected into every session by the conductor hook. No
|
|
258
|
+
rank gate — this is ergonomics, not authority. -->
|
|
259
|
+
<section class="scroll" id="interaction-scroll" aria-labelledby="interaction-h" data-group="preferences" hidden>
|
|
260
|
+
<h2 id="interaction-h" class="scroll__h">How Claude talks to you</h2>
|
|
261
|
+
<p class="scroll__lede">
|
|
262
|
+
How replies are pitched for you — the vocabulary assumed, how much
|
|
263
|
+
hand-holding local tooling gets, how long an answer runs, and how much
|
|
264
|
+
of the work behind it is narrated. These reach every session you start.
|
|
265
|
+
The defaults assume no software-engineering background; change any of
|
|
266
|
+
them and the rest stay as they are.
|
|
267
|
+
</p>
|
|
268
|
+
<div class="prows" id="interaction-rows"></div>
|
|
269
|
+
<p class="settings-status" id="interaction-status" role="status" aria-live="polite"></p>
|
|
270
|
+
</section>
|
|
271
|
+
|
|
254
272
|
<!-- WANDERING — how readily the agent opens off-task threads (task 1268).
|
|
255
273
|
GET/PATCH /api/bongos/me/wandering. Rank sets the default + ceiling; the
|
|
256
274
|
server clamps, so options above the rank cap render disabled. -->
|
|
@@ -373,5 +391,9 @@
|
|
|
373
391
|
<!-- task 1003341: the Active sessions panel. Its own file rather than more of
|
|
374
392
|
settings.js, which sits close to the 1500-line size ratchet. -->
|
|
375
393
|
<script src="/builders/settings-sessions.js?v=2026-08-29-sessions"></script>
|
|
394
|
+
<!-- task 1002514: the interaction-profile panel ("How Claude talks to you"), on
|
|
395
|
+
the same precedent and for the same reason — settings.js is against the
|
|
396
|
+
1500-line ratchet, and this panel shares nothing with the rest of the page. -->
|
|
397
|
+
<script src="/builders/settings-interaction.js?v=2026-09-15-interaction"></script>
|
|
376
398
|
</body>
|
|
377
399
|
</html>
|
|
@@ -1311,6 +1311,7 @@
|
|
|
1311
1311
|
'dev-box': 'box-scroll',
|
|
1312
1312
|
'dev-box-app': 'boxapp-scroll',
|
|
1313
1313
|
'pairing': 'pairing-scroll',
|
|
1314
|
+
'interaction': 'interaction-scroll',
|
|
1314
1315
|
'wandering': 'wandering-scroll',
|
|
1315
1316
|
'rendering': 'render-scroll',
|
|
1316
1317
|
'voices': 'voices-scroll',
|
|
@@ -1453,6 +1454,8 @@
|
|
|
1453
1454
|
await loadSounds();
|
|
1454
1455
|
// Event sounds loads independently (per-event variant picker, task 582).
|
|
1455
1456
|
await loadEventSounds();
|
|
1457
|
+
// (The interaction profile panel self-boots from settings-interaction.js —
|
|
1458
|
+
// its own script on the settings-sessions.js precedent, task 1002514.)
|
|
1456
1459
|
// Wandering loads independently too (off-task thread suppression, task 1268).
|
|
1457
1460
|
await loadWandering();
|
|
1458
1461
|
// Rendering loads independently too (rich in-feed cards on/off, task 1279).
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.764",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.19.
|
|
9
|
+
"version": "1.19.764",
|
|
10
10
|
"license": "AGPL-3.0-or-later",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"express": "^4.21.2",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.764",
|
|
4
4
|
"description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"main": "src/platform-server.js",
|
package/src/module-api.js
CHANGED
|
@@ -71,7 +71,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
|
|
|
71
71
|
// there. scripts/gds/bump-version.js still rewrites the literal below; it appends
|
|
72
72
|
// the entry to that file. Look for a version's history there, not here.
|
|
73
73
|
// ---------------------------------------------------------------------------
|
|
74
|
-
const CORE_VERSION = '1.19.
|
|
74
|
+
const CORE_VERSION = '1.19.764'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
|
|
75
75
|
|
|
76
76
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
77
77
|
// Usage: const log = api.logger('dev-box'); log.info('mounted');
|
package/tests/conductor.mjs
CHANGED
|
@@ -130,6 +130,42 @@ test('wandering: lowest priority — emitted after methodology/status advisories
|
|
|
130
130
|
assert.equal(a[a.length - 1].id, 'wandering', 'wandering is emitted last');
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
+
// ---------- evaluateTriggers: interaction profile (task 2010, delivered 1002514) ----------
|
|
134
|
+
//
|
|
135
|
+
// This branch shipped with task 2010 and had NO coverage here, which is part of
|
|
136
|
+
// why the profile could be believed to have no consumer at all. It relays only —
|
|
137
|
+
// interaction-prefs.js resolves — so these pin the relay, plus the one end-to-end
|
|
138
|
+
// fact clause 1 of `accessibility-fluency-profile` turns on.
|
|
139
|
+
|
|
140
|
+
test('interaction: a profile with inject:true emits the pitch contract', () => {
|
|
141
|
+
const a = conductor.evaluateTriggers({
|
|
142
|
+
interaction: { inject: true, contract: 'Interaction profile for this builder — pitch replies accordingly:' },
|
|
143
|
+
});
|
|
144
|
+
const i = a.find((x) => x.id === 'interaction');
|
|
145
|
+
assert.ok(i, 'expected an interaction advisory');
|
|
146
|
+
assert.match(i.text, /pitch replies accordingly/);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('interaction: inject:false, an empty contract, or a null knob emit nothing', () => {
|
|
150
|
+
assert.ok(!ids(conductor.evaluateTriggers({ interaction: { inject: false, contract: 'x' } })).includes('interaction'));
|
|
151
|
+
assert.ok(!ids(conductor.evaluateTriggers({ interaction: { inject: true, contract: '' } })).includes('interaction'));
|
|
152
|
+
assert.ok(!ids(conductor.evaluateTriggers({ interaction: null })).includes('interaction'));
|
|
153
|
+
assert.ok(!ids(conductor.evaluateTriggers({})).includes('interaction'));
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// The clause-1 proof, run against the REAL resolver rather than a hand-written
|
|
157
|
+
// payload: the accessible DEFAULT profile — the one a builder who never opens
|
|
158
|
+
// Settings has — must reach a session. Before task 1002514 every default field
|
|
159
|
+
// carried an empty fragment, so describeForApi({}) came back inject:false and
|
|
160
|
+
// this advisory was never emitted for the builder it was written for.
|
|
161
|
+
test('interaction: the DEFAULT profile reaches a session end to end', () => {
|
|
162
|
+
const interactionPrefs = require('../modules/builder-settings/interaction-prefs.js');
|
|
163
|
+
const a = conductor.evaluateTriggers({ interaction: interactionPrefs.describeForApi({}) });
|
|
164
|
+
const i = a.find((x) => x.id === 'interaction');
|
|
165
|
+
assert.ok(i, 'a builder on all defaults must still be described to the session');
|
|
166
|
+
assert.match(i.text, /non-technical/);
|
|
167
|
+
});
|
|
168
|
+
|
|
133
169
|
// The nudge says "your claim's", singular, so it is measured against the claim
|
|
134
170
|
// bound to THIS worktree (task 1003837). These three carry a worktree_name and a
|
|
135
171
|
// matching `worktree` for that reason; the four below pin what changed.
|
|
@@ -160,6 +160,55 @@ test('the wandering pick is a radio row, wired on change', () => {
|
|
|
160
160
|
assert.match(radio, /height:\s*24px/, 'a native radio is 13px; the floor is 24');
|
|
161
161
|
});
|
|
162
162
|
|
|
163
|
+
// ---- the interaction panel (task 1002514) ----------------------------------
|
|
164
|
+
//
|
|
165
|
+
// Three facts a browser is silent about: the panel is rendered by a script that
|
|
166
|
+
// is not settings.js, so the wiring between the two halves is the thing that can
|
|
167
|
+
// silently break; and the carve exists because settings.js is against the
|
|
168
|
+
// 1500-line ratchet, which is a fact a reader will otherwise undo.
|
|
169
|
+
|
|
170
|
+
test('the interaction panel is wired end to end across its two files', () => {
|
|
171
|
+
const html = read('settings.html');
|
|
172
|
+
const panelJs = read('settings-interaction.js');
|
|
173
|
+
|
|
174
|
+
// The markup half lives in settings.html and must join a group that already
|
|
175
|
+
// exists — the rail renders groups, so a section in an unknown data-group is
|
|
176
|
+
// markup nothing ever shows.
|
|
177
|
+
const section = html.match(/<section class="scroll" id="interaction-scroll"[^>]*>/);
|
|
178
|
+
assert.ok(section, 'the panel has a section');
|
|
179
|
+
assert.match(section[0], /data-group="preferences"/, 'it joins a group the rail already renders');
|
|
180
|
+
assert.match(section[0], /\bhidden\b/, 'hidden until its own read succeeds, like every other panel');
|
|
181
|
+
assert.match(html, /<script src="\/builders\/settings-interaction\.js/, 'the page loads the panel script');
|
|
182
|
+
|
|
183
|
+
// The script half self-boots and reveals the section. If it stopped doing
|
|
184
|
+
// either, the panel would simply never appear and no test would notice.
|
|
185
|
+
assert.match(panelJs, /\$\('#interaction-scroll'\)\.hidden = false/, 'the script reveals its own section');
|
|
186
|
+
assert.match(panelJs, /setup\(\);/, 'it self-boots — settings.js does not call it');
|
|
187
|
+
|
|
188
|
+
// settings.js keeps ONLY the anchor entry, so /settings#interaction activates
|
|
189
|
+
// the group before the panel paints.
|
|
190
|
+
assert.match(settingsJs, /'interaction': 'interaction-scroll'/, 'the deep-link anchor stays in settings.js');
|
|
191
|
+
assert.doesNotMatch(settingsJs, /function renderInteraction\(/, 'the renderer moved out and must not come back inline');
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('the interaction panel stays out of settings.js, which is against the size ratchet', () => {
|
|
195
|
+
// Not style: inlining this panel put settings.js at 1601 lines and regressed
|
|
196
|
+
// oversized_file_count 0→1 and excess_lines_total 0→102 (fitness-ratchets.js,
|
|
197
|
+
// OVERSIZE_LINES = 1500). The settings-sessions.js precedent, same reason.
|
|
198
|
+
const lines = settingsJs.split('\n').length;
|
|
199
|
+
assert.ok(lines < 1500, `settings.js is ${lines} lines — at or over the 1500 ratchet; carve the next panel out too`);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
test('a default value is named once, by the API, not twice by the row', () => {
|
|
203
|
+
// The first render read "Non-technical (default) · DEFAULT": interaction-prefs.js
|
|
204
|
+
// already ends every default value's LABEL with "(default)", and the row also
|
|
205
|
+
// carried the wandering picker's .prow__tag. One source for the word.
|
|
206
|
+
const panelJs = read('settings-interaction.js');
|
|
207
|
+
const render = panelJs.match(/function render\([\s\S]*?\n \}\n/);
|
|
208
|
+
assert.ok(render, 'render is a whole function');
|
|
209
|
+
assert.doesNotMatch(render[0], /prow__tag/, 'the row must not re-state "default" beside a label that already says it');
|
|
210
|
+
});
|
|
211
|
+
|
|
163
212
|
test('.craft-pref is a 24px target with a 14px drawn box — it was 13x13, the smallest control in the hall', () => {
|
|
164
213
|
const box = ruleOf(panelCss, '.craft-pref');
|
|
165
214
|
assert.ok(box, '.craft-pref has a rule');
|
|
@@ -6,19 +6,47 @@ import { createRequire } from 'node:module';
|
|
|
6
6
|
const require = createRequire(import.meta.url);
|
|
7
7
|
const ip = require('../modules/builder-settings/interaction-prefs.js');
|
|
8
8
|
|
|
9
|
-
test('defaults: unset prefs → all field defaults
|
|
9
|
+
test('defaults: unset prefs → all field defaults', () => {
|
|
10
10
|
const eff = ip.effectiveProfile({});
|
|
11
11
|
assert.equal(eff.technical_level, 'non_technical');
|
|
12
12
|
assert.equal(eff.toolchain_familiarity, 'new');
|
|
13
13
|
assert.equal(eff.verbosity, 'concise');
|
|
14
|
-
assert.equal(ip.contractFor({}), '', 'all-default profile injects nothing');
|
|
15
|
-
assert.equal(ip.shouldInject({}), false);
|
|
16
14
|
});
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
// task 1002514, clause 1 of `accessibility-fluency-profile`. This REPLACES an
|
|
17
|
+
// assertion that the all-default profile injected nothing. That was correct while
|
|
18
|
+
// CLAUDE.md §2 carried the posture as prose, and it meant the accessible-by-
|
|
19
|
+
// default builder — the one who most needs the posture and least likely to open
|
|
20
|
+
// Settings — was the only builder the profile said nothing about.
|
|
21
|
+
test('the DEFAULT profile injects the accessible posture (it is a posture, not an absence)', () => {
|
|
22
|
+
const c = ip.contractFor({});
|
|
23
|
+
assert.notEqual(c, '', 'the accessible default must not be the silent one');
|
|
24
|
+
assert.equal(ip.shouldInject({}), true);
|
|
25
|
+
assert.match(c, /non-technical/, 'the vocabulary posture must arrive');
|
|
26
|
+
assert.match(c, /define a term the first time/);
|
|
27
|
+
assert.match(c, /cost, time and what the end user will see/, 'the framing posture must arrive');
|
|
28
|
+
assert.match(c, /step by step/, 'the toolchain posture must arrive');
|
|
29
|
+
assert.match(c, /concise/, 'the length posture must arrive');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('null / missing behaviorPrefs is safe, and still resolves to the default posture', () => {
|
|
19
33
|
assert.deepEqual(ip.storedProfile(null), {});
|
|
20
|
-
assert.equal(ip.contractFor(null), '');
|
|
21
|
-
assert.equal(ip.shouldInject(undefined),
|
|
34
|
+
assert.equal(ip.contractFor(null), ip.contractFor({}), 'absent prefs resolve exactly like empty prefs');
|
|
35
|
+
assert.equal(ip.shouldInject(undefined), true);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// The criterion's hard constraint: "an expert's terse experience is never
|
|
39
|
+
// degraded to help a newcomer." The expert contract must not merely differ from
|
|
40
|
+
// the newcomer one — it must be SHORTER, and it must tell the agent to skip.
|
|
41
|
+
test('an expert profile stays terse where a non-technical one is explained to', () => {
|
|
42
|
+
const beginner = ip.contractFor({});
|
|
43
|
+
const expert = ip.contractFor({
|
|
44
|
+
interaction: { technical_level: 'engineer', toolchain_familiarity: 'comfortable' },
|
|
45
|
+
});
|
|
46
|
+
assert.ok(expert.length < beginner.length, 'the expert contract must be shorter, not just different');
|
|
47
|
+
assert.match(expert, /skip basic explanations/);
|
|
48
|
+
assert.doesNotMatch(expert, /do not assume software-engineering vocabulary/);
|
|
49
|
+
assert.doesNotMatch(expert, /walk local tooling/);
|
|
22
50
|
});
|
|
23
51
|
|
|
24
52
|
test('a non-default field produces an injected contract', () => {
|
|
@@ -76,10 +104,21 @@ test('describeForApi exposes catalog + effective + contract + inject', () => {
|
|
|
76
104
|
// The SURFACE half of the profile: how much of the work behind a reply gets
|
|
77
105
|
// narrated. Default `show` keeps every existing builder on today's behavior.
|
|
78
106
|
|
|
79
|
-
|
|
107
|
+
// The assertion here used to be `contractFor({machinery:'show'}) === ''`, which
|
|
108
|
+
// measured the WHOLE contract's emptiness to prove one field contributed nothing.
|
|
109
|
+
// That conflated "this field is silent" with "every field is silent", so once the
|
|
110
|
+
// other defaults gained text (task 1002514) it would have gone red for a reason
|
|
111
|
+
// that had nothing to do with machinery. Same intent, pointed at the actual claim:
|
|
112
|
+
// adding `show` changes nothing, and `show` never names itself.
|
|
113
|
+
test('machinery defaults to show and contributes nothing to the contract', () => {
|
|
80
114
|
assert.equal(ip.defaultValue('machinery'), 'show');
|
|
81
115
|
assert.equal(ip.effectiveProfile({}).machinery, 'show');
|
|
82
|
-
assert.equal(
|
|
116
|
+
assert.equal(
|
|
117
|
+
ip.contractFor({ interaction: { machinery: 'show' } }),
|
|
118
|
+
ip.contractFor({}),
|
|
119
|
+
'an explicit `show` must read identically to leaving it unset',
|
|
120
|
+
);
|
|
121
|
+
assert.doesNotMatch(ip.contractFor({}), /Machinery/, 'the default must never spend session context');
|
|
83
122
|
});
|
|
84
123
|
|
|
85
124
|
test('machinery=quiet injects an outcomes-not-mechanism contract', () => {
|