@bongos/core 1.19.794 → 1.19.796
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 +39 -24
- package/docs/copy-inventory.md +12 -10
- package/docs/copy-registry.json +30 -12
- package/docs/module-api-changelog.md +4 -0
- package/migrations/core_244_skill_friction_kind.sql +74 -0
- package/modules/hall-ui/public/collab-lib.js +64 -1
- package/modules/hall-ui/public/collab.css +56 -0
- package/modules/hall-ui/public/collab.html +2 -2
- package/modules/hall-ui/public/collab.js +108 -17
- package/modules/ideas/inbox.js +27 -59
- package/modules/ideas/skill-friction.js +97 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/claude-materialize.js +70 -4
- package/scripts/gds/ship-flow.js +7 -1
- package/scripts/gds/ship-honesty.js +55 -1
- package/src/module-api.js +1 -1
- package/tests/claude_materialize.mjs +71 -0
- package/tests/hall_collab_world.mjs +114 -3
- package/tests/ship_cannot_lie.mjs +75 -1
- package/tests/skill_friction_kind.mjs +163 -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.796",
|
|
6
|
+
"core_contract": "1.19.796",
|
|
7
|
+
"source_commit": "eb84110e187e21a515d265977ce83f905d8ca85a",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-17T01:04:56.932Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 486,
|
|
13
13
|
"agent_docs_stubbed": 25,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2182,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2693,
|
|
20
|
+
"tree_sha256": "19d44026eb8aaa1ed4e9b87d3ff059e80fe495cbb5ba3e19bf74a36fe69632d0",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -1997,12 +1997,12 @@
|
|
|
1997
1997
|
{
|
|
1998
1998
|
"path": "docs/copy-inventory.md",
|
|
1999
1999
|
"mode": "0000644",
|
|
2000
|
-
"sha256": "
|
|
2000
|
+
"sha256": "ab5057dfc9880545e8d2ac6ac44eb86af18f13a7efe1a071c9a3b9910a2ec5b6"
|
|
2001
2001
|
},
|
|
2002
2002
|
{
|
|
2003
2003
|
"path": "docs/copy-registry.json",
|
|
2004
2004
|
"mode": "0000644",
|
|
2005
|
-
"sha256": "
|
|
2005
|
+
"sha256": "8306b8b8748398081ddece28d92a5dd78b29facc39b55b394bb1b0877249264e"
|
|
2006
2006
|
},
|
|
2007
2007
|
{
|
|
2008
2008
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2527,7 +2527,7 @@
|
|
|
2527
2527
|
{
|
|
2528
2528
|
"path": "docs/module-api-changelog.md",
|
|
2529
2529
|
"mode": "0000644",
|
|
2530
|
-
"sha256": "
|
|
2530
|
+
"sha256": "393caf0055b05621fc26bb45600687b9f02f66d3efcb6774661001d93a6a1847"
|
|
2531
2531
|
},
|
|
2532
2532
|
{
|
|
2533
2533
|
"path": "docs/modules-contract.md",
|
|
@@ -3614,6 +3614,11 @@
|
|
|
3614
3614
|
"mode": "0000644",
|
|
3615
3615
|
"sha256": "8e3e2db2ab3b7775bddf12f3a7ec3ed74477334b6388487ecd919cd61a62b0ba"
|
|
3616
3616
|
},
|
|
3617
|
+
{
|
|
3618
|
+
"path": "migrations/core_244_skill_friction_kind.sql",
|
|
3619
|
+
"mode": "0000644",
|
|
3620
|
+
"sha256": "e298a5b2e9ffade95fae0e68910a25396fab560e6e54dd745cfc122c0dfdf403"
|
|
3621
|
+
},
|
|
3617
3622
|
{
|
|
3618
3623
|
"path": "modules/agents/CLAUDE.md",
|
|
3619
3624
|
"mode": "0000644",
|
|
@@ -4672,22 +4677,22 @@
|
|
|
4672
4677
|
{
|
|
4673
4678
|
"path": "modules/hall-ui/public/collab-lib.js",
|
|
4674
4679
|
"mode": "0000644",
|
|
4675
|
-
"sha256": "
|
|
4680
|
+
"sha256": "b5bb0d5f86879fe7fb154aaa819f2c5bceda50138f6c7cf9150bce2d0b51a832"
|
|
4676
4681
|
},
|
|
4677
4682
|
{
|
|
4678
4683
|
"path": "modules/hall-ui/public/collab.css",
|
|
4679
4684
|
"mode": "0000644",
|
|
4680
|
-
"sha256": "
|
|
4685
|
+
"sha256": "12c967c9bbed5fa4d1cb58b57f6f70eb90fee9626c7cad8e30e3a36b1f8c8db8"
|
|
4681
4686
|
},
|
|
4682
4687
|
{
|
|
4683
4688
|
"path": "modules/hall-ui/public/collab.html",
|
|
4684
4689
|
"mode": "0000644",
|
|
4685
|
-
"sha256": "
|
|
4690
|
+
"sha256": "664bbcc84bd92ed3762f5c74f265ac86f320995f02d0093c12758db6e8af35ed"
|
|
4686
4691
|
},
|
|
4687
4692
|
{
|
|
4688
4693
|
"path": "modules/hall-ui/public/collab.js",
|
|
4689
4694
|
"mode": "0000644",
|
|
4690
|
-
"sha256": "
|
|
4695
|
+
"sha256": "101a428f4b1bc76117eec665710265b201c32dbce76e2ddfd20e7e82b036faf7"
|
|
4691
4696
|
},
|
|
4692
4697
|
{
|
|
4693
4698
|
"path": "modules/hall-ui/public/collab.states.json",
|
|
@@ -5377,7 +5382,7 @@
|
|
|
5377
5382
|
{
|
|
5378
5383
|
"path": "modules/ideas/inbox.js",
|
|
5379
5384
|
"mode": "0000644",
|
|
5380
|
-
"sha256": "
|
|
5385
|
+
"sha256": "6c619200312b32cbc268c44b41c4f3f574f7917a31187b69cfeba105c804ddee"
|
|
5381
5386
|
},
|
|
5382
5387
|
{
|
|
5383
5388
|
"path": "modules/ideas/migrations/ideas_001_grades.sql",
|
|
@@ -5429,6 +5434,11 @@
|
|
|
5429
5434
|
"mode": "0000644",
|
|
5430
5435
|
"sha256": "da653f475d6c91db8e84bff46c797bb68b61e48d561eacf7bfd228a119ac7266"
|
|
5431
5436
|
},
|
|
5437
|
+
{
|
|
5438
|
+
"path": "modules/ideas/skill-friction.js",
|
|
5439
|
+
"mode": "0000644",
|
|
5440
|
+
"sha256": "eb6a5cecb3ce54aeb0c85ffb752eb12a2400d0d4f5c7d48e4e05ff3cf7baf712"
|
|
5441
|
+
},
|
|
5432
5442
|
{
|
|
5433
5443
|
"path": "modules/ideas/templates.js",
|
|
5434
5444
|
"mode": "0000644",
|
|
@@ -7692,12 +7702,12 @@
|
|
|
7692
7702
|
{
|
|
7693
7703
|
"path": "package-lock.json",
|
|
7694
7704
|
"mode": "0000644",
|
|
7695
|
-
"sha256": "
|
|
7705
|
+
"sha256": "f93bb0db7f1d64f92d574b1c67095cb6e23f4101da20886678ac869477005630"
|
|
7696
7706
|
},
|
|
7697
7707
|
{
|
|
7698
7708
|
"path": "package.json",
|
|
7699
7709
|
"mode": "0000644",
|
|
7700
|
-
"sha256": "
|
|
7710
|
+
"sha256": "ddba830385dd1e004134ca3b317969fb69aa5772b607e2d650fae222915ec51e"
|
|
7701
7711
|
},
|
|
7702
7712
|
{
|
|
7703
7713
|
"path": "public-docs/index.html",
|
|
@@ -7987,7 +7997,7 @@
|
|
|
7987
7997
|
{
|
|
7988
7998
|
"path": "scripts/gds/claude-materialize.js",
|
|
7989
7999
|
"mode": "0000644",
|
|
7990
|
-
"sha256": "
|
|
8000
|
+
"sha256": "8cf425aed2764fc043c8a8757f178f7514a907567d559e7f0b11e091f33b66e5"
|
|
7991
8001
|
},
|
|
7992
8002
|
{
|
|
7993
8003
|
"path": "scripts/gds/claude-md-template.js",
|
|
@@ -8932,7 +8942,7 @@
|
|
|
8932
8942
|
{
|
|
8933
8943
|
"path": "scripts/gds/ship-flow.js",
|
|
8934
8944
|
"mode": "0000644",
|
|
8935
|
-
"sha256": "
|
|
8945
|
+
"sha256": "fe64da47ac66f589d0245e02b321dbd708e695dd3875e75e8b4ac36e6aa31636"
|
|
8936
8946
|
},
|
|
8937
8947
|
{
|
|
8938
8948
|
"path": "scripts/gds/ship-git.js",
|
|
@@ -8952,7 +8962,7 @@
|
|
|
8952
8962
|
{
|
|
8953
8963
|
"path": "scripts/gds/ship-honesty.js",
|
|
8954
8964
|
"mode": "0000644",
|
|
8955
|
-
"sha256": "
|
|
8965
|
+
"sha256": "3ab4816fdd43d589cda73698a514f8e23103be166c1650fd24beeee9f529bb5b"
|
|
8956
8966
|
},
|
|
8957
8967
|
{
|
|
8958
8968
|
"path": "scripts/gds/ship-io.js",
|
|
@@ -9577,7 +9587,7 @@
|
|
|
9577
9587
|
{
|
|
9578
9588
|
"path": "src/module-api.js",
|
|
9579
9589
|
"mode": "0000644",
|
|
9580
|
-
"sha256": "
|
|
9590
|
+
"sha256": "a7ef0a9cd6da08076cf17a8de8eae34b588fe51f05f0be618e9fd4e37951e214"
|
|
9581
9591
|
},
|
|
9582
9592
|
{
|
|
9583
9593
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10247,7 +10257,7 @@
|
|
|
10247
10257
|
{
|
|
10248
10258
|
"path": "tests/claude_materialize.mjs",
|
|
10249
10259
|
"mode": "0000644",
|
|
10250
|
-
"sha256": "
|
|
10260
|
+
"sha256": "7acfe432856010881b234b258d45fcf65f976e0e711d01b823d90990a0c7179c"
|
|
10251
10261
|
},
|
|
10252
10262
|
{
|
|
10253
10263
|
"path": "tests/clawback_confirmed_backlog.mjs",
|
|
@@ -11277,7 +11287,7 @@
|
|
|
11277
11287
|
{
|
|
11278
11288
|
"path": "tests/hall_collab_world.mjs",
|
|
11279
11289
|
"mode": "0000644",
|
|
11280
|
-
"sha256": "
|
|
11290
|
+
"sha256": "d005de58e0eabd019f616ee6c77123c5880b67034ce33dc1b01d687a2b284b10"
|
|
11281
11291
|
},
|
|
11282
11292
|
{
|
|
11283
11293
|
"path": "tests/hall_error_envelope.mjs",
|
|
@@ -12892,7 +12902,7 @@
|
|
|
12892
12902
|
{
|
|
12893
12903
|
"path": "tests/ship_cannot_lie.mjs",
|
|
12894
12904
|
"mode": "0000644",
|
|
12895
|
-
"sha256": "
|
|
12905
|
+
"sha256": "55e94ed59bc1bd19e4a3dd0e9a9a415dde659c5d71af0dd827d1b288e66de3c7"
|
|
12896
12906
|
},
|
|
12897
12907
|
{
|
|
12898
12908
|
"path": "tests/ship_card.mjs",
|
|
@@ -12984,6 +12994,11 @@
|
|
|
12984
12994
|
"mode": "0000644",
|
|
12985
12995
|
"sha256": "0eeccae9320f419667cf9ede3c13671a5b03571f7f2f17067bff1857234ddf91"
|
|
12986
12996
|
},
|
|
12997
|
+
{
|
|
12998
|
+
"path": "tests/skill_friction_kind.mjs",
|
|
12999
|
+
"mode": "0000644",
|
|
13000
|
+
"sha256": "baaf5935cc748e7eb9596d1c96c3c20aa2ee3917377d32b9104408b7b07165a4"
|
|
13001
|
+
},
|
|
12987
13002
|
{
|
|
12988
13003
|
"path": "tests/skill_grade_audit.mjs",
|
|
12989
13004
|
"mode": "0000644",
|
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
|
+
**1795 strings** across 3 surfaces · 1551 distinct pieces of copy · 1795 certain, 0 heuristic · 169 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` | 85 |
|
|
13
|
+
| `builders-hall` | `modules/hall-ui/public` | 85 | 1305 |
|
|
14
14
|
| `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
|
|
15
15
|
| `landing` | `modules/public-landing/public` | 5 | 390 |
|
|
16
16
|
|
|
@@ -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
|
| … | | _129 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1305 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -134,7 +134,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
134
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:333` |
|
|
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
|
-
| `1b326b0be1a4` | certain | A {…} — you are a {…}. Mingle pairs across crafts. | `modules/hall-ui/public/collab.js:
|
|
137
|
+
| `1b326b0be1a4` | certain | A {…} — you are a {…}. Mingle pairs across crafts. | `modules/hall-ui/public/collab.js:365` |
|
|
138
138
|
| `996edffc1966` | certain | Access requests | `modules/hall-ui/public/watch.html:46` |
|
|
139
139
|
| `996edffc1966` | certain | Access requests | `modules/hall-ui/public/watch.html:61` |
|
|
140
140
|
| `303f8d90266f` | certain | Achievements could not be loaded. | `modules/hall-ui/public/builders.js:1158` |
|
|
@@ -173,7 +173,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
173
173
|
| `5fcfdf8975cf` | certain | As configuration: | `modules/hall-ui/public/government.js:829` |
|
|
174
174
|
| `01a0f29ff406` | certain | As first filed | `modules/hall-ui/public/idea.js:252` |
|
|
175
175
|
| `688cc6dd38ee` | certain | Asked of you | `modules/hall-ui/public/collab.html:41` |
|
|
176
|
-
| `b2656d0b2402` | certain | Asked {…} | `modules/hall-ui/public/collab.js:
|
|
176
|
+
| `b2656d0b2402` | certain | Asked {…} | `modules/hall-ui/public/collab.js:53` |
|
|
177
177
|
| `b2656d0b2402` | certain | Asked {…} | `modules/hall-ui/public/watch.js:488` |
|
|
178
178
|
| `8c8ec2597036` | certain | Assigned {…} to builder {…}. | `modules/hall-ui/public/government.js:463` |
|
|
179
179
|
| `46714066f2da` | certain | Audit log | `modules/hall-ui/public/watch.html:148` |
|
|
@@ -272,6 +272,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
272
272
|
| `12ee050d0180` | certain | Copy desk | `modules/hall-ui/public/copy-desk.html:27` |
|
|
273
273
|
| `1214ea8e0d1b` | certain | Copy desk — {{worldName}} | `modules/hall-ui/public/copy-desk.html:6` |
|
|
274
274
|
| `1214ea8e0d1b` | certain | Copy desk — {{worldName}} | `modules/hall-ui/public/copy-desk.html:6` |
|
|
275
|
+
| `30764a4f0e28` | certain | Copy for Session Start | `modules/hall-ui/public/collab.js:91` |
|
|
275
276
|
| `7cabea700b57` | certain | Copy not supported here — select the value and copy by hand. | `modules/hall-ui/public/box-panel.js:415` |
|
|
276
277
|
| `ebc8a6c16a22` | certain | Copy parallel prompt | `modules/hall-ui/public/work.html:146` |
|
|
277
278
|
| `a873e7c29d80` | certain | Copy prompt | `modules/hall-ui/public/task.js:614` |
|
|
@@ -304,7 +305,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
304
305
|
| `90691bceaf68` | certain | Could not load | `modules/hall-ui/public/task.js:707` |
|
|
305
306
|
| `589a4cfc5442` | certain | Could not load idea {…}. | `modules/hall-ui/public/ideas.js:644` |
|
|
306
307
|
| `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:318` |
|
|
307
|
-
| `8a4b590fa1a0` | certain | Could not load requests. | `modules/hall-ui/public/collab.js:
|
|
308
|
+
| `8a4b590fa1a0` | certain | Could not load requests. | `modules/hall-ui/public/collab.js:458` |
|
|
308
309
|
| `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:275` |
|
|
309
310
|
| `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:313` |
|
|
310
311
|
| `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:626` |
|
|
@@ -659,7 +660,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
659
660
|
| `c72e0bdb834a` | certain | Not declared in module.json — this is who ships the module. | `modules/hall-ui/public/modules.js:62` |
|
|
660
661
|
| `361b353ded5e` | certain | Not enough shipped work yet to chart. | `modules/hall-ui/public/hall-widgets.js:184` |
|
|
661
662
|
| `90230572d017` | certain | Not found | `modules/hall-ui/public/task.js:695` |
|
|
662
|
-
| `8226c979db4d` | certain | Not now | `modules/hall-ui/public/collab.js:
|
|
663
|
+
| `8226c979db4d` | certain | Not now | `modules/hall-ui/public/collab.js:365` |
|
|
663
664
|
| `5ffcdc1a0176` | certain | Not scored — this builder’s own profile waived every signal, or the session predates this measure. | `modules/hall-ui/public/sessions.js:67` |
|
|
664
665
|
| `61250b49a90b` | certain | Not scored. | `modules/hall-ui/public/idea.js:84` |
|
|
665
666
|
| `8d6afe6def47` | certain | Not signed in | `modules/hall-ui/public/settings.html:40` |
|
|
@@ -765,6 +766,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
765
766
|
| `b03e17693dcd` | certain | Read it as a table | `modules/hall-ui/public/drachmae.js:148` |
|
|
766
767
|
| `b03e17693dcd` | certain | Read it as a table | `modules/hall-ui/public/watch.js:1167` |
|
|
767
768
|
| `b6fcfdd652a7` | certain | Read it here | `modules/hall-ui/public/work.html:45` |
|
|
769
|
+
| `053df132e22c` | certain | Read the full ask | `modules/hall-ui/public/collab.js:91` |
|
|
768
770
|
| `c5f19a888a15` | certain | Read the handoff notes | `modules/hall-ui/public/task.js:438` |
|
|
769
771
|
| `f9e998f4af3d` | certain | Read to the end and the button below unlocks. It is an honour system — nothing here checks your comprehension. | `modules/hall-ui/public/primer.html:100` |
|
|
770
772
|
| `26e6c9879035` | certain | Reading the diagrams | `modules/hall-ui/public/diagrams.html:39` |
|
|
@@ -828,7 +830,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
828
830
|
| `e8e4e49fe8f4` | certain | Saves when you press Save; shows everywhere at once. | `modules/hall-ui/public/settings.html:88` |
|
|
829
831
|
| `42cbc20a6ec8` | certain | Saves when you press Save; your next | `modules/hall-ui/public/settings.html:136` |
|
|
830
832
|
| `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` |
|
|
831
|
-
| `12c1ec21a2c6` | certain | Say yes | `modules/hall-ui/public/collab.js:
|
|
833
|
+
| `12c1ec21a2c6` | certain | Say yes | `modules/hall-ui/public/collab.js:365` |
|
|
832
834
|
| `46711f7bc3df` | certain | Search every string the product shows a person, by what it says or the file it lives in. | `modules/hall-ui/public/copy-desk.html:65` |
|
|
833
835
|
| `5d2ba8e72fa1` | certain | Search failed. | `modules/hall-ui/public/copy-desk.js:343` |
|
|
834
836
|
| `373a7639bcb9` | certain | Sections in this primer | `modules/hall-ui/public/primer.html:52` |
|
|
@@ -863,7 +865,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
863
865
|
| `ac44b08aec92` | certain | Ship it | `modules/hall-ui/public/task.js:600` |
|
|
864
866
|
| `b94a6b5b3d8c` | certain | Shipped with the core | `modules/hall-ui/public/modules.html:56` |
|
|
865
867
|
| `0c0a50ba1666` | certain | Shipped {…}{…}, {…}. | `modules/hall-ui/public/task.js:581` |
|
|
866
|
-
| `6dde12eb0c78` | certain | Show all {…} | `modules/hall-ui/public/collab.js:
|
|
868
|
+
| `6dde12eb0c78` | certain | Show all {…} | `modules/hall-ui/public/collab.js:245` |
|
|
867
869
|
| `14d32a35c15f` | certain | Show my cross-project record | `modules/hall-ui/public/settings.js:516` |
|
|
868
870
|
| `dc0f9fe50a65` | certain | Show the setup guide again | `modules/hall-ui/public/index.html:64` |
|
|
869
871
|
| `2af4c0f2b4b9` | certain | Showing {…} of {…}. | `modules/hall-ui/public/ideas.js:547` |
|
|
@@ -885,7 +887,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
885
887
|
| `87cee78ca134` | certain | Skip to content | `modules/hall-ui/public/shell.js:588` |
|
|
886
888
|
| `688ca7b6e30f` | certain | Slop — reads as machine-written | `modules/hall-ui/public/copy-desk.html:90` |
|
|
887
889
|
| `82df09a08476` | certain | So the Archon knows who you are | `modules/hall-ui/public/hall-render.js:294` |
|
|
888
|
-
| `7da6a848cd26` | certain | Someone helped | `modules/hall-ui/public/collab.js:
|
|
890
|
+
| `7da6a848cd26` | certain | Someone helped | `modules/hall-ui/public/collab.js:195` |
|
|
889
891
|
| `867df58c9aaa` | certain | Something else | `modules/hall-ui/public/copy-desk.html:95` |
|
|
890
892
|
| `c377d8ed744b` | certain | Something went wrong. Try again. | `modules/hall-ui/public/profile-connections.js:275` |
|
|
891
893
|
| `e0767e80206c` | certain | Sound for {…} | `modules/hall-ui/public/settings.js:311` |
|
package/docs/copy-registry.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"generator": "scripts/gds/copy-inventory.js",
|
|
4
4
|
"goal": 1000074,
|
|
5
5
|
"counts": {
|
|
6
|
-
"strings":
|
|
7
|
-
"unique_ids":
|
|
8
|
-
"certain":
|
|
6
|
+
"strings": 1795,
|
|
7
|
+
"unique_ids": 1551,
|
|
8
|
+
"certain": 1795,
|
|
9
9
|
"heuristic": 0,
|
|
10
10
|
"duplicate_ids": 169
|
|
11
11
|
},
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"builders-hall": {
|
|
14
14
|
"at": "modules/hall-ui/public",
|
|
15
15
|
"files": 85,
|
|
16
|
-
"strings":
|
|
16
|
+
"strings": 1305
|
|
17
17
|
},
|
|
18
18
|
"status-dashboard": {
|
|
19
19
|
"at": "modules/status-ui/public",
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
"text": "Asked {…}",
|
|
550
550
|
"occurrences": 2,
|
|
551
551
|
"at": [
|
|
552
|
-
"modules/hall-ui/public/collab.js:
|
|
552
|
+
"modules/hall-ui/public/collab.js:53",
|
|
553
553
|
"modules/hall-ui/public/watch.js:488"
|
|
554
554
|
]
|
|
555
555
|
},
|
|
@@ -2278,7 +2278,7 @@
|
|
|
2278
2278
|
"surface": "builders-hall",
|
|
2279
2279
|
"text": "A {…} — you are a {…}. Mingle pairs across crafts.",
|
|
2280
2280
|
"file": "modules/hall-ui/public/collab.js",
|
|
2281
|
-
"line":
|
|
2281
|
+
"line": 365,
|
|
2282
2282
|
"origin": "js-markup",
|
|
2283
2283
|
"confidence": "certain"
|
|
2284
2284
|
},
|
|
@@ -2629,7 +2629,7 @@
|
|
|
2629
2629
|
"surface": "builders-hall",
|
|
2630
2630
|
"text": "Asked {…}",
|
|
2631
2631
|
"file": "modules/hall-ui/public/collab.js",
|
|
2632
|
-
"line":
|
|
2632
|
+
"line": 53,
|
|
2633
2633
|
"origin": "js-markup",
|
|
2634
2634
|
"confidence": "certain"
|
|
2635
2635
|
},
|
|
@@ -3515,6 +3515,15 @@
|
|
|
3515
3515
|
"origin": "html-title",
|
|
3516
3516
|
"confidence": "certain"
|
|
3517
3517
|
},
|
|
3518
|
+
{
|
|
3519
|
+
"id": "30764a4f0e28",
|
|
3520
|
+
"surface": "builders-hall",
|
|
3521
|
+
"text": "Copy for Session Start",
|
|
3522
|
+
"file": "modules/hall-ui/public/collab.js",
|
|
3523
|
+
"line": 91,
|
|
3524
|
+
"origin": "js-markup",
|
|
3525
|
+
"confidence": "certain"
|
|
3526
|
+
},
|
|
3518
3527
|
{
|
|
3519
3528
|
"id": "7cabea700b57",
|
|
3520
3529
|
"surface": "builders-hall",
|
|
@@ -3808,7 +3817,7 @@
|
|
|
3808
3817
|
"surface": "builders-hall",
|
|
3809
3818
|
"text": "Could not load requests.",
|
|
3810
3819
|
"file": "modules/hall-ui/public/collab.js",
|
|
3811
|
-
"line":
|
|
3820
|
+
"line": 458,
|
|
3812
3821
|
"origin": "js-text-assign",
|
|
3813
3822
|
"confidence": "certain"
|
|
3814
3823
|
},
|
|
@@ -7003,7 +7012,7 @@
|
|
|
7003
7012
|
"surface": "builders-hall",
|
|
7004
7013
|
"text": "Not now",
|
|
7005
7014
|
"file": "modules/hall-ui/public/collab.js",
|
|
7006
|
-
"line":
|
|
7015
|
+
"line": 365,
|
|
7007
7016
|
"origin": "js-markup",
|
|
7008
7017
|
"confidence": "certain"
|
|
7009
7018
|
},
|
|
@@ -7952,6 +7961,15 @@
|
|
|
7952
7961
|
"origin": "html-text",
|
|
7953
7962
|
"confidence": "certain"
|
|
7954
7963
|
},
|
|
7964
|
+
{
|
|
7965
|
+
"id": "053df132e22c",
|
|
7966
|
+
"surface": "builders-hall",
|
|
7967
|
+
"text": "Read the full ask",
|
|
7968
|
+
"file": "modules/hall-ui/public/collab.js",
|
|
7969
|
+
"line": 91,
|
|
7970
|
+
"origin": "js-markup",
|
|
7971
|
+
"confidence": "certain"
|
|
7972
|
+
},
|
|
7955
7973
|
{
|
|
7956
7974
|
"id": "c5f19a888a15",
|
|
7957
7975
|
"surface": "builders-hall",
|
|
@@ -8524,7 +8542,7 @@
|
|
|
8524
8542
|
"surface": "builders-hall",
|
|
8525
8543
|
"text": "Say yes",
|
|
8526
8544
|
"file": "modules/hall-ui/public/collab.js",
|
|
8527
|
-
"line":
|
|
8545
|
+
"line": 365,
|
|
8528
8546
|
"origin": "js-markup",
|
|
8529
8547
|
"confidence": "certain"
|
|
8530
8548
|
},
|
|
@@ -8839,7 +8857,7 @@
|
|
|
8839
8857
|
"surface": "builders-hall",
|
|
8840
8858
|
"text": "Show all {…}",
|
|
8841
8859
|
"file": "modules/hall-ui/public/collab.js",
|
|
8842
|
-
"line":
|
|
8860
|
+
"line": 245,
|
|
8843
8861
|
"origin": "js-text-assign",
|
|
8844
8862
|
"confidence": "certain"
|
|
8845
8863
|
},
|
|
@@ -9037,7 +9055,7 @@
|
|
|
9037
9055
|
"surface": "builders-hall",
|
|
9038
9056
|
"text": "Someone helped",
|
|
9039
9057
|
"file": "modules/hall-ui/public/collab.js",
|
|
9040
|
-
"line":
|
|
9058
|
+
"line": 195,
|
|
9041
9059
|
"origin": "js-markup",
|
|
9042
9060
|
"confidence": "certain"
|
|
9043
9061
|
},
|
|
@@ -2062,5 +2062,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2062
2062
|
landed since 1.19.792 with no explicit bump. run 35167484049. (task 1002620)
|
|
2063
2063
|
1.19.794 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2064
2064
|
landed since 1.19.793 with no explicit bump. run 35167814500. (task 1002620)
|
|
2065
|
+
1.19.795 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2066
|
+
landed since 1.19.794 with no explicit bump. run 35168408728. (task 1002620)
|
|
2067
|
+
1.19.796 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2068
|
+
landed since 1.19.795 with no explicit bump. run 35169093667. (task 1002620)
|
|
2065
2069
|
---------------------------------------------------------------------------
|
|
2066
2070
|
```
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
-- core_244_skill_friction_kind.sql — 'skill-friction' becomes a real kind
|
|
2
|
+
-- (task 1003105, goal 1000095, promoted from idea 1000759).
|
|
3
|
+
--
|
|
4
|
+
-- WHY. Two skills instruct the agent to file a retrospective finding as
|
|
5
|
+
-- `kind='skill-friction'` — `.claude/skills/planning-session/SKILL.md` ("After
|
|
6
|
+
-- the session — improvements pass") and `.claude/skills/priority-session/
|
|
7
|
+
-- SKILL.md`. Neither works: the CHECK constraint on `idea_inbox.kind` (migration
|
|
8
|
+
-- 006, extended by 042) admits only the fixed task-kind enum, so `POST /inbox`
|
|
9
|
+
-- fails with BAD_KIND. Hit live on 2026-08-16 — all three retrospective ideas
|
|
10
|
+
-- from the Board Room planning session failed on the first attempt and had to be
|
|
11
|
+
-- re-homed under unrelated kinds. The cost is not the error message: this is the
|
|
12
|
+
-- step that makes the planning skill self-improving, and because it fails closed
|
|
13
|
+
-- the findings are either dropped or filed somewhere nobody looks for them.
|
|
14
|
+
--
|
|
15
|
+
-- WHY NOW, AND NOT AS A TITLE PREFIX. The nightly `skill-usage-review` routine
|
|
16
|
+
-- already files these rows, and it works — by tagging a `[skill-friction]`
|
|
17
|
+
-- title prefix over a valid enum `kind`. That workaround names its own exit
|
|
18
|
+
-- condition, in `modules/ideas/inbox.js` and in the routine's SKILL.md: "when
|
|
19
|
+
-- the rank system lands a real builders.rank column + idea_inbox.kind
|
|
20
|
+
-- migration, this prefix convention can be promoted to a first-class kind."
|
|
21
|
+
-- The rank system HAS landed — `builders.rank` is live and enforced server-side
|
|
22
|
+
-- (ADR 0016), and `viewerRank` is threaded into all four inbox read paths from
|
|
23
|
+
-- `req.builder.rank`. So the condition the workaround was waiting on is met,
|
|
24
|
+
-- and this is the migration it asked for.
|
|
25
|
+
--
|
|
26
|
+
-- WHAT THIS DOES NOT DO. It does not backfill the existing `[skill-friction]`-
|
|
27
|
+
-- prefixed rows, and it does not change what the nightly routine writes. Both
|
|
28
|
+
-- are deliberate: the deployed core pin runs behind `main` by design (gate 3 of
|
|
29
|
+
-- docs/recipes/core-release-pipeline.md), so between this landing and the pin
|
|
30
|
+
-- moving there is a window in which the DB accepts the new kind and the running
|
|
31
|
+
-- instance's VALID_KINDS does not offer it. A filer flipped to the new kind in
|
|
32
|
+
-- that window would start failing where it currently succeeds — strictly worse
|
|
33
|
+
-- than the bug being fixed. So the marker stays DUAL: `inbox.js` recognises a
|
|
34
|
+
-- row as skill-friction by its kind OR its legacy title prefix, permanently and
|
|
35
|
+
-- by design, and flipping the routine is a follow-up for after the pin moves.
|
|
36
|
+
--
|
|
37
|
+
-- WHY CORE AND NOT modules/ideas/migrations/. `idea_inbox` is a CORE table: it
|
|
38
|
+
-- was created by migration 006 and every later change to it — 042 (the last
|
|
39
|
+
-- widening of this same constraint), core_195, core_222, core_228 — is a core
|
|
40
|
+
-- migration. The `ideas` module owns the `ideas_*` tables, not this one, and a
|
|
41
|
+
-- module migration may only touch its own namespace and must be additive.
|
|
42
|
+
-- Widening a CHECK requires dropping it, so this could not have been a module
|
|
43
|
+
-- migration even if the table had been the module's. `fitness.js` enforces both
|
|
44
|
+
-- rules and caught the first attempt at this file in the wrong place.
|
|
45
|
+
--
|
|
46
|
+
-- The constraint is dropped by LOOKUP rather than by name, exactly as 042 does
|
|
47
|
+
-- it, and for 042's reason: a database that somehow never ran 042 still carries
|
|
48
|
+
-- the 006-era constraint under its original name, and a `DROP CONSTRAINT IF
|
|
49
|
+
-- EXISTS idea_inbox_kind_check` there would silently no-op and leave the old,
|
|
50
|
+
-- narrower constraint in force — which rejects the very kind this adds.
|
|
51
|
+
--
|
|
52
|
+
-- REVERSIBILITY. Dropping back is the same DO block with 'skill-friction'
|
|
53
|
+
-- removed from the list, and is safe only while no row carries the kind.
|
|
54
|
+
|
|
55
|
+
DO $$
|
|
56
|
+
DECLARE cname text;
|
|
57
|
+
BEGIN
|
|
58
|
+
SELECT conname INTO cname
|
|
59
|
+
FROM pg_constraint
|
|
60
|
+
WHERE conrelid = 'idea_inbox'::regclass
|
|
61
|
+
AND contype = 'c'
|
|
62
|
+
AND pg_get_constraintdef(oid) ILIKE '%kind%IN%';
|
|
63
|
+
IF cname IS NOT NULL THEN
|
|
64
|
+
EXECUTE format('ALTER TABLE idea_inbox DROP CONSTRAINT %I', cname);
|
|
65
|
+
END IF;
|
|
66
|
+
END $$;
|
|
67
|
+
|
|
68
|
+
ALTER TABLE idea_inbox
|
|
69
|
+
ADD CONSTRAINT idea_inbox_kind_check
|
|
70
|
+
CHECK (kind IN (
|
|
71
|
+
'feature','bug','infra','refactor','spike',
|
|
72
|
+
'learning-capture','cleanup','decision','blocker-resolution',
|
|
73
|
+
'unclassified','criterion-proposal','skill-friction'
|
|
74
|
+
));
|
|
@@ -120,6 +120,69 @@
|
|
|
120
120
|
return { title: m[1], rest: m[2].trim() };
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
// THE CARD FACE IS TWO SENTENCES (owner direction, task 1003960). The
|
|
124
|
+
// ask-for-help skill asks a session to write up to 4000 characters — what is
|
|
125
|
+
// stuck, why this person, the steps, how to verify, what has been tried — and
|
|
126
|
+
// printing all of it on the face buried every row under whichever ask happened
|
|
127
|
+
// to be longest. So the face carries the ask's first sentence as the title and
|
|
128
|
+
// its second as the sub line, and everything else waits behind a door.
|
|
129
|
+
//
|
|
130
|
+
// WHAT IS BEHIND THE DOOR IS THE WHOLE ASK, not the leftover. A reader opening
|
|
131
|
+
// "the full ask" wants the document, and the copy control beside it hands that
|
|
132
|
+
// document to a fresh session verbatim — so `more` is the original text,
|
|
133
|
+
// untrimmed of its own opening, rather than a remainder that would copy as a
|
|
134
|
+
// sentence fragment with no beginning.
|
|
135
|
+
//
|
|
136
|
+
// A LINE BUDGET AS WELL AS A SENTENCE COUNT. Sentence-splitting alone is not
|
|
137
|
+
// enough: an ask written as one 4000-character paragraph with no full stop has
|
|
138
|
+
// exactly one sentence, and counting sentences would put all of it on the face.
|
|
139
|
+
// Each of the two lines is therefore also capped, and a line that had to be cut
|
|
140
|
+
// sends the whole ask behind the door.
|
|
141
|
+
var LEAD_MAX = 200;
|
|
142
|
+
|
|
143
|
+
// Trailing punctuation a cut can land on, hoisted so the literal is compiled
|
|
144
|
+
// once rather than per row per line.
|
|
145
|
+
var TRAILING_PUNCT = /[\s.,;:!?\u2013\u2014-]+$/;
|
|
146
|
+
|
|
147
|
+
// Cut at a word boundary, never mid-word, and mark the cut. The ellipsis is
|
|
148
|
+
// the only place this page abbreviates, and it is reached only when the asker
|
|
149
|
+
// wrote no sentence short enough to be a line — the full words are one click
|
|
150
|
+
// away either way.
|
|
151
|
+
function clipWords(s, max) {
|
|
152
|
+
var t = String(s == null ? '' : s);
|
|
153
|
+
if (t.length <= max) return { text: t, clipped: false };
|
|
154
|
+
var cut = t.slice(0, max);
|
|
155
|
+
var sp = cut.lastIndexOf(' ');
|
|
156
|
+
if (sp > max * 0.6) cut = cut.slice(0, sp);
|
|
157
|
+
return { text: cut.replace(TRAILING_PUNCT, '') + '\u2026', clipped: true };
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// summaryOf(text) -> { title, lead, more }. `more` is '' when the ask already
|
|
161
|
+
// FITS on the face, which is not the same as "has two sentences or fewer". A
|
|
162
|
+
// door onto nothing is a lie about there being more to read; so is no door
|
|
163
|
+
// over words the reader cannot see.
|
|
164
|
+
//
|
|
165
|
+
// THE CASE THAT LOOKS LIKE A BUG AND IS NOT (grader, task 1003960): two
|
|
166
|
+
// sentences whose SECOND runs past LEAD_MAX gets a door, even though the ask
|
|
167
|
+
// has only two sentences. That is correct and deliberate. The lead was cut, so
|
|
168
|
+
// part of that second sentence is not on the face; hiding the door there would
|
|
169
|
+
// abbreviate an ask with no way to read the rest, which is the one thing this
|
|
170
|
+
// whole change exists to prevent. The door tracks WHAT IS UNREAD, never the
|
|
171
|
+
// sentence count — which is why `hidden` is `l.clipped || second.rest` and not
|
|
172
|
+
// `second.rest` alone.
|
|
173
|
+
function summaryOf(text) {
|
|
174
|
+
var full = String(text == null ? '' : text).trim();
|
|
175
|
+
var first = titleOf(full);
|
|
176
|
+
var t = clipWords(first.title, TITLE_MAX);
|
|
177
|
+
// No sentence short enough to be a headline: the face carries a lead-in only
|
|
178
|
+
// and the ask goes behind the door whole.
|
|
179
|
+
if (t.clipped) return { title: t.text, lead: '', more: full };
|
|
180
|
+
var second = first.rest ? titleOf(first.rest) : { title: '', rest: '' };
|
|
181
|
+
var l = clipWords(second.title, LEAD_MAX);
|
|
182
|
+
var hidden = l.clipped || !!second.rest;
|
|
183
|
+
return { title: t.text, lead: l.text, more: hidden ? full : '' };
|
|
184
|
+
}
|
|
185
|
+
|
|
123
186
|
// The "asked of you" list reads in runs: what is asked of you BY NAME first
|
|
124
187
|
// (a personal ask is the one you owe an answer), then one run per craft.
|
|
125
188
|
function groupOf(req) {
|
|
@@ -223,7 +286,7 @@
|
|
|
223
286
|
BANDS: BANDS, ageBand: ageBand, byAgeOldestFirst: byAgeOldestFirst, byNewestFirst: byNewestFirst,
|
|
224
287
|
askerOf: askerOf, contextOf: contextOf,
|
|
225
288
|
directionLine: directionLine, boardLine: boardLine,
|
|
226
|
-
titleOf: titleOf, groupOf: groupOf,
|
|
289
|
+
titleOf: titleOf, summaryOf: summaryOf, clipWords: clipWords, LEAD_MAX: LEAD_MAX, groupOf: groupOf,
|
|
227
290
|
httpUrl: httpUrl, initialOf: initialOf, faceOf: faceOf, askers: askers, splitShown: splitShown,
|
|
228
291
|
};
|
|
229
292
|
})();
|
|
@@ -120,6 +120,62 @@
|
|
|
120
120
|
.cb-band { grid-template-columns: 1fr; }
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
/* ---- the door onto the whole ask -------------------------------------------
|
|
124
|
+
Owner direction, task 1003960: a card shows two sentences and no more. What
|
|
125
|
+
the asker actually wrote — up to four thousand characters of context, steps
|
|
126
|
+
and what they already ruled out — waits behind this pair of controls, which
|
|
127
|
+
sit together under the two visible lines.
|
|
128
|
+
|
|
129
|
+
TWO CONTROLS, TWO WEIGHTS. The door is a text action in the accent ink, like
|
|
130
|
+
every other door on this page; the copy control is a pill, because it does
|
|
131
|
+
something rather than going somewhere, and because a reader scanning the board
|
|
132
|
+
for "take this into a session" should find a button shape. It keeps its own
|
|
133
|
+
capitals — .btn-ghost lowercases its label, and this one is a named action the
|
|
134
|
+
owner wrote, so it does not borrow that class. */
|
|
135
|
+
.cb-ask { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 7px 0 0; }
|
|
136
|
+
.cb-ask__door {
|
|
137
|
+
font: inherit;
|
|
138
|
+
font-size: 12.5px;
|
|
139
|
+
color: var(--accent-ink);
|
|
140
|
+
background: none;
|
|
141
|
+
border: 0;
|
|
142
|
+
padding: 0;
|
|
143
|
+
cursor: pointer;
|
|
144
|
+
}
|
|
145
|
+
.cb-ask__door:hover { text-decoration: underline; }
|
|
146
|
+
.cb-ask__copy {
|
|
147
|
+
font: inherit;
|
|
148
|
+
font-size: 12px;
|
|
149
|
+
line-height: 1;
|
|
150
|
+
color: var(--ink-soft);
|
|
151
|
+
background: none;
|
|
152
|
+
border: 1px solid var(--rule);
|
|
153
|
+
border-radius: var(--radius-pill);
|
|
154
|
+
padding: 5px 11px;
|
|
155
|
+
cursor: pointer;
|
|
156
|
+
}
|
|
157
|
+
.cb-ask__copy:hover { border-color: var(--ink-faint); color: var(--ink); }
|
|
158
|
+
|
|
159
|
+
/* The ask itself, opened in place. pre-wrap because an ask is written as a
|
|
160
|
+
briefing with its own paragraphs and steps, and collapsing them here would
|
|
161
|
+
make the page's own rendering less readable than the text a reader copies out
|
|
162
|
+
of it. Capped to the measure so it never becomes the wall of prose this
|
|
163
|
+
change exists to end. */
|
|
164
|
+
.cb-ask__full {
|
|
165
|
+
margin: 9px 0 0;
|
|
166
|
+
padding: 11px 13px;
|
|
167
|
+
background: var(--glass);
|
|
168
|
+
border-radius: var(--radius-sm);
|
|
169
|
+
white-space: pre-wrap;
|
|
170
|
+
font-size: 13px;
|
|
171
|
+
line-height: 1.6;
|
|
172
|
+
color: var(--ink-soft);
|
|
173
|
+
/* --measure is 48ch, and ch scales with the ELEMENT's font-size — spending it
|
|
174
|
+
at 13px would cap a briefing at 380px, well under a readable line. So this
|
|
175
|
+
one block states its own measure, computed at its own size. */
|
|
176
|
+
max-width: 62ch;
|
|
177
|
+
}
|
|
178
|
+
|
|
123
179
|
/* ---- empties and the foot -------------------------------------------------- */
|
|
124
180
|
.cb-empty p { font-size: 14px; }
|
|
125
181
|
.cb-foot { margin: var(--sp-sm) 0 0; font-size: 12.5px; color: var(--ink-faint); max-width: var(--measure); }
|