@bongos/core 1.25.13 → 1.25.15
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 +118 -53
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +20 -0
- package/clients/bongos-client/index.cjs +20 -0
- package/clients/bongos-client/index.d.ts +26 -2
- package/clients/bongos-client/index.mjs +20 -0
- package/docs/adr/0328-a-hosted-projects-authority-is-its-membership-row-not-its-owner-column.md +1 -1
- package/docs/adr/0407-a-project-grant-is-made-by-the-owner-not-witnessed-at-sign-in.md +124 -0
- package/docs/adr/0408-a-genesis-stage-is-three-doors-onto-one-record.md +60 -0
- package/docs/adr/README.md +2 -0
- package/docs/api/openapi.json +550 -2
- package/docs/api-reference.md +14 -4
- package/docs/copy-inventory.md +28 -34
- package/docs/copy-registry.json +41 -125
- package/docs/file-map.md +2 -1
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +1 -0
- package/docs/page-readings.json +3 -3
- package/modules/front-door-guide/db.js +13 -5
- package/modules/front-door-guide/guide.js +8 -2
- package/modules/front-door-guide/migrations/front_door_guide_003_starting_point.sql +12 -0
- package/modules/front-door-guide/module.json +2 -2
- package/modules/front-door-guide/plan.js +15 -6
- package/modules/front-door-guide/routes/front-door-guide-plan.js +3 -2
- package/modules/front-door-guide/routes/front-door-guide.js +17 -4
- package/modules/front-door-guide/starting-point.js +55 -0
- package/modules/hall-ui/public/genesis-home.js +29 -2
- package/modules/hall-ui/public/goals-page.js +3 -29
- package/modules/hall-ui/public/index.html +2 -1
- package/modules/hall-ui/public/task-lib.js +45 -0
- package/modules/hall-ui/public/work.js +3 -47
- package/modules/lifecycle/kickoff-checklist.js +1 -1
- package/modules/lifecycle/kickoff-seed.js +9 -5
- package/modules/onboarding/genesis-home.js +1 -1
- package/modules/onboarding/genesis-work.js +364 -0
- package/modules/onboarding/migrations/onboarding_002_genesis_work.sql +76 -0
- package/modules/onboarding/routes/genesis-work.js +85 -0
- package/modules/onboarding/routes/onboarding.js +3 -0
- package/package-lock.json +306 -3
- package/package.json +4 -2
- package/release-notes.json +24 -0
- package/scripts/bongos/genesis.js +178 -0
- package/scripts/bongos/package-core.js +4 -2
- package/scripts/bongos/run-unit-tests.js +3 -0
- package/scripts/gds/genesis.js +7 -0
- package/src/bongos/module-scope-map.js +1 -0
- package/src/module-api.js +1 -1
- package/tests/cutover_codemod.mjs +1 -1
- package/tests/front_door_guide_db.mjs +6 -1
- package/tests/front_door_guide_existing.mjs +238 -0
- package/tests/genesis_home.mjs +80 -2
- package/tests/genesis_work.mjs +255 -0
- package/tests/genesis_work_db.mjs +73 -0
- package/tests/genesis_work_routes.mjs +130 -0
- package/tests/package_core.mjs +11 -7
- package/tests/pruned_lockfile_integrity.mjs +4 -2
- package/tests/status_page_no_dead_uptime.mjs +1 -1
- package/tests/task_lib.mjs +46 -0
package/package-lock.json
CHANGED
|
@@ -1,16 +1,232 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.25.
|
|
3
|
+
"version": "1.25.15",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.25.
|
|
9
|
+
"version": "1.25.15",
|
|
10
10
|
"license": "AGPL-3.0-or-later",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"express": "^4.21.2",
|
|
13
|
-
"pg": "^8.20.0"
|
|
13
|
+
"pg": "^8.20.0",
|
|
14
|
+
"pino": "^9.14.0",
|
|
15
|
+
"@simplewebauthn/browser": "^13.3.0",
|
|
16
|
+
"@simplewebauthn/server": "^13.3.3"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"node_modules/@hexagon/base64": {
|
|
20
|
+
"version": "1.1.28",
|
|
21
|
+
"resolved": "https://registry.npmjs.org/@hexagon/base64/-/base64-1.1.28.tgz",
|
|
22
|
+
"integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==",
|
|
23
|
+
"license": "MIT"
|
|
24
|
+
},
|
|
25
|
+
"node_modules/@levischuck/tiny-cbor": {
|
|
26
|
+
"version": "0.2.11",
|
|
27
|
+
"resolved": "https://registry.npmjs.org/@levischuck/tiny-cbor/-/tiny-cbor-0.2.11.tgz",
|
|
28
|
+
"integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==",
|
|
29
|
+
"license": "MIT"
|
|
30
|
+
},
|
|
31
|
+
"node_modules/@peculiar/asn1-android": {
|
|
32
|
+
"version": "2.11.0",
|
|
33
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-android/-/asn1-android-2.11.0.tgz",
|
|
34
|
+
"integrity": "sha512-llW/qjavL+tOxt5i9whUv4wsbsLpUwI6k/DrvKsdA/H7A/TB/6CosMFgvei28fcJ8ncD0c5lig1oBBlo4KGMCw==",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
38
|
+
"asn1js": "^3.0.10",
|
|
39
|
+
"tslib": "^2.8.1"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=14"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"node_modules/@peculiar/asn1-cms": {
|
|
46
|
+
"version": "2.11.0",
|
|
47
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.11.0.tgz",
|
|
48
|
+
"integrity": "sha512-SlAiDoT/Cd8qaNmbTt78gqyaEvu2fQd6ML6KWJkdjXGrgDKnHHrusVkfQUelkfinL2p665IIADb0JBixtT8W1g==",
|
|
49
|
+
"license": "MIT",
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
52
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
53
|
+
"@peculiar/asn1-x509-attr": "^2.11.0",
|
|
54
|
+
"asn1js": "^3.0.10",
|
|
55
|
+
"tslib": "^2.8.1"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=14"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"node_modules/@peculiar/asn1-csr": {
|
|
62
|
+
"version": "2.11.0",
|
|
63
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.11.0.tgz",
|
|
64
|
+
"integrity": "sha512-M/ED0yJ05qMK+UADPKnIa8vhAeewOJALSxTAZB7RQ/batRHhIJZkwznCcWAbFO5saHJ1yEQ+m4lncEcG9RnQSg==",
|
|
65
|
+
"license": "MIT",
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
68
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
69
|
+
"asn1js": "^3.0.10",
|
|
70
|
+
"tslib": "^2.8.1"
|
|
71
|
+
},
|
|
72
|
+
"engines": {
|
|
73
|
+
"node": ">=14"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"node_modules/@peculiar/asn1-ecc": {
|
|
77
|
+
"version": "2.11.0",
|
|
78
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.11.0.tgz",
|
|
79
|
+
"integrity": "sha512-jj1alGEKev7/un+cI+exyVK9m31lmP7cCBMCZuCb0wkFQH2zmKmJzNiG4wqXFNzlcP8timHLnzf3lV3OxBpb/Q==",
|
|
80
|
+
"license": "MIT",
|
|
81
|
+
"dependencies": {
|
|
82
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
83
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
84
|
+
"asn1js": "^3.0.10",
|
|
85
|
+
"tslib": "^2.8.1"
|
|
86
|
+
},
|
|
87
|
+
"engines": {
|
|
88
|
+
"node": ">=14"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"node_modules/@peculiar/asn1-pfx": {
|
|
92
|
+
"version": "2.11.0",
|
|
93
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.11.0.tgz",
|
|
94
|
+
"integrity": "sha512-ykSAWRu8KkmzU8LRpk9ZQC3zuLmBEtoSMjIv9XHVamD5W7amqreV5wttKqnvtjWOzzSJQxA/HVT8/tHwpEEGSQ==",
|
|
95
|
+
"license": "MIT",
|
|
96
|
+
"dependencies": {
|
|
97
|
+
"@peculiar/asn1-cms": "^2.11.0",
|
|
98
|
+
"@peculiar/asn1-pkcs8": "^2.11.0",
|
|
99
|
+
"@peculiar/asn1-rsa": "^2.11.0",
|
|
100
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
101
|
+
"asn1js": "^3.0.10",
|
|
102
|
+
"tslib": "^2.8.1"
|
|
103
|
+
},
|
|
104
|
+
"engines": {
|
|
105
|
+
"node": ">=14"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"node_modules/@peculiar/asn1-pkcs8": {
|
|
109
|
+
"version": "2.11.0",
|
|
110
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.11.0.tgz",
|
|
111
|
+
"integrity": "sha512-lragjkjQGnQ5luxC+sxoAfAO/jBiQ7hOEGlDKJUk7MC5zY3AzjB2DU0GyPUH1Sswdv10t7DurY0zylOYMLb88w==",
|
|
112
|
+
"license": "MIT",
|
|
113
|
+
"dependencies": {
|
|
114
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
115
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
116
|
+
"asn1js": "^3.0.10",
|
|
117
|
+
"tslib": "^2.8.1"
|
|
118
|
+
},
|
|
119
|
+
"engines": {
|
|
120
|
+
"node": ">=14"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"node_modules/@peculiar/asn1-pkcs9": {
|
|
124
|
+
"version": "2.11.0",
|
|
125
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.11.0.tgz",
|
|
126
|
+
"integrity": "sha512-gDdFjpqV0weJjgNUvueUVf4D8uVbpq+VbG0TsxLAY2QGljAkJyL9qwQ7avol9j0jaYSJ7Ey7v7RZp0M3GTcQSA==",
|
|
127
|
+
"license": "MIT",
|
|
128
|
+
"dependencies": {
|
|
129
|
+
"@peculiar/asn1-cms": "^2.11.0",
|
|
130
|
+
"@peculiar/asn1-pfx": "^2.11.0",
|
|
131
|
+
"@peculiar/asn1-pkcs8": "^2.11.0",
|
|
132
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
133
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
134
|
+
"@peculiar/asn1-x509-attr": "^2.11.0",
|
|
135
|
+
"asn1js": "^3.0.10",
|
|
136
|
+
"tslib": "^2.8.1"
|
|
137
|
+
},
|
|
138
|
+
"engines": {
|
|
139
|
+
"node": ">=14"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"node_modules/@peculiar/asn1-rsa": {
|
|
143
|
+
"version": "2.11.0",
|
|
144
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.11.0.tgz",
|
|
145
|
+
"integrity": "sha512-S2sBJmbfI09Kzdt9cEhE6pDNjHpVTkURs+811+PxS8AvsTLxC4woMNRhxHYaIbClkkNfAVt0tZxJdINVfUmzuA==",
|
|
146
|
+
"license": "MIT",
|
|
147
|
+
"dependencies": {
|
|
148
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
149
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
150
|
+
"asn1js": "^3.0.10",
|
|
151
|
+
"tslib": "^2.8.1"
|
|
152
|
+
},
|
|
153
|
+
"engines": {
|
|
154
|
+
"node": ">=14"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"node_modules/@peculiar/asn1-schema": {
|
|
158
|
+
"version": "2.11.0",
|
|
159
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.11.0.tgz",
|
|
160
|
+
"integrity": "sha512-8xh4avo53/vXO6UEv9yaoJ83hY581geaLTygf61NPIXP5AeIZCPjJhpTaYU23IZkG+NpLN/C9FYzWp7hphIT9A==",
|
|
161
|
+
"license": "MIT",
|
|
162
|
+
"dependencies": {
|
|
163
|
+
"@peculiar/utils": "^2.0.2",
|
|
164
|
+
"asn1js": "^3.0.10",
|
|
165
|
+
"tslib": "^2.8.1"
|
|
166
|
+
},
|
|
167
|
+
"engines": {
|
|
168
|
+
"node": ">=14"
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"node_modules/@peculiar/asn1-x509": {
|
|
172
|
+
"version": "2.11.0",
|
|
173
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.11.0.tgz",
|
|
174
|
+
"integrity": "sha512-J1sHAwGNlk+8J+FeR1eLVc6Gq0T9f9ITc3HWyPYgJraoW6U8AJuQiWVJ3SCEpltfTdpOY7fHdHT5oKAsbK/jww==",
|
|
175
|
+
"license": "MIT",
|
|
176
|
+
"dependencies": {
|
|
177
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
178
|
+
"@peculiar/utils": "^2.0.2",
|
|
179
|
+
"asn1js": "^3.0.10",
|
|
180
|
+
"tslib": "^2.8.1"
|
|
181
|
+
},
|
|
182
|
+
"engines": {
|
|
183
|
+
"node": ">=14"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"node_modules/@peculiar/asn1-x509-attr": {
|
|
187
|
+
"version": "2.11.0",
|
|
188
|
+
"resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.11.0.tgz",
|
|
189
|
+
"integrity": "sha512-Fgvnd9REmLxEj/4cbDP54dNUNUXkzUksXLqEHqs1mHBuSRjSTCUSPM/WQIZYSvrdG7ND9CX1AQtPoIBekhgQSA==",
|
|
190
|
+
"license": "MIT",
|
|
191
|
+
"dependencies": {
|
|
192
|
+
"@peculiar/asn1-schema": "^2.11.0",
|
|
193
|
+
"@peculiar/asn1-x509": "^2.11.0",
|
|
194
|
+
"asn1js": "^3.0.10",
|
|
195
|
+
"tslib": "^2.8.1"
|
|
196
|
+
},
|
|
197
|
+
"engines": {
|
|
198
|
+
"node": ">=14"
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"node_modules/@peculiar/utils": {
|
|
202
|
+
"version": "2.0.3",
|
|
203
|
+
"resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz",
|
|
204
|
+
"integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==",
|
|
205
|
+
"license": "MIT",
|
|
206
|
+
"dependencies": {
|
|
207
|
+
"tslib": "^2.8.1"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"node_modules/@peculiar/x509": {
|
|
211
|
+
"version": "1.14.3",
|
|
212
|
+
"resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz",
|
|
213
|
+
"integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==",
|
|
214
|
+
"license": "MIT",
|
|
215
|
+
"dependencies": {
|
|
216
|
+
"@peculiar/asn1-cms": "^2.6.0",
|
|
217
|
+
"@peculiar/asn1-csr": "^2.6.0",
|
|
218
|
+
"@peculiar/asn1-ecc": "^2.6.0",
|
|
219
|
+
"@peculiar/asn1-pkcs9": "^2.6.0",
|
|
220
|
+
"@peculiar/asn1-rsa": "^2.6.0",
|
|
221
|
+
"@peculiar/asn1-schema": "^2.6.0",
|
|
222
|
+
"@peculiar/asn1-x509": "^2.6.0",
|
|
223
|
+
"pvtsutils": "^1.3.6",
|
|
224
|
+
"reflect-metadata": "^0.2.2",
|
|
225
|
+
"tslib": "^2.8.1",
|
|
226
|
+
"tsyringe": "^4.10.0"
|
|
227
|
+
},
|
|
228
|
+
"engines": {
|
|
229
|
+
"node": ">=20.0.0"
|
|
14
230
|
}
|
|
15
231
|
},
|
|
16
232
|
"node_modules/@pinojs/redact": {
|
|
@@ -19,6 +235,31 @@
|
|
|
19
235
|
"integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==",
|
|
20
236
|
"license": "MIT"
|
|
21
237
|
},
|
|
238
|
+
"node_modules/@simplewebauthn/browser": {
|
|
239
|
+
"version": "13.3.0",
|
|
240
|
+
"resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-13.3.0.tgz",
|
|
241
|
+
"integrity": "sha512-BE/UWv6FOToAdVk0EokzkqQQDOWtNydYlY6+OrmiZ5SCNmb41VehttboTetUM3T/fr6EAFYVXjz4My2wg230rQ==",
|
|
242
|
+
"license": "MIT"
|
|
243
|
+
},
|
|
244
|
+
"node_modules/@simplewebauthn/server": {
|
|
245
|
+
"version": "13.3.3",
|
|
246
|
+
"resolved": "https://registry.npmjs.org/@simplewebauthn/server/-/server-13.3.3.tgz",
|
|
247
|
+
"integrity": "sha512-LelX/lcy5cjc15A86i/aNxHhB5eU7dd20QsbP0VLAf9e38+SLlsnqCCyecx3xqfGofhmX05h1J9fKRYWxw+luA==",
|
|
248
|
+
"license": "MIT",
|
|
249
|
+
"dependencies": {
|
|
250
|
+
"@hexagon/base64": "^1.1.27",
|
|
251
|
+
"@levischuck/tiny-cbor": "^0.2.2",
|
|
252
|
+
"@peculiar/asn1-android": "^2.6.0",
|
|
253
|
+
"@peculiar/asn1-ecc": "^2.6.1",
|
|
254
|
+
"@peculiar/asn1-rsa": "^2.6.1",
|
|
255
|
+
"@peculiar/asn1-schema": "^2.6.0",
|
|
256
|
+
"@peculiar/asn1-x509": "^2.6.1",
|
|
257
|
+
"@peculiar/x509": "^1.14.3"
|
|
258
|
+
},
|
|
259
|
+
"engines": {
|
|
260
|
+
"node": ">=20.0.0"
|
|
261
|
+
}
|
|
262
|
+
},
|
|
22
263
|
"node_modules/accepts": {
|
|
23
264
|
"version": "1.3.8",
|
|
24
265
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
|
|
@@ -38,6 +279,20 @@
|
|
|
38
279
|
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
|
|
39
280
|
"license": "MIT"
|
|
40
281
|
},
|
|
282
|
+
"node_modules/asn1js": {
|
|
283
|
+
"version": "3.0.10",
|
|
284
|
+
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz",
|
|
285
|
+
"integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==",
|
|
286
|
+
"license": "BSD-3-Clause",
|
|
287
|
+
"dependencies": {
|
|
288
|
+
"pvtsutils": "^1.3.6",
|
|
289
|
+
"pvutils": "^1.1.5",
|
|
290
|
+
"tslib": "^2.8.1"
|
|
291
|
+
},
|
|
292
|
+
"engines": {
|
|
293
|
+
"node": ">=12.0.0"
|
|
294
|
+
}
|
|
295
|
+
},
|
|
41
296
|
"node_modules/atomic-sleep": {
|
|
42
297
|
"version": "1.0.0",
|
|
43
298
|
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
|
|
@@ -804,6 +1059,24 @@
|
|
|
804
1059
|
"url": "https://opencollective.com/express"
|
|
805
1060
|
}
|
|
806
1061
|
},
|
|
1062
|
+
"node_modules/pvtsutils": {
|
|
1063
|
+
"version": "1.3.6",
|
|
1064
|
+
"resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz",
|
|
1065
|
+
"integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==",
|
|
1066
|
+
"license": "MIT",
|
|
1067
|
+
"dependencies": {
|
|
1068
|
+
"tslib": "^2.8.1"
|
|
1069
|
+
}
|
|
1070
|
+
},
|
|
1071
|
+
"node_modules/pvutils": {
|
|
1072
|
+
"version": "1.2.0",
|
|
1073
|
+
"resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz",
|
|
1074
|
+
"integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==",
|
|
1075
|
+
"license": "MIT",
|
|
1076
|
+
"engines": {
|
|
1077
|
+
"node": ">=16.0.0"
|
|
1078
|
+
}
|
|
1079
|
+
},
|
|
807
1080
|
"node_modules/qs": {
|
|
808
1081
|
"version": "6.15.2",
|
|
809
1082
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
|
|
@@ -858,6 +1131,12 @@
|
|
|
858
1131
|
"node": ">= 12.13.0"
|
|
859
1132
|
}
|
|
860
1133
|
},
|
|
1134
|
+
"node_modules/reflect-metadata": {
|
|
1135
|
+
"version": "0.2.2",
|
|
1136
|
+
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
|
|
1137
|
+
"integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
|
|
1138
|
+
"license": "Apache-2.0"
|
|
1139
|
+
},
|
|
861
1140
|
"node_modules/safe-buffer": {
|
|
862
1141
|
"version": "5.2.1",
|
|
863
1142
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
|
@@ -1061,6 +1340,30 @@
|
|
|
1061
1340
|
"node": ">=0.6"
|
|
1062
1341
|
}
|
|
1063
1342
|
},
|
|
1343
|
+
"node_modules/tslib": {
|
|
1344
|
+
"version": "2.8.1",
|
|
1345
|
+
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
|
1346
|
+
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
|
1347
|
+
"license": "0BSD"
|
|
1348
|
+
},
|
|
1349
|
+
"node_modules/tsyringe": {
|
|
1350
|
+
"version": "4.10.0",
|
|
1351
|
+
"resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz",
|
|
1352
|
+
"integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==",
|
|
1353
|
+
"license": "MIT",
|
|
1354
|
+
"dependencies": {
|
|
1355
|
+
"tslib": "^1.9.3"
|
|
1356
|
+
},
|
|
1357
|
+
"engines": {
|
|
1358
|
+
"node": ">= 6.0.0"
|
|
1359
|
+
}
|
|
1360
|
+
},
|
|
1361
|
+
"node_modules/tsyringe/node_modules/tslib": {
|
|
1362
|
+
"version": "1.14.1",
|
|
1363
|
+
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
|
1364
|
+
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
|
1365
|
+
"license": "0BSD"
|
|
1366
|
+
},
|
|
1064
1367
|
"node_modules/type-is": {
|
|
1065
1368
|
"version": "1.6.18",
|
|
1066
1369
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.25.
|
|
3
|
+
"version": "1.25.15",
|
|
4
4
|
"description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"main": "src/platform-server.js",
|
|
@@ -25,7 +25,9 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"express": "^4.21.2",
|
|
27
27
|
"pg": "^8.20.0",
|
|
28
|
-
"pino": "^9.14.0"
|
|
28
|
+
"pino": "^9.14.0",
|
|
29
|
+
"@simplewebauthn/browser": "^13.3.0",
|
|
30
|
+
"@simplewebauthn/server": "^13.3.3"
|
|
29
31
|
},
|
|
30
32
|
"overrides": {
|
|
31
33
|
"undici": "^6.29.1"
|
package/release-notes.json
CHANGED
|
@@ -11788,5 +11788,29 @@
|
|
|
11788
11788
|
"id": "1005273",
|
|
11789
11789
|
"text": "The project guide now ends with a written plan (with recommended features drawn only from what Bongos really offers), saves the chat so visitors can come back to it, moves it onto their account when they sign up, and deletes i"
|
|
11790
11790
|
}
|
|
11791
|
+
],
|
|
11792
|
+
"1.25.14": [
|
|
11793
|
+
{
|
|
11794
|
+
"id": "1004753",
|
|
11795
|
+
"text": "Designed how a project owner can give a teammate access to help run their hosted project, without letting anyone who merely signs in act on it."
|
|
11796
|
+
},
|
|
11797
|
+
{
|
|
11798
|
+
"id": "1005109",
|
|
11799
|
+
"text": "Founders setting up a new project can now copy each setup task's prompt straight from the Genesis page, without opening the task."
|
|
11800
|
+
},
|
|
11801
|
+
{
|
|
11802
|
+
"id": "1005269",
|
|
11803
|
+
"text": "Adding a security card works again on sites that install Bongos as a package: the card libraries are now included in the released core."
|
|
11804
|
+
},
|
|
11805
|
+
{
|
|
11806
|
+
"id": "1005279",
|
|
11807
|
+
"text": "The project guide now asks whether you are starting fresh or already have something, and for an existing project plans from your own description, without ever reading your files or code."
|
|
11808
|
+
}
|
|
11809
|
+
],
|
|
11810
|
+
"1.25.15": [
|
|
11811
|
+
{
|
|
11812
|
+
"id": "1005116",
|
|
11813
|
+
"text": "Founders now write their own strategy. Each setup stage can be done three ways: answer guided questions, write it freely, or get help from your own AI — and you can switch at any time without losing anything. Your answers are"
|
|
11814
|
+
}
|
|
11791
11815
|
]
|
|
11792
11816
|
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// scripts/bongos/genesis.js — the founder's genesis answers from a terminal (task 1005116)
|
|
3
|
+
//
|
|
4
|
+
// WHY. Each genesis stage is the founder's to write, through one of three doors onto one
|
|
5
|
+
// stored record (modules/onboarding/genesis-work.js): guided questions, an open page, or
|
|
6
|
+
// their own AI session helping. This is how an AI session works a stage WITH the founder
|
|
7
|
+
// — it reads what they have said, asks the stage's own questions, and records only the
|
|
8
|
+
// answers the founder accepts — and how any session planning a goal or task reads what
|
|
9
|
+
// the founder said (`context`). Every write goes to the server as the person signed in;
|
|
10
|
+
// only the project owner may write, so a session can never author a stage on its own.
|
|
11
|
+
//
|
|
12
|
+
// Usage:
|
|
13
|
+
// npx bongos genesis show [stage] every stage, or one, with its answers
|
|
14
|
+
// npx bongos genesis context what the founder said, as markdown (for planning sessions)
|
|
15
|
+
// npx bongos genesis assist <stage> the brief for the founder's AI session (the assisted door)
|
|
16
|
+
// npx bongos genesis answer <stage> <question> "<words>" [--origin founder|assisted]
|
|
17
|
+
// npx bongos genesis answer <stage> <question> --not-sure ["why"]
|
|
18
|
+
// npx bongos genesis answer <stage> <question> --skip ["why"]
|
|
19
|
+
// npx bongos genesis clear <stage> <question> un-answer: back to empty (not skipped)
|
|
20
|
+
// npx bongos genesis history <stage> <question> what an answer used to say
|
|
21
|
+
// npx bongos genesis door <stage> guided|open|assisted which way the founder is working now
|
|
22
|
+
// npx bongos genesis page <stage> "<words>" | --file <path> | --remove
|
|
23
|
+
// npx bongos genesis link <stage> <url> | --remove the document the founder already has
|
|
24
|
+
//
|
|
25
|
+
// Also `node scripts/bongos/genesis.js …`.
|
|
26
|
+
'use strict';
|
|
27
|
+
|
|
28
|
+
const fs = require('node:fs');
|
|
29
|
+
const { apiCall, requireSession, errCode, cliExit } = require('./cli-lib');
|
|
30
|
+
|
|
31
|
+
const USAGE = 'usage: npx bongos genesis show [stage] | context | assist <stage> | answer <stage> <question> "<words>" [--origin founder|assisted] | answer <stage> <question> --not-sure|--skip ["why"] | clear <stage> <question> | history <stage> <question> | door <stage> guided|open|assisted | page <stage> "<words>"|--file <path>|--remove | link <stage> <url>|--remove';
|
|
32
|
+
|
|
33
|
+
const STATE_LABEL = { answered: '', not_sure: '[not sure yet] ', skipped: '[skipped] ' };
|
|
34
|
+
const ORIGIN_LABEL = { assisted: ' (with AI help)', carried_over: ' (carried over — confirm or edit)' };
|
|
35
|
+
|
|
36
|
+
// Pure: one stage as the founder reads it.
|
|
37
|
+
function formatStage(s) {
|
|
38
|
+
const out = [`${s.stage[0].toUpperCase()}${s.stage.slice(1)} — working ${s.door}` +
|
|
39
|
+
(s.adopted ? ` · ${s.counts.answered} answered, ${s.counts.not_sure} not sure, ${s.counts.skipped} skipped, ${s.counts.empty} empty` : '')];
|
|
40
|
+
for (const q of s.questions) {
|
|
41
|
+
out.push(` ${q.id}: ${q.ask}`);
|
|
42
|
+
if (!q.answer) { out.push(' (empty)'); continue; }
|
|
43
|
+
const a = q.answer;
|
|
44
|
+
const words = a.text ? a.text.replace(/\n/g, '\n ') : '';
|
|
45
|
+
out.push(` ${STATE_LABEL[a.state] || ''}${words}${ORIGIN_LABEL[a.origin] || ''}`.trimEnd());
|
|
46
|
+
}
|
|
47
|
+
if (s.page) out.push(' Page:', ` ${s.page.replace(/\n/g, '\n ')}`);
|
|
48
|
+
if (s.link) out.push(` Link: ${s.link}`);
|
|
49
|
+
return out.join('\n');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Pure: parse `answer` arguments into the PUT body, or { error }.
|
|
53
|
+
function parseAnswer(rest) {
|
|
54
|
+
const args = [...rest];
|
|
55
|
+
const body = {};
|
|
56
|
+
const take = (flag) => {
|
|
57
|
+
const i = args.indexOf(flag);
|
|
58
|
+
if (i < 0) return undefined;
|
|
59
|
+
const next = args[i + 1];
|
|
60
|
+
const val = next != null && !String(next).startsWith('--') ? next : '';
|
|
61
|
+
args.splice(i, val === '' && (next == null || String(next).startsWith('--')) ? 1 : 2);
|
|
62
|
+
return val;
|
|
63
|
+
};
|
|
64
|
+
const origin = take('--origin');
|
|
65
|
+
const notSure = take('--not-sure');
|
|
66
|
+
const skip = take('--skip');
|
|
67
|
+
if (notSure !== undefined && skip !== undefined) return { error: 'choose one of --not-sure or --skip' };
|
|
68
|
+
if (origin !== undefined) body.origin = origin;
|
|
69
|
+
if (notSure !== undefined) { body.state = 'not_sure'; if (notSure) body.text = notSure; }
|
|
70
|
+
else if (skip !== undefined) { body.state = 'skipped'; if (skip) body.text = skip; }
|
|
71
|
+
else {
|
|
72
|
+
const words = args.join(' ').trim();
|
|
73
|
+
if (!words) return { error: 'give the answer in quotes, or --not-sure / --skip' };
|
|
74
|
+
body.state = 'answered';
|
|
75
|
+
body.text = words;
|
|
76
|
+
}
|
|
77
|
+
return { body };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function call(method, path, body, what) {
|
|
81
|
+
const r = await apiCall(method, `/api/bongos${path}`, body);
|
|
82
|
+
if (!r.ok) console.error(`Could not ${what} (${r.status}${errCode(r.data) ? `: ${errCode(r.data)}` : ''}).`);
|
|
83
|
+
return r.ok ? r.data : null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const enc = encodeURIComponent;
|
|
87
|
+
|
|
88
|
+
async function main(argv) {
|
|
89
|
+
const [cmd, stage, ...rest] = argv;
|
|
90
|
+
if (!cmd || cmd === '--help' || cmd === '-h') { console.log(USAGE); return cmd ? 0 : 2; }
|
|
91
|
+
await requireSession();
|
|
92
|
+
if (cmd === 'show') {
|
|
93
|
+
if (stage) {
|
|
94
|
+
const d = await call('GET', `/founding/work/${enc(stage)}`, null, 'read the stage');
|
|
95
|
+
if (!d) return 1;
|
|
96
|
+
console.log(formatStage(d.work));
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
const d = await call('GET', '/founding/work', null, 'read genesis');
|
|
100
|
+
if (!d) return 1;
|
|
101
|
+
console.log(d.stages.map(formatStage).join('\n\n'));
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
if (cmd === 'context') {
|
|
105
|
+
const d = await call('GET', '/founding/context', null, 'read what the founder said');
|
|
106
|
+
if (!d) return 1;
|
|
107
|
+
console.log(d.markdown || 'The founder has not written anything in genesis yet.');
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
if (!stage) { console.error(USAGE); return 2; }
|
|
111
|
+
if (cmd === 'assist') {
|
|
112
|
+
const d = await call('GET', `/founding/work/${enc(stage)}/assist`, null, 'build the brief');
|
|
113
|
+
if (!d) return 1;
|
|
114
|
+
console.log(d.prompt);
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
if (cmd === 'answer') {
|
|
118
|
+
const [question, ...words] = rest;
|
|
119
|
+
if (!question) { console.error(USAGE); return 2; }
|
|
120
|
+
const p = parseAnswer(words);
|
|
121
|
+
if (p.error) { console.error(p.error); return 2; }
|
|
122
|
+
const d = await call('PUT', `/founding/work/${enc(stage)}/answers/${enc(question)}`, p.body, 'save the answer');
|
|
123
|
+
if (!d) return 1;
|
|
124
|
+
console.log(d.changed === false ? 'Unchanged — that is already the answer.' : 'Saved.');
|
|
125
|
+
console.log(formatStage(d.work));
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
if (cmd === 'clear' || cmd === 'history') {
|
|
129
|
+
const [question] = rest;
|
|
130
|
+
if (!question) { console.error(USAGE); return 2; }
|
|
131
|
+
if (cmd === 'clear') {
|
|
132
|
+
const d = await call('DELETE', `/founding/work/${enc(stage)}/answers/${enc(question)}`, null, 'clear the answer');
|
|
133
|
+
if (!d) return 1;
|
|
134
|
+
console.log(d.cleared ? 'Cleared — the question is empty again.' : 'It was already empty.');
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
const d = await call('GET', `/founding/work/${enc(stage)}/answers/${enc(question)}/history`, null, 'read the history');
|
|
138
|
+
if (!d) return 1;
|
|
139
|
+
if (!d.history.length) console.log('No answer has ever been saved here.');
|
|
140
|
+
for (const h of d.history) console.log(`${h.changed_at} ${h.state}${h.text ? `: ${h.text}` : ''}`);
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
if (cmd === 'door') {
|
|
144
|
+
const d = await call('PUT', `/founding/work/${enc(stage)}/door`, { door: String(rest[0] || '') }, 'switch the door');
|
|
145
|
+
if (!d) return 1;
|
|
146
|
+
console.log(`Now working ${d.work.door}. Nothing already written was lost.`);
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
if (cmd === 'page') {
|
|
150
|
+
let page;
|
|
151
|
+
if (rest[0] === '--remove') page = '';
|
|
152
|
+
else if (rest[0] === '--file') {
|
|
153
|
+
if (!rest[1]) { console.error('give the file to read: --file <path>'); return 2; }
|
|
154
|
+
page = fs.readFileSync(rest[1], 'utf8');
|
|
155
|
+
} else page = rest.join(' ');
|
|
156
|
+
const d = await call('PUT', `/founding/work/${enc(stage)}/page`, { page }, 'save the page');
|
|
157
|
+
if (!d) return 1;
|
|
158
|
+
console.log(d.work.page ? 'Page saved.' : 'Page removed.');
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
if (cmd === 'link') {
|
|
162
|
+
const url = rest[0] === '--remove' ? '' : String(rest[0] || '');
|
|
163
|
+
const d = await call('PUT', `/founding/work/${enc(stage)}/link`, { url }, 'save the link');
|
|
164
|
+
if (!d) return 1;
|
|
165
|
+
console.log(d.work.link ? `Linked: ${d.work.link}` : 'Link removed.');
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
console.error(USAGE);
|
|
169
|
+
return 2;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (require.main === module) {
|
|
173
|
+
main(process.argv.slice(2))
|
|
174
|
+
.then((code) => cliExit(code))
|
|
175
|
+
.catch((err) => { console.error('fatal:', err && err.message ? err.message : err); cliExit(1); });
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
module.exports = { main, formatStage, parseAnswer };
|
|
@@ -288,7 +288,9 @@ function isNpmStripped(pathRel) {
|
|
|
288
288
|
// published core without it crashes MODULE_NOT_FOUND at startup (task 1003160).
|
|
289
289
|
// discord.js (+ its undici requirement) is an OPTIONAL MODULE dependency, not
|
|
290
290
|
// core; a consumer that enables the discord module installs it itself.
|
|
291
|
-
|
|
291
|
+
// The security-card libraries joined in task 1005269: routes/my-passkeys.js serves the browser bundle
|
|
292
|
+
// and requires the server lib, and a package without them answers bundle_missing on every instance.
|
|
293
|
+
const CORE_DEP_NAMES = ['express', 'pg', 'pino', '@simplewebauthn/browser', '@simplewebauthn/server'];
|
|
292
294
|
|
|
293
295
|
// Pure — takes the source package.json's `dependencies`/`overrides` as plain
|
|
294
296
|
// objects so this is unit-testable with no disk I/O. Throws if a required core
|
|
@@ -928,7 +930,7 @@ function main() {
|
|
|
928
930
|
const sourcePkgLock = JSON.parse(pkgLockRaw.toString('utf8'));
|
|
929
931
|
const corePkgJson = buildPackageJson({ version, sourceDeps: sourcePkgJson.dependencies, sourceOverrides: sourcePkgJson.overrides });
|
|
930
932
|
const corePkgLock = prunePackageLock(sourcePkgLock, {
|
|
931
|
-
name: corePkgJson.name, version, rootRanges: {
|
|
933
|
+
name: corePkgJson.name, version, rootRanges: { ...corePkgJson.dependencies },
|
|
932
934
|
});
|
|
933
935
|
console.error(`[package-core] synthesized package.json (${Object.keys(corePkgJson.dependencies).join(', ')}) + pruned package-lock.json (${Object.keys(corePkgLock.packages).length - 1} of ${Object.keys(sourcePkgLock.packages).length - 1} locked packages kept).`);
|
|
934
936
|
|
|
@@ -375,6 +375,9 @@ const INTEGRATION = new Set([
|
|
|
375
375
|
// the second proves the search index never widens a caller past their rank or into
|
|
376
376
|
// another builder memory. Each skipped in CI before, so none had ever been gated.
|
|
377
377
|
'page_notes_db', 'howto_state_db', 'search_isolation_db',
|
|
378
|
+
// task 1005116: the genesis stage-work store on the real schema (the DB-free half,
|
|
379
|
+
// genesis_work, stays in the unit lane).
|
|
380
|
+
'genesis_work_db',
|
|
378
381
|
]);
|
|
379
382
|
|
|
380
383
|
// Excluded so this gate is trustworthy in a CLEAN checkout (the CI condition):
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// scripts/gds/genesis.js — @bongos-forwarder (task 1004848). Generated by
|
|
3
|
+
// scripts/bongos/codemod-rename-scripts-gds.js; do not edit.
|
|
4
|
+
// The real script is scripts/bongos/genesis.js. This forwarder keeps callers that still name
|
|
5
|
+
// the old path working, and warns once so they get repointed. Task 1003706 removes it.
|
|
6
|
+
'use strict';
|
|
7
|
+
require('../bongos/forwarder.js').forward(module, 'genesis.js');
|
|
@@ -191,6 +191,7 @@ const MODULE_GLOBS = {
|
|
|
191
191
|
'front-door-guide': [
|
|
192
192
|
'modules/front-door-guide/', 'tests/front_door_guide.mjs',
|
|
193
193
|
'tests/front_door_guide_plan.mjs', 'tests/front_door_guide_db.mjs',
|
|
194
|
+
'tests/front_door_guide_existing.mjs',
|
|
194
195
|
],
|
|
195
196
|
// The /raise investor page (task 1004847, ADR 0384): hub-only.
|
|
196
197
|
raise: [
|
package/src/module-api.js
CHANGED
|
@@ -81,7 +81,7 @@ const { sleep } = require('./sleep');
|
|
|
81
81
|
// MAJOR (see allowBoxScope below): passes the request through untouched.
|
|
82
82
|
function deprecatedNoopMiddleware(_req, _res, next) { next(); }
|
|
83
83
|
|
|
84
|
-
const CORE_VERSION = '1.25.
|
|
84
|
+
const CORE_VERSION = '1.25.15'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
|
|
85
85
|
|
|
86
86
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
87
87
|
// Usage: const log = api.logger('discord'); log.info('mounted');
|
|
@@ -183,7 +183,7 @@ t('planCodemod rewrites host files, skips core files, reports unmapped', () => {
|
|
|
183
183
|
|
|
184
184
|
t('every CORE_INTERNAL_MAP target is exported by the core package (a rewrite never outruns an export)', () => {
|
|
185
185
|
const { buildPackageJson } = require('../scripts/bongos/package-core.js');
|
|
186
|
-
const pkg = buildPackageJson({ version: '0.0.0-test', sourceDeps: { express: '^4.0.0', pg: '^8.0.0', pino: '^9.0.0' } });
|
|
186
|
+
const pkg = buildPackageJson({ version: '0.0.0-test', sourceDeps: { express: '^4.0.0', pg: '^8.0.0', pino: '^9.0.0', '@simplewebauthn/browser': '^13.0.0', '@simplewebauthn/server': '^13.0.0' } });
|
|
187
187
|
for (const mapped of Object.values(CORE_INTERNAL_MAP)) {
|
|
188
188
|
assert.ok(pkg.exports[`./${mapped}`], `@bongos/core must export ./${mapped} (targeted by the codemod)`);
|
|
189
189
|
}
|