@bongos/core 1.19.936 → 1.19.938
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 +69 -44
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +2 -0
- package/clients/bongos-client/index.cjs +2 -0
- package/clients/bongos-client/index.d.ts +3 -0
- package/clients/bongos-client/index.mjs +2 -0
- package/docs/adr/0281-an-instance-identity-is-its-own-unix-account-and-pg-role.md +2 -0
- package/docs/api/openapi.json +91 -2
- package/docs/api-reference.md +3 -2
- package/docs/module-api-changelog.md +4 -0
- package/docs/recipes/self-host.md +1 -1
- package/modules/government/board.js +31 -0
- package/modules/government/db.js +33 -0
- package/modules/government/migrations/government_018_passed_items_index.sql +31 -0
- package/modules/government/routes/government.js +7 -0
- package/modules/hall-ui/public/deploy.js +1 -1
- package/modules/ideas/inbox.js +11 -0
- package/modules/ideas/migrations/ideas_010_goal_ratification.sql +103 -0
- package/modules/ideas/module.json +1 -0
- package/modules/ideas/ratify.js +288 -1
- package/modules/ideas/routes/ratify-goal.js +163 -0
- package/modules/ideas/templates.js +16 -4
- package/modules/lifecycle/goal-from-idea.js +131 -0
- package/modules/lifecycle/lifecycle.js +14 -0
- package/modules/provisioning/core-upgrade.js +1 -1
- package/modules/provisioning/routes/core-upgrade.js +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/audit-authorship.sh +33 -0
- package/scripts/gds/db-backup-nightly.sh +1 -1
- package/scripts/gds/instance-apex.js +11 -1
- package/scripts/gds/provision-config.js +3 -2
- package/scripts/gds/provision-core-upgrade.js +7 -7
- package/scripts/gds/provision-process.js +2 -2
- package/scripts/gds/provision-repo.js +35 -10
- package/scripts/gds/provision-units.js +3 -3
- package/scripts/gds/provision.js +6 -3
- package/src/module-api.js +1 -1
- package/tests/core_upgrade_runner.mjs +10 -7
- package/tests/government_seed.mjs +1 -0
- package/tests/idea_goal_ratification.mjs +553 -0
- package/tests/provision.mjs +44 -7
- package/tests/provision_account_identity.mjs +16 -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.938",
|
|
6
|
+
"core_contract": "1.19.938",
|
|
7
|
+
"source_commit": "8dd584dae92b44faa1bbed125048a59789ad8535",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-21T18:26:08.361Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 511,
|
|
13
13
|
"agent_docs_stubbed": 26,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2334,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2871,
|
|
20
|
+
"tree_sha256": "fbde3b87a4c049acf1a6d2075d3bf614fd92e74ffdf94d5cb9f96ac8d80439f5",
|
|
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": "ce2ce4bd71f9ea04c46e8c1f4e7173a941458162be0e3b32759aa0c5f9d97297"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
354
354
|
"mode": "0000644",
|
|
355
|
-
"sha256": "
|
|
355
|
+
"sha256": "47d36e3b0c228706df44c4a91d5b22bd6005a345c95d8ddda2650bf9b8170242"
|
|
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": "5368fb77dc06a2ea22ab2db87ec3ac89a9857388bc12117c31dc327e598f63a1"
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
"path": "clients/bongos-client/index.d.ts",
|
|
369
369
|
"mode": "0000644",
|
|
370
|
-
"sha256": "
|
|
370
|
+
"sha256": "5d076131337103c34e8b0e46cd613ae898dfa9edeffa6104617f046eb4f651b0"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.mjs",
|
|
374
374
|
"mode": "0000644",
|
|
375
|
-
"sha256": "
|
|
375
|
+
"sha256": "2e7178e059cb520cf0509a46151624bb00160cc2cd263582015980576b98482d"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/package.json",
|
|
@@ -1897,7 +1897,7 @@
|
|
|
1897
1897
|
{
|
|
1898
1898
|
"path": "docs/adr/0281-an-instance-identity-is-its-own-unix-account-and-pg-role.md",
|
|
1899
1899
|
"mode": "0000644",
|
|
1900
|
-
"sha256": "
|
|
1900
|
+
"sha256": "d36d2333c07107c09d7431b4f49ceaafe51231dd4646dbb13bb081d0b2b63a33"
|
|
1901
1901
|
},
|
|
1902
1902
|
{
|
|
1903
1903
|
"path": "docs/adr/0282-a-module-that-spends-for-its-callers-declares-a-payer-and-the-core-refuses-it-without-one.md",
|
|
@@ -2112,12 +2112,12 @@
|
|
|
2112
2112
|
{
|
|
2113
2113
|
"path": "docs/api-reference.md",
|
|
2114
2114
|
"mode": "0000644",
|
|
2115
|
-
"sha256": "
|
|
2115
|
+
"sha256": "d72a950df3fa37b7834a167d60e621434a0d0806f1a3f298b079d0538254be50"
|
|
2116
2116
|
},
|
|
2117
2117
|
{
|
|
2118
2118
|
"path": "docs/api/openapi.json",
|
|
2119
2119
|
"mode": "0000644",
|
|
2120
|
-
"sha256": "
|
|
2120
|
+
"sha256": "f89f852f211ffee8ccc13f4331fc867837eae6b6ac2a0a24292abc4537aa9591"
|
|
2121
2121
|
},
|
|
2122
2122
|
{
|
|
2123
2123
|
"path": "docs/architecture.md",
|
|
@@ -2677,7 +2677,7 @@
|
|
|
2677
2677
|
{
|
|
2678
2678
|
"path": "docs/module-api-changelog.md",
|
|
2679
2679
|
"mode": "0000644",
|
|
2680
|
-
"sha256": "
|
|
2680
|
+
"sha256": "91500af9d7c272807c97d945b549ae8cbd0c6f30904e9c90b55c1a4c990451c3"
|
|
2681
2681
|
},
|
|
2682
2682
|
{
|
|
2683
2683
|
"path": "docs/modules-contract.md",
|
|
@@ -2897,7 +2897,7 @@
|
|
|
2897
2897
|
{
|
|
2898
2898
|
"path": "docs/recipes/self-host.md",
|
|
2899
2899
|
"mode": "0000644",
|
|
2900
|
-
"sha256": "
|
|
2900
|
+
"sha256": "48dbce2966702987cbb9de6639ceb1e63ab3c7166e759bf93df06bd9f5875a88"
|
|
2901
2901
|
},
|
|
2902
2902
|
{
|
|
2903
2903
|
"path": "docs/recipes/server-bring-up.md",
|
|
@@ -4317,7 +4317,7 @@
|
|
|
4317
4317
|
{
|
|
4318
4318
|
"path": "modules/government/board.js",
|
|
4319
4319
|
"mode": "0000644",
|
|
4320
|
-
"sha256": "
|
|
4320
|
+
"sha256": "cce76edcf96a8ece8bb3321f5edb505e0e93acae96babe7169da607fd1888f3b"
|
|
4321
4321
|
},
|
|
4322
4322
|
{
|
|
4323
4323
|
"path": "modules/government/catalog.js",
|
|
@@ -4332,7 +4332,7 @@
|
|
|
4332
4332
|
{
|
|
4333
4333
|
"path": "modules/government/db.js",
|
|
4334
4334
|
"mode": "0000644",
|
|
4335
|
-
"sha256": "
|
|
4335
|
+
"sha256": "dc56a5747bb5275ba372dc297cce585219c649984778a924ce22bab7249889a8"
|
|
4336
4336
|
},
|
|
4337
4337
|
{
|
|
4338
4338
|
"path": "modules/government/membership-predicate.js",
|
|
@@ -4459,6 +4459,11 @@
|
|
|
4459
4459
|
"mode": "0000644",
|
|
4460
4460
|
"sha256": "7603087ac279d05eb2c69527557035c72c3bbb1510c16fdb2230b2e377f0df74"
|
|
4461
4461
|
},
|
|
4462
|
+
{
|
|
4463
|
+
"path": "modules/government/migrations/government_018_passed_items_index.sql",
|
|
4464
|
+
"mode": "0000644",
|
|
4465
|
+
"sha256": "c85b1615c66ae68b630c727faa6ab56358a35dea37a0c2da507d11d3909176fd"
|
|
4466
|
+
},
|
|
4462
4467
|
{
|
|
4463
4468
|
"path": "modules/government/module.json",
|
|
4464
4469
|
"mode": "0000644",
|
|
@@ -4492,7 +4497,7 @@
|
|
|
4492
4497
|
{
|
|
4493
4498
|
"path": "modules/government/routes/government.js",
|
|
4494
4499
|
"mode": "0000644",
|
|
4495
|
-
"sha256": "
|
|
4500
|
+
"sha256": "40c2cd95481690b88a065afad62636ae732845a5dc81f082ebd623f7fb060de4"
|
|
4496
4501
|
},
|
|
4497
4502
|
{
|
|
4498
4503
|
"path": "modules/government/routes/rank-sync.js",
|
|
@@ -4802,7 +4807,7 @@
|
|
|
4802
4807
|
{
|
|
4803
4808
|
"path": "modules/hall-ui/public/deploy.js",
|
|
4804
4809
|
"mode": "0000644",
|
|
4805
|
-
"sha256": "
|
|
4810
|
+
"sha256": "de280baf7432be56c67a65681a6e5d5af7146464271dec547d5bd6d45be2f37a"
|
|
4806
4811
|
},
|
|
4807
4812
|
{
|
|
4808
4813
|
"path": "modules/hall-ui/public/diagram-viewer.css",
|
|
@@ -5462,7 +5467,7 @@
|
|
|
5462
5467
|
{
|
|
5463
5468
|
"path": "modules/ideas/inbox.js",
|
|
5464
5469
|
"mode": "0000644",
|
|
5465
|
-
"sha256": "
|
|
5470
|
+
"sha256": "da8ac68f553980fef162b7d9fbc85481fd60cd885954cf316894a132f845ef6c"
|
|
5466
5471
|
},
|
|
5467
5472
|
{
|
|
5468
5473
|
"path": "modules/ideas/landing-preview.js",
|
|
@@ -5514,10 +5519,15 @@
|
|
|
5514
5519
|
"mode": "0000644",
|
|
5515
5520
|
"sha256": "53c66f25e685931e73334d6b904f7d3c0f3838a15f160bd5387864ef27836aa7"
|
|
5516
5521
|
},
|
|
5522
|
+
{
|
|
5523
|
+
"path": "modules/ideas/migrations/ideas_010_goal_ratification.sql",
|
|
5524
|
+
"mode": "0000644",
|
|
5525
|
+
"sha256": "7ba109e2f5415daec8b0767ecfabb110fc02d8944f4e6cc0664ca2d205e05480"
|
|
5526
|
+
},
|
|
5517
5527
|
{
|
|
5518
5528
|
"path": "modules/ideas/module.json",
|
|
5519
5529
|
"mode": "0000644",
|
|
5520
|
-
"sha256": "
|
|
5530
|
+
"sha256": "a869f9dec25e003006a495b3fbee45ac99c80b306cec7f16808693d70133e717"
|
|
5521
5531
|
},
|
|
5522
5532
|
{
|
|
5523
5533
|
"path": "modules/ideas/pollers/descent-writer.js",
|
|
@@ -5532,7 +5542,7 @@
|
|
|
5532
5542
|
{
|
|
5533
5543
|
"path": "modules/ideas/ratify.js",
|
|
5534
5544
|
"mode": "0000644",
|
|
5535
|
-
"sha256": "
|
|
5545
|
+
"sha256": "05789550a8e6345f27ac78ccef3ac93a7837e99a6b067871189b1e983b4d374f"
|
|
5536
5546
|
},
|
|
5537
5547
|
{
|
|
5538
5548
|
"path": "modules/ideas/reads.js",
|
|
@@ -5549,6 +5559,11 @@
|
|
|
5549
5559
|
"mode": "0000644",
|
|
5550
5560
|
"sha256": "da91fe0641109b3b8adc0cca44480337f15cbd481b590f42d022e9eaa78654b7"
|
|
5551
5561
|
},
|
|
5562
|
+
{
|
|
5563
|
+
"path": "modules/ideas/routes/ratify-goal.js",
|
|
5564
|
+
"mode": "0000644",
|
|
5565
|
+
"sha256": "92c10dbffef40038dac64ea646372e3fcd1c70c5d2bda1d731ddbdcd508d9181"
|
|
5566
|
+
},
|
|
5552
5567
|
{
|
|
5553
5568
|
"path": "modules/ideas/routing.js",
|
|
5554
5569
|
"mode": "0000644",
|
|
@@ -5562,7 +5577,7 @@
|
|
|
5562
5577
|
{
|
|
5563
5578
|
"path": "modules/ideas/templates.js",
|
|
5564
5579
|
"mode": "0000644",
|
|
5565
|
-
"sha256": "
|
|
5580
|
+
"sha256": "345cbf4d87be780ee98c33042d2ec914b40bceeab6122a67a00a3852580b681b"
|
|
5566
5581
|
},
|
|
5567
5582
|
{
|
|
5568
5583
|
"path": "modules/ideas/trail-descent.js",
|
|
@@ -5769,6 +5784,11 @@
|
|
|
5769
5784
|
"mode": "0000644",
|
|
5770
5785
|
"sha256": "c22a0782ddf7a93deb40f700a2afab15a313925647bbdf424db777da5aa29aa1"
|
|
5771
5786
|
},
|
|
5787
|
+
{
|
|
5788
|
+
"path": "modules/lifecycle/goal-from-idea.js",
|
|
5789
|
+
"mode": "0000644",
|
|
5790
|
+
"sha256": "21d091ef596bc67f08a4f0785d17eaddf47d2da702219ccd5af6164413944428"
|
|
5791
|
+
},
|
|
5772
5792
|
{
|
|
5773
5793
|
"path": "modules/lifecycle/goal-rollup.js",
|
|
5774
5794
|
"mode": "0000644",
|
|
@@ -5802,7 +5822,7 @@
|
|
|
5802
5822
|
{
|
|
5803
5823
|
"path": "modules/lifecycle/lifecycle.js",
|
|
5804
5824
|
"mode": "0000644",
|
|
5805
|
-
"sha256": "
|
|
5825
|
+
"sha256": "74e09c7d1a978da826f99cff9e863b1051ab19a6437ae398a1e83ec8293e794f"
|
|
5806
5826
|
},
|
|
5807
5827
|
{
|
|
5808
5828
|
"path": "modules/lifecycle/merge-lock.js",
|
|
@@ -6477,7 +6497,7 @@
|
|
|
6477
6497
|
{
|
|
6478
6498
|
"path": "modules/provisioning/core-upgrade.js",
|
|
6479
6499
|
"mode": "0000644",
|
|
6480
|
-
"sha256": "
|
|
6500
|
+
"sha256": "f5556a75b34977d0c46d4c9cf95383e4f57088c137e1c29c5b87211a5f159451"
|
|
6481
6501
|
},
|
|
6482
6502
|
{
|
|
6483
6503
|
"path": "modules/provisioning/credential-preflight.js",
|
|
@@ -6647,7 +6667,7 @@
|
|
|
6647
6667
|
{
|
|
6648
6668
|
"path": "modules/provisioning/routes/core-upgrade.js",
|
|
6649
6669
|
"mode": "0000644",
|
|
6650
|
-
"sha256": "
|
|
6670
|
+
"sha256": "8ceb0707b3bfe16e308cdf3034b034bcea8b5e266bcfa1d0e47bd53a61392990"
|
|
6651
6671
|
},
|
|
6652
6672
|
{
|
|
6653
6673
|
"path": "modules/provisioning/routes/disconnect.js",
|
|
@@ -7982,12 +8002,12 @@
|
|
|
7982
8002
|
{
|
|
7983
8003
|
"path": "package-lock.json",
|
|
7984
8004
|
"mode": "0000644",
|
|
7985
|
-
"sha256": "
|
|
8005
|
+
"sha256": "5deecad0d887fedac8dedc460fe2ad83990dbd7955fde8cc46e5a88f550f45ba"
|
|
7986
8006
|
},
|
|
7987
8007
|
{
|
|
7988
8008
|
"path": "package.json",
|
|
7989
8009
|
"mode": "0000644",
|
|
7990
|
-
"sha256": "
|
|
8010
|
+
"sha256": "59e6e64dcbb6313c3d7db30d0a5466958207792de738adc0c47151a3f5eed45b"
|
|
7991
8011
|
},
|
|
7992
8012
|
{
|
|
7993
8013
|
"path": "public-docs/index.html",
|
|
@@ -8117,7 +8137,7 @@
|
|
|
8117
8137
|
{
|
|
8118
8138
|
"path": "scripts/gds/audit-authorship.sh",
|
|
8119
8139
|
"mode": "0000644",
|
|
8120
|
-
"sha256": "
|
|
8140
|
+
"sha256": "f3aab6f76580d418c7920ef54a37c9577c057f220f43720a8f151487e3ef2841"
|
|
8121
8141
|
},
|
|
8122
8142
|
{
|
|
8123
8143
|
"path": "scripts/gds/audit-deps.js",
|
|
@@ -8407,7 +8427,7 @@
|
|
|
8407
8427
|
{
|
|
8408
8428
|
"path": "scripts/gds/db-backup-nightly.sh",
|
|
8409
8429
|
"mode": "0000644",
|
|
8410
|
-
"sha256": "
|
|
8430
|
+
"sha256": "f021271073004e3c80a89e82626dde9f2b38ce9760b7bbadb51190f97a648f5d"
|
|
8411
8431
|
},
|
|
8412
8432
|
{
|
|
8413
8433
|
"path": "scripts/gds/db-backup-offsite.sh",
|
|
@@ -8722,7 +8742,7 @@
|
|
|
8722
8742
|
{
|
|
8723
8743
|
"path": "scripts/gds/instance-apex.js",
|
|
8724
8744
|
"mode": "0000644",
|
|
8725
|
-
"sha256": "
|
|
8745
|
+
"sha256": "7b2402543c3b1eadbafc14907e6dc6689b434ac65fb9c709115dd81a92eb13eb"
|
|
8726
8746
|
},
|
|
8727
8747
|
{
|
|
8728
8748
|
"path": "scripts/gds/key-card.js",
|
|
@@ -8927,12 +8947,12 @@
|
|
|
8927
8947
|
{
|
|
8928
8948
|
"path": "scripts/gds/provision-config.js",
|
|
8929
8949
|
"mode": "0000644",
|
|
8930
|
-
"sha256": "
|
|
8950
|
+
"sha256": "6905238b164d1fbd47abbc1f495e6f1bf2de58ed26545853f8aa92f199dc78e5"
|
|
8931
8951
|
},
|
|
8932
8952
|
{
|
|
8933
8953
|
"path": "scripts/gds/provision-core-upgrade.js",
|
|
8934
8954
|
"mode": "0000644",
|
|
8935
|
-
"sha256": "
|
|
8955
|
+
"sha256": "4a84f48518a6427e95bf23e273865b6b2753489b40737b9256191fd2a65562e1"
|
|
8936
8956
|
},
|
|
8937
8957
|
{
|
|
8938
8958
|
"path": "scripts/gds/provision-disconnect.js",
|
|
@@ -8947,7 +8967,7 @@
|
|
|
8947
8967
|
{
|
|
8948
8968
|
"path": "scripts/gds/provision-process.js",
|
|
8949
8969
|
"mode": "0000644",
|
|
8950
|
-
"sha256": "
|
|
8970
|
+
"sha256": "34f24f674b7be4607f598d6f968e3e3c1f15cb9175361956b0808a1df1ac723c"
|
|
8951
8971
|
},
|
|
8952
8972
|
{
|
|
8953
8973
|
"path": "scripts/gds/provision-repo-auth.js",
|
|
@@ -8957,7 +8977,7 @@
|
|
|
8957
8977
|
{
|
|
8958
8978
|
"path": "scripts/gds/provision-repo.js",
|
|
8959
8979
|
"mode": "0000644",
|
|
8960
|
-
"sha256": "
|
|
8980
|
+
"sha256": "ab6b240d93920bb81bf096aff9553c478a2c3e8c0c4926b81c468e99aee89d67"
|
|
8961
8981
|
},
|
|
8962
8982
|
{
|
|
8963
8983
|
"path": "scripts/gds/provision-teardown.js",
|
|
@@ -8967,12 +8987,12 @@
|
|
|
8967
8987
|
{
|
|
8968
8988
|
"path": "scripts/gds/provision-units.js",
|
|
8969
8989
|
"mode": "0000644",
|
|
8970
|
-
"sha256": "
|
|
8990
|
+
"sha256": "f8c642838cbae5dc096f35870bda10f3da342e1cd93b0713e4528bfefe1819a8"
|
|
8971
8991
|
},
|
|
8972
8992
|
{
|
|
8973
8993
|
"path": "scripts/gds/provision.js",
|
|
8974
8994
|
"mode": "0000644",
|
|
8975
|
-
"sha256": "
|
|
8995
|
+
"sha256": "e879686d5fcadfd32eb1dfc4e1640fc229cc4f0afc78615681964484e8457c1f"
|
|
8976
8996
|
},
|
|
8977
8997
|
{
|
|
8978
8998
|
"path": "scripts/gds/publish-credential-check.js",
|
|
@@ -9987,7 +10007,7 @@
|
|
|
9987
10007
|
{
|
|
9988
10008
|
"path": "src/module-api.js",
|
|
9989
10009
|
"mode": "0000644",
|
|
9990
|
-
"sha256": "
|
|
10010
|
+
"sha256": "211ea75dbda9c058e7945f56db78eafcfeb5e0d9ffece439fcd0ca3a6adc51d2"
|
|
9991
10011
|
},
|
|
9992
10012
|
{
|
|
9993
10013
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10902,7 +10922,7 @@
|
|
|
10902
10922
|
{
|
|
10903
10923
|
"path": "tests/core_upgrade_runner.mjs",
|
|
10904
10924
|
"mode": "0000644",
|
|
10905
|
-
"sha256": "
|
|
10925
|
+
"sha256": "f8bc5b5329c4de27b41a9172e6b5023c4854d864f532aac3ed062e0d35633f00"
|
|
10906
10926
|
},
|
|
10907
10927
|
{
|
|
10908
10928
|
"path": "tests/cosmos_token_contrast.mjs",
|
|
@@ -11687,7 +11707,7 @@
|
|
|
11687
11707
|
{
|
|
11688
11708
|
"path": "tests/government_seed.mjs",
|
|
11689
11709
|
"mode": "0000644",
|
|
11690
|
-
"sha256": "
|
|
11710
|
+
"sha256": "e165fe5c67ee4e80c58f489514ac77ba34e51984dabd2329ecdd70052b81a9cc"
|
|
11691
11711
|
},
|
|
11692
11712
|
{
|
|
11693
11713
|
"path": "tests/government_session_scope.mjs",
|
|
@@ -12064,6 +12084,11 @@
|
|
|
12064
12084
|
"mode": "0000644",
|
|
12065
12085
|
"sha256": "63afe2afd59ff64e290234a0cc8d33a0f77b784d8c10c2d7147fe2ab3c114cd1"
|
|
12066
12086
|
},
|
|
12087
|
+
{
|
|
12088
|
+
"path": "tests/idea_goal_ratification.mjs",
|
|
12089
|
+
"mode": "0000644",
|
|
12090
|
+
"sha256": "3c624db8e11ae02f503d19c6b2556b286d3ca59229daacd6ea2319782530c84f"
|
|
12091
|
+
},
|
|
12067
12092
|
{
|
|
12068
12093
|
"path": "tests/idea_governance_pass_credit.mjs",
|
|
12069
12094
|
"mode": "0000644",
|
|
@@ -13012,12 +13037,12 @@
|
|
|
13012
13037
|
{
|
|
13013
13038
|
"path": "tests/provision.mjs",
|
|
13014
13039
|
"mode": "0000644",
|
|
13015
|
-
"sha256": "
|
|
13040
|
+
"sha256": "b6558cb094a2d38c837d3e5028573c14e5c55c832555b382c1d1135a55b5c6b5"
|
|
13016
13041
|
},
|
|
13017
13042
|
{
|
|
13018
13043
|
"path": "tests/provision_account_identity.mjs",
|
|
13019
13044
|
"mode": "0000644",
|
|
13020
|
-
"sha256": "
|
|
13045
|
+
"sha256": "9f62eea1b43a478334a83df52d0e81a3b3b67f4c4eea54680d2d8db3b25ee513"
|
|
13021
13046
|
},
|
|
13022
13047
|
{
|
|
13023
13048
|
"path": "tests/provision_caddy_wiring.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
|
+
- 404 operations across 61 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -511,6 +511,8 @@ function createClient(opts = {}) {
|
|
|
511
511
|
postInboxIdDevelop: (args) => request("POST", "/inbox/{id}/develop", { hasBody: true }, args),
|
|
512
512
|
// POST /inbox/{id}/ratify — rank: metic+archon — POST /inbox/:id/ratify
|
|
513
513
|
postInboxIdRatify: (args) => request("POST", "/inbox/{id}/ratify", { hasBody: true }, args),
|
|
514
|
+
// POST /inbox/{id}/ratify-goal — rank: metic+archon — POST /inbox/:id/ratify-goal
|
|
515
|
+
postInboxIdRatifyGoal: (args) => request("POST", "/inbox/{id}/ratify-goal", { hasBody: true }, args),
|
|
514
516
|
// POST /inbox/{id}/resubmit — rank: any-builder — POST /inbox/:id/resubmit
|
|
515
517
|
postInboxIdResubmit: (args) => request("POST", "/inbox/{id}/resubmit", { hasBody: true }, args),
|
|
516
518
|
// DELETE /inbox/{id}/spark — rank: any-builder — DELETE /inbox/:id/spark
|
|
@@ -510,6 +510,8 @@ function createClient(opts = {}) {
|
|
|
510
510
|
postInboxIdDevelop: (args) => request("POST", "/inbox/{id}/develop", { hasBody: true }, args),
|
|
511
511
|
// POST /inbox/{id}/ratify — rank: metic+archon — POST /inbox/:id/ratify
|
|
512
512
|
postInboxIdRatify: (args) => request("POST", "/inbox/{id}/ratify", { hasBody: true }, args),
|
|
513
|
+
// POST /inbox/{id}/ratify-goal — rank: metic+archon — POST /inbox/:id/ratify-goal
|
|
514
|
+
postInboxIdRatifyGoal: (args) => request("POST", "/inbox/{id}/ratify-goal", { hasBody: true }, args),
|
|
513
515
|
// POST /inbox/{id}/resubmit — rank: any-builder — POST /inbox/:id/resubmit
|
|
514
516
|
postInboxIdResubmit: (args) => request("POST", "/inbox/{id}/resubmit", { hasBody: true }, args),
|
|
515
517
|
// DELETE /inbox/{id}/spark — rank: any-builder — DELETE /inbox/:id/spark
|
|
@@ -323,6 +323,7 @@ export interface PostGovernmentRanksResponse { rank: unknown }
|
|
|
323
323
|
export interface PostHelpRequestsRequest { needs_craft?: string; needs_builder_id?: number; what_is_stuck: string; task_id?: number; goal_id?: number }
|
|
324
324
|
export interface PostHelpRequestsResponse { ok: boolean; help_request: unknown }
|
|
325
325
|
export interface PostInboxIdDevelopRequest { field_values: Record<string, unknown>; template_key?: string; recommendation?: string }
|
|
326
|
+
export interface PostInboxIdRatifyGoalRequest { target_version: string; scope_modules?: string[]; admit_reason?: string; notes_md?: string }
|
|
326
327
|
export interface PostInboxIdRatifyRequest { notes_md?: string }
|
|
327
328
|
export interface PostInboxIdResubmitRequest { field_values: Record<string, unknown>; template_key?: string; recommendation?: string }
|
|
328
329
|
export interface PostInboxIdSparkResponse { idea: unknown; sparked: boolean; unchanged: boolean }
|
|
@@ -886,6 +887,8 @@ export interface BongosClient {
|
|
|
886
887
|
postInboxIdDevelop(args: RequestArgs & { body: PostInboxIdDevelopRequest }): Promise<ApiResponse>;
|
|
887
888
|
/** POST /inbox/{id}/ratify — rank: metic+archon */
|
|
888
889
|
postInboxIdRatify(args?: RequestArgs & { body?: PostInboxIdRatifyRequest }): Promise<ApiResponse>;
|
|
890
|
+
/** POST /inbox/{id}/ratify-goal — rank: metic+archon */
|
|
891
|
+
postInboxIdRatifyGoal(args: RequestArgs & { body: PostInboxIdRatifyGoalRequest }): Promise<ApiResponse>;
|
|
889
892
|
/** POST /inbox/{id}/resubmit — rank: any-builder */
|
|
890
893
|
postInboxIdResubmit(args: RequestArgs & { body: PostInboxIdResubmitRequest }): Promise<ApiResponse>;
|
|
891
894
|
/** DELETE /inbox/{id}/spark — rank: any-builder */
|
|
@@ -507,6 +507,8 @@ export function createClient(opts = {}) {
|
|
|
507
507
|
postInboxIdDevelop: (args) => request("POST", "/inbox/{id}/develop", { hasBody: true }, args),
|
|
508
508
|
// POST /inbox/{id}/ratify — rank: metic+archon — POST /inbox/:id/ratify
|
|
509
509
|
postInboxIdRatify: (args) => request("POST", "/inbox/{id}/ratify", { hasBody: true }, args),
|
|
510
|
+
// POST /inbox/{id}/ratify-goal — rank: metic+archon — POST /inbox/:id/ratify-goal
|
|
511
|
+
postInboxIdRatifyGoal: (args) => request("POST", "/inbox/{id}/ratify-goal", { hasBody: true }, args),
|
|
510
512
|
// POST /inbox/{id}/resubmit — rank: any-builder — POST /inbox/:id/resubmit
|
|
511
513
|
postInboxIdResubmit: (args) => request("POST", "/inbox/{id}/resubmit", { hasBody: true }, args),
|
|
512
514
|
// DELETE /inbox/{id}/spark — rank: any-builder — DELETE /inbox/:id/spark
|
|
@@ -46,6 +46,8 @@ ADR 0128 anticipated the DB half in its own alternatives: *"Do createdb/migrate
|
|
|
46
46
|
- **`provision.js` sits two lines under the 1,500-line ratchet.** The generators and their full rationale live in `provision-repo.js`; the runner carries the wiring and a pointer. The next change there will have to move something out.
|
|
47
47
|
- **The non-privileged path is unchanged in kind.** The DDL escalates through the same `asPostgres()` helper ADR 0128 introduced, so a runner without `PROVISION_SUDO` renders the same commands without `sudo` — as broken, and no more broken, than it already was for `createdb`.
|
|
48
48
|
|
|
49
|
+
> **Amended by task 1002719 — the app user is resolved, not named.** The account whose group every instance joins (and which owns the backup dir and runs the backup timers) was the founder's own account as a literal, so a standup on any other host died `invalid user` at the backup step. `appUser()` in `provision-repo.js` now answers it: `PROVISION_APP_USER`, else the account the runner runs as — which on a plane *is* the app user, so the founder box resolves exactly what the literal said. **root is refused, not resolved**: instance accounts join this account's group, and group root is not a read grant to hand a tenant. The name is validated before it reaches a shell command or a unit file, and the refusal is a preflight: it fires before the status flip, never midway through a standup. Its **group** is the account's primary group looked up on the box (`$(id -gn …)`; the backup unit carries no `Group=`), never the account name spelled twice — an admin-made service account need not have a group of its own name. `audit-authorship.sh` now flags the founder's unix account in account position (`-o`/`-u`, `User=`, `*user = '…'`) in runtime code, because the GitHub-login grep never could.
|
|
50
|
+
|
|
49
51
|
## Alternatives considered
|
|
50
52
|
|
|
51
53
|
- **A `DATABASE_URL` in `web.env` instead of discrete `PG*` vars.** `pool.js` already prefers it, so it would have needed no pool change at all. Rejected: the socket path has to ride as `?host=…` or a percent-encoded authority, and the exact parse is `pg-connection-string`'s business rather than something the test could pin — trading a stated, assertable identity for a URL whose behavior we would be trusting.
|
package/docs/api/openapi.json
CHANGED
|
@@ -8979,6 +8979,65 @@
|
|
|
8979
8979
|
]
|
|
8980
8980
|
}
|
|
8981
8981
|
},
|
|
8982
|
+
"/inbox/{id}/ratify-goal": {
|
|
8983
|
+
"post": {
|
|
8984
|
+
"operationId": "post_inbox_id_ratify_goal",
|
|
8985
|
+
"tags": [
|
|
8986
|
+
"inbox"
|
|
8987
|
+
],
|
|
8988
|
+
"summary": "POST /inbox/:id/ratify-goal",
|
|
8989
|
+
"description": "BV2.R17 (task 1004096, spec R23, goal 1000095) — ratify a FULL IDEA into a GOAL, atomically: - INSERT goals (title from the idea, description = its five answers) - INSERT done_when_criteria on that goal from the \"what does a successful implementation look like\" answer - UPDATE idea_inbox SET status='promoted', reviewed_at=now() - INSERT ideas_goal_ratifications — who ratified, under which board decision, with the author's own recommendation recorded beside it All of it in one transaction; a partial failure rolls back to an open idea. A SEPARATE ROUTE FROM /ratify, not a mode of it. The two take different subjects (a `criterion-proposal` idea whose body_md is JSON vs. a graded Full Idea whose answers are prose), produce different rows, and differ on whether the board has a say. One route with a discriminator would have to document which half of its own body applies, and a caller who got the discriminator wrong would be told about a field rather than about the act. THE SCOPE AND THE VERSION COME FROM THE REQUEST because nothing else can supply them: no prose answer says which version a goal belongs to or which modules it may touch. THE GATES DO NOT come from the request — the handler passes the caller's LIVE rank through to the lifecycle port, which applies every check POST /goals applies (unknown module key, protected scope → Archon, a building version's goal set closed without a named Archon admission). `idea.ratify`'s floor is Metic, so those gates are load-bearing here rather than ceremonial. Statuses: 400 a bad body / an unratifiable idea / an unmappable template · 403 a rank gate · 404 no such idea · 409 the idea is not open, the board has not passed it, the version will not take a goal, or it is already ratified.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `idea.ratify` (all required).",
|
|
8990
|
+
"x-rank": "metic+archon",
|
|
8991
|
+
"x-source": "modules/ideas/routes/ratify-goal.js",
|
|
8992
|
+
"x-permissions": [
|
|
8993
|
+
"idea.ratify"
|
|
8994
|
+
],
|
|
8995
|
+
"parameters": [
|
|
8996
|
+
{
|
|
8997
|
+
"name": "id",
|
|
8998
|
+
"in": "path",
|
|
8999
|
+
"required": true,
|
|
9000
|
+
"schema": {
|
|
9001
|
+
"type": "string"
|
|
9002
|
+
},
|
|
9003
|
+
"description": "Path parameter `id`."
|
|
9004
|
+
}
|
|
9005
|
+
],
|
|
9006
|
+
"requestBody": {
|
|
9007
|
+
"required": true,
|
|
9008
|
+
"content": {
|
|
9009
|
+
"application/json": {
|
|
9010
|
+
"schema": {
|
|
9011
|
+
"$ref": "#/components/schemas/PostInboxIdRatifyGoalRequest"
|
|
9012
|
+
}
|
|
9013
|
+
}
|
|
9014
|
+
},
|
|
9015
|
+
"x-validated": true
|
|
9016
|
+
},
|
|
9017
|
+
"responses": {
|
|
9018
|
+
"200": {
|
|
9019
|
+
"description": "Success."
|
|
9020
|
+
},
|
|
9021
|
+
"400": {
|
|
9022
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9023
|
+
},
|
|
9024
|
+
"401": {
|
|
9025
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9026
|
+
},
|
|
9027
|
+
"403": {
|
|
9028
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9029
|
+
},
|
|
9030
|
+
"404": {
|
|
9031
|
+
"$ref": "#/components/responses/NotFound"
|
|
9032
|
+
}
|
|
9033
|
+
},
|
|
9034
|
+
"security": [
|
|
9035
|
+
{
|
|
9036
|
+
"builderSession": []
|
|
9037
|
+
}
|
|
9038
|
+
]
|
|
9039
|
+
}
|
|
9040
|
+
},
|
|
8982
9041
|
"/inbox/{id}/resubmit": {
|
|
8983
9042
|
"post": {
|
|
8984
9043
|
"operationId": "post_inbox_id_resubmit",
|
|
@@ -23241,6 +23300,36 @@
|
|
|
23241
23300
|
],
|
|
23242
23301
|
"additionalProperties": false
|
|
23243
23302
|
},
|
|
23303
|
+
"PostInboxIdRatifyGoalRequest": {
|
|
23304
|
+
"type": "object",
|
|
23305
|
+
"properties": {
|
|
23306
|
+
"target_version": {
|
|
23307
|
+
"type": "string",
|
|
23308
|
+
"minLength": 1,
|
|
23309
|
+
"maxLength": 64
|
|
23310
|
+
},
|
|
23311
|
+
"scope_modules": {
|
|
23312
|
+
"type": "array",
|
|
23313
|
+
"items": {
|
|
23314
|
+
"type": "string"
|
|
23315
|
+
},
|
|
23316
|
+
"maxItems": 64
|
|
23317
|
+
},
|
|
23318
|
+
"admit_reason": {
|
|
23319
|
+
"type": "string",
|
|
23320
|
+
"minLength": 8,
|
|
23321
|
+
"maxLength": 500
|
|
23322
|
+
},
|
|
23323
|
+
"notes_md": {
|
|
23324
|
+
"type": "string",
|
|
23325
|
+
"maxLength": 10000
|
|
23326
|
+
}
|
|
23327
|
+
},
|
|
23328
|
+
"required": [
|
|
23329
|
+
"target_version"
|
|
23330
|
+
],
|
|
23331
|
+
"additionalProperties": false
|
|
23332
|
+
},
|
|
23244
23333
|
"PostInboxIdRatifyRequest": {
|
|
23245
23334
|
"type": "object",
|
|
23246
23335
|
"properties": {
|
|
@@ -25564,8 +25653,8 @@
|
|
|
25564
25653
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
25565
25654
|
}
|
|
25566
25655
|
},
|
|
25567
|
-
"x-endpoint-count":
|
|
25568
|
-
"x-schema-count":
|
|
25656
|
+
"x-endpoint-count": 404,
|
|
25657
|
+
"x-schema-count": 443,
|
|
25569
25658
|
"x-undocumented-bodies": 9,
|
|
25570
25659
|
"x-response-schemas": 301,
|
|
25571
25660
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
package/docs/api-reference.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Bongos API reference
|
|
4
4
|
|
|
5
|
-
> **Generated from the live route files** — the route file is authoritative.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 404 endpoints across 66 route files.
|
|
6
6
|
> Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
|
|
7
7
|
|
|
8
8
|
Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
|
|
@@ -337,7 +337,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
337
337
|
| GET | `/api/bongos/help-requests/for-me` | `any-builder` | — | The addressed read — C01's answer to "and fires a notification". |
|
|
338
338
|
| GET | `/api/bongos/help-requests/mine` | `any-builder` | — | your own asks, so you can settle them. |
|
|
339
339
|
|
|
340
|
-
## `inbox` (
|
|
340
|
+
## `inbox` (18)
|
|
341
341
|
|
|
342
342
|
| Method | Path | Rank | Body | Description |
|
|
343
343
|
|---|---|---|---|---|
|
|
@@ -348,6 +348,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
348
348
|
| PATCH | `/api/bongos/inbox/:id/body` | `any-builder` | `body_md` | Metic+ (task 360 / ADR 0018): idea triage (promote/discard/merge) shapes the backlog. |
|
|
349
349
|
| POST | `/api/bongos/inbox/:id/develop` | `any-builder` | `field_values`, `template_key`, `recommendation` | POST /inbox/:id/develop — DEVELOP A SPARK INTO A FULL IDEA (task 1002922 / BV1.R146, goal 1000062). |
|
|
350
350
|
| POST | `/api/bongos/inbox/:id/ratify` | `metic+archon` | `notes_md` | V3.R31 (task 252) — Archon ratifies a criterion-proposal idea, atomically: - INSERT done_when_criteria row on the target version - UPDATE… |
|
|
351
|
+
| POST | `/api/bongos/inbox/:id/ratify-goal` | `metic+archon` | `target_version`, `scope_modules`, `admit_reason`, `notes_md` | BV2.R17 (task 1004096, spec R23, goal 1000095) — ratify a FULL IDEA into a GOAL, atomically: - INSERT goals (title from the idea, descrip… |
|
|
351
352
|
| POST | `/api/bongos/inbox/:id/resubmit` | `any-builder` | `field_values`, `template_key`, `recommendation` | RESUBMIT a Full Idea after a rejection (R13 of goal 1000069, criterion C2: an idea never dies and never stalls). |
|
|
352
353
|
| POST | `/api/bongos/inbox/:id/spark` | `any-builder` | — | Mark a Quick Idea as a Big Idea Spark — "I have the spark but not the full picture, someone develop this". |
|
|
353
354
|
| DELETE | `/api/bongos/inbox/:id/spark` | `any-builder` | — | Withdraw the Big Idea Spark mark — the reversibility half of R144. |
|
|
@@ -2346,5 +2346,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2346
2346
|
landed since 1.19.934 with no explicit bump. run 35558269194. (task 1002620)
|
|
2347
2347
|
1.19.936 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2348
2348
|
landed since 1.19.935 with no explicit bump. run 35561285958. (task 1002620)
|
|
2349
|
+
1.19.937 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2350
|
+
landed since 1.19.936 with no explicit bump. run 35566446478. (task 1002620)
|
|
2351
|
+
1.19.938 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2352
|
+
landed since 1.19.937 with no explicit bump. run 35638291152. (task 1002620)
|
|
2349
2353
|
---------------------------------------------------------------------------
|
|
2350
2354
|
```
|
|
@@ -39,7 +39,7 @@ Author `config/branding.json` from the neutral starter — see [the branding con
|
|
|
39
39
|
|
|
40
40
|
**Or scaffold it with `bongos init`** ([task #1204](https://example.com/builders#/task/1204)): a short interview (or `bongos init --from spec.json` for a hands-free / CI run) that writes both config files, **seeds your first version + its done-when goal**, and **files the human-only kickoff steps** (register a GitHub OAuth app, first owner sign-in, repo binding, admission) as real tracked tasks — so a fresh instance has a claimable queue on day one instead of an empty hall. It never invents your branding (it points you at the fill prompt for that). Preview the whole plan with `bongos init --dry-run`.
|
|
41
41
|
|
|
42
|
-
**Production hosting, optional (the `provisioning` module — [ADR 0111](../adr/0111-instance-hosting-provisioning-module.md) §3).** If you enable the `provisioning` module and answer the interview's hosting questions (shape — co-tenant `$0` or a dedicated droplet — bring-your-own domain, credential ref, tier), init turns those answers into a real **provisioning request** (a queued `provision` intent the control-plane runner drains) instead of only filing a manual "production topology" task. **A queued request does nothing until a runner drains it:** on the control plane that is a systemd timer running `node scripts/gds/provision.js run-intents --apply`. This Docker image now carries the tools the scaffold needs — git, and a core it can package out of its own `.git`-less checkout (task 1003995) — and supervision is no longer systemd-only: the runner picks a process manager, falling back to supervisord where systemd is not running (task 1003997, [ADR 0306](../adr/0306-instance-supervision-is-a-seam-with-systemd-as-the-default.md)). Three standup legs
|
|
42
|
+
**Production hosting, optional (the `provisioning` module — [ADR 0111](../adr/0111-instance-hosting-provisioning-module.md) §3).** If you enable the `provisioning` module and answer the interview's hosting questions (shape — co-tenant `$0` or a dedicated droplet — bring-your-own domain, credential ref, tier), init turns those answers into a real **provisioning request** (a queued `provision` intent the control-plane runner drains) instead of only filing a manual "production topology" task. **A queued request does nothing until a runner drains it:** on the control plane that is a systemd timer running `node scripts/gds/provision.js run-intents --apply`. This Docker image now carries the tools the scaffold needs — git, and a core it can package out of its own `.git`-less checkout (task 1003995) — and supervision is no longer systemd-only: the runner picks a process manager, falling back to supervisord where systemd is not running (task 1003997, [ADR 0306](../adr/0306-instance-supervision-is-a-seam-with-systemd-as-the-default.md)). Three standup legs assumed a systemd box, and on a compose self-host a new project still cannot stand up: the container has no reverse proxy for a child instance's front door, cannot create the per-instance unix account that isolates one instance from another, and installed its backup dir as a hardcoded founder user. **That third leg is fixed** (task 1002719): the backup dir's owner is `PROVISION_APP_USER`, else the account the runner runs as (root is refused), so the standup no longer dies `invalid user` on a host without the founder's account. **The other two now refuse instead of failing opaquely, each for its own reason** — so fixing one cannot silently re-open the other. **The ingress leg now refuses instead of failing opaquely** (task 1004017, [ADR 0315](../adr/0315-a-plane-with-no-proxy-is-refused-not-given-a-no-op-ingress.md)): provisioning probes the plane with `caddy version` and returns `Ingress preflight failed: …` naming the missing proxy, before it writes a Caddy snippet or reloads anything. Previously a domained child was told to edit an `/etc/caddy/Caddyfile` the container does not have, and a domainless one crashed on the snippet write. Giving the container a real front door is still unbuilt — the refusal closes the failure mode, not the capability. **The identity leg refuses too** (task 1004018, [ADR 0317](../adr/0317-a-plane-that-cannot-give-an-instance-its-own-account-is-refused.md)): provisioning probes whether the runner can reach root on this plane and returns `Account preflight failed: …` before any mutation, because `useradd` cannot run under `USER node` and every child there would otherwise share one uid — the sibling-secret vector [ADR 0281](../adr/0281-an-instance-identity-is-its-own-unix-account-and-pg-role.md) exists to close. It is a capability question, not a knob: there is no setting that accepts a shared uid. Note supervisord has no timer concept either, so a container-hosted instance gets no automatic DB backup — the standup log prints the `crontab` line to add instead. The two irreducibly-human legs — the GitHub OAuth app and the first owner sign-in — stay guided/manual. If the module isn't enabled on the target instance, init falls back to the manual production-topology task, so nothing is silently skipped.
|
|
43
43
|
|
|
44
44
|
## Configuration surface
|
|
45
45
|
|