@bongos/core 1.21.172 → 1.21.174
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +53 -38
- package/docs/adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md +10 -0
- package/docs/api/openapi.json +1 -1
- package/docs/copy-inventory.md +75 -72
- package/docs/copy-registry.json +117 -90
- package/docs/module-api-changelog.md +4 -0
- package/docs/modules-contract.md +2 -1
- package/docs/page-readings.json +122 -120
- package/modules/copy-desk/routes/copy-desk.js +4 -4
- package/modules/hall-ui/public/city-decide.js +36 -2
- package/modules/hall-ui/public/city.css +8 -2
- package/modules/hall-ui/public/city.html +5 -5
- package/modules/lifecycle/artist-review-goal.js +103 -0
- package/modules/lifecycle/db-tasks.js +17 -1
- package/modules/lifecycle/db-versions.js +5 -1
- package/modules/lifecycle/page-tweak-claim.js +3 -3
- package/modules/lifecycle/page-tweak-write.js +12 -4
- package/modules/public-landing/public/index.html +9 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +24 -0
- package/src/bongos/auth-github.js +6 -1
- package/src/bongos/module-listing.js +76 -11
- package/src/bongos/routes/auth.js +6 -2
- package/src/bongos/routes/modules.js +15 -1
- package/src/module-api.js +1 -1
- package/tests/artist_review_goal.mjs +119 -0
- package/tests/auth_switch_account.mjs +38 -0
- package/tests/copy_desk_page_claim.mjs +6 -1
- package/tests/copy_desk_page_submit.mjs +1 -1
- package/tests/fixtures/page-ledger.mjs +13 -0
- package/tests/hall_city_rewording.mjs +11 -0
- package/tests/module_store_listing.mjs +105 -5
- package/tests/speciality_injection.mjs +20 -0
- package/tests/task_goal_required.mjs +12 -2
|
@@ -3181,5 +3181,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
3181
3181
|
landed since 1.21.170 with no explicit bump. run 39996371081. (task 1002620)
|
|
3182
3182
|
1.21.172 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3183
3183
|
landed since 1.21.171 with no explicit bump. run 39998870016. (task 1002620)
|
|
3184
|
+
1.21.173 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3185
|
+
landed since 1.21.172 with no explicit bump. run 40000711332. (task 1002620)
|
|
3186
|
+
1.21.174 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3187
|
+
landed since 1.21.173 with no explicit bump. run 40003024305. (task 1002620)
|
|
3184
3188
|
---------------------------------------------------------------------------
|
|
3185
3189
|
```
|
package/docs/modules-contract.md
CHANGED
|
@@ -396,7 +396,8 @@ Run `bongos upgrade` to confirm coreVersion compatibility, then `node scripts/gd
|
|
|
396
396
|
- **Getting listed** (task 1003807, [ADR 0343](adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md)). Publishing a version does not by itself put it in the store's catalog, `GET /store/modules`. The catalog shows each module's newest version, judged by its current score. It must pass the Security gate first; a version that failed it, or has not been checked yet, is not listed. A new version with no install or reliability data yet is listed with a **New** label and is not ranked; the floor does not apply to it until it has a real score. Every other version is listed only if its overall score is **at least 50 out of 100**. Below that it is not listed at all. The floor is fixed in Bongos itself (`QUALITY_FLOOR` in `src/bongos/module-listing.js`) and returned in the catalog response; no author or instance setting moves it, and changing it is an owner-approved, reviewed task.
|
|
397
397
|
- **Tester feedback** (task 1003806, ADR 0344 D5). While a version is on the tester channel, what tester projects report about it becomes its Tester feedback part: the share of testers whose install worked and who hit no runtime errors, blended with ten neutral testers so a small sample cannot score high — `round(100 × (went well + 5) / (testers + 10))`. Reports from after the version left the tester channel, and the author's own, never count; under 3 testers it is not scored yet. The rule is `assessTesterFeedback` in `scripts/gds/module-assess-installs.js`.
|
|
398
398
|
- **What a module is strong and weak at** (task 1003799, ADR 0343 D4). Each catalog entry also carries `parts` (the current result of Tests, Clean installs, Reliability, Tester feedback and How-to) and a reading of them: `strengths` (a part scored **80 or more**), `weaknesses` (a part scored **below the floor**) and `unmeasured` (a part with no score yet, which is never counted as weak). Each strength and weakness has a one-sentence `detail` saying what the number rests on. Security is not among them: every listed version has passed it. The reading is `readParts` in `src/bongos/module-listing.js`; the hall's Modules tab shows it in its "In the store" group, so two modules with the same overall score can be told apart.
|
|
399
|
-
- **Sorting by a part** (task 1003800). `GET /store/modules?sort=<part>` orders the listed modules by one part a buyer cares about: `tests`, `install`, `reliability`, `tester_feedback` or `docs` (the response lists them as `sort_parts`, and says which one it applied as `sort`). Modules with a score for that part come first, highest first; a tie goes to the higher overall score, then the module key. A module with no score for that part goes last, so missing data never wins or loses a place on its own. New modules are not sorted: they are never ranked. Any other `sort` value is refused with a 400. Without `sort`,
|
|
399
|
+
- **Sorting by a part** (task 1003800). `GET /store/modules?sort=<part>` orders the listed modules by one part a buyer cares about: `tests`, `install`, `reliability`, `tester_feedback` or `docs` (the response lists them as `sort_parts`, and says which one it applied as `sort`). Modules with a score for that part come first, highest first; a tie goes to the higher overall score, then the module key. A module with no score for that part goes last, so missing data never wins or loses a place on its own. New modules are not sorted: they are never ranked. Any other `sort` value is refused with a 400. Without `sort`, the listed modules are in the ranking below; New stays in key order. The rule is `sortByPart` in `src/bongos/module-listing.js`.
|
|
400
|
+
- **The ranking, and a maximum price** (task 1003808, owner decision 2026-10-23). Without `sort`, listed modules are ranked **quality first**: highest overall score first; between equal scores, free modules first, then the lowest cash price, then the lowest credit price, then the module key. Price never buys a better place, it only orders modules the score could not tell apart (and it is never an input to the score, ADR 0343 D6). The response states the rule as `ranking`, and each entry carries its current `price` (`cents`, `credits`, `free`). A buyer may add `?max_cents=` and/or `?max_credits=` (whole numbers, 0 or more): modules that cost more are left out of both lists, free modules always stay, and a priced module stays when it is offered at or under a cap the buyer set. The applied caps come back as `max_price`. The rules are `rankListed` and `withinMaxPrice` in `src/bongos/module-listing.js`.
|
|
400
401
|
- **Testing new versions first** (task 1003802, [ADR 0344](adr/0344-a-tester-is-a-project-that-opts-in-once.md) D1). A project can choose to get each new version of its modules before everyone else. It is the project that opts in, never one builder for someone else's project, and never by default. `GET /modules/testing` returns `{ tester, general_only, updated_at, updated_by }` to anyone signed in. `POST /modules/testing { tester: true|false }` switches it, and `POST /modules/:key/general-only { general_only: true|false }` keeps one module on the versions everyone gets while the rest are tested. Both writes take the `module.enable` permission, the same one that turns modules on and off. Both are reversible: switching testing off puts the project back on general versions from its next update, and a module's "general only" mark is kept if testing is switched off and on again. The choice is stored in the project's own settings (`modules.tester`, `modules.general_only`); anything that cannot be read counts as not testing. `testsVersionsOf` in `src/bongos/module-testing.js` is the one answer to "does this project get the tester version of this module", which installs and updates use (task 1003805). The hall's Modules tab has the switch in its "Testing new versions" group, and the general-only control in each module's details.
|
|
401
402
|
|
|
402
403
|
### 7. Install from the store
|
package/docs/page-readings.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"adr": "0341 D3",
|
|
6
6
|
"reread": "node scripts/gds/page-reader.js --stale",
|
|
7
7
|
"how": ["Generated by node scripts/gds/page-reader.js (BV2.TW04, task 1004315; ADR 0341 D3). Do not hand-edit.","One entry per page of docs/page-inventory.json. Lines are in page order: the default state first, and a line only another state shows sits where that state shows it, with its state named.","placement: placed = a docs/copy-registry.json row renders it (file, line, string_id); shared = shell text every page of the surface carries (top bar, sidebar, footer), with its row when the registry has one; unplaced = the registry cannot place it (a rewrite becomes an engineer task, ADR 0341 D4).","text keeps {…} where the registry row has a hole, or where a value the page read from its API was filled in. A string that is only such data is counted under omitted.data, not listed.","reading_hash is over the non-shared lines (key, section, text); files_hash is over the page's inventory files. --check compares files_hash only and never opens a browser.","Rendered through the hall-preview harness (hall) and the ui-design kit stub (landing, status), at 1280x800 with the clock pinned, so a reading is the fixture world's page."],
|
|
8
|
-
"counts": {"pages":46,"lines":
|
|
8
|
+
"counts": {"pages":46,"lines":5405,"placed":1698,"shared":399,"unplaced":3308,"omitted_data":3498},
|
|
9
9
|
"pages": [
|
|
10
10
|
{
|
|
11
11
|
"id": "builders:atlas",
|
|
@@ -145,9 +145,9 @@
|
|
|
145
145
|
"surface": "builders",
|
|
146
146
|
"title": "The city",
|
|
147
147
|
"states_read": ["city","fullscreen","switched","focus","pins","living","card","card-ask"],
|
|
148
|
-
"files_hash": "
|
|
149
|
-
"reading_hash": "
|
|
150
|
-
"counts": {"lines":
|
|
148
|
+
"files_hash": "1e4c5ab40907996d",
|
|
149
|
+
"reading_hash": "77470c4eb3047a05",
|
|
150
|
+
"counts": {"lines":43,"placed":10,"shared":8,"unplaced":25},
|
|
151
151
|
"omitted": {"data":17},
|
|
152
152
|
"notes": [],
|
|
153
153
|
"lines": [
|
|
@@ -165,34 +165,35 @@
|
|
|
165
165
|
{"key":"L0012","section":"page top","text":"Total 1 /","placement":"unplaced","state":"card-ask"},
|
|
166
166
|
{"key":"L0013","section":"page top","text":"Yours 1","placement":"unplaced","state":"card-ask"},
|
|
167
167
|
{"key":"L0014","section":"{…}","text":"I'd {…} $2350. {…}","placement":"unplaced","state":"card-ask"},
|
|
168
|
-
{"key":"L0015","section":"{…}","text":"
|
|
169
|
-
{"key":"L0016","section":"{…}","text":"
|
|
170
|
-
{"key":"L0017","section":"{…}","text":"
|
|
171
|
-
{"key":"L0018","section":"{…}","text":"
|
|
172
|
-
{"key":"L0019","section":"{…}","text":"
|
|
173
|
-
{"key":"L0020","section":"
|
|
174
|
-
{"key":"L0021","section":"page top","text":"
|
|
175
|
-
{"key":"L0022","section":"
|
|
176
|
-
{"key":"L0023","section":"{…} of {…}","text":"
|
|
177
|
-
{"key":"L0024","section":"{…} of {…}","text":"
|
|
178
|
-
{"key":"L0025","section":"{…} of {…}","text":"
|
|
179
|
-
{"key":"L0026","section":"{…} of {…}","text":"
|
|
180
|
-
{"key":"L0027","section":"{…} of {…}","text":"
|
|
181
|
-
{"key":"L0028","section":"
|
|
182
|
-
{"key":"L0029","section":"
|
|
183
|
-
{"key":"L0030","section":"37 to do · 5 {…} working","text":"
|
|
184
|
-
{"key":"L0031","section":"37 to do · 5 {…} working","text":"
|
|
185
|
-
{"key":"L0032","section":"37 to do · 5 {…} working","text":"
|
|
186
|
-
{"key":"L0033","section":"37 to do · 5 {…} working","text":"
|
|
187
|
-
{"key":"L0034","section":"37 to do · 5 {…} working","text":"
|
|
188
|
-
{"key":"L0035","section":"
|
|
189
|
-
{"key":"L0036","section":"What are you doing now?","text":"
|
|
190
|
-
{"key":"L0037","section":"What are you doing now?","text":"
|
|
191
|
-
{"key":"L0038","section":"What are you doing now?","text":"
|
|
192
|
-
{"key":"L0039","section":"What are you doing now?","text":"
|
|
193
|
-
{"key":"L0040","section":"What are you doing now?","text":"
|
|
194
|
-
{"key":"L0041","section":"What are you doing now?","text":"
|
|
195
|
-
{"key":"L0042","section":"What are you doing now?","text":"
|
|
168
|
+
{"key":"L0015","section":"{…}","text":"Full text","placement":"placed","file":"modules/hall-ui/public/city-decide.js","line":253,"string_id":"7537fe1f3792","state":"card-ask"},
|
|
169
|
+
{"key":"L0016","section":"{…}","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"card-ask","occurrences":2},
|
|
170
|
+
{"key":"L0017","section":"{…}","text":"my pick","placement":"unplaced","state":"card-ask"},
|
|
171
|
+
{"key":"L0018","section":"{…}","text":"{…} it","placement":"unplaced","state":"card-ask"},
|
|
172
|
+
{"key":"L0019","section":"{…}","text":"esc","placement":"unplaced","state":"card-ask"},
|
|
173
|
+
{"key":"L0020","section":"{…}","text":"{…} 37 in a row","placement":"unplaced","state":"card-ask"},
|
|
174
|
+
{"key":"L0021","section":"page top","text":"Total 9 /","placement":"unplaced","state":"card"},
|
|
175
|
+
{"key":"L0022","section":"page top","text":"Yours 9","placement":"unplaced","state":"card"},
|
|
176
|
+
{"key":"L0023","section":"{…} of {…}","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"card","occurrences":2},
|
|
177
|
+
{"key":"L0024","section":"{…} of {…}","text":"It holds work until someone decides.","placement":"unplaced","state":"card"},
|
|
178
|
+
{"key":"L0025","section":"{…} of {…}","text":"Tab · ↑ ↓ items ← → buildings","placement":"unplaced","state":"card"},
|
|
179
|
+
{"key":"L0026","section":"{…} of {…}","text":"{…} all 9","placement":"unplaced","state":"card"},
|
|
180
|
+
{"key":"L0027","section":"{…} of {…}","text":"esc","placement":"unplaced","state":"card"},
|
|
181
|
+
{"key":"L0028","section":"{…} of {…}","text":"{…} 37 in a row","placement":"unplaced","state":"card"},
|
|
182
|
+
{"key":"L0029","section":"page top","text":"{…} 37 in a row","placement":"unplaced"},
|
|
183
|
+
{"key":"L0030","section":"37 to do · 5 {…} working","text":"37 to do · 5 {…} working","placement":"unplaced"},
|
|
184
|
+
{"key":"L0031","section":"37 to do · 5 {…} working","text":"Archived:","placement":"unplaced"},
|
|
185
|
+
{"key":"L0032","section":"37 to do · 5 {…} working","text":"Street","placement":"unplaced"},
|
|
186
|
+
{"key":"L0033","section":"37 to do · 5 {…} working","text":"Building Level Views","placement":"placed","file":"modules/hall-ui/public/city.html","line":103,"string_id":"5df2aa54f042"},
|
|
187
|
+
{"key":"L0034","section":"37 to do · 5 {…} working","text":"Full screen — press Esc, or the button in the corner, to bring the bars back.","placement":"placed","file":"modules/hall-ui/public/shell.js","line":595,"string_id":"11fc0483c149","state":"fullscreen"},
|
|
188
|
+
{"key":"L0035","section":"37 to do · 5 {…} working","text":"Builders hall · this session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":674,"string_id":"fd1903586e8e"},
|
|
189
|
+
{"key":"L0036","section":"What are you doing now?","text":"What are you doing now?","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":675,"string_id":"60853319f290"},
|
|
190
|
+
{"key":"L0037","section":"What are you doing now?","text":"Pick one. You can switch any time from the top bar.","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":676,"string_id":"4f87d5b17b54"},
|
|
191
|
+
{"key":"L0038","section":"What are you doing now?","text":"Building","placement":"unplaced"},
|
|
192
|
+
{"key":"L0039","section":"What are you doing now?","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":3},
|
|
193
|
+
{"key":"L0040","section":"What are you doing now?","text":"Artistry","placement":"unplaced"},
|
|
194
|
+
{"key":"L0041","section":"What are you doing now?","text":"Ideating","placement":"unplaced"},
|
|
195
|
+
{"key":"L0042","section":"What are you doing now?","text":"Turn thoughts into {…}.","placement":"unplaced"},
|
|
196
|
+
{"key":"L0043","section":"What are you doing now?","text":"Ask me again next session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":679,"string_id":"fa86bf403775"}
|
|
196
197
|
]
|
|
197
198
|
},
|
|
198
199
|
{
|
|
@@ -4772,98 +4773,99 @@
|
|
|
4772
4773
|
"surface": "landing",
|
|
4773
4774
|
"title": "{{productName}}: {{tagline}}",
|
|
4774
4775
|
"states_read": ["out","in","out-projects","in-profile","cli-out"],
|
|
4775
|
-
"files_hash": "
|
|
4776
|
-
"reading_hash": "
|
|
4777
|
-
"counts": {"lines":
|
|
4776
|
+
"files_hash": "bcc230bdbc47ebe3",
|
|
4777
|
+
"reading_hash": "2bc17fece5c02d85",
|
|
4778
|
+
"counts": {"lines":87,"placed":53,"shared":15,"unplaced":19},
|
|
4778
4779
|
"omitted": {"data":6},
|
|
4779
4780
|
"notes": [],
|
|
4780
4781
|
"lines": [
|
|
4781
|
-
{"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/public-landing/public/index.html","line":
|
|
4782
|
+
{"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/public-landing/public/index.html","line":669,"string_id":"a061df49e6cb"},
|
|
4782
4783
|
{"key":"L0002","section":"top bar","text":"Projects","placement":"shared"},
|
|
4783
|
-
{"key":"L0003","section":"top bar","text":"
|
|
4784
|
-
{"key":"L0004","section":"
|
|
4785
|
-
{"key":"L0005","section":"page top","text":"
|
|
4786
|
-
{"key":"L0006","section":"page top","text":"
|
|
4787
|
-
{"key":"L0007","section":"page top","text":"
|
|
4788
|
-
{"key":"L0008","section":"page top","text":"
|
|
4789
|
-
{"key":"L0009","section":"top
|
|
4790
|
-
{"key":"L0010","section":"
|
|
4791
|
-
{"key":"L0011","section":"page top","text":"
|
|
4792
|
-
{"key":"L0012","section":"page top","text":"
|
|
4793
|
-
{"key":"L0013","section":"page top","text":"
|
|
4794
|
-
{"key":"L0014","section":"page top","text":"
|
|
4795
|
-
{"key":"L0015","section":"page top","text":"
|
|
4796
|
-
{"key":"L0016","section":"
|
|
4797
|
-
{"key":"L0017","section":"Building Digitally,as simple as Bongos.","text":"
|
|
4798
|
-
{"key":"L0018","section":"Building Digitally,as simple as Bongos.","text":"
|
|
4799
|
-
{"key":"L0019","section":"Building Digitally,as simple as Bongos.","text":"
|
|
4800
|
-
{"key":"L0020","section":"Building Digitally,as simple as Bongos.","text":"
|
|
4801
|
-
{"key":"L0021","section":"
|
|
4802
|
-
{"key":"L0022","section":"Built on Bongos.","text":"
|
|
4803
|
-
{"key":"L0023","section":"Built on Bongos.","text":"
|
|
4804
|
-
{"key":"L0024","section":"Built on Bongos.","text":"
|
|
4805
|
-
{"key":"L0025","section":"Built on Bongos.","text":"
|
|
4806
|
-
{"key":"L0026","section":"Built on Bongos.","text":"
|
|
4807
|
-
{"key":"L0027","section":"Built on Bongos.","text":"
|
|
4808
|
-
{"key":"L0028","section":"Built on Bongos.","text":"
|
|
4809
|
-
{"key":"L0029","section":"
|
|
4810
|
-
{"key":"L0030","section":"A project as a codebase, regardless of function.","text":"A
|
|
4811
|
-
{"key":"L0031","section":"A project as a codebase, regardless of function.","text":"
|
|
4812
|
-
{"key":"L0032","section":"A project as a codebase, regardless of function.","text":"
|
|
4813
|
-
{"key":"L0033","section":"A project as a codebase, regardless of function.","text":"
|
|
4814
|
-
{"key":"L0034","section":"A project as a codebase, regardless of function.","text":"
|
|
4815
|
-
{"key":"L0035","section":"A project as a codebase, regardless of function.","text":"
|
|
4816
|
-
{"key":"L0036","section":"A project as a codebase, regardless of function.","text":"
|
|
4817
|
-
{"key":"L0037","section":"A project as a codebase, regardless of function.","text":"
|
|
4818
|
-
{"key":"L0038","section":"A project as a codebase, regardless of function.","text":"
|
|
4819
|
-
{"key":"L0039","section":"A project as a codebase, regardless of function.","text":"
|
|
4820
|
-
{"key":"L0040","section":"A project as a codebase, regardless of function.","text":"
|
|
4821
|
-
{"key":"L0041","section":"A project as a codebase, regardless of function.","text":"
|
|
4822
|
-
{"key":"L0042","section":"A project as a codebase, regardless of function.","text":"
|
|
4823
|
-
{"key":"L0043","section":"A project as a codebase, regardless of function.","text":"
|
|
4824
|
-
{"key":"L0044","section":"A project as a codebase, regardless of function.","text":"
|
|
4825
|
-
{"key":"L0045","section":"A project as a codebase, regardless of function.","text":"
|
|
4826
|
-
{"key":"L0046","section":"A project as a codebase, regardless of function.","text":"
|
|
4827
|
-
{"key":"L0047","section":"A project as a codebase, regardless of function.","text":"
|
|
4828
|
-
{"key":"L0048","section":"A project as a codebase, regardless of function.","text":"
|
|
4829
|
-
{"key":"L0049","section":"A project as a codebase, regardless of function.","text":"
|
|
4830
|
-
{"key":"L0050","section":"A project as a codebase, regardless of function.","text":"
|
|
4831
|
-
{"key":"L0051","section":"A project as a codebase, regardless of function.","text":"
|
|
4832
|
-
{"key":"L0052","section":"A project as a codebase, regardless of function.","text":"
|
|
4833
|
-
{"key":"L0053","section":"A project as a codebase, regardless of function.","text":"
|
|
4834
|
-
{"key":"L0054","section":"A project as a codebase, regardless of function.","text":"
|
|
4835
|
-
{"key":"L0055","section":"
|
|
4836
|
-
{"key":"L0056","section":"Types of projects","text":"
|
|
4837
|
-
{"key":"L0057","section":"Types of projects","text":"
|
|
4838
|
-
{"key":"L0058","section":"Types of projects","text":"
|
|
4839
|
-
{"key":"L0059","section":"Types of projects","text":"
|
|
4840
|
-
{"key":"L0060","section":"Types of projects","text":"
|
|
4841
|
-
{"key":"L0061","section":"Types of projects","text":"
|
|
4842
|
-
{"key":"L0062","section":"Types of projects","text":"
|
|
4843
|
-
{"key":"L0063","section":"Types of projects","text":"
|
|
4844
|
-
{"key":"L0064","section":"
|
|
4845
|
-
{"key":"L0065","section":"Ways to get paid/rewarded","text":"
|
|
4846
|
-
{"key":"L0066","section":"Ways to get paid/rewarded","text":"
|
|
4847
|
-
{"key":"L0067","section":"Ways to get paid/rewarded","text":"
|
|
4848
|
-
{"key":"L0068","section":"Ways to get paid/rewarded","text":"
|
|
4849
|
-
{"key":"L0069","section":"Ways to get paid/rewarded","text":"
|
|
4850
|
-
{"key":"L0070","section":"Ways to get paid/rewarded","text":"
|
|
4851
|
-
{"key":"L0071","section":"Ways to get paid/rewarded","text":"
|
|
4852
|
-
{"key":"L0072","section":"Ways to get paid/rewarded","text":"
|
|
4853
|
-
{"key":"L0073","section":"Ways to get paid/rewarded","text":"
|
|
4854
|
-
{"key":"L0074","section":"Ways to get paid/rewarded","text":"macOS,
|
|
4855
|
-
{"key":"L0075","section":"Ways to get paid/rewarded","text":"
|
|
4856
|
-
{"key":"L0076","section":"Ways to get paid/rewarded","text":"Linux,
|
|
4857
|
-
{"key":"L0077","section":"
|
|
4858
|
-
{"key":"L0078","section":"footer","text":"
|
|
4859
|
-
{"key":"L0079","section":"footer","text":"
|
|
4860
|
-
{"key":"L0080","section":"footer","text":"
|
|
4861
|
-
{"key":"L0081","section":"footer","text":"
|
|
4862
|
-
{"key":"L0082","section":"footer","text":"
|
|
4863
|
-
{"key":"L0083","section":"footer","text":"
|
|
4864
|
-
{"key":"L0084","section":"footer","text":"
|
|
4865
|
-
{"key":"L0085","section":"footer","text":"
|
|
4866
|
-
{"key":"L0086","section":"footer","text":"
|
|
4784
|
+
{"key":"L0003","section":"top bar","text":"New account","placement":"shared","file":"modules/public-landing/public/index.html","line":696,"string_id":"bb78cca99fe5"},
|
|
4785
|
+
{"key":"L0004","section":"top bar","text":"Review","placement":"shared","state":"in"},
|
|
4786
|
+
{"key":"L0005","section":"page top","text":"My projects","placement":"placed","file":"modules/public-landing/public/index.html","line":724,"string_id":"4a167ef6e515","state":"in-profile"},
|
|
4787
|
+
{"key":"L0006","section":"page top","text":"Invitations","placement":"unplaced","state":"in-profile"},
|
|
4788
|
+
{"key":"L0007","section":"page top","text":"Connections","placement":"unplaced","state":"in-profile"},
|
|
4789
|
+
{"key":"L0008","section":"page top","text":"Account","placement":"unplaced","state":"in-profile"},
|
|
4790
|
+
{"key":"L0009","section":"page top","text":"Sign out","placement":"placed","file":"modules/public-landing/public/index.html","line":731,"string_id":"f9af2d90ce5b","state":"in-profile"},
|
|
4791
|
+
{"key":"L0010","section":"top bar","text":"Sign in","placement":"shared","file":"modules/public-landing/public/index.html","line":698,"string_id":"ad80586f802a"},
|
|
4792
|
+
{"key":"L0011","section":"page top","text":"Sky","placement":"unplaced","state":"out-projects"},
|
|
4793
|
+
{"key":"L0012","section":"page top","text":"a universe of Projects","placement":"placed","file":"modules/public-landing/public/index.html","line":711,"string_id":"ed075e6e5f3a","state":"out-projects"},
|
|
4794
|
+
{"key":"L0013","section":"page top","text":"Table","placement":"unplaced","state":"out-projects"},
|
|
4795
|
+
{"key":"L0014","section":"page top","text":"sky project directory","placement":"placed","file":"modules/public-landing/public/index.html","line":712,"string_id":"dd8f15e45e84","state":"out-projects"},
|
|
4796
|
+
{"key":"L0015","section":"page top","text":"+ Create New Project","placement":"placed","file":"modules/public-landing/public/index.html","line":714,"string_id":"205f6e9eab89","state":"out-projects"},
|
|
4797
|
+
{"key":"L0016","section":"page top","text":"fresh start/fresh idea","placement":"placed","file":"modules/public-landing/public/index.html","line":714,"string_id":"46c35bc7dcdf","state":"out-projects"},
|
|
4798
|
+
{"key":"L0017","section":"Building Digitally,as simple as Bongos.","text":"Building Digitally,","placement":"placed","file":"modules/public-landing/public/index.html","line":745,"string_id":"16bc370da814"},
|
|
4799
|
+
{"key":"L0018","section":"Building Digitally,as simple as Bongos.","text":"as simple as Bongos.","placement":"placed","file":"modules/public-landing/public/index.html","line":745,"string_id":"acbabdef6f40"},
|
|
4800
|
+
{"key":"L0019","section":"Building Digitally,as simple as Bongos.","text":"Bringing AI to the builder, ideator, and artist in everyone.","placement":"placed","file":"modules/public-landing/public/index.html","line":747,"string_id":"750136e8637c"},
|
|
4801
|
+
{"key":"L0020","section":"Building Digitally,as simple as Bongos.","text":"Find a project to join","placement":"placed","file":"modules/public-landing/public/index.html","line":751,"string_id":"483a7eff25f2"},
|
|
4802
|
+
{"key":"L0021","section":"Building Digitally,as simple as Bongos.","text":"Start a project","placement":"placed","file":"modules/public-landing/public/index.html","line":752,"string_id":"2ae36be1c531"},
|
|
4803
|
+
{"key":"L0022","section":"Built on Bongos.","text":"Built on Bongos.","placement":"placed","file":"modules/public-landing/public/index.html","line":761,"string_id":"20b4fa9a0424"},
|
|
4804
|
+
{"key":"L0023","section":"Built on Bongos.","text":"At present, all Bongos projects are held by Verro Labs or its pilot clients.","placement":"placed","file":"modules/public-landing/public/index.html","line":762,"string_id":"b2da3498f53d"},
|
|
4805
|
+
{"key":"L0024","section":"Built on Bongos.","text":"Example World","placement":"placed","file":"modules/public-landing/public/index.html","line":766,"string_id":"1b5a6cfc494c"},
|
|
4806
|
+
{"key":"L0025","section":"Built on Bongos.","text":"a game, 11 builders","placement":"placed","file":"modules/public-landing/public/index.html","line":767,"string_id":"b7cee0f10353"},
|
|
4807
|
+
{"key":"L0026","section":"Built on Bongos.","text":"0 builders","placement":"unplaced"},
|
|
4808
|
+
{"key":"L0027","section":"Built on Bongos.","text":"Emersonian Circles","placement":"placed","file":"modules/public-landing/public/index.html","line":776,"string_id":"9a4a940d2a56"},
|
|
4809
|
+
{"key":"L0028","section":"Built on Bongos.","text":"1 builder","placement":"placed","file":"modules/public-landing/public/index.html","line":772,"string_id":"22825067f4c5"},
|
|
4810
|
+
{"key":"L0029","section":"Built on Bongos.","text":"View Projects","placement":"placed","file":"modules/public-landing/public/index.html","line":780,"string_id":"b97287183335"},
|
|
4811
|
+
{"key":"L0030","section":"A project as a codebase, regardless of function.","text":"A project as a codebase, regardless of function.","placement":"placed","file":"modules/public-landing/public/index.html","line":787,"string_id":"407982c3d4ff"},
|
|
4812
|
+
{"key":"L0031","section":"A project as a codebase, regardless of function.","text":"A laddered beat progresses all tasks.","placement":"placed","file":"modules/public-landing/public/index.html","line":788,"string_id":"545c82e99696"},
|
|
4813
|
+
{"key":"L0032","section":"A project as a codebase, regardless of function.","text":"claim","placement":"unplaced"},
|
|
4814
|
+
{"key":"L0033","section":"A project as a codebase, regardless of function.","text":"Take on a task","placement":"placed","file":"modules/public-landing/public/index.html","line":793,"string_id":"c160ff80c611"},
|
|
4815
|
+
{"key":"L0034","section":"A project as a codebase, regardless of function.","text":"build","placement":"unplaced"},
|
|
4816
|
+
{"key":"L0035","section":"A project as a codebase, regardless of function.","text":"run your preferred model","placement":"placed","file":"modules/public-landing/public/index.html","line":798,"string_id":"efbb62ff5488"},
|
|
4817
|
+
{"key":"L0036","section":"A project as a codebase, regardless of function.","text":"grade","placement":"unplaced"},
|
|
4818
|
+
{"key":"L0037","section":"A project as a codebase, regardless of function.","text":"evaluated by agentic agents","placement":"placed","file":"modules/public-landing/public/index.html","line":803,"string_id":"f8d9d6f2490f"},
|
|
4819
|
+
{"key":"L0038","section":"A project as a codebase, regardless of function.","text":"ship","placement":"unplaced"},
|
|
4820
|
+
{"key":"L0039","section":"A project as a codebase, regardless of function.","text":"agentically merged and made live","placement":"placed","file":"modules/public-landing/public/index.html","line":808,"string_id":"eedec34758da"},
|
|
4821
|
+
{"key":"L0040","section":"A project as a codebase, regardless of function.","text":"credit","placement":"unplaced"},
|
|
4822
|
+
{"key":"L0041","section":"A project as a codebase, regardless of function.","text":"equity or cash payouts","placement":"placed","file":"modules/public-landing/public/index.html","line":813,"string_id":"a7767cf28a36"},
|
|
4823
|
+
{"key":"L0042","section":"A project as a codebase, regardless of function.","text":"1,111 of 1,561 shipped on V1","placement":"placed","file":"modules/public-landing/public/index.html","line":821,"string_id":"14277fea260d"},
|
|
4824
|
+
{"key":"L0043","section":"A project as a codebase, regardless of function.","text":"The six most recent shipped tasks.","placement":"placed","file":"modules/public-landing/public/index.html","line":823,"string_id":"40ed6300ba27"},
|
|
4825
|
+
{"key":"L0044","section":"A project as a codebase, regardless of function.","text":"Landing composition round: three versions of the approved world","placement":"placed","file":"modules/public-landing/public/index.html","line":827,"string_id":"376b549bf7c8"},
|
|
4826
|
+
{"key":"L0045","section":"A project as a codebase, regardless of function.","text":"Percy Jackson","placement":"placed","file":"modules/public-landing/public/index.html","line":828,"string_id":"3eb67b892dea","occurrences":4},
|
|
4827
|
+
{"key":"L0046","section":"A project as a codebase, regardless of function.","text":"27 Aug","placement":"unplaced","occurrences":4},
|
|
4828
|
+
{"key":"L0047","section":"A project as a codebase, regardless of function.","text":"See what you did, by role, including every idea you filed and what became of it","placement":"placed","file":"modules/public-landing/public/index.html","line":833,"string_id":"67b61947244d"},
|
|
4829
|
+
{"key":"L0048","section":"A project as a codebase, regardless of function.","text":"ship.js still writes no session record when the session is rooted in another project dir","placement":"placed","file":"modules/public-landing/public/index.html","line":839,"string_id":"156d37716e14"},
|
|
4830
|
+
{"key":"L0049","section":"A project as a codebase, regardless of function.","text":"World round: PRODUCT.md and four style candidates across landing, hall and status","placement":"placed","file":"modules/public-landing/public/index.html","line":845,"string_id":"8a4892d03781"},
|
|
4831
|
+
{"key":"L0050","section":"A project as a codebase, regardless of function.","text":"Footer doors before launch: privacy, terms and contact pages linked from the landing page and the hub","placement":"placed","file":"modules/public-landing/public/index.html","line":851,"string_id":"0a0667aea2db"},
|
|
4832
|
+
{"key":"L0051","section":"A project as a codebase, regardless of function.","text":"26 Aug","placement":"unplaced","occurrences":2},
|
|
4833
|
+
{"key":"L0052","section":"A project as a codebase, regardless of function.","text":"Task titles are write-once, no route can edit one, so a wrong title is permanent","placement":"placed","file":"modules/public-landing/public/index.html","line":857,"string_id":"052e2da986c2"},
|
|
4834
|
+
{"key":"L0053","section":"A project as a codebase, regardless of function.","text":"VERRO LABS","placement":"placed","file":"modules/public-landing/public/index.html","line":871,"string_id":"6e1001190059"},
|
|
4835
|
+
{"key":"L0054","section":"A project as a codebase, regardless of function.","text":"Built by Verro Labs, Cloud Bongos is our way of making AI co-building usable by entire project groups, whether that's a 5,000-person company, a 100-person department, a college research project, or a solo dev.","placement":"placed","file":"modules/public-landing/public/index.html","line":872,"string_id":"215b5356f401"},
|
|
4836
|
+
{"key":"L0055","section":"A project as a codebase, regardless of function.","text":"For founders","placement":"placed","file":"modules/public-landing/public/index.html","line":882,"string_id":"dbced351ca0d"},
|
|
4837
|
+
{"key":"L0056","section":"Types of projects","text":"Types of projects","placement":"placed","file":"modules/public-landing/public/index.html","line":883,"string_id":"a165999f36a9"},
|
|
4838
|
+
{"key":"L0057","section":"Types of projects","text":"Open source.","placement":"placed","file":"modules/public-landing/public/index.html","line":885,"string_id":"275ca0d5ce65"},
|
|
4839
|
+
{"key":"L0058","section":"Types of projects","text":"Download our core code and protocols, and build instantly with your team.","placement":"placed","file":"modules/public-landing/public/index.html","line":885,"string_id":"d919980d2ca5"},
|
|
4840
|
+
{"key":"L0059","section":"Types of projects","text":"Bongos Managed.","placement":"placed","file":"modules/public-landing/public/index.html","line":887,"string_id":"4782de01c86b"},
|
|
4841
|
+
{"key":"L0060","section":"Types of projects","text":"Buy microtransaction packages of code modules on our marketplace.","placement":"placed","file":"modules/public-landing/public/index.html","line":889,"string_id":"101339c676b4"},
|
|
4842
|
+
{"key":"L0061","section":"Types of projects","text":"Have us handle your hosting.","placement":"placed","file":"modules/public-landing/public/index.html","line":890,"string_id":"41778f67b4c9"},
|
|
4843
|
+
{"key":"L0062","section":"Types of projects","text":"Get access to our advanced project presets and module packages.","placement":"placed","file":"modules/public-landing/public/index.html","line":891,"string_id":"8bb1f00b1558"},
|
|
4844
|
+
{"key":"L0063","section":"Types of projects","text":"Equity issuance, business filing, and builder compensation.","placement":"placed","file":"modules/public-landing/public/index.html","line":892,"string_id":"af5ca714d375"},
|
|
4845
|
+
{"key":"L0064","section":"Types of projects","text":"For builders","placement":"placed","file":"modules/public-landing/public/index.html","line":898,"string_id":"f510ba460300"},
|
|
4846
|
+
{"key":"L0065","section":"Ways to get paid/rewarded","text":"Ways to get paid/rewarded","placement":"placed","file":"modules/public-landing/public/index.html","line":899,"string_id":"3597d73ce7f9"},
|
|
4847
|
+
{"key":"L0066","section":"Ways to get paid/rewarded","text":"Build equity in multiple projects.","placement":"placed","file":"modules/public-landing/public/index.html","line":901,"string_id":"0f1ec6cf9dfa"},
|
|
4848
|
+
{"key":"L0067","section":"Ways to get paid/rewarded","text":"Work as a paid contractor for companies big, medium and small.","placement":"placed","file":"modules/public-landing/public/index.html","line":902,"string_id":"a581f96fb2c8"},
|
|
4849
|
+
{"key":"L0068","section":"Ways to get paid/rewarded","text":"Play as a: game or learning experience.","placement":"placed","file":"modules/public-landing/public/index.html","line":903,"string_id":"384c5b38f500"},
|
|
4850
|
+
{"key":"L0069","section":"Ways to get paid/rewarded","text":"Start a project","placement":"placed","file":"modules/public-landing/public/index.html","line":752,"string_id":"2ae36be1c531"},
|
|
4851
|
+
{"key":"L0070","section":"Ways to get paid/rewarded","text":"Find a project","placement":"placed","file":"modules/public-landing/public/index.html","line":915,"string_id":"0208e4bbba9c"},
|
|
4852
|
+
{"key":"L0071","section":"Ways to get paid/rewarded","text":"Download the CLI","placement":"placed","file":"modules/public-landing/public/index.html","line":918,"string_id":"41c49e22002d","state":"cli-out"},
|
|
4853
|
+
{"key":"L0072","section":"Ways to get paid/rewarded","text":"Windows · v0.4.2","placement":"unplaced","state":"cli-out"},
|
|
4854
|
+
{"key":"L0073","section":"Ways to get paid/rewarded","text":"Also for","placement":"unplaced","state":"cli-out"},
|
|
4855
|
+
{"key":"L0074","section":"Ways to get paid/rewarded","text":"macOS, Apple silicon","placement":"unplaced","state":"cli-out"},
|
|
4856
|
+
{"key":"L0075","section":"Ways to get paid/rewarded","text":"macOS, Intel","placement":"unplaced","state":"cli-out"},
|
|
4857
|
+
{"key":"L0076","section":"Ways to get paid/rewarded","text":"Linux, x64","placement":"unplaced","state":"cli-out"},
|
|
4858
|
+
{"key":"L0077","section":"Ways to get paid/rewarded","text":"Linux, ARM64","placement":"unplaced","state":"cli-out"},
|
|
4859
|
+
{"key":"L0078","section":"footer","text":"A non-profit, capture-resistant commons.","placement":"shared","file":"modules/public-landing/public/index.html","line":928,"string_id":"afe83bbbd0d4"},
|
|
4860
|
+
{"key":"L0079","section":"footer","text":"Built by agents, on Cloud Bongos.","placement":"shared","file":"modules/public-landing/public/index.html","line":928,"string_id":"bd315dd71ea7"},
|
|
4861
|
+
{"key":"L0080","section":"footer","text":"Open source","placement":"shared","file":"modules/public-landing/public/index.html","line":928,"string_id":"d6314ddcc1d0"},
|
|
4862
|
+
{"key":"L0081","section":"footer","text":"AGPL-3.0","placement":"shared"},
|
|
4863
|
+
{"key":"L0082","section":"footer","text":"About","placement":"shared"},
|
|
4864
|
+
{"key":"L0083","section":"footer","text":"Docs","placement":"shared"},
|
|
4865
|
+
{"key":"L0084","section":"footer","text":"Privacy","placement":"shared"},
|
|
4866
|
+
{"key":"L0085","section":"footer","text":"Terms","placement":"shared"},
|
|
4867
|
+
{"key":"L0086","section":"footer","text":"Contact","placement":"shared"},
|
|
4868
|
+
{"key":"L0087","section":"footer","text":"Builders' hall","placement":"shared","file":"modules/public-landing/public/index.html","line":934,"string_id":"90a128c97eae"}
|
|
4867
4869
|
]
|
|
4868
4870
|
},
|
|
4869
4871
|
{
|
|
@@ -690,10 +690,10 @@ module.exports = function buildCopyDeskRouter() {
|
|
|
690
690
|
const body = proposals.proposalTaskBody(patch);
|
|
691
691
|
const task = await lifecycle.createTask({
|
|
692
692
|
versionId: building.id,
|
|
693
|
-
//
|
|
694
|
-
// goal
|
|
695
|
-
//
|
|
696
|
-
|
|
693
|
+
// task 1004819: a copy proposal is studio work, so it lands in the version's
|
|
694
|
+
// artist review goal (created on first use; the catch-all only when the
|
|
695
|
+
// version cannot take one) — see createTask.
|
|
696
|
+
artistReview: true,
|
|
697
697
|
title: proposals.proposalTaskTitle(patch),
|
|
698
698
|
description: flagRef
|
|
699
699
|
? `${body}\n\nRaised from copy-desk flag ${flagRef}.`
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
if (choice && choice.options && choice.options.length) {
|
|
47
47
|
var bare = a.key === 'decide' || a.key === 'answer';
|
|
48
48
|
choice.options.forEach(function (o) {
|
|
49
|
-
opts.push({ key: a.key + ':' + str(o.key), label: bare ?
|
|
49
|
+
opts.push({ key: a.key + ':' + str(o.key), label: (function (w) { return bare ? w : str(a.label) + ': ' + w; }(str(o.input && o.input.label) || str(o.label))), result: '', act: a.key, rec: false, plan: plan(o.input), off: false, why: '' });
|
|
50
50
|
});
|
|
51
51
|
} else {
|
|
52
52
|
opts.push({ key: a.key, label: str(a.label), result: '', act: a.key, rec: false, plan: plan({}), off: false, why: '' });
|
|
@@ -221,10 +221,44 @@
|
|
|
221
221
|
return b;
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
+
function matterOf(docket, id) {
|
|
225
|
+
var ms = docket && Array.isArray(docket.matters) ? docket.matters : [];
|
|
226
|
+
for (var i = 0; i < ms.length; i++) if (ms[i] && ms[i].id === id) return ms[i];
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
// The matter's whole text, when it says more than the card already shows.
|
|
230
|
+
function fullText(matter, shown) {
|
|
231
|
+
if (!matter) return '';
|
|
232
|
+
var parts = [];
|
|
233
|
+
var title = str(matter.title).trim();
|
|
234
|
+
if (title && title !== str(shown.question).trim()) parts.push(title);
|
|
235
|
+
var detail = str((matter.ask && matter.ask.detail) || matter.detail).trim();
|
|
236
|
+
if (detail && detail !== title) parts.push(detail);
|
|
237
|
+
return parts.join('\n\n');
|
|
238
|
+
}
|
|
239
|
+
|
|
224
240
|
// The deck's card, answerable; a typed answer gets its own box and send.
|
|
225
241
|
function drawCard(doc, K, cv, on, o) {
|
|
226
242
|
var shown = answerable(cv);
|
|
243
|
+
var matter = matterOf(on.docket && on.docket(), cv.id);
|
|
244
|
+
// the question in full: a matter with no stored card is titled by its own words, cut to fit the deck
|
|
245
|
+
if (matter && /…$/.test(str(shown.question)) && matter.title) shown.question = str(matter.title).trim();
|
|
227
246
|
var art = K.drawAsk(doc, shown, on, o);
|
|
247
|
+
// and everything else it says, one tap away rather than cut
|
|
248
|
+
var full = fullText(matter, shown);
|
|
249
|
+
if (full) {
|
|
250
|
+
var more = doc.createElement('details');
|
|
251
|
+
more.className = 'ask-full';
|
|
252
|
+
var sum = doc.createElement('summary');
|
|
253
|
+
sum.textContent = 'Full text';
|
|
254
|
+
more.appendChild(sum);
|
|
255
|
+
var body = doc.createElement('p');
|
|
256
|
+
body.className = 'ask-full__text';
|
|
257
|
+
body.textContent = full;
|
|
258
|
+
more.appendChild(body);
|
|
259
|
+
var opts = art.querySelector ? art.querySelector('.ask__opts') : null;
|
|
260
|
+
if (opts && typeof art.insertBefore === 'function') art.insertBefore(more, opts); else art.appendChild(more);
|
|
261
|
+
}
|
|
228
262
|
// the crab: open this one in Claude to help decide it
|
|
229
263
|
var q = art.querySelector ? art.querySelector('.ask__q') : null;
|
|
230
264
|
if (q && q.parentNode && typeof q.parentNode.insertBefore === 'function') {
|
|
@@ -638,5 +672,5 @@
|
|
|
638
672
|
return { open: open, close: close, render: render, isOpen: function () { return st.open; } };
|
|
639
673
|
}
|
|
640
674
|
|
|
641
|
-
window.GovCityDecide = { make: make, answerable: answerable, drawCard: drawCard, flash: flash, armKey: armKey, rewordingIds: rewordingIds, rewordingCount: rewordingCount, withoutReworded: withoutReworded, paintArmed: paintArmed, promptOf: promptOf, CLAUDE_URL: CLAUDE_URL };
|
|
675
|
+
window.GovCityDecide = { make: make, answerable: answerable, drawCard: drawCard, flash: flash, fullText: fullText, armKey: armKey, rewordingIds: rewordingIds, rewordingCount: rewordingCount, withoutReworded: withoutReworded, paintArmed: paintArmed, promptOf: promptOf, CLAUDE_URL: CLAUDE_URL };
|
|
642
676
|
}());
|
|
@@ -394,8 +394,8 @@ html[data-fullscreen="on"] .city-top { right: 184px; }
|
|
|
394
394
|
.swb__row { display: flex; align-items: center; gap: 10px; min-height: 40px; border-top: 1px solid var(--rule-soft); padding-top: 6px; }
|
|
395
395
|
.swb__row:first-of-type { border-top: 0; padding-top: 0; }
|
|
396
396
|
.swb__label { flex: 1; min-width: 0; display: flex; flex-direction: column; }
|
|
397
|
-
.swb__name { font-size: 14px; color: var(--ink); overflow
|
|
398
|
-
.swb__fact { font-size: 12px; color: var(--ink-soft); overflow
|
|
397
|
+
.swb__name { font-size: 14px; line-height: 1.35; color: var(--ink); overflow-wrap: anywhere; }
|
|
398
|
+
.swb__fact { font-size: 12px; color: var(--ink-soft); overflow-wrap: anywhere; }
|
|
399
399
|
.swb__toggle { flex: none; position: relative; display: inline-flex; align-items: center; width: 64px; height: 30px; padding: 0 8px; box-sizing: border-box; border-radius: 999px; border: 1px solid var(--gov-chip-edge); background: var(--gov-chip-pick); color: var(--ink-soft); font-family: var(--font-body); font-size: 11.5px; cursor: pointer; transition: background 160ms ease; }
|
|
400
400
|
.swb__knob { position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: var(--ink-soft); transition: left 160ms ease, background 160ms ease; }
|
|
401
401
|
.swb__state { margin-left: auto; }
|
|
@@ -451,3 +451,9 @@ html[data-fullscreen="on"] .city-top { right: 184px; }
|
|
|
451
451
|
.ask-reword__go:focus-visible, .ask-reword__no:focus-visible, .ask-reword__note:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
|
|
452
452
|
/* only drawn when something is out for a rewrite; a quiet footnote to the counts */
|
|
453
453
|
.city-card__rewording, .decide__rewording { display: block; margin-top: 1px; font-size: 10.5px; color: var(--ink-faint); text-align: right; }
|
|
454
|
+
|
|
455
|
+
/* a card's whole text, one tap away instead of cut (city-decide.js) */
|
|
456
|
+
.ask-full { font-size: 12.5px; color: var(--ink-soft); }
|
|
457
|
+
.ask-full summary { display: inline-flex; align-items: center; min-height: 24px; cursor: pointer; color: var(--ink); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--gov-chip-edge-pick); }
|
|
458
|
+
.ask-full__text { margin: 6px 0 0; max-height: 240px; overflow-y: auto; white-space: pre-wrap; line-height: 1.5; overflow-wrap: anywhere; }
|
|
459
|
+
.ask-full summary:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
(tests/hall_tokens.mjs: no hall page hardcodes a web-font stylesheet).
|
|
13
13
|
The prototype carried its own Google Fonts link for the same two faces. -->
|
|
14
14
|
<link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
|
|
15
|
-
<link rel="stylesheet" href="/builders/city.css?v=2026-10-23-
|
|
15
|
+
<link rel="stylesheet" href="/builders/city.css?v=2026-10-23-decide12">
|
|
16
16
|
<!-- the ask card in the glass language, shared with the street's deck (task 1004702) -->
|
|
17
17
|
<link rel="stylesheet" href="/builders/street-deck.css?v=2026-10-17-tidy">
|
|
18
18
|
</head>
|
|
@@ -115,14 +115,14 @@
|
|
|
115
115
|
<!-- a building's card answers its first ask in place through the deck's own
|
|
116
116
|
route (task 1004702): the desk rows (street-desk.js over the street's kit)
|
|
117
117
|
and the deck's card and sender (street-deck.js) -->
|
|
118
|
-
<script src="/builders/hall-kit.js?v=2026-10-23-
|
|
118
|
+
<script src="/builders/hall-kit.js?v=2026-10-23-decide12"></script>
|
|
119
119
|
<script src="/builders/street-draw.js?v=2026-10-09-living3"></script>
|
|
120
120
|
<script src="/builders/street-card.js?v=2026-10-04-record1"></script>
|
|
121
121
|
<script src="/builders/street-inside.js?v=2026-10-09-living3"></script>
|
|
122
122
|
<script src="/builders/street-desk.js?v=2026-10-04-record1"></script>
|
|
123
123
|
<script src="/builders/street-deck.js?v=2026-10-13-glass1"></script>
|
|
124
|
-
<script src="/builders/city-decide.js?v=2026-10-23-
|
|
125
|
-
<script src="/builders/city-switchboard.js?v=2026-10-23-
|
|
126
|
-
<script src="/builders/city.js?v=2026-10-23-
|
|
124
|
+
<script src="/builders/city-decide.js?v=2026-10-23-decide12"></script>
|
|
125
|
+
<script src="/builders/city-switchboard.js?v=2026-10-23-board5"></script>
|
|
126
|
+
<script src="/builders/city.js?v=2026-10-23-decide12"></script>
|
|
127
127
|
</body>
|
|
128
128
|
</html>
|