@bongos/core 1.21.47 → 1.21.48
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 +31 -46
- package/.claude/skills/bongos-feedback/SKILL.md +5 -4
- package/docs/adr/0087-bongos-app-architecture-and-handoff-contract.md +2 -2
- package/docs/file-map.md +0 -1
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-readings.json +37 -36
- package/modules/hall-ui/public/commands-lib.js +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +10 -0
- package/scripts/gds/pack-env-prefix.js +73 -0
- package/scripts/gds/provision-repo.js +13 -0
- package/scripts/gds/provision-units.js +6 -17
- package/scripts/gds/provision.js +8 -2
- package/src/instance-config.js +28 -1
- package/src/module-api.js +1 -1
- package/tests/instance_config.mjs +53 -0
- package/tests/instance_feedback.mjs +12 -0
- package/tests/provision.mjs +103 -0
- package/tests/skill_menu_ruling.mjs +1 -1
- package/.claude/skills/feedback/SKILL.md +0 -39
- package/scripts/bongos-mcp.js +0 -28
- package/scripts/gds/feedback-latest.js +0 -224
- package/tests/feedback_latest.mjs +0 -122
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.21.
|
|
6
|
-
"core_contract": "1.21.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.21.48",
|
|
6
|
+
"core_contract": "1.21.48",
|
|
7
|
+
"source_commit": "141779b1bd7ee5b97cc7882348ce1f2afeaa4e16",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-10-04T21:
|
|
9
|
+
"built_at": "2026-10-04T21:43:38.415Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 582,
|
|
13
13
|
"agent_docs_stubbed": 28,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2927,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3538,
|
|
20
|
+
"tree_sha256": "e81ef82d0393005076f8b6fcc7e3c950b80f6cc19496f52bb67c7908b2225e7d",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
{
|
|
43
43
|
"path": ".claude/skills/bongos-feedback/SKILL.md",
|
|
44
44
|
"mode": "0000644",
|
|
45
|
-
"sha256": "
|
|
45
|
+
"sha256": "b30912b54c07c873cc94398af0ffd6c8e364a0f7f81a866343667cc5a87da25a"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"path": ".claude/skills/bug-triage/SKILL.md",
|
|
@@ -134,11 +134,6 @@
|
|
|
134
134
|
"mode": "0000644",
|
|
135
135
|
"sha256": "5a2e7a11abdc9f0ecc81fbf057978523af56dcddcb712581337059c696a139db"
|
|
136
136
|
},
|
|
137
|
-
{
|
|
138
|
-
"path": ".claude/skills/feedback/SKILL.md",
|
|
139
|
-
"mode": "0000644",
|
|
140
|
-
"sha256": "184cc6f540628de549f8f6d1a745ff683759f17f1752a0ac8779f52327b57b3d"
|
|
141
|
-
},
|
|
142
137
|
{
|
|
143
138
|
"path": ".claude/skills/figma-design-sync/SKILL.md",
|
|
144
139
|
"mode": "0000644",
|
|
@@ -857,7 +852,7 @@
|
|
|
857
852
|
{
|
|
858
853
|
"path": "docs/adr/0087-bongos-app-architecture-and-handoff-contract.md",
|
|
859
854
|
"mode": "0000644",
|
|
860
|
-
"sha256": "
|
|
855
|
+
"sha256": "7ddee60cb02906bd2c9c232236555fa451bac920f569ac6216a2ac2a7e34a33c"
|
|
861
856
|
},
|
|
862
857
|
{
|
|
863
858
|
"path": "docs/adr/0087-compete-on-governance-not-tooling-cursor.md",
|
|
@@ -2827,7 +2822,7 @@
|
|
|
2827
2822
|
{
|
|
2828
2823
|
"path": "docs/file-map.md",
|
|
2829
2824
|
"mode": "0000644",
|
|
2830
|
-
"sha256": "
|
|
2825
|
+
"sha256": "459d6bf111e4644831a95374e9d9c9949568a068e96d9f106fe97a882084feeb"
|
|
2831
2826
|
},
|
|
2832
2827
|
{
|
|
2833
2828
|
"path": "docs/handoff-template.md",
|
|
@@ -2837,7 +2832,7 @@
|
|
|
2837
2832
|
{
|
|
2838
2833
|
"path": "docs/module-api-changelog.md",
|
|
2839
2834
|
"mode": "0000644",
|
|
2840
|
-
"sha256": "
|
|
2835
|
+
"sha256": "f2337e4898acad10a1930753518b89c507113f918bcaeb1c31af1414a9363fbf"
|
|
2841
2836
|
},
|
|
2842
2837
|
{
|
|
2843
2838
|
"path": "docs/modules-contract.md",
|
|
@@ -2927,7 +2922,7 @@
|
|
|
2927
2922
|
{
|
|
2928
2923
|
"path": "docs/page-readings.json",
|
|
2929
2924
|
"mode": "0000644",
|
|
2930
|
-
"sha256": "
|
|
2925
|
+
"sha256": "4f7125f8cac010333ee71c8a4cd1f9fd90c74542fc6ac25537383fe91ee769be"
|
|
2931
2926
|
},
|
|
2932
2927
|
{
|
|
2933
2928
|
"path": "docs/project-context.template.md",
|
|
@@ -5447,7 +5442,7 @@
|
|
|
5447
5442
|
{
|
|
5448
5443
|
"path": "modules/hall-ui/public/commands-lib.js",
|
|
5449
5444
|
"mode": "0000644",
|
|
5450
|
-
"sha256": "
|
|
5445
|
+
"sha256": "06fe68a65f0be9c56f710d8f44d7accd68e4d93baa22f8ca503a692815c8c45d"
|
|
5451
5446
|
},
|
|
5452
5447
|
{
|
|
5453
5448
|
"path": "modules/hall-ui/public/commands.css",
|
|
@@ -9897,12 +9892,12 @@
|
|
|
9897
9892
|
{
|
|
9898
9893
|
"path": "package-lock.json",
|
|
9899
9894
|
"mode": "0000644",
|
|
9900
|
-
"sha256": "
|
|
9895
|
+
"sha256": "3046f43e1dd43ae2efccde7dfa8631efaf621494b1fe8d5ecce7faf562289faa"
|
|
9901
9896
|
},
|
|
9902
9897
|
{
|
|
9903
9898
|
"path": "package.json",
|
|
9904
9899
|
"mode": "0000644",
|
|
9905
|
-
"sha256": "
|
|
9900
|
+
"sha256": "39d4d63b7a6eed490ce3ffb0ee4a6336690954a4c601286dfdeffe55d91a99e5"
|
|
9906
9901
|
},
|
|
9907
9902
|
{
|
|
9908
9903
|
"path": "public-docs/index.html",
|
|
@@ -9922,12 +9917,7 @@
|
|
|
9922
9917
|
{
|
|
9923
9918
|
"path": "release-notes.json",
|
|
9924
9919
|
"mode": "0000644",
|
|
9925
|
-
"sha256": "
|
|
9926
|
-
},
|
|
9927
|
-
{
|
|
9928
|
-
"path": "scripts/bongos-mcp.js",
|
|
9929
|
-
"mode": "0000644",
|
|
9930
|
-
"sha256": "1cd62877bb9777f9715ed7a2932e8832368d1a2051c2e5a02b1786824eda6b1d"
|
|
9920
|
+
"sha256": "8162b219a5b2d065551e8161d91c60888404ff890ede8d6bf15ea073d2903a8f"
|
|
9931
9921
|
},
|
|
9932
9922
|
{
|
|
9933
9923
|
"path": "scripts/cron/style_guide_audit.sh",
|
|
@@ -10424,11 +10414,6 @@
|
|
|
10424
10414
|
"mode": "0000644",
|
|
10425
10415
|
"sha256": "8ed7c35c0d6be3c8a11ee990b487114d7e422caeb70c67240b5060a0087cfdc4"
|
|
10426
10416
|
},
|
|
10427
|
-
{
|
|
10428
|
-
"path": "scripts/gds/feedback-latest.js",
|
|
10429
|
-
"mode": "0000644",
|
|
10430
|
-
"sha256": "75543005eb7b91d020b00ac1bc616ecba3a7ceeb35aa53222bbe2149835abfaa"
|
|
10431
|
-
},
|
|
10432
10417
|
{
|
|
10433
10418
|
"path": "scripts/gds/feedback-send.js",
|
|
10434
10419
|
"mode": "0000644",
|
|
@@ -10859,6 +10844,11 @@
|
|
|
10859
10844
|
"mode": "0000644",
|
|
10860
10845
|
"sha256": "aa998dd5f0e3e9f33032ac880e5b948e88eb9bc467125ea652e8e317beada0dd"
|
|
10861
10846
|
},
|
|
10847
|
+
{
|
|
10848
|
+
"path": "scripts/gds/pack-env-prefix.js",
|
|
10849
|
+
"mode": "0000644",
|
|
10850
|
+
"sha256": "c68f593ab10aa3773b594d781c0ab712daf5b0e9c7c52273ec6dddecccef179c"
|
|
10851
|
+
},
|
|
10862
10852
|
{
|
|
10863
10853
|
"path": "scripts/gds/package-core.js",
|
|
10864
10854
|
"mode": "0000644",
|
|
@@ -10967,7 +10957,7 @@
|
|
|
10967
10957
|
{
|
|
10968
10958
|
"path": "scripts/gds/provision-repo.js",
|
|
10969
10959
|
"mode": "0000644",
|
|
10970
|
-
"sha256": "
|
|
10960
|
+
"sha256": "8e2cf2e362b5e38832b53720a84ee0fb9003f9062cf9b7d03353a62fde936566"
|
|
10971
10961
|
},
|
|
10972
10962
|
{
|
|
10973
10963
|
"path": "scripts/gds/provision-teardown.js",
|
|
@@ -10977,12 +10967,12 @@
|
|
|
10977
10967
|
{
|
|
10978
10968
|
"path": "scripts/gds/provision-units.js",
|
|
10979
10969
|
"mode": "0000644",
|
|
10980
|
-
"sha256": "
|
|
10970
|
+
"sha256": "87e88c2f2f2aedad871b5d56d7d1528d9ee89fa568f0386eaa170843146db040"
|
|
10981
10971
|
},
|
|
10982
10972
|
{
|
|
10983
10973
|
"path": "scripts/gds/provision.js",
|
|
10984
10974
|
"mode": "0000644",
|
|
10985
|
-
"sha256": "
|
|
10975
|
+
"sha256": "f58a7db598467d02e496688f71327a2c39b0e680a4b3c24fc0d7dd6346e07c8b"
|
|
10986
10976
|
},
|
|
10987
10977
|
{
|
|
10988
10978
|
"path": "scripts/gds/publish-credential-check.js",
|
|
@@ -12142,12 +12132,12 @@
|
|
|
12142
12132
|
{
|
|
12143
12133
|
"path": "src/instance-config.js",
|
|
12144
12134
|
"mode": "0000644",
|
|
12145
|
-
"sha256": "
|
|
12135
|
+
"sha256": "9f837c9d2be2b5c6cc5c6b7dba0403cebc45f00602e491a52a952ca1c689ffd7"
|
|
12146
12136
|
},
|
|
12147
12137
|
{
|
|
12148
12138
|
"path": "src/module-api.js",
|
|
12149
12139
|
"mode": "0000644",
|
|
12150
|
-
"sha256": "
|
|
12140
|
+
"sha256": "3e7a5fe2e6d6f4388866fa0b9db145036de2ec0fc1ef146aa21c892c48f3a708"
|
|
12151
12141
|
},
|
|
12152
12142
|
{
|
|
12153
12143
|
"path": "src/module-loader/catalog.js",
|
|
@@ -13564,11 +13554,6 @@
|
|
|
13564
13554
|
"mode": "0000644",
|
|
13565
13555
|
"sha256": "74f8d8852b8949dc55ac38dd6f31da85bb55aae1215a146213495db898515086"
|
|
13566
13556
|
},
|
|
13567
|
-
{
|
|
13568
|
-
"path": "tests/feedback_latest.mjs",
|
|
13569
|
-
"mode": "0000644",
|
|
13570
|
-
"sha256": "bee534dc1d92fd9ac2031c01195dad92b941b9c820fe8e4122a135292655cfdc"
|
|
13571
|
-
},
|
|
13572
13557
|
{
|
|
13573
13558
|
"path": "tests/figma_adapter.mjs",
|
|
13574
13559
|
"mode": "0000644",
|
|
@@ -14922,7 +14907,7 @@
|
|
|
14922
14907
|
{
|
|
14923
14908
|
"path": "tests/instance_config.mjs",
|
|
14924
14909
|
"mode": "0000644",
|
|
14925
|
-
"sha256": "
|
|
14910
|
+
"sha256": "ba3404f1fd37d33dac3e64ac17a0c71fd8d73a56f7fcef362f5ffd1423136e55"
|
|
14926
14911
|
},
|
|
14927
14912
|
{
|
|
14928
14913
|
"path": "tests/instance_db_migrated_on_code_move.mjs",
|
|
@@ -14932,7 +14917,7 @@
|
|
|
14932
14917
|
{
|
|
14933
14918
|
"path": "tests/instance_feedback.mjs",
|
|
14934
14919
|
"mode": "0000644",
|
|
14935
|
-
"sha256": "
|
|
14920
|
+
"sha256": "e3402d4767d21bd6d5ab80ad6f0670d4c94c9c56ff1c4656ebd4218b191a8b1c"
|
|
14936
14921
|
},
|
|
14937
14922
|
{
|
|
14938
14923
|
"path": "tests/instance_manifest.mjs",
|
|
@@ -16057,7 +16042,7 @@
|
|
|
16057
16042
|
{
|
|
16058
16043
|
"path": "tests/provision.mjs",
|
|
16059
16044
|
"mode": "0000644",
|
|
16060
|
-
"sha256": "
|
|
16045
|
+
"sha256": "4ffddc6128eb9860d6b48493c4d9b6fd9e108f7c0e656f003bbbe32866b97675"
|
|
16061
16046
|
},
|
|
16062
16047
|
{
|
|
16063
16048
|
"path": "tests/provision_account_identity.mjs",
|
|
@@ -17022,7 +17007,7 @@
|
|
|
17022
17007
|
{
|
|
17023
17008
|
"path": "tests/skill_menu_ruling.mjs",
|
|
17024
17009
|
"mode": "0000644",
|
|
17025
|
-
"sha256": "
|
|
17010
|
+
"sha256": "47e45afa89da802b8cfad2b954c6b41ec1f79e359cb58c6667fca7e0b8972ab5"
|
|
17026
17011
|
},
|
|
17027
17012
|
{
|
|
17028
17013
|
"path": "tests/skill_preflight.mjs",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bongos-feedback
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
4
|
+
Send feedback, a bug or a wish about Bongos itself to its maintainers; unasked when a builder vents. Triggers: "Bongos feedback: …", "tell the Bongos team", "Bongos should…", "Bongos is broken", "this keeps failing", "/bongos-feedback".
|
|
5
5
|
plain: >-
|
|
6
6
|
Sends a short note about a problem with Bongos, or an idea for it, to the people who build Bongos. It also does this by itself when you complain that Bongos is not working.
|
|
7
7
|
reach-for: >-
|
|
@@ -12,16 +12,17 @@ cost: >-
|
|
|
12
12
|
|
|
13
13
|
**Script skill (authoritative).** The core action is `bongos feedback "<message>"` (or `--idea "<message>"`, or `--message-file <path>`). Run it and print its output verbatim.
|
|
14
14
|
|
|
15
|
-
This
|
|
15
|
+
This **sends** a note about Bongos — the tool — upstream to its maintainers on Cloud Bongos, where a bug becomes a task waiting for a maintainer's approval (tasks 1004462, 1004467).
|
|
16
16
|
|
|
17
17
|
## Two ways in
|
|
18
18
|
|
|
19
|
-
- **Asked** — the builder
|
|
19
|
+
- **Asked** — the builder labels a message as feedback for Bongos ("Bongos feedback: …", "feedback for Bongos", "tell the Bongos team", "report this") or runs `/bongos-feedback`. A message that already says what the feedback is **is** the go: write the report, send it, and show them what was sent. Only when they ask you to report something without saying what, draft it and send on their go.
|
|
20
|
+
- **Suggestions count.** Feedback is not only breakage. "Bongos should…", "I don't want Bongos to…", or a complaint about how Bongos organises their work (versions, goals, tasks, ranks) is feedback too — send it with `--idea`. Fixing it in their own project (moving the goal, saving a preference) is fine, but it does not replace sending it: the next project would hit the same thing.
|
|
20
21
|
- **Proactive** — the builder is venting that Bongos is not working: frustration, swearing, "this is broken again", "why does X keep failing", "Bongos is useless today". **File it without being asked**, then tell them in one line (below). The owner's standing rule (2026-09-30): every rant about Bongos not working becomes something to fix. Do not ask permission first, and do not argue them out of it.
|
|
21
22
|
|
|
22
23
|
## Is it about Bongos? (proactive mode files only when yes)
|
|
23
24
|
|
|
24
|
-
File when the complaint is about **Bongos itself**: a `bongos`/`/builder-*` command, a claim, ship, grade, merge or deploy step, the hall, Settings, sign-in, credits, the upgrade, or a Bongos message that confused them.
|
|
25
|
+
File when the complaint is about **Bongos itself**: how it organises their work (a goal that forced a new version, a version they did not want), a `bongos`/`/builder-*` command, a claim, ship, grade, merge or deploy step, the hall, Settings, sign-in, credits, the upgrade, or a Bongos message that confused them.
|
|
25
26
|
|
|
26
27
|
Do **not** file when it is about their **own project's** code, tests or design, about Claude itself, their laptop, GitHub or another service — or when the "problem" is a rule working as designed (an `[otb-plain]` card saying `By design: Yes`). If it is genuinely unclear, fix the thing in front of you first and file only if it turns out to be Bongos.
|
|
27
28
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Date:** 2026-06-26
|
|
4
4
|
**Context:** Bongos App `BONGOS-V1` / criterion C4 (the feedback loop closes — capture lands in a coding agent), task [#1312](https://example.com/builders#/task/1312) (`BV1.R33`). Records the architecture the R01–R14 rungs built and pins the contract the three handoff paths (R12 [#1307](https://example.com/builders#/task/1307), R13 [#1308](https://example.com/builders#/task/1308), R14 [#1309](https://example.com/builders#/task/1309)) share. Builds on [ADR 0045](0045-devbox-desktop-app.md) (the Dev Box desktop app, now absorbed), [ADR 0072](0072-bongos-app-mac-signed-first-windows-deferred.md) (signing posture), [ADR 0083](0083-modular-architecture-strangler-build-plan.md) (the modular core), and the [ADR 0062](0062-medusa-instance-model-decoupling.md) core↔host split.
|
|
5
|
-
**Status:** Accepted.
|
|
5
|
+
**Status:** Accepted. **Handoff half retired 2026-10-04 (task 1004576):** the desktop app was never built, so the `/feedback` skill, its `feedback-latest.js` engine and the `bongos-mcp.js` launcher were deleted. Builders send feedback about Bongos with `/bongos-feedback` instead.
|
|
6
6
|
**Track:** `internal` (development system → the Cloud Bongos desktop app line; bongos succeeds the GDS as the primary builder surface after GDS-V4).
|
|
7
7
|
|
|
8
8
|
## Problem — feedback has nowhere to land
|
|
@@ -32,7 +32,7 @@ This ADR records (a) the app's overall shape, and (b) the one contract all the h
|
|
|
32
32
|
**One shared `latest` pointer; three readers.** Every write of a bundle (`bundle.js writeBundle`) records it as `latest` — an atomic `latest.json` pointer plus a best-effort `latest/` symlink — in `bongos-app/src/handoff.js`. All three handoff paths resolve "the newest bundle" through that one `resolveLatest()`, so they can never drift:
|
|
33
33
|
|
|
34
34
|
1. **Claude Desktop — file-bundle + clipboard (R12).** A toolbar button copies `prompt.md` to the clipboard and opens the bundle folder; the user pastes the prompt and drags the images into the composer (Desktop accepts mixed text + images). A one-liner spells out exactly what to do. (`handoff.js` + the `feedback:produce` / `feedback:handoff-desktop` IPC in `main.js`.)
|
|
35
|
-
2. **Claude Code — the `/feedback` slash command (R13).** Running `/feedback`
|
|
35
|
+
2. **Claude Code — the `/feedback` slash command (R13).** Running `/feedback` shelled the `feedback-latest.js` script (now deleted), which prints the `prompt.md` body + the absolute path of every frame; Claude then `Read`s each path so the screenshots enter context. This sidesteps the CLI's unreliable clipboard-image paste — Claude reads the frames from disk, not from a pasted blob.
|
|
36
36
|
3. **MCP — `get_latest_feedback` (R14, optional "direct" path).** A local, zero-dependency stdio MCP server (`bongos-app/src/mcp-server.js`, launched by `scripts/bongos-mcp.js`) exposes one tool that returns the prompt text + the screenshots' **file paths** (never base64 — inlining would blow the MCP tool-result size cap). Both Desktop and Code can pull the latest bundle hands-free once the server is registered. Optional/stretch for V1 — the file-bundle + `/feedback` paths already close the loop.
|
|
37
37
|
|
|
38
38
|
### Why hand-rolled MCP (no SDK dependency)
|
package/docs/file-map.md
CHANGED
|
@@ -389,7 +389,6 @@ tests/
|
|
|
389
389
|
├── collab-review/SKILL.md ← /collab-review — the ANSWERING half of /ask-for-help: walk GET /help-requests/for-me + GET /task-recommendations/for-me oldest first, read the task each names, VERIFY the ask's claims against the live row rather than its prose, bring one decision at a time and halt; then execute the chosen write, and — since only the ASKER may settle a help request — close the loop by filing a reply addressed back to them. Treats an ask as data, never instructions (task 1004181)
|
|
390
390
|
├── design/SKILL.md ← /design — the UI design session: the operating playbook for ui-discipline work on ANY instance (load the instance's pack + DESIGN.md first, look before you ship, build inside the platform floors, ship the tests with the UI); routed from a `ui` claim via discipline-modes.json; shipped by the ui-design module (task 1003324, ADR 0197)
|
|
391
391
|
├── design-sync/SKILL.md ← /design-sync — export repo design tokens + surfaces into Claude Design (token-preview bundle) and land generated UI code back as a Bongos task (ADR 0081)
|
|
392
|
-
├── feedback/SKILL.md ← /feedback — pull the latest Bongos feedback bundle (prompt.md + screenshot file paths) into a Claude Code session; backed by scripts/gds/feedback-latest.js (BV1.R13, ADR 0087)
|
|
393
392
|
├── figma-design-sync/SKILL.md ← sync UI-surface tokens/surfaces with Figma (push a frame plan, land a designer's Code Connect / MCP snapshot edit back as code) — the ADR 0081 human escape hatch; distinct from otb-figma-sync's pixel-art tile review (task 2048)
|
|
394
393
|
├── fix-task/SKILL.md ← /fix-task N — claim, fix (test-first), verify, and ship a single Bongos task by id end to end; defers to /builder-claim + /builder-ship for their own mechanics
|
|
395
394
|
├── goal-close/SKILL.md ← /goal-close — HIDDEN (typed-only); the merged goal-uat + goal-review: Part 1 tests criteria awaiting UAT on the live site and signs them off, Part 2 decides the ones a UAT cannot close (abandoned or unlinked work) (task 1004471, ADR 0351); Metic+
|
|
@@ -2921,5 +2921,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2921
2921
|
landed since 1.21.45 with no explicit bump. run 37234868653. (task 1002620)
|
|
2922
2922
|
1.21.47 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2923
2923
|
landed since 1.21.46 with no explicit bump. run 37236095022. (task 1002620)
|
|
2924
|
+
1.21.48 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2925
|
+
landed since 1.21.47 with no explicit bump. run 37237206637. (task 1002620)
|
|
2924
2926
|
---------------------------------------------------------------------------
|
|
2925
2927
|
```
|
package/docs/page-readings.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"adr": "0341 D3",
|
|
6
6
|
"reread": "node scripts/gds/page-reader.js --stale",
|
|
7
7
|
"how": ["Generated by node scripts/gds/page-reader.js (BV2.TW04, task 1004315; ADR 0341 D3). Do not hand-edit.","One entry per page of docs/page-inventory.json. Lines are in page order: the default state first, and a line only another state shows sits where that state shows it, with its state named.","placement: placed = a docs/copy-registry.json row renders it (file, line, string_id); shared = shell text every page of the surface carries (top bar, sidebar, footer), with its row when the registry has one; unplaced = the registry cannot place it (a rewrite becomes an engineer task, ADR 0341 D4).","text keeps {…} where the registry row has a hole, or where a value the page read from its API was filled in. A string that is only such data is counted under omitted.data, not listed.","reading_hash is over the non-shared lines (key, section, text); files_hash is over the page's inventory files. --check compares files_hash only and never opens a browser.","Rendered through the hall-preview harness (hall) and the ui-design kit stub (landing, status), at 1280x800 with the clock pinned, so a reading is the fixture world's page."],
|
|
8
|
-
"counts": {"pages":42,"lines":
|
|
8
|
+
"counts": {"pages":42,"lines":4921,"placed":1555,"shared":382,"unplaced":2984,"omitted_data":2442},
|
|
9
9
|
"pages": [
|
|
10
10
|
{
|
|
11
11
|
"id": "builders:atlas",
|
|
@@ -306,16 +306,16 @@
|
|
|
306
306
|
"surface": "builders",
|
|
307
307
|
"title": "Commands",
|
|
308
308
|
"states_read": ["in","out"],
|
|
309
|
-
"files_hash": "
|
|
310
|
-
"reading_hash": "
|
|
311
|
-
"counts": {"lines":
|
|
309
|
+
"files_hash": "4e1fc3fc2c0399d7",
|
|
310
|
+
"reading_hash": "78d3343283bfe6a2",
|
|
311
|
+
"counts": {"lines":87,"placed":61,"shared":9,"unplaced":17},
|
|
312
312
|
"omitted": {"data":141},
|
|
313
313
|
"notes": [],
|
|
314
314
|
"lines": [
|
|
315
315
|
{"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/hall-ui/public/shell.js","line":811,"string_id":"87cee78ca134"},
|
|
316
316
|
{"key":"L0002","section":"top bar","text":"Commands","placement":"shared"},
|
|
317
317
|
{"key":"L0003","section":"top bar","text":"Jump to…","placement":"shared","file":"modules/hall-ui/public/shell.js","line":495,"string_id":"eba610d25523"},
|
|
318
|
-
{"key":"L0004","section":"top bar","text":"
|
|
318
|
+
{"key":"L0004","section":"top bar","text":"⌘K","placement":"shared"},
|
|
319
319
|
{"key":"L0005","section":"top bar","text":"Building","placement":"shared"},
|
|
320
320
|
{"key":"L0006","section":"top bar","text":"Artistry","placement":"shared"},
|
|
321
321
|
{"key":"L0007","section":"top bar","text":"Ideating","placement":"shared"},
|
|
@@ -341,16 +341,16 @@
|
|
|
341
341
|
{"key":"L0027","section":"Your daily loop 9","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","occurrences":2},
|
|
342
342
|
{"key":"L0028","section":"Your daily loop 9","text":"Shown to Claude","placement":"placed","file":"modules/hall-ui/public/commands.html","line":36,"string_id":"b20cd8a4fa21","occurrences":9},
|
|
343
343
|
{"key":"L0029","section":"Your daily loop 9","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":4},
|
|
344
|
-
{"key":"L0030","section":"{…} and {…}","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":
|
|
345
|
-
{"key":"L0031","section":"{…} and {…}","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":
|
|
344
|
+
{"key":"L0030","section":"{…} and {…}","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":28},
|
|
345
|
+
{"key":"L0031","section":"{…} and {…}","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":29},
|
|
346
346
|
{"key":"L0032","section":"{…} and {…}","text":"Command","placement":"unplaced","occurrences":3},
|
|
347
347
|
{"key":"L0033","section":"{…} and {…}","text":"What it does","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"0efa2f18bb6c","occurrences":3},
|
|
348
348
|
{"key":"L0034","section":"{…} and {…}","text":"When to reach for it","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"a6e102816e92","occurrences":3},
|
|
349
349
|
{"key":"L0035","section":"{…} and {…}","text":"What it costs","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"65fd1339e2f2","occurrences":3},
|
|
350
350
|
{"key":"L0036","section":"{…} and {…}","text":"How you start it","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"3438c73d4f3d","occurrences":3},
|
|
351
|
-
{"key":"L0037","section":"{…} and {…}","text":"Shown to Claude","placement":"placed","file":"modules/hall-ui/public/commands.html","line":36,"string_id":"b20cd8a4fa21","occurrences":
|
|
351
|
+
{"key":"L0037","section":"{…} and {…}","text":"Shown to Claude","placement":"placed","file":"modules/hall-ui/public/commands.html","line":36,"string_id":"b20cd8a4fa21","occurrences":31},
|
|
352
352
|
{"key":"L0038","section":"{…} and {…}","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","occurrences":5},
|
|
353
|
-
{"key":"L0039","section":"{…} and {…}","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","occurrences":
|
|
353
|
+
{"key":"L0039","section":"{…} and {…}","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","occurrences":3},
|
|
354
354
|
{"key":"L0040","section":"{…} routines 13","text":"{…} routines","placement":"unplaced"},
|
|
355
355
|
{"key":"L0041","section":"{…} routines 13","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":5},
|
|
356
356
|
{"key":"L0042","section":"{…} routines 13","text":"Command","placement":"unplaced"},
|
|
@@ -371,33 +371,34 @@
|
|
|
371
371
|
{"key":"L0057","section":"{…} project{…}","text":"How you start it","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"3438c73d4f3d"},
|
|
372
372
|
{"key":"L0058","section":"{…} project{…}","text":"Shown to Claude","placement":"placed","file":"modules/hall-ui/public/commands.html","line":36,"string_id":"b20cd8a4fa21","occurrences":5},
|
|
373
373
|
{"key":"L0059","section":"{…} project{…}","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":3},
|
|
374
|
-
{"key":"L0060","section":"Everything else
|
|
375
|
-
{"key":"L0061","section":"Everything else
|
|
376
|
-
{"key":"L0062","section":"Everything else
|
|
377
|
-
{"key":"L0063","section":"Everything else
|
|
378
|
-
{"key":"L0064","section":"Everything else
|
|
379
|
-
{"key":"L0065","section":"Everything else
|
|
380
|
-
{"key":"L0066","section":"Everything else
|
|
381
|
-
{"key":"L0067","section":"Everything else
|
|
382
|
-
{"key":"L0068","section":"Everything else
|
|
383
|
-
{"key":"L0069","section":"Everything else
|
|
384
|
-
{"key":"L0070","section":"Everything else
|
|
385
|
-
{"key":"L0071","section":"
|
|
386
|
-
{"key":"L0072","section":"Terminal commands (bongos)","text":"
|
|
387
|
-
{"key":"L0073","section":"Terminal commands (bongos)","text":"
|
|
388
|
-
{"key":"L0074","section":"Terminal commands (bongos)","text":"
|
|
389
|
-
{"key":"L0075","section":"Terminal commands (bongos)","text":"
|
|
390
|
-
{"key":"L0076","section":"
|
|
391
|
-
{"key":"L0077","section":"
|
|
392
|
-
{"key":"L0078","section":"
|
|
393
|
-
{"key":"L0079","section":"What are you doing now?","text":"
|
|
394
|
-
{"key":"L0080","section":"What are you doing now?","text":"
|
|
395
|
-
{"key":"L0081","section":"What are you doing now?","text":"
|
|
396
|
-
{"key":"L0082","section":"What are you doing now?","text":"
|
|
397
|
-
{"key":"L0083","section":"What are you doing now?","text":"
|
|
398
|
-
{"key":"L0084","section":"What are you doing now?","text":"
|
|
399
|
-
{"key":"L0085","section":"What are you doing now?","text":"
|
|
400
|
-
{"key":"L0086","section":"What are you doing now?","text":"
|
|
374
|
+
{"key":"L0060","section":"Everything else 6","text":"Everything else","placement":"unplaced"},
|
|
375
|
+
{"key":"L0061","section":"Everything else 6","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","occurrences":8},
|
|
376
|
+
{"key":"L0062","section":"Everything else 6","text":"Command","placement":"unplaced"},
|
|
377
|
+
{"key":"L0063","section":"Everything else 6","text":"What it does","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"0efa2f18bb6c"},
|
|
378
|
+
{"key":"L0064","section":"Everything else 6","text":"When to reach for it","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"a6e102816e92"},
|
|
379
|
+
{"key":"L0065","section":"Everything else 6","text":"What it costs","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"65fd1339e2f2"},
|
|
380
|
+
{"key":"L0066","section":"Everything else 6","text":"How you start it","placement":"placed","file":"modules/hall-ui/public/commands-lib.js","line":100,"string_id":"3438c73d4f3d"},
|
|
381
|
+
{"key":"L0067","section":"Everything else 6","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":3},
|
|
382
|
+
{"key":"L0068","section":"Everything else 6","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07"},
|
|
383
|
+
{"key":"L0069","section":"Everything else 6","text":"Shown to Claude","placement":"placed","file":"modules/hall-ui/public/commands.html","line":36,"string_id":"b20cd8a4fa21","occurrences":6},
|
|
384
|
+
{"key":"L0070","section":"Everything else 6","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","occurrences":2},
|
|
385
|
+
{"key":"L0071","section":"Everything else 6","text":"Having a command does not give you permission to use it: some refuse below a certain rank, and that is checked every time it runs.","placement":"placed","file":"modules/hall-ui/public/commands.html","line":40,"string_id":"5fb6c11ea890"},
|
|
386
|
+
{"key":"L0072","section":"Terminal commands (bongos)","text":"Terminal commands (bongos)","placement":"placed","file":"modules/hall-ui/public/commands.html","line":44,"string_id":"1e4285bdfaef"},
|
|
387
|
+
{"key":"L0073","section":"Terminal commands (bongos)","text":"The same work from any terminal, outside Claude Code. Run","placement":"placed","file":"modules/hall-ui/public/commands.html","line":45,"string_id":"ec849c59d583"},
|
|
388
|
+
{"key":"L0074","section":"Terminal commands (bongos)","text":"bongos help","placement":"placed","file":"modules/hall-ui/public/commands.html","line":45,"string_id":"e81d92078af1"},
|
|
389
|
+
{"key":"L0075","section":"Terminal commands (bongos)","text":"to see this list there.","placement":"placed","file":"modules/hall-ui/public/commands.html","line":45,"string_id":"3c9ba5dc851d"},
|
|
390
|
+
{"key":"L0076","section":"Terminal commands (bongos)","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5"},
|
|
391
|
+
{"key":"L0077","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":471,"string_id":"1883ad7f07fc"},
|
|
392
|
+
{"key":"L0078","section":"Terminal commands (bongos)","text":"Builders hall · this session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":346,"string_id":"fd1903586e8e"},
|
|
393
|
+
{"key":"L0079","section":"What are you doing now?","text":"What are you doing now?","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":347,"string_id":"60853319f290"},
|
|
394
|
+
{"key":"L0080","section":"What are you doing now?","text":"Pick one. You can switch any time from the top bar.","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":348,"string_id":"4f87d5b17b54"},
|
|
395
|
+
{"key":"L0081","section":"What are you doing now?","text":"Building","placement":"unplaced"},
|
|
396
|
+
{"key":"L0082","section":"What are you doing now?","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":3},
|
|
397
|
+
{"key":"L0083","section":"What are you doing now?","text":"Artistry","placement":"unplaced"},
|
|
398
|
+
{"key":"L0084","section":"What are you doing now?","text":"Ideating","placement":"unplaced"},
|
|
399
|
+
{"key":"L0085","section":"What are you doing now?","text":"Turn thoughts into ideas.","placement":"unplaced"},
|
|
400
|
+
{"key":"L0086","section":"What are you doing now?","text":"Governing","placement":"unplaced"},
|
|
401
|
+
{"key":"L0087","section":"What are you doing now?","text":"Ask me again next session","placement":"placed","file":"modules/hall-ui/public/craft-mode.js","line":351,"string_id":"fa86bf403775"}
|
|
401
402
|
]
|
|
402
403
|
},
|
|
403
404
|
{
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
{
|
|
25
25
|
key: 'find', label: 'Finding things out and working with others',
|
|
26
26
|
blurb: 'Looking up what the project already knows, asking for help, and passing work on.',
|
|
27
|
-
names: ['status', 'recall', 'ask-for-help', 'collab-review', 'session-handoff', 'read-session-export'
|
|
27
|
+
names: ['status', 'recall', 'ask-for-help', 'collab-review', 'session-handoff', 'read-session-export'],
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
key: 'owner', label: 'Owner routines',
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.21.
|
|
3
|
+
"version": "1.21.48",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.21.
|
|
9
|
+
"version": "1.21.48",
|
|
10
10
|
"license": "AGPL-3.0-or-later",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"express": "^4.21.2",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.21.
|
|
3
|
+
"version": "1.21.48",
|
|
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",
|
package/release-notes.json
CHANGED
|
@@ -9046,5 +9046,15 @@
|
|
|
9046
9046
|
"id": "1004562",
|
|
9047
9047
|
"text": "Walked every building and floor desk of the Governor City in light, dark and on a phone, and fixed what did not match the design: number tiles now say what they count, a cleared floor no longer shows a stale count, counts read"
|
|
9048
9048
|
}
|
|
9049
|
+
],
|
|
9050
|
+
"1.21.48": [
|
|
9051
|
+
{
|
|
9052
|
+
"id": "1004576",
|
|
9053
|
+
"text": "Saying \"Bongos feedback: …\" or suggesting how Bongos should behave now reliably sends it to the Bongos team; an unused leftover skill that confused this was removed."
|
|
9054
|
+
},
|
|
9055
|
+
{
|
|
9056
|
+
"id": "1004573",
|
|
9057
|
+
"text": "A project brought in from an existing repo now always picks up the sign-in and settings the platform gives it, instead of silently ignoring them."
|
|
9058
|
+
}
|
|
9049
9059
|
]
|
|
9050
9060
|
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// scripts/gds/pack-env-prefix.js — which env-var names a hosted project reads, and
|
|
4
|
+
// whether its own pack agrees with what the provisioning runner writes (task 1004573).
|
|
5
|
+
//
|
|
6
|
+
// WHY. The runner writes every hosted project's /etc/<slug>/web.env under ONE prefix
|
|
7
|
+
// (provisionedEnvPrefix). A project ADOPTED from an existing repo brings its own
|
|
8
|
+
// config/branding.json, and mercury's said envPrefix CLOUDBONGOS while web.env carried
|
|
9
|
+
// BONGOS_* — so the project read none of its sign-in credentials, its address or any
|
|
10
|
+
// setting, and the only symptom anyone saw was "did not report sign-in ready".
|
|
11
|
+
//
|
|
12
|
+
// Its own file because both provision-units.js (web.env) and provision-repo.js (the
|
|
13
|
+
// adopt scaffold) need it, and provision-units already requires provision-repo — a
|
|
14
|
+
// helper living in either would make a require cycle. Requires only provision-config.
|
|
15
|
+
|
|
16
|
+
const fs = require('node:fs');
|
|
17
|
+
const path = require('node:path');
|
|
18
|
+
const { REPO_ROOT } = require('./provision-config.js');
|
|
19
|
+
|
|
20
|
+
// The pack whose envPrefix a provisioned instance inherits unless its own pack says
|
|
21
|
+
// otherwise (see the long note on ENV_PREFIX_PACK's history in provision-units.js).
|
|
22
|
+
const ENV_PREFIX_PACK = 'config/branding.neutral.json';
|
|
23
|
+
|
|
24
|
+
// The env-var prefix a provisioned instance actually RESOLVES — i.e. the envPrefix
|
|
25
|
+
// of the pack it loads (ENV_PREFIX_PACK). src/instance-config.resolveEnv
|
|
26
|
+
// reads <envPrefix>_<SUFFIX>, and src/branding.resolveBranding applies
|
|
27
|
+
// <envPrefix>_{PUBLIC,BUILDERS,…}_ORIGIN overrides — so a web.env var only takes
|
|
28
|
+
// effect under THIS prefix. Read from the pack (fail-soft to the vanilla default)
|
|
29
|
+
// so it stays in lockstep instead of a magic string. (The prior slug-based prefix
|
|
30
|
+
// was a latent bug: it never matched the neutral pack's CLOUDBONGOS envPrefix, so
|
|
31
|
+
// the OAuth creds were silently unreadable — task 1972.)
|
|
32
|
+
function provisionedEnvPrefix() {
|
|
33
|
+
const { FALLBACK_ENV_PREFIX } = require('../../src/instance-config'); // eslint-disable-line global-require
|
|
34
|
+
try {
|
|
35
|
+
const pack = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, ENV_PREFIX_PACK), 'utf8'));
|
|
36
|
+
return pack.envPrefix || FALLBACK_ENV_PREFIX;
|
|
37
|
+
} catch { return FALLBACK_ENV_PREFIX; }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// The envPrefix a pack's text names, or null (no pack, not JSON, no envPrefix).
|
|
41
|
+
function packEnvPrefix(packText) {
|
|
42
|
+
try {
|
|
43
|
+
const pack = JSON.parse(String(packText || ''));
|
|
44
|
+
return pack && typeof pack.envPrefix === 'string' ? pack.envPrefix : null;
|
|
45
|
+
} catch { return null; }
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Does the instance's OWN pack read the names this runner writes? PURE: give it the
|
|
49
|
+
// pack's text (or null when it could not be read) and the prefix written; it returns
|
|
50
|
+
// a sentence naming the mismatch, or null when the names agree or the pack says nothing.
|
|
51
|
+
function envPrefixMismatch(packText, written = provisionedEnvPrefix()) {
|
|
52
|
+
const own = packEnvPrefix(packText);
|
|
53
|
+
if (!own || own === written) return null;
|
|
54
|
+
return `the project's config/branding.json reads settings named ${own}_*, but the platform wrote ${written}_* — set its envPrefix to "${written}"`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// The adopt scaffold's half of the fix: rewrite ONLY the envPrefix value in an adopted
|
|
58
|
+
// repo's config/branding.json so the project reads the names this runner writes,
|
|
59
|
+
// leaving every other byte of the owner's file as they wrote it (a JSON round-trip
|
|
60
|
+
// would reflow it). PURE. Returns { text, from } when it changed something, or null
|
|
61
|
+
// when the names already agree, the pack names no prefix, or it is not JSON.
|
|
62
|
+
function normalizePackEnvPrefix(packText, written = provisionedEnvPrefix()) {
|
|
63
|
+
const raw = String(packText || '');
|
|
64
|
+
const own = packEnvPrefix(raw);
|
|
65
|
+
if (!own || own === written) return null;
|
|
66
|
+
const re = /("envPrefix"\s*:\s*)"[^"]*"/;
|
|
67
|
+
if (!re.test(raw)) return null;
|
|
68
|
+
const text = raw.replace(re, (_m, key) => `${key}"${written}"`);
|
|
69
|
+
if (packEnvPrefix(text) !== written) return null;
|
|
70
|
+
return { text, from: own };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = { ENV_PREFIX_PACK, provisionedEnvPrefix, envPrefixMismatch, normalizePackEnvPrefix };
|
|
@@ -19,6 +19,7 @@ const { CONFIG, REPO_ROOT, coreVersionSafe, provisionerBotEmail, provisionerBotN
|
|
|
19
19
|
// upgrade.js can reach these three without pulling provision*.js into the merge
|
|
20
20
|
// resolver's executed closure; re-exported below so every existing caller is unchanged.
|
|
21
21
|
const { instanceRepoRemote, parseTargetRef, resolveOwnerGithubToken } = require('./provision-repo-auth.js');
|
|
22
|
+
const { normalizePackEnvPrefix } = require('./pack-env-prefix.js'); // an adopted pack's envPrefix (task 1004573)
|
|
22
23
|
const { CORE_PKG, compareSemver, isStable } = require('./update-channel.js');
|
|
23
24
|
|
|
24
25
|
function dbName(inst) { return inst.db_name || inst.slug; }
|
|
@@ -832,6 +833,18 @@ async function scaffoldStandaloneRepo(inst, deps) {
|
|
|
832
833
|
} else {
|
|
833
834
|
writeFile(giPath, INSTANCE_GITIGNORE);
|
|
834
835
|
}
|
|
836
|
+
// Adopt layers config only where ABSENT, so an owner's existing config/branding.json
|
|
837
|
+
// keeps whatever envPrefix it carried — and web.env is written under the platform's.
|
|
838
|
+
// Mercury's said CLOUDBONGOS: it read none of its credentials or settings (task 1004573).
|
|
839
|
+
// Rewrite just that one value, in this same commit, so the repo and web.env agree.
|
|
840
|
+
const packPath = path.join(root, 'config', 'branding.json');
|
|
841
|
+
if (mode === 'adopt' && fs.existsSync(packPath)) {
|
|
842
|
+
const fixed = normalizePackEnvPrefix(fs.readFileSync(packPath, 'utf8'));
|
|
843
|
+
if (fixed) {
|
|
844
|
+
writeFile(packPath, fixed.text);
|
|
845
|
+
log(` [scaffold] config/branding.json envPrefix ${fixed.from} → the platform's, so the project reads the settings it is given`);
|
|
846
|
+
}
|
|
847
|
+
}
|
|
835
848
|
exec(`git -C ${root} config user.name "${provisionerBotName()}"`);
|
|
836
849
|
exec(`git -C ${root} config user.email "${provisionerBotEmail()}"`);
|
|
837
850
|
exec(`git -C ${root} add -A`);
|