@bongos/core 1.19.851 → 1.19.853
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 +41 -31
- package/docs/adr/0125-control-plane-scaffolds-standalone-instance-repo.md +3 -1
- package/docs/adr/0305-a-recipe-lives-with-what-it-documents.md +157 -0
- package/docs/adr/README.md +1 -0
- package/docs/copy-inventory.md +17 -16
- package/docs/copy-registry.json +26 -17
- package/docs/module-api-changelog.md +5 -1
- package/docs/recipes/core-release-pipeline.md +11 -2
- package/docs/recipes/upgrading-the-core.md +1 -0
- package/modules/hall-ui/public/builders.js +65 -6
- package/modules/hall-ui/public/hall-kit.js +72 -6
- package/modules/hall-ui/public/hall-render.js +103 -11
- package/modules/hall-ui/public/style.css +20 -0
- package/modules/lifecycle/db-analytics.js +79 -20
- package/modules/lifecycle/routes/analytics.js +22 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/provision-repo-auth.js +51 -8
- package/scripts/gds/update-channel.js +27 -7
- package/scripts/gds/upgrade.js +20 -7
- package/src/module-api.js +1 -1
- package/tests/curve_kind_overlay.mjs +298 -0
- package/tests/provision.mjs +46 -3
- package/tests/rank_gate.mjs +35 -7
- package/tests/update_channel.mjs +31 -0
- package/tests/upgrade.mjs +142 -1
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.853",
|
|
6
|
+
"core_contract": "1.19.853",
|
|
7
|
+
"source_commit": "23d160b78996d913c0510928995bae59a1ae6832",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-17T21:14:11.854Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 497,
|
|
13
13
|
"agent_docs_stubbed": 26,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2278,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2801,
|
|
20
|
+
"tree_sha256": "cfc90395d496db6fa9ae34f98458137adcc184faa73c806f2bfdba99027d74ff",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -1097,7 +1097,7 @@
|
|
|
1097
1097
|
{
|
|
1098
1098
|
"path": "docs/adr/0125-control-plane-scaffolds-standalone-instance-repo.md",
|
|
1099
1099
|
"mode": "0000644",
|
|
1100
|
-
"sha256": "
|
|
1100
|
+
"sha256": "6bfb8f4bd56438f39f9e57892653f6680bd54a4d4661d91a10018eef9e286db0"
|
|
1101
1101
|
},
|
|
1102
1102
|
{
|
|
1103
1103
|
"path": "docs/adr/0126-dedicated-cloudbongos-control-plane-droplet.md",
|
|
@@ -2014,10 +2014,15 @@
|
|
|
2014
2014
|
"mode": "0000644",
|
|
2015
2015
|
"sha256": "104b5675fe52c1725dbbc78ab6fde9fd676b4020bf0e3f05411733c95d4342e0"
|
|
2016
2016
|
},
|
|
2017
|
+
{
|
|
2018
|
+
"path": "docs/adr/0305-a-recipe-lives-with-what-it-documents.md",
|
|
2019
|
+
"mode": "0000644",
|
|
2020
|
+
"sha256": "4571564a9bf5ccb08996bd1fae58b69945c6cccbc9ce3b58c634acc087cb7698"
|
|
2021
|
+
},
|
|
2017
2022
|
{
|
|
2018
2023
|
"path": "docs/adr/README.md",
|
|
2019
2024
|
"mode": "0000644",
|
|
2020
|
-
"sha256": "
|
|
2025
|
+
"sha256": "00361bb3425bda49646f676baac8ef458bb3c5c32f128767c269e96985d41ccf"
|
|
2021
2026
|
},
|
|
2022
2027
|
{
|
|
2023
2028
|
"path": "docs/api-reference.md",
|
|
@@ -2052,12 +2057,12 @@
|
|
|
2052
2057
|
{
|
|
2053
2058
|
"path": "docs/copy-inventory.md",
|
|
2054
2059
|
"mode": "0000644",
|
|
2055
|
-
"sha256": "
|
|
2060
|
+
"sha256": "4f6e17550f44d1974e98338d2ab1bd59bce9681c741ebbcdad7c35d5105d1c10"
|
|
2056
2061
|
},
|
|
2057
2062
|
{
|
|
2058
2063
|
"path": "docs/copy-registry.json",
|
|
2059
2064
|
"mode": "0000644",
|
|
2060
|
-
"sha256": "
|
|
2065
|
+
"sha256": "cdfb4dc21b70a0b6ddba18951431a44e103e95be84ebb07e6fcba3ad2030379a"
|
|
2061
2066
|
},
|
|
2062
2067
|
{
|
|
2063
2068
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2582,7 +2587,7 @@
|
|
|
2582
2587
|
{
|
|
2583
2588
|
"path": "docs/module-api-changelog.md",
|
|
2584
2589
|
"mode": "0000644",
|
|
2585
|
-
"sha256": "
|
|
2590
|
+
"sha256": "cd9e820a59b864c0b7c48431cbfe39edfeb421fcb807d24679a768c217373720"
|
|
2586
2591
|
},
|
|
2587
2592
|
{
|
|
2588
2593
|
"path": "docs/modules-contract.md",
|
|
@@ -2702,7 +2707,7 @@
|
|
|
2702
2707
|
{
|
|
2703
2708
|
"path": "docs/recipes/core-release-pipeline.md",
|
|
2704
2709
|
"mode": "0000644",
|
|
2705
|
-
"sha256": "
|
|
2710
|
+
"sha256": "747ee0cf9d43a8170f6f08668bbc7fe3ee617669272e84b92f03e321cf0eb8e4"
|
|
2706
2711
|
},
|
|
2707
2712
|
{
|
|
2708
2713
|
"path": "docs/recipes/devbox-app-release.md",
|
|
@@ -2842,7 +2847,7 @@
|
|
|
2842
2847
|
{
|
|
2843
2848
|
"path": "docs/recipes/upgrading-the-core.md",
|
|
2844
2849
|
"mode": "0000644",
|
|
2845
|
-
"sha256": "
|
|
2850
|
+
"sha256": "8fe1aae25eddf1d61f8cebbd915e5fa26c26eaa1585a0a9b887b398550d4c782"
|
|
2846
2851
|
},
|
|
2847
2852
|
{
|
|
2848
2853
|
"path": "docs/recipes/windows-builders.md",
|
|
@@ -4772,7 +4777,7 @@
|
|
|
4772
4777
|
{
|
|
4773
4778
|
"path": "modules/hall-ui/public/builders.js",
|
|
4774
4779
|
"mode": "0000644",
|
|
4775
|
-
"sha256": "
|
|
4780
|
+
"sha256": "3e0e1e9120f14a1c5c015b044bfe8cd2d37cbc261746ac62407ccf90e13f4b29"
|
|
4776
4781
|
},
|
|
4777
4782
|
{
|
|
4778
4783
|
"path": "modules/hall-ui/public/chime.wav",
|
|
@@ -4992,12 +4997,12 @@
|
|
|
4992
4997
|
{
|
|
4993
4998
|
"path": "modules/hall-ui/public/hall-kit.js",
|
|
4994
4999
|
"mode": "0000644",
|
|
4995
|
-
"sha256": "
|
|
5000
|
+
"sha256": "febbc27ca107c7da31f997119be95a73446bab70139339c10c951440fe2e1d28"
|
|
4996
5001
|
},
|
|
4997
5002
|
{
|
|
4998
5003
|
"path": "modules/hall-ui/public/hall-render.js",
|
|
4999
5004
|
"mode": "0000644",
|
|
5000
|
-
"sha256": "
|
|
5005
|
+
"sha256": "c41b42b12bb33bf8e40491215d596008abb21c6b40acff9a1b4bdeb369bdc784"
|
|
5001
5006
|
},
|
|
5002
5007
|
{
|
|
5003
5008
|
"path": "modules/hall-ui/public/hall-visual.js",
|
|
@@ -5392,7 +5397,7 @@
|
|
|
5392
5397
|
{
|
|
5393
5398
|
"path": "modules/hall-ui/public/style.css",
|
|
5394
5399
|
"mode": "0000644",
|
|
5395
|
-
"sha256": "
|
|
5400
|
+
"sha256": "246523db6b1c4a3b417ab4539a0fca3cef8f3a5932b50dede637829d72bb2331"
|
|
5396
5401
|
},
|
|
5397
5402
|
{
|
|
5398
5403
|
"path": "modules/hall-ui/public/task-detail.js",
|
|
@@ -5617,7 +5622,7 @@
|
|
|
5617
5622
|
{
|
|
5618
5623
|
"path": "modules/lifecycle/db-analytics.js",
|
|
5619
5624
|
"mode": "0000644",
|
|
5620
|
-
"sha256": "
|
|
5625
|
+
"sha256": "c910371c5127e49a8952ef95b32a4065840542b036ee400d30f570812448fc31"
|
|
5621
5626
|
},
|
|
5622
5627
|
{
|
|
5623
5628
|
"path": "modules/lifecycle/db-claim-reads.js",
|
|
@@ -5852,7 +5857,7 @@
|
|
|
5852
5857
|
{
|
|
5853
5858
|
"path": "modules/lifecycle/routes/analytics.js",
|
|
5854
5859
|
"mode": "0000644",
|
|
5855
|
-
"sha256": "
|
|
5860
|
+
"sha256": "b005c0e2e60cb1f7cf0c072182079301b63415c9edb0a48ee1958dd39fa62f57"
|
|
5856
5861
|
},
|
|
5857
5862
|
{
|
|
5858
5863
|
"path": "modules/lifecycle/routes/artist-gate.js",
|
|
@@ -7907,12 +7912,12 @@
|
|
|
7907
7912
|
{
|
|
7908
7913
|
"path": "package-lock.json",
|
|
7909
7914
|
"mode": "0000644",
|
|
7910
|
-
"sha256": "
|
|
7915
|
+
"sha256": "d6109cde0d5b5a6a8667252455ec1221dbcd4891b4937bfd240743990d0a354a"
|
|
7911
7916
|
},
|
|
7912
7917
|
{
|
|
7913
7918
|
"path": "package.json",
|
|
7914
7919
|
"mode": "0000644",
|
|
7915
|
-
"sha256": "
|
|
7920
|
+
"sha256": "e4c6a0d643d7fbf5c9220a2449763f4cbd0b05594eec7fec5d1fffd7e691c54c"
|
|
7916
7921
|
},
|
|
7917
7922
|
{
|
|
7918
7923
|
"path": "public-docs/index.html",
|
|
@@ -8832,7 +8837,7 @@
|
|
|
8832
8837
|
{
|
|
8833
8838
|
"path": "scripts/gds/provision-repo-auth.js",
|
|
8834
8839
|
"mode": "0000644",
|
|
8835
|
-
"sha256": "
|
|
8840
|
+
"sha256": "a113cdae4d6dcb3f8d968d41c2f1ce67b34d77229fe0a19d6bc5023f7ed469b5"
|
|
8836
8841
|
},
|
|
8837
8842
|
{
|
|
8838
8843
|
"path": "scripts/gds/provision-repo.js",
|
|
@@ -9407,12 +9412,12 @@
|
|
|
9407
9412
|
{
|
|
9408
9413
|
"path": "scripts/gds/update-channel.js",
|
|
9409
9414
|
"mode": "0000644",
|
|
9410
|
-
"sha256": "
|
|
9415
|
+
"sha256": "6418f51f933eac634a7df854af1e3a6dbde25e152e3dca0ce8df7d37d19c1d0c"
|
|
9411
9416
|
},
|
|
9412
9417
|
{
|
|
9413
9418
|
"path": "scripts/gds/upgrade.js",
|
|
9414
9419
|
"mode": "0000644",
|
|
9415
|
-
"sha256": "
|
|
9420
|
+
"sha256": "9bf33575839de86c1361f78dab69f0e4607db37bbb473a38928fa6c03447d31e"
|
|
9416
9421
|
},
|
|
9417
9422
|
{
|
|
9418
9423
|
"path": "scripts/gds/validate-design.js",
|
|
@@ -9852,7 +9857,7 @@
|
|
|
9852
9857
|
{
|
|
9853
9858
|
"path": "src/module-api.js",
|
|
9854
9859
|
"mode": "0000644",
|
|
9855
|
-
"sha256": "
|
|
9860
|
+
"sha256": "239294e8e4023ccc05619cd66992afebfceea6453821ec3ee7ceb8cabb540cf7"
|
|
9856
9861
|
},
|
|
9857
9862
|
{
|
|
9858
9863
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10794,6 +10799,11 @@
|
|
|
10794
10799
|
"mode": "0000644",
|
|
10795
10800
|
"sha256": "45c8919daeacc77a8a08ce72768a11a7ca47ad5bd65a9e815d5ec823255f743e"
|
|
10796
10801
|
},
|
|
10802
|
+
{
|
|
10803
|
+
"path": "tests/curve_kind_overlay.mjs",
|
|
10804
|
+
"mode": "0000644",
|
|
10805
|
+
"sha256": "fa254f9da7db897bd3c74188455688efe76a6b1d7d377b992f38ee8c171fa2c7"
|
|
10806
|
+
},
|
|
10797
10807
|
{
|
|
10798
10808
|
"path": "tests/cutover_codemod.mjs",
|
|
10799
10809
|
"mode": "0000644",
|
|
@@ -12722,7 +12732,7 @@
|
|
|
12722
12732
|
{
|
|
12723
12733
|
"path": "tests/provision.mjs",
|
|
12724
12734
|
"mode": "0000644",
|
|
12725
|
-
"sha256": "
|
|
12735
|
+
"sha256": "edcb3a67c97291be694f06cf092233dbd78dbb56898547bc6ccb562e7c27da6b"
|
|
12726
12736
|
},
|
|
12727
12737
|
{
|
|
12728
12738
|
"path": "tests/provision_caddy_wiring.mjs",
|
|
@@ -12922,7 +12932,7 @@
|
|
|
12922
12932
|
{
|
|
12923
12933
|
"path": "tests/rank_gate.mjs",
|
|
12924
12934
|
"mode": "0000644",
|
|
12925
|
-
"sha256": "
|
|
12935
|
+
"sha256": "05e193a23bb1218c1c96a4f4bbc734f2f09a6dd76434eb59750014277f0cef3b"
|
|
12926
12936
|
},
|
|
12927
12937
|
{
|
|
12928
12938
|
"path": "tests/rank_roles_audit.mjs",
|
|
@@ -13847,7 +13857,7 @@
|
|
|
13847
13857
|
{
|
|
13848
13858
|
"path": "tests/update_channel.mjs",
|
|
13849
13859
|
"mode": "0000644",
|
|
13850
|
-
"sha256": "
|
|
13860
|
+
"sha256": "f20327544858053dbc1a27a7e1c3dbc40320f4414f057ba6d08647de949b0c10"
|
|
13851
13861
|
},
|
|
13852
13862
|
{
|
|
13853
13863
|
"path": "tests/update_subscription_engine.mjs",
|
|
@@ -13857,7 +13867,7 @@
|
|
|
13857
13867
|
{
|
|
13858
13868
|
"path": "tests/upgrade.mjs",
|
|
13859
13869
|
"mode": "0000644",
|
|
13860
|
-
"sha256": "
|
|
13870
|
+
"sha256": "3fe93c21665f73be4e2c17198af35626b2a3a045eceadda8827195910ad64e4c"
|
|
13861
13871
|
},
|
|
13862
13872
|
{
|
|
13863
13873
|
"path": "tests/upgrade_persist_pin.mjs",
|
|
@@ -19,7 +19,9 @@ The greenfield "one guided flow" (`bongos init` → provision → OAuth → veri
|
|
|
19
19
|
|
|
20
20
|
It is **idempotent** (skips once the repo carries a `package.json`) and **dry-run-safe** (every mutation goes through the injected `exec`/`writeFile`).
|
|
21
21
|
|
|
22
|
-
**Git transport = the existing SSH deploy alias.** The clone/push use `git@<alias>:<owner>/<repo>.git`
|
|
22
|
+
**Git transport = the existing SSH deploy alias.** The clone/push use `git@<alias>:<owner>/<repo>.git` — the **same** transport the control-plane checkout already uses for the platform repo. No secret is interpolated into a command (SSH-key auth), so nothing leaks into journald.
|
|
23
|
+
|
|
24
|
+
> **Amended by task 1003996 — the alias is a property of one box, so it is probed, not assumed.** `github-deploy` exists only in the founder control plane's `~/.ssh/config`; on any other plane the scaffold's `remote add origin` and push resolved nowhere. `instanceRepoRemote` now picks the alias in this order: an explicit one → `PROVISION_GIT_SSH_ALIAS` → `github-deploy` **when `ssh -G` shows it actually resolves here** → `github.com`. The founder box keeps the alias (the probe finds it) and is unchanged; every other plane addresses GitHub directly, which is what its own deploy key is issued against. A stored remote is validated against the whole accept-set (`instanceRepoRemotes`) rather than re-running the probe, so a remote an alias-carrying box wrote stays recognised.
|
|
23
25
|
|
|
24
26
|
**Operational prerequisite (the one manual grant):** the control plane's deploy public key (`~/.ssh/github_deploy.pub`) must have **write** access to each instance repo. GitHub deploy keys are per-repo, so standing up a new instance requires the owner to add that key (write) to the new repo — a one-time browser step alongside "create the empty repo," mirroring how the platform repo's deploy key is registered.
|
|
25
27
|
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# ADR 0305 — A recipe lives with what it documents
|
|
2
|
+
|
|
3
|
+
**Status:** accepted · **Date:** 2026-09-17 · **Task:** [task 1002156](https://cloudbongos.com/builders#/task/1002156) (goal 1000091 — BONGOS-V2)
|
|
4
|
+
|
|
5
|
+
**Related:** [ADR 0098](0098-public-mirror-publish-manifest.md) (`isPublishable()` — the default-deny publish boundary this ADR re-aims) · [ADR 0107](0107-module-upstreaming-contribution-to-core-catalog.md) (submit → review → accept; the lifecycle this ADR declines to duplicate) · [ADR 0135](0135-module-upstream-submission-interim-queue.md) (the submission queue) · [ADR 0083](0083-modular-architecture-strangler-build-plan.md) (the module loader and its one-way import boundary) · [ADR 0062](0062-medusa-instance-model-decoupling.md) §1 (the portable-core / host-instance / feature-module cut-line) · [ADR 0108](0108-instance-composition-configurable-root.md) §1 (the core is consumed as a versioned npm package)
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
This is part A of the 2026-07-10 architecture-review sweep — the redesign deliberately
|
|
10
|
+
deferred until direction and learnings solidified (idea 536 / idea 537; part B shipped as
|
|
11
|
+
task 2155). It was held on the owner's explicit instruction not to start the ADR until the
|
|
12
|
+
direction was confirmed. That confirmation came on 2026-09-17.
|
|
13
|
+
|
|
14
|
+
**The thesis.** `docs/recipes/`, `scripts/` and `docs/research/` are all relevant to
|
|
15
|
+
*building* Cloud Bongos, but a new project built *on* Cloud Bongos wants only a subset.
|
|
16
|
+
Today the split is binary per file: [`scripts/gds/publish-manifest.js`](../../scripts/gds/publish-manifest.js)'s
|
|
17
|
+
`isPublishable()` either ships a file to every instance or traps it in this repo. The thesis
|
|
18
|
+
asks whether some of these assets should instead be **shareable the way modules are** —
|
|
19
|
+
authored, reviewed, accepted, opt-in installed.
|
|
20
|
+
|
|
21
|
+
**The binary split has already collapsed to one side.** Measured on this commit: all **36**
|
|
22
|
+
files in `docs/recipes/` and all **4** in `docs/research/` pass `isPublishable()`. Every one
|
|
23
|
+
ships to every instance. The instance-local half is empty in practice — the denylist entries
|
|
24
|
+
that used to hold it (`cloudbongos-standup.md`, `example-decouple-r89.md`,
|
|
25
|
+
`staging-data.md`) name files that no longer exist. The gate itself is sound; there is simply
|
|
26
|
+
nothing on the other side of it any more. So a fresh instance today receives
|
|
27
|
+
`figma-design-loop.md`, `redteam-patrol.md` and `parallel-goal-waves.md` whether or not any
|
|
28
|
+
of it applies to that instance.
|
|
29
|
+
|
|
30
|
+
**And the split is actively producing wrong documentation.** Four published recipes document
|
|
31
|
+
the dev-box: `devbox-app-release.md`, `devbox-app-windows-test.md`,
|
|
32
|
+
`work-on-a-task-from-your-dev-box.md`, `builder-box-lifecycle.md`. Goal 1000091 is in the
|
|
33
|
+
middle of deleting that module. None of the nine remaining removal tasks covers these four —
|
|
34
|
+
only task 1003896 touches `docs/recipes/`, and only to strip devcontainer mentions. Filed as
|
|
35
|
+
[task 1004013](https://cloudbongos.com/builders#/task/1004013).
|
|
36
|
+
|
|
37
|
+
That is the finding this ADR turns on. The recipes did not go stale through neglect; they
|
|
38
|
+
went stale because **nothing structurally ties a recipe to the thing it documents**. The
|
|
39
|
+
module is deleted in `modules/`, the recipe sits in `docs/recipes/`, and no test, no fitness
|
|
40
|
+
check and no reviewer diff connects them. A published doc for a deleted feature is worse than
|
|
41
|
+
no doc: it is a confident wrong answer, and `search-ingest-md` ingests it into the very index
|
|
42
|
+
builders are told to consult.
|
|
43
|
+
|
|
44
|
+
## Decision
|
|
45
|
+
|
|
46
|
+
### 1. The rule: a recipe lives with what it documents.
|
|
47
|
+
|
|
48
|
+
Not "which recipes are portable" — that is the question the binary split already answers
|
|
49
|
+
badly, one file at a time, by hand, forever. The durable question is *ownership*. A recipe
|
|
50
|
+
belongs in the same deletable unit as its subject, so that removing the subject removes the
|
|
51
|
+
recipe as a matter of file layout rather than of anybody remembering.
|
|
52
|
+
|
|
53
|
+
This yields a three-way classification, applied per file:
|
|
54
|
+
|
|
55
|
+
| Class | Home | Lifecycle |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| **Core methodology** — how to operate *any* instance | `docs/recipes/` (unchanged) | ships with the core, not optional |
|
|
58
|
+
| **Feature-coupled** — how to use one module | `modules/<key>/recipes/` | ships, installs and **is deleted** with its module |
|
|
59
|
+
| **Instance-operational** — this host's own ops | instance-local, denied by `isPublishable()` | never leaves the instance |
|
|
60
|
+
|
|
61
|
+
### 2. `scripts/` stays core-shipped, whole.
|
|
62
|
+
|
|
63
|
+
`scripts/` is not documentation with a portability question; it is the CLI. `bin/` dispatches
|
|
64
|
+
into it, the fitness checks, ship gates and publish boundary *are* files in it, and
|
|
65
|
+
`isPublishable()` already allowlists the subtree with deploy denied. Splitting it per file
|
|
66
|
+
would make the core's own tooling conditional on an install choice. No change.
|
|
67
|
+
|
|
68
|
+
### 3. `docs/research/` becomes instance-local.
|
|
69
|
+
|
|
70
|
+
The four items are this instance's competitive analysis, its grader-cost evaluation and its
|
|
71
|
+
own task-network map. They are situated artifacts: findings about *this* project at a moment
|
|
72
|
+
in time, not methodology another instance can run. They are also the surface most likely to
|
|
73
|
+
carry a brand-name leak, since nothing about them was written to be portable. Deny the
|
|
74
|
+
subtree; keep any genuinely portable finding by promoting it into an ADR, which is the
|
|
75
|
+
artifact class that already exists for durable conclusions.
|
|
76
|
+
|
|
77
|
+
### 4. A shared recipe is a module contribution, not a new registry.
|
|
78
|
+
|
|
79
|
+
This is the half of the thesis that is **rejected in its literal form**. The task asks whether
|
|
80
|
+
recipes should become "a NEW shareable/opt-in asset class parallel to modules". They should
|
|
81
|
+
not be parallel to modules. They should be *carried by* modules.
|
|
82
|
+
|
|
83
|
+
A module already has every mechanism a shareable recipe needs, all of it built and shipped:
|
|
84
|
+
a validated manifest with `author` / `origin` / `license` / `maintainer`
|
|
85
|
+
([`manifest-schema.js`](../../src/module-loader/manifest-schema.js) `ATTRIBUTION_KEYS`),
|
|
86
|
+
submit → review → accept with a security review as a hard accept-gate (ADR 0107 §1, §5),
|
|
87
|
+
a submissions table (`migrations/core_191_module_submissions.sql`), default-off enablement
|
|
88
|
+
plus the publish-allowlist *as* the accept action (ADR 0107 §6), and a maintenance/orphaning
|
|
89
|
+
policy that refuses a `maintained` status without a named maintainer (ADR 0166).
|
|
90
|
+
|
|
91
|
+
Building a second registry would mean a second manifest, a second review queue, a second
|
|
92
|
+
attribution model and a second orphaning policy — to distribute Markdown. The precedent is
|
|
93
|
+
already on disk and nobody designed it: `modules/ui-design/docs/design-contract.md` is a
|
|
94
|
+
module-owned document that ships and dies with its module, and it has never needed a registry.
|
|
95
|
+
|
|
96
|
+
So: **no new asset class, no new lifecycle, no new CLI verb.** A recipe pack is a directory
|
|
97
|
+
inside a module. `bongos module submit` already carries it; enabling the module installs it;
|
|
98
|
+
deleting the module deletes it.
|
|
99
|
+
|
|
100
|
+
### 5. The publish boundary follows the layout; it does not define it.
|
|
101
|
+
|
|
102
|
+
`isPublishable()` keeps its default-deny two-layer design unchanged (ADR 0098). What changes
|
|
103
|
+
is that it stops being the *only* thing standing between a stale recipe and every instance.
|
|
104
|
+
Once a feature-coupled recipe lives under `modules/<key>/`, the existing module allowlist
|
|
105
|
+
entries already govern it and no per-file denylist row is needed. Per-file rows remain only
|
|
106
|
+
for the instance-operational class — the one case where a file must stay behind for reasons
|
|
107
|
+
the directory structure cannot express.
|
|
108
|
+
|
|
109
|
+
### 6. Sequencing.
|
|
110
|
+
|
|
111
|
+
This ADR decides direction only. It changes no code and moves no file. The moves are follow-on
|
|
112
|
+
work, and the dev-box four ([task 1004013](https://cloudbongos.com/builders#/task/1004013))
|
|
113
|
+
are deliberately *not* folded into it: that module is being deleted this goal, so its recipes
|
|
114
|
+
should be deleted outright rather than relocated into a directory that is about to disappear.
|
|
115
|
+
They are the worked example of the problem, not the first migration.
|
|
116
|
+
|
|
117
|
+
## Alternatives considered (rejected)
|
|
118
|
+
|
|
119
|
+
**A new shareable asset class parallel to modules** (the thesis as literally written; the
|
|
120
|
+
Chef Supermarket / Ansible Galaxy / Terraform-registry shape). Rejected on cost against an
|
|
121
|
+
already-built alternative: it duplicates the manifest, review queue, attribution model and
|
|
122
|
+
orphaning policy that ADR 0107 and ADR 0135 already ship, and it would leave a recipe's
|
|
123
|
+
lifecycle *still* unconnected to its subject's — the actual defect. The prior art also does
|
|
124
|
+
not transfer cleanly: Supermarket and Galaxy distribute executable units with dependency
|
|
125
|
+
resolution, which is what a module already is here. A recipe has no dependencies to resolve.
|
|
126
|
+
|
|
127
|
+
**Keep the binary split and fix it by classification** (the cheaper option the owner was
|
|
128
|
+
offered). Rejected because it treats the symptom. Hand-classifying 36 files restores the
|
|
129
|
+
instance-local half for exactly as long as it takes the next module to ship a recipe, and it
|
|
130
|
+
does nothing to stop the next dev-box four — under this option those are found by a human
|
|
131
|
+
reading `ls docs/recipes/`, which is exactly how the ADR-numbering collision behind
|
|
132
|
+
[ADR 0300](0300-a-missing-protected-surface-registry-is-a-broken-install.md)'s sibling guard
|
|
133
|
+
was found, and the lesson there was to make the structure enforce the rule.
|
|
134
|
+
|
|
135
|
+
**Per-recipe front-matter declaring portability.** Rejected: it puts the ownership claim in a
|
|
136
|
+
place no build step reads and no deletion touches. A `portable: false` key in a file whose
|
|
137
|
+
module was deleted is still a file in `docs/recipes/`.
|
|
138
|
+
|
|
139
|
+
**Delete `docs/research/` rather than make it instance-local.** Rejected: the grader-cost
|
|
140
|
+
evaluation and the competitive analysis are live inputs to open goals. Instance-local is the
|
|
141
|
+
correct home for a situated artifact, not the bin.
|
|
142
|
+
|
|
143
|
+
## Consequences
|
|
144
|
+
|
|
145
|
+
- **The stale-recipe class of defect stops being possible for module-coupled docs.** Deleting
|
|
146
|
+
`modules/<key>/` takes its recipes with it, in the same commit, visible in the same diff.
|
|
147
|
+
- **A fresh instance receives less.** Recipes for modules it has not enabled no longer arrive.
|
|
148
|
+
That is the thesis's goal, and it is what makes the core's own documentation honest about
|
|
149
|
+
what is installed.
|
|
150
|
+
- **Module authors gain a documentation surface with attribution already attached** — the
|
|
151
|
+
`author` / `origin` credit ADR 0107 §2 defines now covers the recipe as well as the code.
|
|
152
|
+
- **Follow-on work is a sweep, not a build.** Classify the 36 recipes against §1, move the
|
|
153
|
+
feature-coupled ones into their modules, deny `docs/research/`, and add a fitness check that
|
|
154
|
+
fails when a recipe under `modules/<key>/recipes/` outlives its module. No new machinery.
|
|
155
|
+
- **Revisit if a recipe ever needs to ship without a module to carry it.** That is the one
|
|
156
|
+
shape this decision cannot express, and it would be the real argument for §4's rejected
|
|
157
|
+
alternative. Nothing in the current 36 has it.
|
package/docs/adr/README.md
CHANGED
|
@@ -396,3 +396,4 @@ This keeps the decision history honest and traceable.
|
|
|
396
396
|
| 0302 | [**The third identical failure stops the session and asks** ([task 1003990](https://cloudbongos.com/builders#/task/1003990), goal 1000095). Sessions looped without noticing: one PR re-shipped into the same red check nine times, and 45 of 169 claim attempts were the same refusal retried minutes apart. A PostToolUse hook now counts walls per session — the signature is the `[otb-plain]` card's "What happened" line + the task id + the RED line, so a red check naming different failing tests each run reads as progress — and on the third identical one injects a single instruction: stop retrying, diagnose (path named), or /ask-for-help. Waiting cards ("Nothing to do…") are never counted; git-guard and worktree-guard count their own blocks through the same helper; it never blocks a tool call and echoes nothing a tool printed. Rejected: counting any repeated failing command (red→green is that), blocking the fourth attempt (a new gate, ADR 0162), server-side detection (cannot see guard blocks or speak into the session).](0302-the-third-identical-failure-stops-the-session-and-asks.md) | GDS / sessions / hooks |
|
|
397
397
|
| 0303 | [**Provisioning verifies the base Caddyfile, and never edits it** ([task 1002860](https://cloudbongos.com/builders#/task/1002860), goal 1000106, from idea 1000524). The runner assumed the box's `/etc/caddy/Caddyfile` carried the `on_demand_tls` tls-check ask and `import /etc/caddy/sites/*.caddy`, and reloaded with `allowFail` — a box missing either provisioned "successfully" and the instance was unreachable. It now reads Caddy's RESOLVED config (`caddy adapt`: unprivileged, no key access, indifferent to how the directives are written) before touching the box (the ask) and after writing the snippet (the domain is served ⇒ the import reaches it), refusing with the exact line to add, and the reload is loud. Rejected: editing the base file (`on_demand_tls` must sit inside the global block an append cannot place, and a bad write takes down the control plane's own apex); `caddy validate` (loads certificate keys, needs root).](0303-provisioning-verifies-the-base-caddyfile-and-never-edits-it.md) | provisioning / infra |
|
|
398
398
|
| 0304 | [**Routine reads run without a prompt; anything a flag can turn into a write is exact-form** ([task 1003992](https://cloudbongos.com/builders#/task/1003992), goal 1000095). The shipped `.claude/settings.json` pre-allowed six commands, so every `gh pr view` or `git fetch` asked a non-technical builder to approve a command they cannot evaluate. The read-only subset is now pre-allowed — `git status`, `gh pr view/checks/list`, `gh run view/list` and the gds CLIs audited read-only under every flag as prefix rules; `git branch` and `git fetch` as exact forms only, because a flag turns either into a write or an exec — and the instance starter mirrors it rule for rule. `git diff/log/show` get NO rule: the harness already runs their read-only forms unprompted with a flag check, and a prefix rule switched that check off (`--output=<path>` writes anywhere, `diff --no-index` reads deny-listed files — both reproduced in review). A test pins the whole allow-list, that no rule covers a command git-guard blocks, and that no rule covers a write dressed as a read. Rejected: `Bash(git:*)`, prefix-plus-`ask` for diff/log/show (argument patterns are evaded by quoting), prefix rules for fetch/branch, `bypassPermissions` everywhere.](0304-routine-reads-run-without-a-prompt-and-anything-a-flag-can-turn-into-a-write-is-exact-form.md) | GDS / sessions / permissions |
|
|
399
|
+
| 0305 | [**A recipe lives with what it documents** ([task 1002156](https://cloudbongos.com/builders#/task/1002156), goal 1000091, from idea 536 / idea 537). Part A of the 2026-07-10 architecture review, held until the owner confirmed direction. The binary core-vs-instance split in `isPublishable()` has collapsed to one side: all **36** files in `docs/recipes/` and all **4** in `docs/research/` publish, and the denylist rows that once held the instance-local half name files that no longer exist. Worse, it is producing wrong docs — four published recipes document the dev-box that goal 1000091 is deleting, and none of the nine removal tasks covers them ([task 1004013](https://cloudbongos.com/builders#/task/1004013)). The cause is not neglect: **nothing structurally ties a recipe to what it documents**. So the rule is ownership, not portability — a recipe lives in the same deletable unit as its subject. Three classes: core methodology stays in `docs/recipes/`; feature-coupled moves to `modules/<key>/recipes/` and dies with its module; instance-operational stays behind the publish gate. `scripts/` is unchanged (it is the CLI, not documentation with a portability question); `docs/research/` becomes instance-local (situated artifacts, and the likeliest brand-name leak). **The thesis is rejected in its literal form**: a shared recipe is not a NEW asset class parallel to modules but a directory *inside* one, reusing the manifest attribution, submit→review→accept, security accept-gate, default-off enablement and orphaning policy that ADR 0107/0135 already ship — `modules/ui-design/docs/design-contract.md` is the undesigned precedent. Rejected: a parallel registry (a second manifest, queue, attribution model and orphaning policy, to distribute Markdown; Supermarket/Galaxy distribute executables with dependency resolution, which is what a module already is); classify-and-keep-the-binary-split (treats the symptom, restores the local half only until the next module ships a recipe); per-recipe portability front-matter (no build step reads it, no deletion touches it); deleting `docs/research/` (live inputs to open goals). Decides direction only — no file moves; the sweep and a fitness check for a recipe outliving its module are follow-on.](0305-a-recipe-lives-with-what-it-documents.md) | modules / upstreaming |
|
package/docs/copy-inventory.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
> Deterministic on a given tree — regenerate and commit rather than hand-editing.
|
|
5
5
|
> Machine-readable twin: [`copy-registry.json`](copy-registry.json).
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**1875 strings** across 3 surfaces · 1628 distinct pieces of copy · 1875 certain, 0 heuristic · 171 shown in more than one place.
|
|
8
8
|
|
|
9
9
|
## Surfaces
|
|
10
10
|
|
|
11
11
|
| surface | lives at | files | strings |
|
|
12
12
|
|---|---|---|---|
|
|
13
|
-
| `builders-hall` | `modules/hall-ui/public` | 89 |
|
|
13
|
+
| `builders-hall` | `modules/hall-ui/public` | 89 | 1385 |
|
|
14
14
|
| `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
|
|
15
15
|
| `landing` | `modules/public-landing/public` | 5 | 390 |
|
|
16
16
|
|
|
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
78
78
|
| `3e5a62bc4887` | 2x | A GitHub username is needed. | modules/hall-ui/public/hall-render.js:377, modules/hall-ui/public/watch.js:311 |
|
|
79
79
|
| … | | _131 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1385 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -142,7 +142,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
142
142
|
| `1b326b0be1a4` | certain | A {…} — you are a {…}. Mingle pairs across crafts. | `modules/hall-ui/public/collab.js:365` |
|
|
143
143
|
| `996edffc1966` | certain | Access requests | `modules/hall-ui/public/watch.html:46` |
|
|
144
144
|
| `996edffc1966` | certain | Access requests | `modules/hall-ui/public/watch.html:61` |
|
|
145
|
-
| `303f8d90266f` | certain | Achievements could not be loaded. | `modules/hall-ui/public/builders.js:
|
|
145
|
+
| `303f8d90266f` | certain | Achievements could not be loaded. | `modules/hall-ui/public/builders.js:1204` |
|
|
146
146
|
| `6ca31dd5eb91` | certain | Acknowledge the primer | `modules/hall-ui/public/primer.html:99` |
|
|
147
147
|
| `4461b13f95c2` | certain | Actions apply at once. Closing stops and deletes the box; you can start a fresh one anytime. | `modules/hall-ui/public/settings.html:209` |
|
|
148
148
|
| `74cc57f76b42` | certain | Active recently | `modules/hall-ui/public/watch.js:435` |
|
|
@@ -155,7 +155,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
155
155
|
| `cc4125ca7cff` | certain | Added to this version after it started building — an Archon override of the scope gate. Open the goal to see w | `modules/hall-ui/public/goals-render.js:184` |
|
|
156
156
|
| `c600ff97ea70` | certain | Added — they are in the goal now, without being asked. | `modules/hall-ui/public/goals-render.js:1290` |
|
|
157
157
|
| `ff67fba11965` | certain | Admitted into {…} mid-build | `modules/hall-ui/public/goals-render.js:873` |
|
|
158
|
-
| `8b736e365191` | certain | All builders | `modules/hall-ui/public/hall-render.js:
|
|
158
|
+
| `8b736e365191` | certain | All builders | `modules/hall-ui/public/hall-render.js:1208` |
|
|
159
159
|
| `b5e03617b319` | certain | All goals | `modules/hall-ui/public/goals.html:53` |
|
|
160
160
|
| `e08d410571e9` | certain | All kinds | `modules/hall-ui/public/sessions.js:286` |
|
|
161
161
|
| `9c34bccb06ef` | certain | All open asks | `modules/hall-ui/public/collab.html:64` |
|
|
@@ -164,7 +164,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
164
164
|
| `b38c01691857` | certain | All your work → | `modules/hall-ui/public/hall-widgets.js:110` |
|
|
165
165
|
| `e99cc5d37404` | certain | Already a member? | `modules/hall-ui/public/hall-render.js:346` |
|
|
166
166
|
| `da5368d10f85` | certain | Amendment {…} passed{…}, and the constitution below is not the one it decided: | `modules/hall-ui/public/government.js:633` |
|
|
167
|
-
| `69f0ca4a4d84` | certain | Analytics scope | `modules/hall-ui/public/hall-render.js:
|
|
167
|
+
| `69f0ca4a4d84` | certain | Analytics scope | `modules/hall-ui/public/hall-render.js:1206` |
|
|
168
168
|
| `14bdceaac078` | certain | Answer the five questions and this spark becomes a Full Idea. | `modules/hall-ui/public/ideas.js:601` |
|
|
169
169
|
| `0293418d5e8e` | certain | Answerable for: | `modules/hall-ui/public/profile.js:72` |
|
|
170
170
|
| `05761b08ec8f` | certain | Answering is optional and declining costs nothing. Nobody is assigned by being asked. | `modules/hall-ui/public/collab.html:90` |
|
|
@@ -411,7 +411,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
411
411
|
| `541127601291` | certain | Download for Mac | `modules/hall-ui/public/settings.html:224` |
|
|
412
412
|
| `2ed2fd8376c0` | certain | Download for Windows | `modules/hall-ui/public/settings.html:225` |
|
|
413
413
|
| `c7af57097d94` | certain | Download the Dev Box app: | `modules/hall-ui/public/hall-render.js:779` |
|
|
414
|
-
| `9cf07334a5a9` | certain | Downvote (−1) | `modules/hall-ui/public/builders.js:
|
|
414
|
+
| `9cf07334a5a9` | certain | Downvote (−1) | `modules/hall-ui/public/builders.js:785` |
|
|
415
415
|
| `9c728558d6e7` | certain | Drachmae & karma | `modules/hall-ui/public/drachmae.html:22` |
|
|
416
416
|
| `9c728558d6e7` | certain | Drachmae & karma | `modules/hall-ui/public/drachmae.html:22` |
|
|
417
417
|
| `9c728558d6e7` | certain | Drachmae & karma | `modules/hall-ui/public/drachmae.html:37` |
|
|
@@ -534,7 +534,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
534
534
|
| `a4ff1e9c34e3` | certain | Idea {…} | `modules/hall-ui/public/idea.js:267` |
|
|
535
535
|
| `ba82ec56f1e3` | certain | Idea — {{worldName}} | `modules/hall-ui/public/idea.html:6` |
|
|
536
536
|
| `ba82ec56f1e3` | certain | Idea — {{worldName}} | `modules/hall-ui/public/idea.html:6` |
|
|
537
|
-
| `e181637c5a5e` | certain | Ideas awaiting triage | `modules/hall-ui/public/builders.js:
|
|
537
|
+
| `e181637c5a5e` | certain | Ideas awaiting triage | `modules/hall-ui/public/builders.js:905` |
|
|
538
538
|
| `d4e21769ce1c` | certain | Ideas filed, and what became of them | `modules/hall-ui/public/profile.html:152` |
|
|
539
539
|
| `379b20d548ad` | certain | Ideas whose author has said "I had the thought but not the full picture". Anyone can develop one — the author | `modules/hall-ui/public/ideas.html:42` |
|
|
540
540
|
| `ef224c9de7c8` | certain | Ideas — {{worldName}} | `modules/hall-ui/public/ideas.html:6` |
|
|
@@ -571,7 +571,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
571
571
|
| `fbe40b5818a3` | certain | Key removed. | `modules/hall-ui/public/settings.js:1148` |
|
|
572
572
|
| `93c17262bacf` | certain | Key storage is being set up by an Archon — check back shortly. {…} | `modules/hall-ui/public/settings.js:1027` |
|
|
573
573
|
| `2a3c9e501f8e` | certain | Key storage isn't set up yet. As an Archon you can turn it on now — the server generates and safely stores the | `modules/hall-ui/public/settings.js:1023` |
|
|
574
|
-
| `
|
|
574
|
+
| `e3b473af2f69` | certain | Kind of work | `modules/hall-ui/public/hall-render.js:1173` |
|
|
575
|
+
| `7d6eaa8d4514` | certain | Kinds of work shipped | `modules/hall-ui/public/hall-render.js:1286` |
|
|
575
576
|
| `81f62e066dbf` | certain | Last 14 days: {…} / 10 average across {…} graded work{…} ({…} passed). | `modules/hall-ui/public/builders.js:595` |
|
|
576
577
|
| `35a15eb0a117` | certain | Last 30 days | `modules/hall-ui/public/hall-widgets.js:129` |
|
|
577
578
|
| `9be8b839eff8` | certain | Last 7 days | `modules/hall-ui/public/hall-widgets.js:129` |
|
|
@@ -622,7 +623,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
622
623
|
| `df335a1224ae` | certain | Member since {…} | `modules/hall-ui/public/profile.js:94` |
|
|
623
624
|
| `c7a670e9552d` | certain | Merged into | `modules/hall-ui/public/profile.js:406` |
|
|
624
625
|
| `6bd456635167` | certain | Merging work does not put it in front of anyone. This is the step that does: it moves this instance onto a new | `modules/hall-ui/public/deploy.html:39` |
|
|
625
|
-
| `7637613c231b` | certain | Metic rank and above may vote | `modules/hall-ui/public/builders.js:
|
|
626
|
+
| `7637613c231b` | certain | Metic rank and above may vote | `modules/hall-ui/public/builders.js:789` |
|
|
626
627
|
| `d3fa05c5e3fe` | certain | Mingle pairs you with someone from another craft. Saying no costs nothing. | `modules/hall-ui/public/collab.html:80` |
|
|
627
628
|
| `d7ce4a3bb745` | certain | Minimize the welcome panel | `modules/hall-ui/public/hall-widgets.js:52` |
|
|
628
629
|
| `19b0ed5781ae` | certain | Minimum rank required to claim this task | `modules/hall-ui/public/task-lib.js:65` |
|
|
@@ -1008,7 +1009,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1008
1009
|
| `381f29be7497` | certain | The most recently shipped tasks. | `modules/hall-ui/public/work.html:120` |
|
|
1009
1010
|
| `82479c539fca` | certain | The name shown beside your work — in the roster, the leaderboard, and the work feed. Your sign-in and the cred | `modules/hall-ui/public/settings.html:75` |
|
|
1010
1011
|
| `b88dd8b96b72` | certain | The next person to notice this sentence reads your note instead of re-litigating it. | `modules/hall-ui/public/copy-desk.html:135` |
|
|
1011
|
-
| `aa716f3dd551` | certain | The page could not be loaded. Try again. | `modules/hall-ui/public/builders.js:
|
|
1012
|
+
| `aa716f3dd551` | certain | The page could not be loaded. Try again. | `modules/hall-ui/public/builders.js:1484` |
|
|
1012
1013
|
| `74bc22f38140` | certain | The platform confirmed this request came from the account it names. | `modules/hall-ui/public/watch.js:373` |
|
|
1013
1014
|
| `6c3d88de42de` | certain | The primer | `modules/hall-ui/public/primer.html:41` |
|
|
1014
1015
|
| `dea378cd4837` | certain | The primer did not load | `modules/hall-ui/public/primer.html:88` |
|
|
@@ -1087,7 +1088,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1087
1088
|
| `6516cc82021a` | certain | UI design | `modules/hall-ui/public/settings.html:303` |
|
|
1088
1089
|
| `2c1c20785a6e` | certain | Unclear — a person would not know what to do | `modules/hall-ui/public/copy-desk.html:91` |
|
|
1089
1090
|
| `aa445f06cc5e` | certain | Unlink failed: {…} | `modules/hall-ui/public/settings.js:876` |
|
|
1090
|
-
| `67fbc770b3b3` | certain | Upvote (+1) | `modules/hall-ui/public/builders.js:
|
|
1091
|
+
| `67fbc770b3b3` | certain | Upvote (+1) | `modules/hall-ui/public/builders.js:785` |
|
|
1091
1092
|
| `e7e2a99a2bea` | certain | Use this | `modules/hall-ui/public/settings-specialities.js:148` |
|
|
1092
1093
|
| `e1ecd543a2ca` | certain | Using this speciality. | `modules/hall-ui/public/settings-specialities.js:199` |
|
|
1093
1094
|
| `6200bac6bdca` | certain | View all sessions | `modules/hall-ui/public/watch.html:106` |
|
|
@@ -1096,7 +1097,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1096
1097
|
| `f8546b3e285e` | certain | View tasks {…} | `modules/hall-ui/public/roadmap.js:154` |
|
|
1097
1098
|
| `71c09cda8246` | certain | Voice for {…} | `modules/hall-ui/public/settings.js:76` |
|
|
1098
1099
|
| `2940b7828d26` | certain | Volume {…}%. | `modules/hall-ui/public/settings.js:218` |
|
|
1099
|
-
| `6905f2ee5702` | certain | Vote on this work | `modules/hall-ui/public/builders.js:
|
|
1100
|
+
| `6905f2ee5702` | certain | Vote on this work | `modules/hall-ui/public/builders.js:785` |
|
|
1100
1101
|
| `b2937e14ee9b` | certain | Vote yes | `modules/hall-ui/public/board-room.js:276` |
|
|
1101
1102
|
| `8cc425582984` | certain | Vulnerability reports | `modules/hall-ui/public/watch.html:132` |
|
|
1102
1103
|
| `b1e63e33f739` | certain | Vulnerability reports, engagement reports, override requests, and the audit log. | `modules/hall-ui/public/watch.html:129` |
|
|
@@ -1288,7 +1289,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1288
1289
|
| `fdfb8b2ce948` | certain | new identity | `modules/hall-ui/public/box-panel.js:339` |
|
|
1289
1290
|
| `86f235ddfe01` | certain | new thread | `modules/hall-ui/public/settings.html:343` |
|
|
1290
1291
|
| `b9f2e0d43c94` | certain | no clock | `modules/hall-ui/public/government.js:607` |
|
|
1291
|
-
| `e02979266baf` | certain | no data | `modules/hall-ui/public/hall-kit.js:
|
|
1292
|
+
| `e02979266baf` | certain | no data | `modules/hall-ui/public/hall-kit.js:735` |
|
|
1292
1293
|
| `9e194a57d054` | certain | no reading | `modules/hall-ui/public/deploy.js:74` |
|
|
1293
1294
|
| `33ca71bef112` | certain | no tasks yet | `modules/hall-ui/public/goals-render.js:163` |
|
|
1294
1295
|
| `739a4bd6bd83` | certain | node scripts/setup-builder.js | `modules/hall-ui/public/hall-render.js:846` |
|
|
@@ -1431,7 +1432,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1431
1432
|
| `3d74668f69e5` | certain | {…}{…} · {…} | `modules/hall-ui/public/task.js:649` |
|
|
1432
1433
|
| `9588652a7aff` | certain | · follows your profile setting | `modules/hall-ui/public/settings.js:568` |
|
|
1433
1434
|
| `4a5ff4f662df` | certain | — ${…} of ${…} this month ({…}%). {…} | `modules/hall-ui/public/hall-render.js:471` |
|
|
1434
|
-
| `a6ae9cbdee30` | certain | — all builders — | `modules/hall-ui/public/builders.js:
|
|
1435
|
+
| `a6ae9cbdee30` | certain | — all builders — | `modules/hall-ui/public/builders.js:721` |
|
|
1435
1436
|
| `729d4ce22b99` | certain | — any — | `modules/hall-ui/public/hall-widgets.js:132` |
|
|
1436
1437
|
| `d2c30a1ee74e` | certain | — decide — | `modules/hall-ui/public/goals-render.js:970` |
|
|
1437
1438
|
| `417adabd1a00` | certain | — no goal suggested — open the goal board and pick one — | `modules/hall-ui/public/task-detail.js:324` |
|
|
@@ -1446,7 +1447,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1446
1447
|
| `5b9fa7cb4fb0` | certain | …and {…} more waiting — | `modules/hall-ui/public/goal-inbox.js:121` |
|
|
1447
1448
|
| `b2a04abfead0` | certain | …{…} more awaiting a nod. | `modules/hall-ui/public/goal-inbox.js:264` |
|
|
1448
1449
|
| `616fb9adf3cf` | certain | …{…} more going quiet. | `modules/hall-ui/public/goal-inbox.js:353` |
|
|
1449
|
-
| `e35f11bdc5d7` | certain | …{…} more open ideas — triage clears them one at a time. | `modules/hall-ui/public/builders.js:
|
|
1450
|
+
| `e35f11bdc5d7` | certain | …{…} more open ideas — triage clears them one at a time. | `modules/hall-ui/public/builders.js:903` |
|
|
1450
1451
|
| `5f1d914ad45e` | certain | …{…} more — | `modules/hall-ui/public/goal-inbox.js:427` |
|
|
1451
1452
|
| `de8fa5223aee` | certain | ‹ Prev | `modules/hall-ui/public/hall-kit.js:74` |
|
|
1452
1453
|
| `d4b84b7fbdeb` | certain | ← All goals | `modules/hall-ui/public/goals.html:80` |
|