@bongos/core 1.19.1035 → 1.19.1036
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 +72 -57
- package/clients/bongos-client/index.d.ts +1 -1
- package/docs/adr/0339-a-projects-owner-upgrades-it-and-a-hosted-project-hands-off-to-the-hub-door.md +84 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +7 -5
- package/docs/copy-inventory.md +10 -10
- package/docs/copy-registry.json +13 -13
- package/docs/module-api-changelog.md +2 -0
- package/modules/hall-ui/public/atlas.html +1 -1
- package/modules/hall-ui/public/blockers.html +1 -1
- package/modules/hall-ui/public/board-room.html +1 -1
- package/modules/hall-ui/public/collab.html +1 -1
- package/modules/hall-ui/public/copy-desk.html +1 -1
- package/modules/hall-ui/public/deploy.html +1 -1
- package/modules/hall-ui/public/diagrams.html +1 -1
- package/modules/hall-ui/public/drachmae.html +1 -1
- package/modules/hall-ui/public/fleet.html +1 -1
- package/modules/hall-ui/public/gate.html +1 -1
- package/modules/hall-ui/public/goals.html +1 -1
- package/modules/hall-ui/public/government.html +1 -1
- package/modules/hall-ui/public/idea.html +1 -1
- package/modules/hall-ui/public/ideas.html +1 -1
- package/modules/hall-ui/public/index.html +1 -1
- package/modules/hall-ui/public/modules.html +1 -1
- package/modules/hall-ui/public/people.html +1 -1
- package/modules/hall-ui/public/primer.html +1 -1
- package/modules/hall-ui/public/profile.html +1 -1
- package/modules/hall-ui/public/project-settings.html +1 -1
- package/modules/hall-ui/public/ranks.html +1 -1
- package/modules/hall-ui/public/roadmap.html +1 -1
- package/modules/hall-ui/public/roster.html +1 -1
- package/modules/hall-ui/public/sessions.html +1 -1
- package/modules/hall-ui/public/settings.html +1 -1
- package/modules/hall-ui/public/shell.js +36 -5
- package/modules/hall-ui/public/studio.html +1 -1
- package/modules/hall-ui/public/task.html +1 -1
- package/modules/hall-ui/public/watch.html +1 -1
- package/modules/hall-ui/public/work.html +1 -1
- package/modules/provisioning/core-upgrade-authz.js +85 -0
- package/modules/provisioning/core-upgrade.js +2 -1
- package/modules/provisioning/provisioning.js +4 -4
- package/modules/provisioning/routes/core-upgrade.js +12 -6
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +10 -0
- package/scripts/gds/provision-core-upgrade.js +12 -4
- package/src/bongos/auth.js +8 -2
- package/src/bongos/routes/core-update.js +25 -3
- package/src/module-api.js +1 -1
- package/tests/core_upgrade_owner_door.mjs +444 -0
- package/tests/nav_permission_atoms.mjs +1 -1
- package/tests/provisioning_teardown_intent.mjs +28 -2
- package/tests/scouting_page_gate.mjs +11 -3
package/docs/api/openapi.json
CHANGED
|
@@ -13915,7 +13915,7 @@
|
|
|
13915
13915
|
"provisioning"
|
|
13916
13916
|
],
|
|
13917
13917
|
"summary": "GET /provisioning/control-plane",
|
|
13918
|
-
"description": "GET /provisioning/control-plane — \"which row is this platform, and where does it stand?\" The deploy page's first call: the self row is created once by hand at install time, so its id is per-install and nobody's to memorise.
|
|
13918
|
+
"description": "GET /provisioning/control-plane — \"which row is this platform, and where does it stand?\" The deploy page's first call: the self row is created once by hand at install time, so its id is per-install and nobody's to memorise. The atom ALONE here, with no owner door: this is the platform's own row (ADR 0339).\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `core.pin.move` (all required).",
|
|
13919
13919
|
"x-rank": "archon",
|
|
13920
13920
|
"x-source": "modules/provisioning/routes/core-upgrade.js",
|
|
13921
13921
|
"x-permissions": [
|
|
@@ -14231,7 +14231,7 @@
|
|
|
14231
14231
|
"provisioning"
|
|
14232
14232
|
],
|
|
14233
14233
|
"summary": "GET /provisioning/instances/:id/core-upgrade",
|
|
14234
|
-
"description": "GET the same path — step ONE of the two-step (ADR 0293 D4): what a move would do. GATED THE SAME AS THE POST, deliberately. Reading it discloses the instance's exact core version and how far behind it is, which is a vulnerability-window disclosure — precisely the sort of thing ADR 0043 keeps off unauthenticated surfaces. A preview anyone could read would also let an attacker time a request against a known-stale window. The read being no cheaper than the write costs the owner nothing:
|
|
14234
|
+
"description": "GET the same path — step ONE of the two-step (ADR 0293 D4): what a move would do. GATED THE SAME AS THE POST, deliberately. Reading it discloses the instance's exact core version and how far behind it is, which is a vulnerability-window disclosure — precisely the sort of thing ADR 0043 keeps off unauthenticated surfaces. A preview anyone could read would also let an attacker time a request against a known-stale window. The read being no cheaper than the write costs the owner nothing: whoever may press the button may read what it would do — the same two doors as the POST.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `core.pin.move` (all required).",
|
|
14235
14235
|
"x-rank": "archon",
|
|
14236
14236
|
"x-source": "modules/provisioning/routes/core-upgrade.js",
|
|
14237
14237
|
"x-permissions": [
|
|
@@ -14277,7 +14277,7 @@
|
|
|
14277
14277
|
"provisioning"
|
|
14278
14278
|
],
|
|
14279
14279
|
"summary": "POST /provisioning/instances/:id/core-upgrade",
|
|
14280
|
-
"description": "POST /provisioning/instances/:id/core-upgrade — move the core pin. rank: `core.pin.move` — archon floor AND system:true, so the catalog's own invariant forbids granting it to metic and no custom rank can be handed it without a deliberate, visible edit. BV1.R105 / ADR 0151 is why this is an atom and not `requireRank`: tests/government_require_permission.mjs fails the build on a new requireRank in a modules/*/routes gate. Body: { to: \"1.19.757\" } — and requiring it IS the second step of the two-step the owner asked for (ADR 0293 D4). A request that cannot fire without naming its target cannot fire from a stray click, and \"move to whatever is newest\", resolved at drain time, would be a different act from the one previewed: main moves between the preview and the confirm. What this does NOT check: whether the version is PUBLISHED, and whether the channel policy admits it. Both need the registry, and the only tool that reads it (update-channel.js `listAvailableVersions`) shells out synchronously — it would block the event loop for every other request on this process. It also lives in scripts/gds/, which a module may not require (ADR 0083). The runner enforces both, where it is a CLI and both are free. See ../core-upgrade.js.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `core.pin.move` (all required).",
|
|
14280
|
+
"description": "POST /provisioning/instances/:id/core-upgrade — move the core pin. rank: `core.pin.move` — archon floor AND system:true, so the catalog's own invariant forbids granting it to metic and no custom rank can be handed it without a deliberate, visible edit. BV1.R105 / ADR 0151 is why this is an atom and not `requireRank`: tests/government_require_permission.mjs fails the build on a new requireRank in a modules/*/routes gate. OR THE PROJECT'S OWN OWNER (task 1004174, ADR 0339 — the owner's ruling that only a project's owner upgrades it). Ownership of a TENANT row is asked first; any other caller meets the unmodified `core.pin.move` gate and its unchanged refusal. The platform's own row is not an owner's to move here — it stays on the atom. Body: { to: \"1.19.757\" } — and requiring it IS the second step of the two-step the owner asked for (ADR 0293 D4). A request that cannot fire without naming its target cannot fire from a stray click, and \"move to whatever is newest\", resolved at drain time, would be a different act from the one previewed: main moves between the preview and the confirm. What this does NOT check: whether the version is PUBLISHED, and whether the channel policy admits it. Both need the registry, and the only tool that reads it (update-channel.js `listAvailableVersions`) shells out synchronously — it would block the event loop for every other request on this process. It also lives in scripts/gds/, which a module may not require (ADR 0083). The runner enforces both, where it is a CLI and both are free. See ../core-upgrade.js.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `core.pin.move` (all required).",
|
|
14281
14281
|
"x-rank": "archon",
|
|
14282
14282
|
"x-source": "modules/provisioning/routes/core-upgrade.js",
|
|
14283
14283
|
"x-permissions": [
|
|
@@ -21091,11 +21091,13 @@
|
|
|
21091
21091
|
"ok": {
|
|
21092
21092
|
"type": "boolean"
|
|
21093
21093
|
},
|
|
21094
|
-
"update": {}
|
|
21094
|
+
"update": {},
|
|
21095
|
+
"deploy_url": {}
|
|
21095
21096
|
},
|
|
21096
21097
|
"required": [
|
|
21097
21098
|
"ok",
|
|
21098
|
-
"update"
|
|
21099
|
+
"update",
|
|
21100
|
+
"deploy_url"
|
|
21099
21101
|
]
|
|
21100
21102
|
},
|
|
21101
21103
|
"GetCoreUpgradesResponse": {
|
package/docs/copy-inventory.md
CHANGED
|
@@ -594,8 +594,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
594
594
|
| `d305f0df6f25` | certain | Jump to | `modules/hall-ui/public/palette.js:226` |
|
|
595
595
|
| `01176c156112` | certain | Jump to a goal or a thought | `modules/hall-ui/public/goal-map.html:81` |
|
|
596
596
|
| `01176c156112` | certain | Jump to a goal or a thought | `modules/hall-ui/public/thinking.html:80` |
|
|
597
|
-
| `2bfc5a50ce88` | certain | Jump to a page or record | `modules/hall-ui/public/shell.js:
|
|
598
|
-
| `eba610d25523` | certain | Jump to… | `modules/hall-ui/public/shell.js:
|
|
597
|
+
| `2bfc5a50ce88` | certain | Jump to a page or record | `modules/hall-ui/public/shell.js:500` |
|
|
598
|
+
| `eba610d25523` | certain | Jump to… | `modules/hall-ui/public/shell.js:502` |
|
|
599
599
|
| `bc779353aa0c` | certain | Karma — peer recognition and approvals, a separate counter from {…}. | `modules/hall-ui/public/profile.js:94` |
|
|
600
600
|
| `de0e1590667f` | certain | Keep all {…} {…} — they are the values the code drops in, and the change cannot land without them. | `modules/hall-ui/public/copy-desk.js:442` |
|
|
601
601
|
| `fbe40b5818a3` | certain | Key removed. | `modules/hall-ui/public/settings.js:1128` |
|
|
@@ -776,7 +776,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
776
776
|
| `261d123970e8` | certain | Open goal #{…} | `modules/hall-ui/public/roadmap.js:112` |
|
|
777
777
|
| `5f3e0b179839` | certain | Open in Sessions | `modules/hall-ui/public/task.js:483` |
|
|
778
778
|
| `9f55e4674ebb` | certain | Open in the copy desk | `modules/hall-ui/public/studio.js:219` |
|
|
779
|
-
| `3366b115217b` | certain | Open navigation | `modules/hall-ui/public/shell.js:
|
|
779
|
+
| `3366b115217b` | certain | Open navigation | `modules/hall-ui/public/shell.js:491` |
|
|
780
780
|
| `855277dff074` | certain | Open task #{…} | `modules/hall-ui/public/goals-render.js:415` |
|
|
781
781
|
| `855277dff074` | certain | Open task #{…} | `modules/hall-ui/public/work.js:1124` |
|
|
782
782
|
| `99c630009152` | certain | Open tasks whose declared files overlap — sequence these before two builders collide. | `modules/hall-ui/public/goals.html:125` |
|
|
@@ -984,12 +984,12 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
984
984
|
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:367` |
|
|
985
985
|
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:391` |
|
|
986
986
|
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:461` |
|
|
987
|
-
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/shell.js:
|
|
988
|
-
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:
|
|
989
|
-
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:
|
|
987
|
+
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/shell.js:461` |
|
|
988
|
+
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:479` |
|
|
989
|
+
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:738` |
|
|
990
990
|
| `8ad669ab2565` | certain | Sign out everywhere | `modules/hall-ui/public/settings.html:171` |
|
|
991
991
|
| `ecc12c1dd4de` | certain | Skill voices | `modules/hall-ui/public/settings.html:350` |
|
|
992
|
-
| `87cee78ca134` | certain | Skip to content | `modules/hall-ui/public/shell.js:
|
|
992
|
+
| `87cee78ca134` | certain | Skip to content | `modules/hall-ui/public/shell.js:729` |
|
|
993
993
|
| `688ca7b6e30f` | certain | Slop — reads as machine-written | `modules/hall-ui/public/copy-desk.html:90` |
|
|
994
994
|
| `82df09a08476` | certain | So the Archon knows who you are | `modules/hall-ui/public/hall-render.js:294` |
|
|
995
995
|
| `7da6a848cd26` | certain | Someone helped | `modules/hall-ui/public/collab.js:296` |
|
|
@@ -1016,7 +1016,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1016
1016
|
| `5831de503015` | certain | Studio — {{worldName}} | `modules/hall-ui/public/studio.html:10` |
|
|
1017
1017
|
| `f79e1fb8ebd4` | certain | Suggested as you type; leave it on "no goal" and it waits for triage. | `modules/hall-ui/public/ideas.html:84` |
|
|
1018
1018
|
| `a1482eff4ead` | certain | Suggested for you | `modules/hall-ui/public/settings-specialities.js:137` |
|
|
1019
|
-
| `1e40f33483eb` | certain | Switch theme | `modules/hall-ui/public/shell.js:
|
|
1019
|
+
| `1e40f33483eb` | certain | Switch theme | `modules/hall-ui/public/shell.js:506` |
|
|
1020
1020
|
| `93fa2e97dd35` | certain | System default for this skill | `modules/hall-ui/public/settings.js:72` |
|
|
1021
1021
|
| `4894b1d9b0de` | certain | System oversight: people, operations and security. | `modules/hall-ui/public/watch.js:1335` |
|
|
1022
1022
|
| `e604fc3ace79` | certain | Task # | `modules/hall-ui/public/blockers.js:139` |
|
|
@@ -1037,7 +1037,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1037
1037
|
| `2fc66e722e33` | certain | Tasks open once you have read the builder primer. | `modules/hall-ui/public/work.html:43` |
|
|
1038
1038
|
| `44579eef0c8d` | certain | Tasks — {{worldName}} | `modules/hall-ui/public/work.html:6` |
|
|
1039
1039
|
| `44579eef0c8d` | certain | Tasks — {{worldName}} | `modules/hall-ui/public/work.html:6` |
|
|
1040
|
-
| `2f4f047dc1b4` | certain | Text size | `modules/hall-ui/public/shell.js:
|
|
1040
|
+
| `2f4f047dc1b4` | certain | Text size | `modules/hall-ui/public/shell.js:505` |
|
|
1041
1041
|
| `f420429f942e` | certain | That builder no longer exists. | `modules/hall-ui/public/goals-render.js:1305` |
|
|
1042
1042
|
| `545c59c1deb7` | certain | That is the session you are using right now. Ending it signs you out of this page. | `modules/hall-ui/public/settings-sessions.js:74` |
|
|
1043
1043
|
| `282c3fa2d456` | certain | That is the wording it already has. Change something, or file a flag instead if you only want to mark it. | `modules/hall-ui/public/copy-desk.js:438` |
|
|
@@ -1169,7 +1169,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1169
1169
|
| `2c1c20785a6e` | certain | Unclear — a person would not know what to do | `modules/hall-ui/public/copy-desk.html:91` |
|
|
1170
1170
|
| `aa445f06cc5e` | certain | Unlink failed: {…} | `modules/hall-ui/public/settings.js:856` |
|
|
1171
1171
|
| `67fbc770b3b3` | certain | Upvote (+1) | `modules/hall-ui/public/builders.js:777` |
|
|
1172
|
-
| `16d7f809be8a` | certain | Use the control below to take it. | `modules/hall-ui/public/shell.js:
|
|
1172
|
+
| `16d7f809be8a` | certain | Use the control below to take it. | `modules/hall-ui/public/shell.js:696` |
|
|
1173
1173
|
| `e7e2a99a2bea` | certain | Use this | `modules/hall-ui/public/settings-specialities.js:148` |
|
|
1174
1174
|
| `e1ecd543a2ca` | certain | Using this speciality. | `modules/hall-ui/public/settings-specialities.js:199` |
|
|
1175
1175
|
| `6200bac6bdca` | certain | View all sessions | `modules/hall-ui/public/watch.html:99` |
|
package/docs/copy-registry.json
CHANGED
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"modules/hall-ui/public/hall-render.js:367",
|
|
193
193
|
"modules/hall-ui/public/hall-render.js:391",
|
|
194
194
|
"modules/hall-ui/public/hall-render.js:461",
|
|
195
|
-
"modules/hall-ui/public/shell.js:
|
|
195
|
+
"modules/hall-ui/public/shell.js:461"
|
|
196
196
|
]
|
|
197
197
|
},
|
|
198
198
|
{
|
|
@@ -1581,8 +1581,8 @@
|
|
|
1581
1581
|
"text": "Sign out",
|
|
1582
1582
|
"occurrences": 2,
|
|
1583
1583
|
"at": [
|
|
1584
|
-
"modules/hall-ui/public/shell.js:
|
|
1585
|
-
"modules/hall-ui/public/shell.js:
|
|
1584
|
+
"modules/hall-ui/public/shell.js:479",
|
|
1585
|
+
"modules/hall-ui/public/shell.js:738"
|
|
1586
1586
|
]
|
|
1587
1587
|
},
|
|
1588
1588
|
{
|
|
@@ -6850,7 +6850,7 @@
|
|
|
6850
6850
|
"surface": "builders-hall",
|
|
6851
6851
|
"text": "Jump to a page or record",
|
|
6852
6852
|
"file": "modules/hall-ui/public/shell.js",
|
|
6853
|
-
"line":
|
|
6853
|
+
"line": 500,
|
|
6854
6854
|
"origin": "js-markup",
|
|
6855
6855
|
"confidence": "certain"
|
|
6856
6856
|
},
|
|
@@ -6859,7 +6859,7 @@
|
|
|
6859
6859
|
"surface": "builders-hall",
|
|
6860
6860
|
"text": "Jump to…",
|
|
6861
6861
|
"file": "modules/hall-ui/public/shell.js",
|
|
6862
|
-
"line":
|
|
6862
|
+
"line": 502,
|
|
6863
6863
|
"origin": "js-markup",
|
|
6864
6864
|
"confidence": "certain"
|
|
6865
6865
|
},
|
|
@@ -8488,7 +8488,7 @@
|
|
|
8488
8488
|
"surface": "builders-hall",
|
|
8489
8489
|
"text": "Open navigation",
|
|
8490
8490
|
"file": "modules/hall-ui/public/shell.js",
|
|
8491
|
-
"line":
|
|
8491
|
+
"line": 491,
|
|
8492
8492
|
"origin": "js-markup",
|
|
8493
8493
|
"confidence": "certain"
|
|
8494
8494
|
},
|
|
@@ -10360,7 +10360,7 @@
|
|
|
10360
10360
|
"surface": "builders-hall",
|
|
10361
10361
|
"text": "Sign in with GitHub",
|
|
10362
10362
|
"file": "modules/hall-ui/public/shell.js",
|
|
10363
|
-
"line":
|
|
10363
|
+
"line": 461,
|
|
10364
10364
|
"origin": "js-markup",
|
|
10365
10365
|
"confidence": "certain"
|
|
10366
10366
|
},
|
|
@@ -10369,7 +10369,7 @@
|
|
|
10369
10369
|
"surface": "builders-hall",
|
|
10370
10370
|
"text": "Sign out",
|
|
10371
10371
|
"file": "modules/hall-ui/public/shell.js",
|
|
10372
|
-
"line":
|
|
10372
|
+
"line": 479,
|
|
10373
10373
|
"origin": "js-markup",
|
|
10374
10374
|
"confidence": "certain"
|
|
10375
10375
|
},
|
|
@@ -10378,7 +10378,7 @@
|
|
|
10378
10378
|
"surface": "builders-hall",
|
|
10379
10379
|
"text": "Sign out",
|
|
10380
10380
|
"file": "modules/hall-ui/public/shell.js",
|
|
10381
|
-
"line":
|
|
10381
|
+
"line": 738,
|
|
10382
10382
|
"origin": "js-markup",
|
|
10383
10383
|
"confidence": "certain"
|
|
10384
10384
|
},
|
|
@@ -10405,7 +10405,7 @@
|
|
|
10405
10405
|
"surface": "builders-hall",
|
|
10406
10406
|
"text": "Skip to content",
|
|
10407
10407
|
"file": "modules/hall-ui/public/shell.js",
|
|
10408
|
-
"line":
|
|
10408
|
+
"line": 729,
|
|
10409
10409
|
"origin": "js-text-assign",
|
|
10410
10410
|
"confidence": "certain"
|
|
10411
10411
|
},
|
|
@@ -10648,7 +10648,7 @@
|
|
|
10648
10648
|
"surface": "builders-hall",
|
|
10649
10649
|
"text": "Switch theme",
|
|
10650
10650
|
"file": "modules/hall-ui/public/shell.js",
|
|
10651
|
-
"line":
|
|
10651
|
+
"line": 506,
|
|
10652
10652
|
"origin": "js-markup",
|
|
10653
10653
|
"confidence": "certain"
|
|
10654
10654
|
},
|
|
@@ -10837,7 +10837,7 @@
|
|
|
10837
10837
|
"surface": "builders-hall",
|
|
10838
10838
|
"text": "Text size",
|
|
10839
10839
|
"file": "modules/hall-ui/public/shell.js",
|
|
10840
|
-
"line":
|
|
10840
|
+
"line": 505,
|
|
10841
10841
|
"origin": "js-markup",
|
|
10842
10842
|
"confidence": "certain"
|
|
10843
10843
|
},
|
|
@@ -12025,7 +12025,7 @@
|
|
|
12025
12025
|
"surface": "builders-hall",
|
|
12026
12026
|
"text": "Use the control below to take it.",
|
|
12027
12027
|
"file": "modules/hall-ui/public/shell.js",
|
|
12028
|
-
"line":
|
|
12028
|
+
"line": 696,
|
|
12029
12029
|
"origin": "js-markup",
|
|
12030
12030
|
"confidence": "certain"
|
|
12031
12031
|
},
|
|
@@ -2549,5 +2549,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2549
2549
|
landed since 1.19.1033 with no explicit bump. run 36215757254. (task 1002620)
|
|
2550
2550
|
1.19.1035 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2551
2551
|
landed since 1.19.1034 with no explicit bump. run 36226356336. (task 1002620)
|
|
2552
|
+
1.19.1036 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2553
|
+
landed since 1.19.1035 with no explicit bump. run 36226955285. (task 1002620)
|
|
2552
2554
|
---------------------------------------------------------------------------
|
|
2553
2555
|
```
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
|
|
92
92
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
93
93
|
|
|
94
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
94
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
95
95
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
96
96
|
<script src="/builders/palette.js" defer></script>
|
|
97
97
|
<script src="/builders/atlas.js?v=2026-09-02-index" defer></script>
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
52
52
|
chrome exists before the page script runs. -->
|
|
53
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
53
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
54
54
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
55
55
|
<script src="/builders/palette.js" defer></script>
|
|
56
56
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
|
|
61
61
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
62
62
|
|
|
63
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
63
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
64
64
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
65
65
|
<script src="/builders/palette.js" defer></script>
|
|
66
66
|
<script src="/builders/dom-utils.js?v=2026-06-16-board"></script>
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
|
|
149
149
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
150
150
|
|
|
151
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
151
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
152
152
|
<script src="/builders/palette.js" defer></script>
|
|
153
153
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
154
154
|
<script src="/builders/collab-lib.js?v=2026-09-24-archive"></script>
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
|
|
178
178
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
179
179
|
|
|
180
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
180
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
181
181
|
<script src="/builders/palette.js" defer></script>
|
|
182
182
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
183
183
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
|
|
61
61
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
62
62
|
|
|
63
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
63
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
64
64
|
<script src="/builders/palette.js" defer></script>
|
|
65
65
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
66
66
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
|
|
98
98
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
99
99
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
100
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
100
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
101
101
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
102
102
|
<script src="/builders/palette.js" defer></script>
|
|
103
103
|
<script src="/builders/diagram-viewer.js?v=2026-06-14-diagviewer-1" defer></script>
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
|
|
99
99
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
100
100
|
|
|
101
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
101
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
102
102
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
103
103
|
<script src="/builders/palette.js" defer></script>
|
|
104
104
|
<script src="/builders/md-reader.js?v=2026-09-02-mdreader-2"></script>
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
|
|
55
55
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
56
56
|
|
|
57
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
57
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
58
58
|
<script src="/builders/palette.js" defer></script>
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
60
60
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<div id="gate-modal-root"></div>
|
|
77
77
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
78
78
|
|
|
79
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
79
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
80
80
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
81
81
|
<script src="/builders/palette.js" defer></script>
|
|
82
82
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
|
|
236
236
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
237
237
|
|
|
238
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
238
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
239
239
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
240
240
|
<script src="/builders/palette.js" defer></script>
|
|
241
241
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
|
|
135
135
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
136
136
|
|
|
137
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
137
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
138
138
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
139
139
|
<script src="/builders/palette.js" defer></script>
|
|
140
140
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
|
|
53
53
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
54
54
|
|
|
55
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
55
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
56
56
|
<script src="/builders/palette.js" defer></script>
|
|
57
57
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib" defer></script>
|
|
58
58
|
<!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
|
|
226
226
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
227
227
|
|
|
228
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
228
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
229
229
|
<script src="/builders/palette.js" defer></script>
|
|
230
230
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
231
231
|
<!-- task 1003069 (R08) — the quick-filing form's routed result links a task
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
<script src="/builders/brand-apply.js?v=2026-06-27-r75" defer></script>
|
|
103
103
|
<!-- The app shell (sidebar + top bar + view router). Dependency-free; loaded
|
|
104
104
|
BEFORE builders.js so the chrome ids exist when events are wired. -->
|
|
105
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
105
|
+
<script src="/builders/shell.js?v=2026-09-26-own1" defer></script>
|
|
106
106
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
107
107
|
<script src="/builders/palette.js" defer></script>
|
|
108
108
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
|
|
81
81
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
82
82
|
|
|
83
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
83
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
84
84
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
85
85
|
<script src="/builders/palette.js" defer></script>
|
|
86
86
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
68
68
|
chrome exists before the page script runs. -->
|
|
69
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
69
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
70
70
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
71
71
|
<script src="/builders/palette.js" defer></script>
|
|
72
72
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
|
|
116
116
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
117
117
|
|
|
118
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
118
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
119
119
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
120
120
|
<script src="/builders/palette.js" defer></script>
|
|
121
121
|
<!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
|
|
188
188
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
189
189
|
chrome exists before the page script runs. -->
|
|
190
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
190
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
191
191
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
192
192
|
<script src="/builders/palette.js" defer></script>
|
|
193
193
|
<!-- shared frontend toolkit (window.OTB) — loaded before profile.js, which pulls from it. -->
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
60
60
|
|
|
61
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
61
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
62
62
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
63
63
|
<script src="/builders/palette.js" defer></script>
|
|
64
64
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
|
|
69
69
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
70
70
|
chrome exists before the page script runs. -->
|
|
71
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
71
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
72
72
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
73
73
|
<script src="/builders/palette.js" defer></script>
|
|
74
74
|
<!-- shared frontend toolkit (window.OTB) — loaded before ranks.js, which pulls from it. -->
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
|
|
42
42
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
43
43
|
|
|
44
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
44
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
45
45
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
46
46
|
<script src="/builders/palette.js" defer></script>
|
|
47
47
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
52
52
|
chrome exists before the page script runs. -->
|
|
53
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
53
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
54
54
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
55
55
|
<script src="/builders/palette.js" defer></script>
|
|
56
56
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
|
|
100
100
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
101
101
|
chrome exists before the page script runs. -->
|
|
102
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
102
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
103
103
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
104
104
|
<script src="/builders/palette.js" defer></script>
|
|
105
105
|
<!-- shared frontend toolkit (window.OTB) — loaded BEFORE sessions.js so it can pull from it. -->
|
|
@@ -416,7 +416,7 @@
|
|
|
416
416
|
|
|
417
417
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
418
418
|
chrome exists before the page scripts run. -->
|
|
419
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
419
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
420
420
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
421
421
|
<script src="/builders/palette.js" defer></script>
|
|
422
422
|
<!-- shared frontend toolkit (window.OTB) — loaded before consuming IIFEs. -->
|
|
@@ -344,7 +344,12 @@
|
|
|
344
344
|
// The deploy door (task 1003159, ADR 0293). Gated 'archon' here to mirror the
|
|
345
345
|
// `core.pin.move` atom its page and both its routes check — cosmetic only, as
|
|
346
346
|
// every item in this list is; the wall is server-side.
|
|
347
|
-
|
|
347
|
+
//
|
|
348
|
+
// THE DOOR IS THE PROVISIONING MODULE'S, and a hosted project does not run it, so
|
|
349
|
+
// there this link opened a page with nothing behind it (task 1004174). It is
|
|
350
|
+
// dropped where the module is off, and re-pointed at the hub's own door for THIS
|
|
351
|
+
// project once /core-update names one (pointDeployAtHub, ADR 0339).
|
|
352
|
+
{ id: 'deploy', label: 'Deploy', icon: 'admin', href: '/deploy', gate: 'archon', module: 'provisioning' },
|
|
348
353
|
// task 1001949: what each hosted project costs. 'government' mirrors the metic floor
|
|
349
354
|
// of `provisioning.fleet.manage`, the atom its page and its one read check (the
|
|
350
355
|
// Deploy precedent above); dropped where the provisioning module is not enabled.
|
|
@@ -622,16 +627,40 @@
|
|
|
622
627
|
if (!perms || perms['core.pin.move'] !== true) return;
|
|
623
628
|
coreUpdateAsked = true;
|
|
624
629
|
api.request('GET', '/api/bongos/core-update').then(function (res) {
|
|
625
|
-
if (!res || res.status !== 200 || !res.data
|
|
626
|
-
|
|
630
|
+
if (!res || res.status !== 200 || !res.data) return;
|
|
631
|
+
var handoff = hubHandoff(res.data.deploy_url);
|
|
632
|
+
if (handoff) pointDeployAtHub(handoff);
|
|
633
|
+
if (res.data.update) renderCoreUpdateBanner(res.data.update, handoff);
|
|
627
634
|
}, function () { /* fail-soft: no banner is the correct answer to no answer */ });
|
|
628
635
|
}
|
|
629
636
|
|
|
637
|
+
// task 1004174 (ADR 0339) — where a HOSTED project's owner takes the upgrade: the
|
|
638
|
+
// hub's own deploy door scoped to this project, which the server names as
|
|
639
|
+
// `deploy_url` when this project is federated with a hub. Only where this hall has no
|
|
640
|
+
// door of its own: on the platform the local /deploy is the door, and a link away
|
|
641
|
+
// from it would be a second road to the same button. An address that is not a plain
|
|
642
|
+
// http(s) URL is ignored rather than trusted into an href.
|
|
643
|
+
function hubHandoff(url) {
|
|
644
|
+
if (moduleOn('provisioning')) return null;
|
|
645
|
+
if (typeof url !== 'string' || !/^https?:\/\/[^\s"'<>]+$/i.test(url)) return null;
|
|
646
|
+
return url;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
// The rail's Deploy item is hidden on a hosted project (its module gate); this gives
|
|
650
|
+
// it back, aimed at the hub. Its rank gate still applies, exactly as on the platform.
|
|
651
|
+
function pointDeployAtHub(url) {
|
|
652
|
+
var item = document.getElementById('nav-deploy');
|
|
653
|
+
if (!item) return;
|
|
654
|
+
item.setAttribute('href', url);
|
|
655
|
+
if (item.dataset) delete item.dataset.module;
|
|
656
|
+
item.hidden = !gateAllows(item.dataset && item.dataset.gate);
|
|
657
|
+
}
|
|
658
|
+
|
|
630
659
|
// SAY NOTHING WHEN THERE IS NOTHING TO SAY. `behind` is false both when the box
|
|
631
660
|
// is current AND when the registry could not be read; `reading` separates them,
|
|
632
661
|
// and neither renders. A banner is a claim about being out of date, and a wrong
|
|
633
662
|
// one on a project that is actually current is worse than silence.
|
|
634
|
-
function renderCoreUpdateBanner(update) {
|
|
663
|
+
function renderCoreUpdateBanner(update, handoff) {
|
|
635
664
|
if (!update || update.reading !== 'ok' || !update.behind || !update.latest) return;
|
|
636
665
|
// A dismissal is remembered PER VERSION, not forever: the next release is new
|
|
637
666
|
// news and must re-announce itself, or the surface is dead after one click.
|
|
@@ -659,8 +688,10 @@
|
|
|
659
688
|
// happen": nothing had, and nothing had been asked for. The control is on that page
|
|
660
689
|
// already, so on it the banner informs and points, and does not pretend to act.
|
|
661
690
|
var onDeploy = window.location && String(window.location.pathname || '').replace(/\/+$/, '') === '/deploy';
|
|
691
|
+
// A hosted project has no door of its own; it hands its owner to the hub's door for
|
|
692
|
+
// this project when the server named one (task 1004174), and otherwise only informs.
|
|
662
693
|
var action = !moduleOn('provisioning')
|
|
663
|
-
? ''
|
|
694
|
+
? (handoff ? '<a class="core-update-notice__action" href="' + esc(handoff) + '">Upgrade</a>' : '')
|
|
664
695
|
: (onDeploy
|
|
665
696
|
? '<span class="core-update-notice__hint">Use the control below to take it.</span>'
|
|
666
697
|
: '<a class="core-update-notice__action" href="/deploy">Upgrade</a>');
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
68
68
|
|
|
69
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
69
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
70
70
|
<script src="/builders/palette.js" defer></script>
|
|
71
71
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
72
72
|
<!-- The kit, for its ONE renderer: the full-size ship-time visual figure
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
59
59
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
60
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
60
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
61
61
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
62
62
|
<script src="/builders/palette.js" defer></script>
|
|
63
63
|
<!-- shared frontend toolkit (window.OTB) — loaded FIRST so task.js can pull from it. -->
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
|
|
163
163
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
164
164
|
chrome exists before the page script runs. -->
|
|
165
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
165
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
166
166
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
167
167
|
<script src="/builders/palette.js" defer></script>
|
|
168
168
|
<!-- shared frontend toolkit (window.OTB) — loaded before watch.js, which pulls from it. -->
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
|
|
172
172
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
173
173
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
174
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
174
|
+
<script src="/builders/shell.js?v=2026-09-26-own1"></script>
|
|
175
175
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
176
176
|
<script src="/builders/palette.js" defer></script>
|
|
177
177
|
<!-- shared frontend toolkit (window.OTB) — loaded FIRST so work.js can pull from it. -->
|