@bongos/core 1.19.788 → 1.19.790
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 +111 -41
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +6 -0
- package/clients/bongos-client/index.cjs +6 -0
- package/clients/bongos-client/index.d.ts +6 -0
- package/clients/bongos-client/index.mjs +6 -0
- package/docs/adr/0293-the-owners-deploy-door-is-an-intent-the-control-plane-drains.md +124 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +129 -1
- package/docs/api-reference.md +5 -2
- package/docs/copy-inventory.md +31 -14
- package/docs/copy-registry.json +205 -31
- package/docs/module-api-changelog.md +4 -0
- package/docs/recipes/core-release-pipeline.md +12 -0
- package/docs/recipes/upgrading-the-core.md +7 -1
- package/migrations/core_241_core_upgrades_actor.sql +65 -0
- package/migrations/core_242_core_version_snapshot.sql +54 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +6 -0
- package/modules/government/catalog.js +8 -0
- package/modules/government/migrations/government_014_core_pin_move.sql +46 -0
- package/modules/hall-ui/public/deploy.html +64 -0
- package/modules/hall-ui/public/deploy.js +188 -0
- package/modules/hall-ui/public/shell.js +4 -0
- package/modules/provisioning/control-plane-guard.js +102 -0
- package/modules/provisioning/core-upgrade.js +289 -0
- package/modules/provisioning/migrations/provisioning_018_core_upgrade_intent.sql +98 -0
- package/modules/provisioning/module.json +1 -1
- package/modules/provisioning/provisioning.js +8 -8
- package/modules/provisioning/routes/core-upgrade.js +95 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/enroll-control-plane.js +101 -0
- package/scripts/gds/provision-core-upgrade.js +311 -0
- package/scripts/gds/provision.js +4 -2
- package/scripts/gds/upgrade.js +53 -14
- package/src/bongos/auth.js +19 -0
- package/src/bongos/serve-internal.js +21 -0
- package/src/module-api.js +1 -1
- package/tests/auth_resolve_failure.mjs +4 -2
- package/tests/core_upgrade_door.mjs +408 -0
- package/tests/core_upgrade_runner.mjs +377 -0
- package/tests/hall_nav.mjs +4 -1
- package/tests/hall_page_gate_map.mjs +7 -0
- package/tests/provisioning_disconnect.mjs +30 -5
- package/tests/provisioning_paid_shape_gate.mjs +14 -4
- package/tests/provisioning_restart.mjs +25 -9
- package/tests/provisioning_settings_apply.mjs +11 -2
- package/tests/provisioning_teardown_intent.mjs +7 -0
package/.bongos-core.json
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.790",
|
|
6
|
+
"core_contract": "1.19.790",
|
|
7
|
+
"source_commit": "65b7661a78960a298c7598f0937a5c76abc55063",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-16T23:41:22.245Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 485,
|
|
13
13
|
"agent_docs_stubbed": 25,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2173,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2683,
|
|
20
|
+
"tree_sha256": "8ca493db048f77e39d94464f095bd5e926050f7ae855ec90c7902c5283faa81f",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -347,12 +347,12 @@
|
|
|
347
347
|
{
|
|
348
348
|
"path": "clients/bongos-client/README.md",
|
|
349
349
|
"mode": "0000644",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "ed619e165f5ab41b2003d5721bee90b77d0bb80614358e7f0c9aaecd54d52120"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
354
354
|
"mode": "0000644",
|
|
355
|
-
"sha256": "
|
|
355
|
+
"sha256": "7b572e442e8f142fa23e0b45e32b04d18638b7cee2121c17b8e28c8b48435384"
|
|
356
356
|
},
|
|
357
357
|
{
|
|
358
358
|
"path": "clients/bongos-client/examples/hello-world.mjs",
|
|
@@ -362,17 +362,17 @@
|
|
|
362
362
|
{
|
|
363
363
|
"path": "clients/bongos-client/index.cjs",
|
|
364
364
|
"mode": "0000644",
|
|
365
|
-
"sha256": "
|
|
365
|
+
"sha256": "0921f40ea40f6e562c1d4ddbb549748372d7b6ec661c1f902bd65f6be1b387ec"
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
"path": "clients/bongos-client/index.d.ts",
|
|
369
369
|
"mode": "0000644",
|
|
370
|
-
"sha256": "
|
|
370
|
+
"sha256": "cace11e622ee6d515f96800e288cbd854efbea2269b1b211bf89f56d53b13325"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.mjs",
|
|
374
374
|
"mode": "0000644",
|
|
375
|
-
"sha256": "
|
|
375
|
+
"sha256": "b6645d78fe6a9cfb047809753383ff49a74217f378d47d264416d825167b9370"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/package.json",
|
|
@@ -1949,20 +1949,25 @@
|
|
|
1949
1949
|
"mode": "0000644",
|
|
1950
1950
|
"sha256": "6a5afb0821a42af204fe97ec68040ea7781344651e599bce135bf8f15d8c86dc"
|
|
1951
1951
|
},
|
|
1952
|
+
{
|
|
1953
|
+
"path": "docs/adr/0293-the-owners-deploy-door-is-an-intent-the-control-plane-drains.md",
|
|
1954
|
+
"mode": "0000644",
|
|
1955
|
+
"sha256": "fb72a972f472cfea4c214dc73c7c5e811670d4eb2bbbc8d397495c8756daa625"
|
|
1956
|
+
},
|
|
1952
1957
|
{
|
|
1953
1958
|
"path": "docs/adr/README.md",
|
|
1954
1959
|
"mode": "0000644",
|
|
1955
|
-
"sha256": "
|
|
1960
|
+
"sha256": "4b61b76ac117cd1f3086db73d9badb4046285ecf7cd1d1dd6e5c4d389d3c68af"
|
|
1956
1961
|
},
|
|
1957
1962
|
{
|
|
1958
1963
|
"path": "docs/api-reference.md",
|
|
1959
1964
|
"mode": "0000644",
|
|
1960
|
-
"sha256": "
|
|
1965
|
+
"sha256": "9ede5654985d0d667740c2c55090f9a5e7fbfc44c1c0c30743eb6ad3112c5e35"
|
|
1961
1966
|
},
|
|
1962
1967
|
{
|
|
1963
1968
|
"path": "docs/api/openapi.json",
|
|
1964
1969
|
"mode": "0000644",
|
|
1965
|
-
"sha256": "
|
|
1970
|
+
"sha256": "00f6e4757e5337e7f7cf3ae1d0afeccfcabe9ef1896304004b855931f8b9c423"
|
|
1966
1971
|
},
|
|
1967
1972
|
{
|
|
1968
1973
|
"path": "docs/architecture.md",
|
|
@@ -1987,12 +1992,12 @@
|
|
|
1987
1992
|
{
|
|
1988
1993
|
"path": "docs/copy-inventory.md",
|
|
1989
1994
|
"mode": "0000644",
|
|
1990
|
-
"sha256": "
|
|
1995
|
+
"sha256": "795dee2bad79df8e5937f3d4288832e01480afc23c505dbe5b8a41d1d02f876b"
|
|
1991
1996
|
},
|
|
1992
1997
|
{
|
|
1993
1998
|
"path": "docs/copy-registry.json",
|
|
1994
1999
|
"mode": "0000644",
|
|
1995
|
-
"sha256": "
|
|
2000
|
+
"sha256": "619669f9cc00836df3872c00b0279047d6a5f65da20c76eb765835c1ae201840"
|
|
1996
2001
|
},
|
|
1997
2002
|
{
|
|
1998
2003
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2517,7 +2522,7 @@
|
|
|
2517
2522
|
{
|
|
2518
2523
|
"path": "docs/module-api-changelog.md",
|
|
2519
2524
|
"mode": "0000644",
|
|
2520
|
-
"sha256": "
|
|
2525
|
+
"sha256": "4b4fca2cca1876f6e56253a16eaf7709406a386e5dd240edbadc7497f7866e71"
|
|
2521
2526
|
},
|
|
2522
2527
|
{
|
|
2523
2528
|
"path": "docs/modules-contract.md",
|
|
@@ -2637,7 +2642,7 @@
|
|
|
2637
2642
|
{
|
|
2638
2643
|
"path": "docs/recipes/core-release-pipeline.md",
|
|
2639
2644
|
"mode": "0000644",
|
|
2640
|
-
"sha256": "
|
|
2645
|
+
"sha256": "169425fb8bbdd3e54ab3eefb8ac772c3789dfe19f3f16e39b4e83bba5e831e76"
|
|
2641
2646
|
},
|
|
2642
2647
|
{
|
|
2643
2648
|
"path": "docs/recipes/devbox-app-release.md",
|
|
@@ -2777,7 +2782,7 @@
|
|
|
2777
2782
|
{
|
|
2778
2783
|
"path": "docs/recipes/upgrading-the-core.md",
|
|
2779
2784
|
"mode": "0000644",
|
|
2780
|
-
"sha256": "
|
|
2785
|
+
"sha256": "041955ed109343181ea563e47e905c59e3bbd052e4dc3988b5ea34fbe5029f16"
|
|
2781
2786
|
},
|
|
2782
2787
|
{
|
|
2783
2788
|
"path": "docs/recipes/windows-builders.md",
|
|
@@ -3589,6 +3594,16 @@
|
|
|
3589
3594
|
"mode": "0000644",
|
|
3590
3595
|
"sha256": "e8faead6772089c8e47f3f81433c65038bfbb60bb509dff6c2a7b5572124316d"
|
|
3591
3596
|
},
|
|
3597
|
+
{
|
|
3598
|
+
"path": "migrations/core_241_core_upgrades_actor.sql",
|
|
3599
|
+
"mode": "0000644",
|
|
3600
|
+
"sha256": "7cc5e9681fd62486d445a80f8ac4f0a8cc7fbe4a8ffacba7d7ffcfd262e8440c"
|
|
3601
|
+
},
|
|
3602
|
+
{
|
|
3603
|
+
"path": "migrations/core_242_core_version_snapshot.sql",
|
|
3604
|
+
"mode": "0000644",
|
|
3605
|
+
"sha256": "e52821124b99bd844c8323f2de0221db3fafd92c0c6e2227838cadf7d987676a"
|
|
3606
|
+
},
|
|
3592
3607
|
{
|
|
3593
3608
|
"path": "modules/agents/CLAUDE.md",
|
|
3594
3609
|
"mode": "0000644",
|
|
@@ -4027,7 +4042,7 @@
|
|
|
4027
4042
|
{
|
|
4028
4043
|
"path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
|
|
4029
4044
|
"mode": "0000644",
|
|
4030
|
-
"sha256": "
|
|
4045
|
+
"sha256": "0921f40ea40f6e562c1d4ddbb549748372d7b6ec661c1f902bd65f6be1b387ec"
|
|
4031
4046
|
},
|
|
4032
4047
|
{
|
|
4033
4048
|
"path": "modules/dev-box/app/test/unit.mjs",
|
|
@@ -4277,7 +4292,7 @@
|
|
|
4277
4292
|
{
|
|
4278
4293
|
"path": "modules/government/catalog.js",
|
|
4279
4294
|
"mode": "0000644",
|
|
4280
|
-
"sha256": "
|
|
4295
|
+
"sha256": "25f086b8b845c35a3d9fbefbf1dcc30f0c4856b08bafc4f2c0c4952e6f57a7ab"
|
|
4281
4296
|
},
|
|
4282
4297
|
{
|
|
4283
4298
|
"path": "modules/government/config.js",
|
|
@@ -4394,6 +4409,11 @@
|
|
|
4394
4409
|
"mode": "0000644",
|
|
4395
4410
|
"sha256": "f1e5ae5cef3f2e9d4196ea6c3f1c436bb4411d5492ca6c42c9b876f8575f754e"
|
|
4396
4411
|
},
|
|
4412
|
+
{
|
|
4413
|
+
"path": "modules/government/migrations/government_014_core_pin_move.sql",
|
|
4414
|
+
"mode": "0000644",
|
|
4415
|
+
"sha256": "0ddff91ec6d4c1f4344c6fdc2bd2f158e34a9b14662a100cf73796924b7c98de"
|
|
4416
|
+
},
|
|
4397
4417
|
{
|
|
4398
4418
|
"path": "modules/government/module.json",
|
|
4399
4419
|
"mode": "0000644",
|
|
@@ -4709,6 +4729,16 @@
|
|
|
4709
4729
|
"mode": "0000644",
|
|
4710
4730
|
"sha256": "85748768107d0d0ff93e2e4a2d4ec388f4a0b433d54d6603d2d5b2d192a0b062"
|
|
4711
4731
|
},
|
|
4732
|
+
{
|
|
4733
|
+
"path": "modules/hall-ui/public/deploy.html",
|
|
4734
|
+
"mode": "0000644",
|
|
4735
|
+
"sha256": "23e54a15a796a7f7176cea0fcfcc72f92e5a008c851de25e443b74a2af8951ed"
|
|
4736
|
+
},
|
|
4737
|
+
{
|
|
4738
|
+
"path": "modules/hall-ui/public/deploy.js",
|
|
4739
|
+
"mode": "0000644",
|
|
4740
|
+
"sha256": "a44f3c64894c8f51b50e28ad42c9e8e52d60eb1a1d6098cdaf514f16492ba0b2"
|
|
4741
|
+
},
|
|
4712
4742
|
{
|
|
4713
4743
|
"path": "modules/hall-ui/public/diagram-viewer.css",
|
|
4714
4744
|
"mode": "0000644",
|
|
@@ -5202,7 +5232,7 @@
|
|
|
5202
5232
|
{
|
|
5203
5233
|
"path": "modules/hall-ui/public/shell.js",
|
|
5204
5234
|
"mode": "0000644",
|
|
5205
|
-
"sha256": "
|
|
5235
|
+
"sha256": "24cca58dbbaa29ad5eb9ae6673c1b70b843ff1e96afe323ac559d016345f9abc"
|
|
5206
5236
|
},
|
|
5207
5237
|
{
|
|
5208
5238
|
"path": "modules/hall-ui/public/ship.wav",
|
|
@@ -6209,6 +6239,16 @@
|
|
|
6209
6239
|
"mode": "0000644",
|
|
6210
6240
|
"sha256": "6978ddde30cb0b378a2decbe18c2824817d8d57a941a8de6230483453e99acd7"
|
|
6211
6241
|
},
|
|
6242
|
+
{
|
|
6243
|
+
"path": "modules/provisioning/control-plane-guard.js",
|
|
6244
|
+
"mode": "0000644",
|
|
6245
|
+
"sha256": "b70ad687c7699a3023e8be973b67ceeb7ff67afb38ff47665c7089614901c200"
|
|
6246
|
+
},
|
|
6247
|
+
{
|
|
6248
|
+
"path": "modules/provisioning/core-upgrade.js",
|
|
6249
|
+
"mode": "0000644",
|
|
6250
|
+
"sha256": "dbe57cec7dd94613e9f2d23f396838ba77411c8fe3f9dca858cfd2af956ae43f"
|
|
6251
|
+
},
|
|
6212
6252
|
{
|
|
6213
6253
|
"path": "modules/provisioning/credential-preflight.js",
|
|
6214
6254
|
"mode": "0000644",
|
|
@@ -6304,10 +6344,15 @@
|
|
|
6304
6344
|
"mode": "0000644",
|
|
6305
6345
|
"sha256": "69fa8f9cdc3c9ec272c318226558254267ae63ef2ffa68ab93a89a3ab5d782a2"
|
|
6306
6346
|
},
|
|
6347
|
+
{
|
|
6348
|
+
"path": "modules/provisioning/migrations/provisioning_018_core_upgrade_intent.sql",
|
|
6349
|
+
"mode": "0000644",
|
|
6350
|
+
"sha256": "0fec45fe6188b76d625127ed60dabeda90dc02389709b3d2274c4477b33bb33d"
|
|
6351
|
+
},
|
|
6307
6352
|
{
|
|
6308
6353
|
"path": "modules/provisioning/module.json",
|
|
6309
6354
|
"mode": "0000644",
|
|
6310
|
-
"sha256": "
|
|
6355
|
+
"sha256": "5ddd201b98f799f4f3cf6d889dea8d4e0196732e3bab67cf752e95e045724ede"
|
|
6311
6356
|
},
|
|
6312
6357
|
{
|
|
6313
6358
|
"path": "modules/provisioning/onboard-plan.js",
|
|
@@ -6332,7 +6377,7 @@
|
|
|
6332
6377
|
{
|
|
6333
6378
|
"path": "modules/provisioning/provisioning.js",
|
|
6334
6379
|
"mode": "0000644",
|
|
6335
|
-
"sha256": "
|
|
6380
|
+
"sha256": "b70d138fb6ed6f0fe4f04d2a37a7a195364250ca10b46a933c5aad0057061c10"
|
|
6336
6381
|
},
|
|
6337
6382
|
{
|
|
6338
6383
|
"path": "modules/provisioning/rate-limit.js",
|
|
@@ -6354,6 +6399,11 @@
|
|
|
6354
6399
|
"mode": "0000644",
|
|
6355
6400
|
"sha256": "6b43ebf71a778277b94de1b9400f690fac9f51b48010e50a159af57195f99f02"
|
|
6356
6401
|
},
|
|
6402
|
+
{
|
|
6403
|
+
"path": "modules/provisioning/routes/core-upgrade.js",
|
|
6404
|
+
"mode": "0000644",
|
|
6405
|
+
"sha256": "7447a5eb37dc120e14fa6b5fb81c574ec951b9a46ed126d5c954c63b03bc6b6d"
|
|
6406
|
+
},
|
|
6357
6407
|
{
|
|
6358
6408
|
"path": "modules/provisioning/routes/disconnect.js",
|
|
6359
6409
|
"mode": "0000644",
|
|
@@ -7627,12 +7677,12 @@
|
|
|
7627
7677
|
{
|
|
7628
7678
|
"path": "package-lock.json",
|
|
7629
7679
|
"mode": "0000644",
|
|
7630
|
-
"sha256": "
|
|
7680
|
+
"sha256": "3d7def55a4d9907d5a5cedb1da52cfaf05e4541cd60fad5f0eb1263c1e26e422"
|
|
7631
7681
|
},
|
|
7632
7682
|
{
|
|
7633
7683
|
"path": "package.json",
|
|
7634
7684
|
"mode": "0000644",
|
|
7635
|
-
"sha256": "
|
|
7685
|
+
"sha256": "a4346e6a913ede8aa9d9bc9d0b91133c746e29ecaf1a1b541e95fdd447cc80d7"
|
|
7636
7686
|
},
|
|
7637
7687
|
{
|
|
7638
7688
|
"path": "public-docs/index.html",
|
|
@@ -8074,6 +8124,11 @@
|
|
|
8074
8124
|
"mode": "0000644",
|
|
8075
8125
|
"sha256": "2fcc3f97558ed6a653638df96d585dc7a1ef7dd884657a63d3a9545dbdb03e92"
|
|
8076
8126
|
},
|
|
8127
|
+
{
|
|
8128
|
+
"path": "scripts/gds/enroll-control-plane.js",
|
|
8129
|
+
"mode": "0000644",
|
|
8130
|
+
"sha256": "2710d4063c78a055c1af024ab4efce18992c8a7949833c87e2a516fcd873bd55"
|
|
8131
|
+
},
|
|
8077
8132
|
{
|
|
8078
8133
|
"path": "scripts/gds/exec-path-guard.js",
|
|
8079
8134
|
"mode": "0000644",
|
|
@@ -8489,6 +8544,11 @@
|
|
|
8489
8544
|
"mode": "0000644",
|
|
8490
8545
|
"sha256": "1f60ee3d585ad3ab8c84c6b0abac99573ed218183b8e8403f2ddf3e951ff6b3d"
|
|
8491
8546
|
},
|
|
8547
|
+
{
|
|
8548
|
+
"path": "scripts/gds/provision-core-upgrade.js",
|
|
8549
|
+
"mode": "0000644",
|
|
8550
|
+
"sha256": "48f41b0d45f26f188585245ef918bd626f2242fdb641f3a11a0a27a83b34d3ca"
|
|
8551
|
+
},
|
|
8492
8552
|
{
|
|
8493
8553
|
"path": "scripts/gds/provision-disconnect.js",
|
|
8494
8554
|
"mode": "0000644",
|
|
@@ -8522,7 +8582,7 @@
|
|
|
8522
8582
|
{
|
|
8523
8583
|
"path": "scripts/gds/provision.js",
|
|
8524
8584
|
"mode": "0000644",
|
|
8525
|
-
"sha256": "
|
|
8585
|
+
"sha256": "b81947c37dccac487771865a699ab0a581b75b1991e0e76b07ce2a1877db414c"
|
|
8526
8586
|
},
|
|
8527
8587
|
{
|
|
8528
8588
|
"path": "scripts/gds/publish-credential-check.js",
|
|
@@ -9057,7 +9117,7 @@
|
|
|
9057
9117
|
{
|
|
9058
9118
|
"path": "scripts/gds/upgrade.js",
|
|
9059
9119
|
"mode": "0000644",
|
|
9060
|
-
"sha256": "
|
|
9120
|
+
"sha256": "eba999956e81e6637af527334825d2c1b5ad9b4af165320eb011e28718c5df99"
|
|
9061
9121
|
},
|
|
9062
9122
|
{
|
|
9063
9123
|
"path": "scripts/gds/validate-design.js",
|
|
@@ -9227,7 +9287,7 @@
|
|
|
9227
9287
|
{
|
|
9228
9288
|
"path": "src/bongos/auth.js",
|
|
9229
9289
|
"mode": "0000644",
|
|
9230
|
-
"sha256": "
|
|
9290
|
+
"sha256": "1b6cfa9855919baea11de11636e7cfe9655c3e0eddee7eabf451de55e13bdfe5"
|
|
9231
9291
|
},
|
|
9232
9292
|
{
|
|
9233
9293
|
"path": "src/bongos/cascade-dispatch.js",
|
|
@@ -9467,7 +9527,7 @@
|
|
|
9467
9527
|
{
|
|
9468
9528
|
"path": "src/bongos/serve-internal.js",
|
|
9469
9529
|
"mode": "0000644",
|
|
9470
|
-
"sha256": "
|
|
9530
|
+
"sha256": "851db86e07022a303e0bf93dc60080c0c0776b7b01114fef617cad729611fc8b"
|
|
9471
9531
|
},
|
|
9472
9532
|
{
|
|
9473
9533
|
"path": "src/bongos/uptime-poller.js",
|
|
@@ -9497,7 +9557,7 @@
|
|
|
9497
9557
|
{
|
|
9498
9558
|
"path": "src/module-api.js",
|
|
9499
9559
|
"mode": "0000644",
|
|
9500
|
-
"sha256": "
|
|
9560
|
+
"sha256": "bd42bd20fe31864a0c0a5fc9e692c07d3207b92bf9f49030a206f92e76ab4f92"
|
|
9501
9561
|
},
|
|
9502
9562
|
{
|
|
9503
9563
|
"path": "src/module-loader/catalog.js",
|
|
@@ -9822,7 +9882,7 @@
|
|
|
9822
9882
|
{
|
|
9823
9883
|
"path": "tests/auth_resolve_failure.mjs",
|
|
9824
9884
|
"mode": "0000644",
|
|
9825
|
-
"sha256": "
|
|
9885
|
+
"sha256": "acbce017f7111b67c556db645de7b88fb5f39829755fa6c9378f300c8fc62a15"
|
|
9826
9886
|
},
|
|
9827
9887
|
{
|
|
9828
9888
|
"path": "tests/auth_session_ttl.mjs",
|
|
@@ -10279,6 +10339,16 @@
|
|
|
10279
10339
|
"mode": "0000644",
|
|
10280
10340
|
"sha256": "716aa03c5e93b71aec0c7e6fe646e5abd702b8b6ffda0ef6235a804d2c17a0ca"
|
|
10281
10341
|
},
|
|
10342
|
+
{
|
|
10343
|
+
"path": "tests/core_upgrade_door.mjs",
|
|
10344
|
+
"mode": "0000644",
|
|
10345
|
+
"sha256": "9b6fb0b2279102a6b9224c1e598adb8cb3d8dd039a7d63116f56862852c64ec8"
|
|
10346
|
+
},
|
|
10347
|
+
{
|
|
10348
|
+
"path": "tests/core_upgrade_runner.mjs",
|
|
10349
|
+
"mode": "0000644",
|
|
10350
|
+
"sha256": "c6d600c92654d54897d457162bf6aad3a8ba46d7d1fe4e94673900025a867fa6"
|
|
10351
|
+
},
|
|
10282
10352
|
{
|
|
10283
10353
|
"path": "tests/cosmos_token_contrast.mjs",
|
|
10284
10354
|
"mode": "0000644",
|
|
@@ -11192,7 +11262,7 @@
|
|
|
11192
11262
|
{
|
|
11193
11263
|
"path": "tests/hall_nav.mjs",
|
|
11194
11264
|
"mode": "0000644",
|
|
11195
|
-
"sha256": "
|
|
11265
|
+
"sha256": "e3aec810d2b893066d262e74e9779cefee981bad516df4eda7e619b61ba86b24"
|
|
11196
11266
|
},
|
|
11197
11267
|
{
|
|
11198
11268
|
"path": "tests/hall_oversight_world.mjs",
|
|
@@ -11202,7 +11272,7 @@
|
|
|
11202
11272
|
{
|
|
11203
11273
|
"path": "tests/hall_page_gate_map.mjs",
|
|
11204
11274
|
"mode": "0000644",
|
|
11205
|
-
"sha256": "
|
|
11275
|
+
"sha256": "e8c7bdaaddc80195da94b41cc40695933e2da6f5a8b54c9f0f04899a20b48114"
|
|
11206
11276
|
},
|
|
11207
11277
|
{
|
|
11208
11278
|
"path": "tests/hall_palette.mjs",
|
|
@@ -12242,7 +12312,7 @@
|
|
|
12242
12312
|
{
|
|
12243
12313
|
"path": "tests/provisioning_disconnect.mjs",
|
|
12244
12314
|
"mode": "0000644",
|
|
12245
|
-
"sha256": "
|
|
12315
|
+
"sha256": "d33debfe7c72dda888c6039d1b78eae51c70e127ac44bba1f70b278fa465f7be"
|
|
12246
12316
|
},
|
|
12247
12317
|
{
|
|
12248
12318
|
"path": "tests/provisioning_domain_attach.mjs",
|
|
@@ -12277,7 +12347,7 @@
|
|
|
12277
12347
|
{
|
|
12278
12348
|
"path": "tests/provisioning_paid_shape_gate.mjs",
|
|
12279
12349
|
"mode": "0000644",
|
|
12280
|
-
"sha256": "
|
|
12350
|
+
"sha256": "1cf30338eb8dafc77f2fea1e2b5ec417fe64a6576ececcca18936fe4e871c763"
|
|
12281
12351
|
},
|
|
12282
12352
|
{
|
|
12283
12353
|
"path": "tests/provisioning_recommendations.mjs",
|
|
@@ -12287,7 +12357,7 @@
|
|
|
12287
12357
|
{
|
|
12288
12358
|
"path": "tests/provisioning_restart.mjs",
|
|
12289
12359
|
"mode": "0000644",
|
|
12290
|
-
"sha256": "
|
|
12360
|
+
"sha256": "f31a8fc12866f7d639b7472578422e29129db85bbd9ddecb663e753393d74e2a"
|
|
12291
12361
|
},
|
|
12292
12362
|
{
|
|
12293
12363
|
"path": "tests/provisioning_settings.mjs",
|
|
@@ -12297,7 +12367,7 @@
|
|
|
12297
12367
|
{
|
|
12298
12368
|
"path": "tests/provisioning_settings_apply.mjs",
|
|
12299
12369
|
"mode": "0000644",
|
|
12300
|
-
"sha256": "
|
|
12370
|
+
"sha256": "642d29f2e29e38a0b3a7229309b03a9e1cb28969e7f6d942bd06dd092147b835"
|
|
12301
12371
|
},
|
|
12302
12372
|
{
|
|
12303
12373
|
"path": "tests/provisioning_settings_env.mjs",
|
|
@@ -12317,7 +12387,7 @@
|
|
|
12317
12387
|
{
|
|
12318
12388
|
"path": "tests/provisioning_teardown_intent.mjs",
|
|
12319
12389
|
"mode": "0000644",
|
|
12320
|
-
"sha256": "
|
|
12390
|
+
"sha256": "6155e1e7c18417537636e6e0ca1d63f4b87264c350d736fb787dfdafb7950280"
|
|
12321
12391
|
},
|
|
12322
12392
|
{
|
|
12323
12393
|
"path": "tests/provisioning_teardown_states.mjs",
|
|
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
|
|
|
5
5
|
by hand; it regenerates when the spec changes, so it can never drift from the routes.
|
|
6
6
|
|
|
7
7
|
- API version: **v1** (served at `/api/bongos/v1`)
|
|
8
|
-
-
|
|
8
|
+
- 378 operations across 58 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -689,6 +689,8 @@ function createClient(opts = {}) {
|
|
|
689
689
|
postProjectsInvite: (args) => request("POST", "/projects/invite", { hasBody: true }, args),
|
|
690
690
|
},
|
|
691
691
|
"provisioning": {
|
|
692
|
+
// GET /provisioning/control-plane — rank: archon — GET /provisioning/control-plane
|
|
693
|
+
getProvisioningControlPlane: (args) => request("GET", "/provisioning/control-plane", { hasBody: false }, args),
|
|
692
694
|
// GET /provisioning/fleet — rank: metic+archon — GET /provisioning/fleet
|
|
693
695
|
getProvisioningFleet: (args) => request("GET", "/provisioning/fleet", { hasBody: false }, args),
|
|
694
696
|
// GET /provisioning/fleet/cost-ledger — rank: metic+archon — GET /provisioning/fleet/cost-ledger
|
|
@@ -705,6 +707,10 @@ function createClient(opts = {}) {
|
|
|
705
707
|
postProvisioningInstances: (args) => request("POST", "/provisioning/instances", { hasBody: true }, args),
|
|
706
708
|
// GET /provisioning/instances/{id} — rank: any-builder — GET /provisioning/instances/:id
|
|
707
709
|
getProvisioningInstancesId: (args) => request("GET", "/provisioning/instances/{id}", { hasBody: false }, args),
|
|
710
|
+
// GET /provisioning/instances/{id}/core-upgrade — rank: archon — GET /provisioning/instances/:id/core-upgrade
|
|
711
|
+
getProvisioningInstancesIdCoreUpgrade: (args) => request("GET", "/provisioning/instances/{id}/core-upgrade", { hasBody: false }, args),
|
|
712
|
+
// POST /provisioning/instances/{id}/core-upgrade — rank: archon — POST /provisioning/instances/:id/core-upgrade
|
|
713
|
+
postProvisioningInstancesIdCoreUpgrade: (args) => request("POST", "/provisioning/instances/{id}/core-upgrade", { hasBody: true }, args),
|
|
708
714
|
// PATCH /provisioning/instances/{id}/detail — rank: any-builder — PATCH /provisioning/instances/:id/detail
|
|
709
715
|
patchProvisioningInstancesIdDetail: (args) => request("PATCH", "/provisioning/instances/{id}/detail", { hasBody: true }, args),
|
|
710
716
|
// POST /provisioning/instances/{id}/disconnect — rank: any-builder — POST /provisioning/instances/:id/disconnect
|
|
@@ -688,6 +688,8 @@ function createClient(opts = {}) {
|
|
|
688
688
|
postProjectsInvite: (args) => request("POST", "/projects/invite", { hasBody: true }, args),
|
|
689
689
|
},
|
|
690
690
|
"provisioning": {
|
|
691
|
+
// GET /provisioning/control-plane — rank: archon — GET /provisioning/control-plane
|
|
692
|
+
getProvisioningControlPlane: (args) => request("GET", "/provisioning/control-plane", { hasBody: false }, args),
|
|
691
693
|
// GET /provisioning/fleet — rank: metic+archon — GET /provisioning/fleet
|
|
692
694
|
getProvisioningFleet: (args) => request("GET", "/provisioning/fleet", { hasBody: false }, args),
|
|
693
695
|
// GET /provisioning/fleet/cost-ledger — rank: metic+archon — GET /provisioning/fleet/cost-ledger
|
|
@@ -704,6 +706,10 @@ function createClient(opts = {}) {
|
|
|
704
706
|
postProvisioningInstances: (args) => request("POST", "/provisioning/instances", { hasBody: true }, args),
|
|
705
707
|
// GET /provisioning/instances/{id} — rank: any-builder — GET /provisioning/instances/:id
|
|
706
708
|
getProvisioningInstancesId: (args) => request("GET", "/provisioning/instances/{id}", { hasBody: false }, args),
|
|
709
|
+
// GET /provisioning/instances/{id}/core-upgrade — rank: archon — GET /provisioning/instances/:id/core-upgrade
|
|
710
|
+
getProvisioningInstancesIdCoreUpgrade: (args) => request("GET", "/provisioning/instances/{id}/core-upgrade", { hasBody: false }, args),
|
|
711
|
+
// POST /provisioning/instances/{id}/core-upgrade — rank: archon — POST /provisioning/instances/:id/core-upgrade
|
|
712
|
+
postProvisioningInstancesIdCoreUpgrade: (args) => request("POST", "/provisioning/instances/{id}/core-upgrade", { hasBody: true }, args),
|
|
707
713
|
// PATCH /provisioning/instances/{id}/detail — rank: any-builder — PATCH /provisioning/instances/:id/detail
|
|
708
714
|
patchProvisioningInstancesIdDetail: (args) => request("PATCH", "/provisioning/instances/{id}/detail", { hasBody: true }, args),
|
|
709
715
|
// POST /provisioning/instances/{id}/disconnect — rank: any-builder — POST /provisioning/instances/:id/disconnect
|
|
@@ -1037,6 +1037,8 @@ export interface BongosClient {
|
|
|
1037
1037
|
postProjectsInvite(args: RequestArgs & { body: PostProjectsInviteRequest }): Promise<ApiResponse>;
|
|
1038
1038
|
};
|
|
1039
1039
|
"provisioning": {
|
|
1040
|
+
/** GET /provisioning/control-plane — rank: archon */
|
|
1041
|
+
getProvisioningControlPlane(args?: RequestArgs): Promise<ApiResponse>;
|
|
1040
1042
|
/** GET /provisioning/fleet — rank: metic+archon */
|
|
1041
1043
|
getProvisioningFleet(args?: RequestArgs): Promise<GetProvisioningFleetResponse>;
|
|
1042
1044
|
/** GET /provisioning/fleet/cost-ledger — rank: metic+archon */
|
|
@@ -1053,6 +1055,10 @@ export interface BongosClient {
|
|
|
1053
1055
|
postProvisioningInstances(args: RequestArgs & { body: PostProvisioningInstancesRequest }): Promise<ApiResponse>;
|
|
1054
1056
|
/** GET /provisioning/instances/{id} — rank: any-builder */
|
|
1055
1057
|
getProvisioningInstancesId(args?: RequestArgs): Promise<GetProvisioningInstancesIdResponse>;
|
|
1058
|
+
/** GET /provisioning/instances/{id}/core-upgrade — rank: archon */
|
|
1059
|
+
getProvisioningInstancesIdCoreUpgrade(args?: RequestArgs): Promise<ApiResponse>;
|
|
1060
|
+
/** POST /provisioning/instances/{id}/core-upgrade — rank: archon */
|
|
1061
|
+
postProvisioningInstancesIdCoreUpgrade(args?: RequestArgs): Promise<ApiResponse>;
|
|
1056
1062
|
/** PATCH /provisioning/instances/{id}/detail — rank: any-builder */
|
|
1057
1063
|
patchProvisioningInstancesIdDetail(args?: RequestArgs & { body?: PatchProvisioningInstancesIdDetailRequest }): Promise<PatchProvisioningInstancesIdDetailResponse>;
|
|
1058
1064
|
/** POST /provisioning/instances/{id}/disconnect — rank: any-builder */
|
|
@@ -685,6 +685,8 @@ export function createClient(opts = {}) {
|
|
|
685
685
|
postProjectsInvite: (args) => request("POST", "/projects/invite", { hasBody: true }, args),
|
|
686
686
|
},
|
|
687
687
|
"provisioning": {
|
|
688
|
+
// GET /provisioning/control-plane — rank: archon — GET /provisioning/control-plane
|
|
689
|
+
getProvisioningControlPlane: (args) => request("GET", "/provisioning/control-plane", { hasBody: false }, args),
|
|
688
690
|
// GET /provisioning/fleet — rank: metic+archon — GET /provisioning/fleet
|
|
689
691
|
getProvisioningFleet: (args) => request("GET", "/provisioning/fleet", { hasBody: false }, args),
|
|
690
692
|
// GET /provisioning/fleet/cost-ledger — rank: metic+archon — GET /provisioning/fleet/cost-ledger
|
|
@@ -701,6 +703,10 @@ export function createClient(opts = {}) {
|
|
|
701
703
|
postProvisioningInstances: (args) => request("POST", "/provisioning/instances", { hasBody: true }, args),
|
|
702
704
|
// GET /provisioning/instances/{id} — rank: any-builder — GET /provisioning/instances/:id
|
|
703
705
|
getProvisioningInstancesId: (args) => request("GET", "/provisioning/instances/{id}", { hasBody: false }, args),
|
|
706
|
+
// GET /provisioning/instances/{id}/core-upgrade — rank: archon — GET /provisioning/instances/:id/core-upgrade
|
|
707
|
+
getProvisioningInstancesIdCoreUpgrade: (args) => request("GET", "/provisioning/instances/{id}/core-upgrade", { hasBody: false }, args),
|
|
708
|
+
// POST /provisioning/instances/{id}/core-upgrade — rank: archon — POST /provisioning/instances/:id/core-upgrade
|
|
709
|
+
postProvisioningInstancesIdCoreUpgrade: (args) => request("POST", "/provisioning/instances/{id}/core-upgrade", { hasBody: true }, args),
|
|
704
710
|
// PATCH /provisioning/instances/{id}/detail — rank: any-builder — PATCH /provisioning/instances/:id/detail
|
|
705
711
|
patchProvisioningInstancesIdDetail: (args) => request("PATCH", "/provisioning/instances/{id}/detail", { hasBody: true }, args),
|
|
706
712
|
// POST /provisioning/instances/{id}/disconnect — rank: any-builder — POST /provisioning/instances/:id/disconnect
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# 0293 — The owner's deploy door is an INTENT the control plane drains, not a web tier with a shell
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-09-16
|
|
5
|
+
- **Tasks:** [#1003159](https://cloudbongos.com/builders#/task/1003159) (goal 1000090) — *"The owner has no path to deploy"*
|
|
6
|
+
- **Related:** 0016 (authority is resolved server-side, never from a local file), 0043 (the control plane is a separate privilege domain), 0128 (how the runner escalates), 0130 (the runner drives remote boxes over ssh), 0136 (channel policy), 0137 / 0161 (the three publish gates), 0111 (the provisioning intent queue this reuses)
|
|
7
|
+
- **Supersedes in practice:** the manual leg of [#1003156](https://cloudbongos.com/builders#/task/1003156) — that bump stays valid, it just stops being the *only* way
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
The owner, 2026-08-22, verbatim: **"I don't think I can make anything live."** The same sentence arrived again on 2026-09-16, phrased *"this is above my paygrade."*
|
|
12
|
+
|
|
13
|
+
Moving an instance's core pin is gate 3 of the release pipeline and the **only** act that makes shipped work visible to users. Today it is reachable from exactly one place: a shell on the control-plane box, holding an ssh key, running
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
bongos upgrade --registry --to <ver> --service <unit> --health-url <url> --commit-pin
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
There is no route and no hall control. So a release reaching users depends on one person being at one machine. And an agent cannot close the loop either — the permission classifier blocks an agent from a mutating `sudo -u lars` over ssh, by design.
|
|
20
|
+
|
|
21
|
+
That is a structural mismatch with the platform's own premise. Cloud Bongos is AI-first: agents write the code, the human owner holds the hard gates. **Deploy is the owner's gate, and it is the one gate with no instrument.**
|
|
22
|
+
|
|
23
|
+
The concrete cost, measured the day this was written: `cloudbongos.com` served core 1.19.754 while 1.19.757 — carrying a shipped fix to the claimable-task feed — sat published and unreachable. Four releases of shipped work that nobody could see, and no one present could act.
|
|
24
|
+
|
|
25
|
+
## Decision
|
|
26
|
+
|
|
27
|
+
### D1 — The door is an INTENT. The web tier never gets a shell.
|
|
28
|
+
|
|
29
|
+
The hall writes a row to `provisioning_intents`; the control-plane timer
|
|
30
|
+
(`provision-intent-runner.timer` → `provision.js run-intents --apply`) drains it and does
|
|
31
|
+
the privileged work. The web process gains no sudo, no ssh key, and no new capability
|
|
32
|
+
whatsoever — it gains the ability to *ask*.
|
|
33
|
+
|
|
34
|
+
This is not a new mechanism. It is the seam ADR 0111 already built and that `provision`,
|
|
35
|
+
`teardown`, `domain-attach`, `settings-apply` and `restart` already ride. `enqueueIntent`
|
|
36
|
+
already carries `requested_by`, so the actor requirement is satisfied by the existing
|
|
37
|
+
shape rather than bolted on.
|
|
38
|
+
|
|
39
|
+
**Rejected: giving the web tier sudo.** ADR 0043 makes the control plane a separate
|
|
40
|
+
privilege domain on purpose. An HTTP-reachable process that can restart services is the
|
|
41
|
+
single highest-value target in the system; the whole point of the split is that
|
|
42
|
+
compromising the web tier must not hand over the box. The intent queue crosses that
|
|
43
|
+
boundary through one narrow, auditable, append-only row.
|
|
44
|
+
|
|
45
|
+
**Rejected: a new bespoke queue for upgrades.** A second queue is a second set of
|
|
46
|
+
claim/settle/retry semantics to get right, and the failure modes of this one are already
|
|
47
|
+
understood in production.
|
|
48
|
+
|
|
49
|
+
### D2 — The control plane is enrolled as a self-row, and that row is NOT teardownable
|
|
50
|
+
|
|
51
|
+
`provisioning_intents.instance_id` is `NOT NULL REFERENCES provisioning_instances(id)`.
|
|
52
|
+
To ride the queue at all, the control plane needs a row. It does not have one today — the
|
|
53
|
+
table holds only tenant projects.
|
|
54
|
+
|
|
55
|
+
So the control plane is enrolled, with `hosting_shape='control-plane'`: a shape that
|
|
56
|
+
exists to be **excluded**, not to be operated on. The non-negotiable that comes with it:
|
|
57
|
+
|
|
58
|
+
> **Every destructive intent action MUST refuse a `control-plane` row.** `teardown` on the
|
|
59
|
+
> self-row would destroy the platform from inside the platform's own UI.
|
|
60
|
+
|
|
61
|
+
This is the load-bearing risk of D2 and the reason the shape is a distinct value rather
|
|
62
|
+
than reusing `standalone`. A test asserts the refusal for every action in `INTENT_ACTIONS`
|
|
63
|
+
except the ones explicitly allowed on the self-row (`core-upgrade`, `restart`).
|
|
64
|
+
|
|
65
|
+
**Rejected: a nullable `instance_id` meaning "the control plane".** A null that means
|
|
66
|
+
something is the kind of implicit encoding that reads as a bug at every later call site,
|
|
67
|
+
and it would silently widen every existing query that assumes the FK holds.
|
|
68
|
+
|
|
69
|
+
### D3 — The target version comes from the registry, never from the request
|
|
70
|
+
|
|
71
|
+
The request names a version; the runner refuses any version that is not **published** and
|
|
72
|
+
not permitted by the channel policy (`update-channel.js`). Free text never reaches
|
|
73
|
+
`bongos upgrade`.
|
|
74
|
+
|
|
75
|
+
This is not theoretical tidiness. The release lane mints a git tag **before** the npm
|
|
76
|
+
publish completes — measured at 8–13 minutes on 2026-09-16, against ~100 seconds recorded
|
|
77
|
+
earlier (learnings 1000263, 1000266). A door that accepted "whatever main says" would
|
|
78
|
+
routinely queue a version that does not exist yet and fail with `npm error notarget`. The
|
|
79
|
+
registry is the only honest source of "can this actually be taken".
|
|
80
|
+
|
|
81
|
+
### D4 — Two-step: preview, then confirm. The owner's choice, 2026-09-16.
|
|
82
|
+
|
|
83
|
+
The control shows what a bump would move — live version → target, and what sits between
|
|
84
|
+
them — and fires only on an explicit second act.
|
|
85
|
+
|
|
86
|
+
Auto-rollback (task 2149) already guards the *bad release* case. This guards the different
|
|
87
|
+
one: the **wrong button**. A single click that restarts the live service is recoverable but
|
|
88
|
+
not free, and the owner asked for the confirmation. Rejected: typing the version to arm it
|
|
89
|
+
(strongest, but friction on an action that should be routine once trusted).
|
|
90
|
+
|
|
91
|
+
### D5 — Archon-gated server-side, ledgered with an actor
|
|
92
|
+
|
|
93
|
+
`requireRank`-equivalent on the route, resolved server-side per request with no caching
|
|
94
|
+
(ADR 0016). Nothing about this is reachable by editing a local file.
|
|
95
|
+
|
|
96
|
+
`core_upgrades` gains an actor column. The ledger records **who asked**, not merely what
|
|
97
|
+
moved — a privileged action with an unattributed row is not acceptable, and today the table
|
|
98
|
+
carries only a free-text `note`.
|
|
99
|
+
|
|
100
|
+
### D6 — The truth read back is the BOX's, not the tool's
|
|
101
|
+
|
|
102
|
+
Success is `curl http://127.0.0.1:<port>/version` **on the box**, matching the requested
|
|
103
|
+
version — the DONE-WHEN task 1003156 already established. The apex sits behind pre-launch
|
|
104
|
+
basic_auth and its HTML rides a CDN, so an apex read can report a stale or gated answer
|
|
105
|
+
with total confidence. The health gate and auto-rollback inside `bongos upgrade` are
|
|
106
|
+
reused unchanged; this decision is only about what the *control* believes and displays.
|
|
107
|
+
|
|
108
|
+
## Consequences
|
|
109
|
+
|
|
110
|
+
- The owner can move the pin from the hall, and read back the version the box actually
|
|
111
|
+
serves, without a shell or an ssh key. That is the whole point.
|
|
112
|
+
- **Tenant instances are NOT in this change.** The queue supports them and the follow-up is
|
|
113
|
+
small, but the control plane is where the pain is and mixing the two doubles the surface
|
|
114
|
+
of a first cut on the most privileged action in the system. Filed separately.
|
|
115
|
+
- The runner upgrades the box it runs on. This is safe for a reason worth stating rather
|
|
116
|
+
than assuming: the runner and the web service are **different systemd units**, so
|
|
117
|
+
restarting the web service does not kill the run in progress. The running process also
|
|
118
|
+
keeps the code it already loaded, so an upgrade that rewrites the runner's own files
|
|
119
|
+
takes effect on the *next* tick, never mid-run.
|
|
120
|
+
- Re-running a settled-but-unconfirmed intent is safe: `bongos upgrade`'s same-version
|
|
121
|
+
guard makes the leg a no-op when the box already serves the target.
|
|
122
|
+
- **What this does not do:** it does not make deploys automatic. ADR 0137's three gates
|
|
123
|
+
stand — land, release, deploy — and this only gives the third gate a handle. An owner who
|
|
124
|
+
never presses it ships nothing, exactly as today.
|