@bongos/core 1.19.922 → 1.19.924
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 +48 -28
- package/docs/adr/0322-a-remnant-needs-evidence-and-merged-wins.md +110 -0
- package/docs/adr/README.md +1 -0
- package/docs/copy-inventory.md +22 -15
- package/docs/copy-registry.json +81 -18
- package/docs/module-api-changelog.md +4 -0
- package/modules/economy/reward.js +11 -0
- package/modules/hall-ui/public/deploy.html +1 -1
- package/modules/hall-ui/public/deploy.js +103 -3
- package/modules/hall-ui/public/project-settings.css +39 -0
- package/modules/ideas/idea-state.js +254 -0
- package/modules/ideas/routes/inbox.js +8 -0
- package/modules/ideas/trail.js +13 -1
- package/modules/provisioning/core-upgrade.js +24 -5
- package/modules/provisioning/migrations/provisioning_020_core_upgrade_preflight.sql +53 -0
- package/modules/provisioning/provisioning.js +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/provision-core-upgrade.js +123 -66
- package/scripts/gds/provision.js +2 -1
- package/src/module-api.js +1 -1
- package/tests/core_upgrade_door.mjs +56 -4
- package/tests/core_upgrade_runner.mjs +82 -0
- package/tests/deploy_page_projects.mjs +104 -5
- package/tests/idea_state.mjs +399 -0
package/.bongos-core.json
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.924",
|
|
6
|
+
"core_contract": "1.19.924",
|
|
7
|
+
"source_commit": "c6cacd0f4e168f1f47817662b3eb47afa9b0e325",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-
|
|
9
|
+
"built_at": "2026-09-20T22:26:38.017Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 511,
|
|
13
13
|
"agent_docs_stubbed": 26,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2312,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2849,
|
|
20
|
+
"tree_sha256": "c69c8cf54442568a4116f2e35e4ec1e9e72abbe2fac0bc4e258966118ad5aceb",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -2099,10 +2099,15 @@
|
|
|
2099
2099
|
"mode": "0000644",
|
|
2100
2100
|
"sha256": "3a743808de440eebd5fcdd74a4c88e41acc82cc02ce5632cb392b2aa0c05b48e"
|
|
2101
2101
|
},
|
|
2102
|
+
{
|
|
2103
|
+
"path": "docs/adr/0322-a-remnant-needs-evidence-and-merged-wins.md",
|
|
2104
|
+
"mode": "0000644",
|
|
2105
|
+
"sha256": "6a4ad58720701e760068d5ce1761733790beef0a142aa31a08782d029cc7a390"
|
|
2106
|
+
},
|
|
2102
2107
|
{
|
|
2103
2108
|
"path": "docs/adr/README.md",
|
|
2104
2109
|
"mode": "0000644",
|
|
2105
|
-
"sha256": "
|
|
2110
|
+
"sha256": "7c66ecbd1940f3cdd830f0fb4acf65c41178807a431bb8fab382e4b8a0dbc8ae"
|
|
2106
2111
|
},
|
|
2107
2112
|
{
|
|
2108
2113
|
"path": "docs/api-reference.md",
|
|
@@ -2137,12 +2142,12 @@
|
|
|
2137
2142
|
{
|
|
2138
2143
|
"path": "docs/copy-inventory.md",
|
|
2139
2144
|
"mode": "0000644",
|
|
2140
|
-
"sha256": "
|
|
2145
|
+
"sha256": "b0baae493a096ea80d8eb03a2f94b3024b8ccfa252817d12f16ea4fbc9e0bc40"
|
|
2141
2146
|
},
|
|
2142
2147
|
{
|
|
2143
2148
|
"path": "docs/copy-registry.json",
|
|
2144
2149
|
"mode": "0000644",
|
|
2145
|
-
"sha256": "
|
|
2150
|
+
"sha256": "f1377ec71f59b2e976046d5a382ba8319b201242faf5de6e3760f57c595c40e4"
|
|
2146
2151
|
},
|
|
2147
2152
|
{
|
|
2148
2153
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2672,7 +2677,7 @@
|
|
|
2672
2677
|
{
|
|
2673
2678
|
"path": "docs/module-api-changelog.md",
|
|
2674
2679
|
"mode": "0000644",
|
|
2675
|
-
"sha256": "
|
|
2680
|
+
"sha256": "7fd498d8715f13993c9a6063ec9add31cdc9ee13b1892af2c366e5c8314dc233"
|
|
2676
2681
|
},
|
|
2677
2682
|
{
|
|
2678
2683
|
"path": "docs/modules-contract.md",
|
|
@@ -4272,7 +4277,7 @@
|
|
|
4272
4277
|
{
|
|
4273
4278
|
"path": "modules/economy/reward.js",
|
|
4274
4279
|
"mode": "0000644",
|
|
4275
|
-
"sha256": "
|
|
4280
|
+
"sha256": "79f225665dfc84fce1c50d01a25bbf81986c91047732d04113f24a68f766d29a"
|
|
4276
4281
|
},
|
|
4277
4282
|
{
|
|
4278
4283
|
"path": "modules/economy/routes/cost.js",
|
|
@@ -4787,12 +4792,12 @@
|
|
|
4787
4792
|
{
|
|
4788
4793
|
"path": "modules/hall-ui/public/deploy.html",
|
|
4789
4794
|
"mode": "0000644",
|
|
4790
|
-
"sha256": "
|
|
4795
|
+
"sha256": "b194f231a0b503bbfd0a5d68fc16e7a1bb6c008b6a1d8139e083ec839d018b95"
|
|
4791
4796
|
},
|
|
4792
4797
|
{
|
|
4793
4798
|
"path": "modules/hall-ui/public/deploy.js",
|
|
4794
4799
|
"mode": "0000644",
|
|
4795
|
-
"sha256": "
|
|
4800
|
+
"sha256": "e5a689447524c8c3460a2a649bea3673c958c6ec8607ad41144c575d29d142d0"
|
|
4796
4801
|
},
|
|
4797
4802
|
{
|
|
4798
4803
|
"path": "modules/hall-ui/public/diagram-viewer.css",
|
|
@@ -5117,7 +5122,7 @@
|
|
|
5117
5122
|
{
|
|
5118
5123
|
"path": "modules/hall-ui/public/project-settings.css",
|
|
5119
5124
|
"mode": "0000644",
|
|
5120
|
-
"sha256": "
|
|
5125
|
+
"sha256": "e4a266b0b5b2574f3864e67afb1581a53b374f6cab02f01df34d8b51dc2570c0"
|
|
5121
5126
|
},
|
|
5122
5127
|
{
|
|
5123
5128
|
"path": "modules/hall-ui/public/project-settings.html",
|
|
@@ -5399,6 +5404,11 @@
|
|
|
5399
5404
|
"mode": "0000644",
|
|
5400
5405
|
"sha256": "363598b5905c850967b407f20110a1d9e9d5b1090a958700cb6a4ed5cea70d80"
|
|
5401
5406
|
},
|
|
5407
|
+
{
|
|
5408
|
+
"path": "modules/ideas/idea-state.js",
|
|
5409
|
+
"mode": "0000644",
|
|
5410
|
+
"sha256": "e516f7951b91234c1f9dc6e327dc7365b6f6c9aad69bb3a85835061e2d072253"
|
|
5411
|
+
},
|
|
5402
5412
|
{
|
|
5403
5413
|
"path": "modules/ideas/inbox.js",
|
|
5404
5414
|
"mode": "0000644",
|
|
@@ -5477,7 +5487,7 @@
|
|
|
5477
5487
|
{
|
|
5478
5488
|
"path": "modules/ideas/routes/inbox.js",
|
|
5479
5489
|
"mode": "0000644",
|
|
5480
|
-
"sha256": "
|
|
5490
|
+
"sha256": "c302e5cd180ce9a6253ab30fad24b970d06f33f0916ac5d922323e536da7b213"
|
|
5481
5491
|
},
|
|
5482
5492
|
{
|
|
5483
5493
|
"path": "modules/ideas/routing.js",
|
|
@@ -5507,7 +5517,7 @@
|
|
|
5507
5517
|
{
|
|
5508
5518
|
"path": "modules/ideas/trail.js",
|
|
5509
5519
|
"mode": "0000644",
|
|
5510
|
-
"sha256": "
|
|
5520
|
+
"sha256": "5ea6bad2296406f56bcf3a00f040ce78a789f24fc0d7d5b933e1526cbbb97cd2"
|
|
5511
5521
|
},
|
|
5512
5522
|
{
|
|
5513
5523
|
"path": "modules/lifecycle/CLAUDE.md",
|
|
@@ -6402,7 +6412,7 @@
|
|
|
6402
6412
|
{
|
|
6403
6413
|
"path": "modules/provisioning/core-upgrade.js",
|
|
6404
6414
|
"mode": "0000644",
|
|
6405
|
-
"sha256": "
|
|
6415
|
+
"sha256": "284fffcdb5bbeac39e16699428b5c775be45e0fc2b88fe9dab38a41b9daba0df"
|
|
6406
6416
|
},
|
|
6407
6417
|
{
|
|
6408
6418
|
"path": "modules/provisioning/credential-preflight.js",
|
|
@@ -6509,6 +6519,11 @@
|
|
|
6509
6519
|
"mode": "0000644",
|
|
6510
6520
|
"sha256": "9d530c724f49392e5eed301b498631be5bfa096eca344cd7b26b88b5fc9210d3"
|
|
6511
6521
|
},
|
|
6522
|
+
{
|
|
6523
|
+
"path": "modules/provisioning/migrations/provisioning_020_core_upgrade_preflight.sql",
|
|
6524
|
+
"mode": "0000644",
|
|
6525
|
+
"sha256": "cdc3e8992d1e4273a472b826f208736235c8a3b16a700de33a7705cdae99ef9e"
|
|
6526
|
+
},
|
|
6512
6527
|
{
|
|
6513
6528
|
"path": "modules/provisioning/module.json",
|
|
6514
6529
|
"mode": "0000644",
|
|
@@ -6542,7 +6557,7 @@
|
|
|
6542
6557
|
{
|
|
6543
6558
|
"path": "modules/provisioning/provisioning.js",
|
|
6544
6559
|
"mode": "0000644",
|
|
6545
|
-
"sha256": "
|
|
6560
|
+
"sha256": "cfd57a109b12ecc629422c16a4db85fe2daf1700dcae60df2885701e5eecd5cc"
|
|
6546
6561
|
},
|
|
6547
6562
|
{
|
|
6548
6563
|
"path": "modules/provisioning/rate-limit.js",
|
|
@@ -7902,12 +7917,12 @@
|
|
|
7902
7917
|
{
|
|
7903
7918
|
"path": "package-lock.json",
|
|
7904
7919
|
"mode": "0000644",
|
|
7905
|
-
"sha256": "
|
|
7920
|
+
"sha256": "71c16e136b5801d5f4e6c1a7f51259a4806e4455a56667d938f741165fb606c2"
|
|
7906
7921
|
},
|
|
7907
7922
|
{
|
|
7908
7923
|
"path": "package.json",
|
|
7909
7924
|
"mode": "0000644",
|
|
7910
|
-
"sha256": "
|
|
7925
|
+
"sha256": "5ffcd517937622f074ddafa5e24c388f82e70025be47e2b2903ecb51fca516d1"
|
|
7911
7926
|
},
|
|
7912
7927
|
{
|
|
7913
7928
|
"path": "public-docs/index.html",
|
|
@@ -8852,7 +8867,7 @@
|
|
|
8852
8867
|
{
|
|
8853
8868
|
"path": "scripts/gds/provision-core-upgrade.js",
|
|
8854
8869
|
"mode": "0000644",
|
|
8855
|
-
"sha256": "
|
|
8870
|
+
"sha256": "1c17b46ebe04bf19abfcfe40a0b3029c052362155b90b6445ea2b105cae7e621"
|
|
8856
8871
|
},
|
|
8857
8872
|
{
|
|
8858
8873
|
"path": "scripts/gds/provision-disconnect.js",
|
|
@@ -8892,7 +8907,7 @@
|
|
|
8892
8907
|
{
|
|
8893
8908
|
"path": "scripts/gds/provision.js",
|
|
8894
8909
|
"mode": "0000644",
|
|
8895
|
-
"sha256": "
|
|
8910
|
+
"sha256": "2dee107429b1391e6e00a0c4915f9972c0e9d16f90a3d2ac111a34ffa5e7bc1d"
|
|
8896
8911
|
},
|
|
8897
8912
|
{
|
|
8898
8913
|
"path": "scripts/gds/publish-credential-check.js",
|
|
@@ -9907,7 +9922,7 @@
|
|
|
9907
9922
|
{
|
|
9908
9923
|
"path": "src/module-api.js",
|
|
9909
9924
|
"mode": "0000644",
|
|
9910
|
-
"sha256": "
|
|
9925
|
+
"sha256": "d846a0cb8672ac4215442311fbc5a8c6bcd00f99e085e98b485095a2573007c5"
|
|
9911
9926
|
},
|
|
9912
9927
|
{
|
|
9913
9928
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10817,12 +10832,12 @@
|
|
|
10817
10832
|
{
|
|
10818
10833
|
"path": "tests/core_upgrade_door.mjs",
|
|
10819
10834
|
"mode": "0000644",
|
|
10820
|
-
"sha256": "
|
|
10835
|
+
"sha256": "c1142dc4a706d33bdef42cff56f4c5be4a7c091bbfd5a9f6ed87af04cd3518c6"
|
|
10821
10836
|
},
|
|
10822
10837
|
{
|
|
10823
10838
|
"path": "tests/core_upgrade_runner.mjs",
|
|
10824
10839
|
"mode": "0000644",
|
|
10825
|
-
"sha256": "
|
|
10840
|
+
"sha256": "c818ad655da58837122dc40a8d64b0ca89eb643aebba094ed674546cbaa3b1f5"
|
|
10826
10841
|
},
|
|
10827
10842
|
{
|
|
10828
10843
|
"path": "tests/cosmos_token_contrast.mjs",
|
|
@@ -10967,7 +10982,7 @@
|
|
|
10967
10982
|
{
|
|
10968
10983
|
"path": "tests/deploy_page_projects.mjs",
|
|
10969
10984
|
"mode": "0000644",
|
|
10970
|
-
"sha256": "
|
|
10985
|
+
"sha256": "4a3ff955e0b1a605a96bdff6ec5dc36e0a5041e5a7fc8fa8b45768249a422d3a"
|
|
10971
10986
|
},
|
|
10972
10987
|
{
|
|
10973
10988
|
"path": "tests/design_tokens_sync.mjs",
|
|
@@ -12034,6 +12049,11 @@
|
|
|
12034
12049
|
"mode": "0000644",
|
|
12035
12050
|
"sha256": "8bfc36537ffccae702e74e8763534fa535486a2eb8bbf9ee546a2c7368d1dc6b"
|
|
12036
12051
|
},
|
|
12052
|
+
{
|
|
12053
|
+
"path": "tests/idea_state.mjs",
|
|
12054
|
+
"mode": "0000644",
|
|
12055
|
+
"sha256": "f71f7007d72689e865b1945feac66012398b38557affdc776d0a6abdc2140e65"
|
|
12056
|
+
},
|
|
12037
12057
|
{
|
|
12038
12058
|
"path": "tests/idea_task_descent.mjs",
|
|
12039
12059
|
"mode": "0000644",
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# ADR 0322 — The five states are derived once, and a remnant needs evidence
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-09-20
|
|
5
|
+
- **Task:** [task 1004103](https://cloudbongos.com/builders#/task/1004103) (BV2.R17, goal 1000095 — BONGOS-V2)
|
|
6
|
+
- **Spec:** `docs/specs/<redacted>.md` decisions 4, 19 and 20; criterion `ideator-sky-tells-the-truth`
|
|
7
|
+
- **Design of record:** `docs/design/ideator-surface-direction.md` §"The five objects"
|
|
8
|
+
- **Under:** [ADR 0321](0321-brightness-is-a-weighted-share-and-the-targets-are-a-row.md), [ADR 0313](0313-a-removal-is-proposed-by-the-ship-and-confirmed-by-a-person.md), [ADR 0312](0312-provenance-is-a-second-ideas-owned-edge-table.md)
|
|
9
|
+
|
|
10
|
+
## Context
|
|
11
|
+
|
|
12
|
+
The ideator surface draws a thought as one of five objects: **star** (it caused work that
|
|
13
|
+
is still alive), **protostar** (filed, not yet ignited), **satellite** (folded into another
|
|
14
|
+
thought), **remnant** (it burned, then the project removed it) and **cold body** (declined
|
|
15
|
+
at triage, so it never ignited and has no size at all). Dim and dark are different states
|
|
16
|
+
and must be different objects, not one dot at two opacities.
|
|
17
|
+
|
|
18
|
+
Three surfaces are about to draw them — the room (BV2.R03), the descent (R10) and the sky
|
|
19
|
+
(R20) — and the spec's own phrasing is that every state must be *computed from the ledger,
|
|
20
|
+
and no surface has to infer one*.
|
|
21
|
+
|
|
22
|
+
The facts already exist. `idea_inbox.status` carries the triage verdict (`open`,
|
|
23
|
+
`promoted`, `discarded`, `merged`; `core_195`). ADR 0321 gave economy `ideaBrightnesses()`,
|
|
24
|
+
returning `hasWork`, `share` and `attributable` per idea. `tasks.goal_id` and `tasks.status`
|
|
25
|
+
say where a thought's work sits and whether it awaits a nod. Nothing was missing; what was
|
|
26
|
+
missing was one place that reads them.
|
|
27
|
+
|
|
28
|
+
## Decision
|
|
29
|
+
|
|
30
|
+
**One resolver, `modules/ideas/idea-state.js`, and no surface decides a state.** A state
|
|
31
|
+
inferred in three renderers is three states: the sky can say a thought went out while the
|
|
32
|
+
room beside it still calls it alive, with nothing erroring and no way to tell which is
|
|
33
|
+
right. The resolver is pure — facts in, object out — the way `routing.js` is pure about a
|
|
34
|
+
landing. `attachStateToTrail` is the one async wrapper, composed on the trail route after
|
|
35
|
+
`attachSizeToTrail`.
|
|
36
|
+
|
|
37
|
+
**Brightness goes on the `reward` port.** `ideas` may not reach `credit_log` any other way
|
|
38
|
+
(ADR 0083 rule 1), and it already declares `reward` in `consumes`, so no new dependency
|
|
39
|
+
edge. Shipping size without brightness had left the module able to draw how big a thought
|
|
40
|
+
was and unable to say whether it was still alive.
|
|
41
|
+
|
|
42
|
+
**The order of the tests is the decision**, and each step could have gone the other way:
|
|
43
|
+
|
|
44
|
+
1. **Merged wins over everything.** A folded thought is a satellite even when it earned
|
|
45
|
+
money of its own — and it *keeps* that money; `trail-size.js` is emphatic that stream 1
|
|
46
|
+
books against the idea whose lineage row named the shipping task. This changes what the
|
|
47
|
+
thought **is**, not what it earned. Letting work win here draws a satellite as an
|
|
48
|
+
independent star beside the thought that absorbed it: one idea, twice in the sky.
|
|
49
|
+
2. **Work beats a discard.** The design defines a cold body as one that *"never ignited, so
|
|
50
|
+
it has no size at all"* — a stated property, and testing work before status is what
|
|
51
|
+
makes it true by construction rather than by hope. It is reachable: triage can discard a
|
|
52
|
+
duplicate whose twin already routed and paid, and `updateIdea` never touches the ledger.
|
|
53
|
+
3. **A remnant needs evidence, never the absence of an answer.** `share === 0` means the
|
|
54
|
+
project confirmed every piece of the descent gone. `share === null` means the removal
|
|
55
|
+
facts could not be read at all — ADR 0321 is explicit that those are different answers.
|
|
56
|
+
An idea with work and no readable facts is a **star** carrying `attributable: false`, so
|
|
57
|
+
a surface says "unknown" rather than "full". Reading a falsy share as death turns one
|
|
58
|
+
unmounted module into a sky of hollow rings.
|
|
59
|
+
4. **A protostar is the absence of work, not the presence of a status.** Ignition is being
|
|
60
|
+
*paid* for something, not being converted into a row, so a promoted-but-unshipped idea is
|
|
61
|
+
still unignited — which is exactly the state the nod queue exists for.
|
|
62
|
+
|
|
63
|
+
**Position is a second axis**, because the design says the object alone cannot carry it: a
|
|
64
|
+
protostar **in a well** has a home and awaits a nod; one in **open space** has nothing
|
|
65
|
+
holding it. The resolver returns `position`, `wellGoalId` and `awaitingNod` for every state
|
|
66
|
+
(a star has a position too), and the nod is asked of *every* task rather than only the one
|
|
67
|
+
that named the well — an idea that became two tasks, one promoted and one still at
|
|
68
|
+
`backlog`, still has something waiting on a person.
|
|
69
|
+
|
|
70
|
+
**`suggested_goal_id` is deliberately not a well.** It sits on the row, it names a goal, and
|
|
71
|
+
it is the wrong fact: `projection.js` records it as strictly advisory — the routing hint on
|
|
72
|
+
a filing that did **not** convert, with `tasks.goal_id` as the binding home. Reading it here
|
|
73
|
+
would draw a protostar inside a well that never caught it and put it in a nod queue nobody
|
|
74
|
+
can act on, because no task exists to promote. The binding fact is now selected on both of
|
|
75
|
+
the trail's task joins (`trail.js`), which costs no extra round trip.
|
|
76
|
+
|
|
77
|
+
**The page reads the ledger once.** `attachSizeToTrail` leaves economy's own `byTask`
|
|
78
|
+
breakdown on each row and brightness takes its share of exactly that, so the state attach
|
|
79
|
+
hands it straight back. All of the sizes or none: a partial map reads a missing entry as
|
|
80
|
+
"no work", which would draw a paid star as a protostar.
|
|
81
|
+
|
|
82
|
+
**An absent `reward` port does not empty the sky.** The states still resolve on status
|
|
83
|
+
alone, carrying `attributable: false` — the same posture `trail-size.js` takes with
|
|
84
|
+
`size: null`.
|
|
85
|
+
|
|
86
|
+
## Consequences
|
|
87
|
+
|
|
88
|
+
- `GET /inbox/by-builder/:id` now returns `state` per idea beside `size` and
|
|
89
|
+
`descent_tasks`. Additive; no existing consumer reads it yet, and R03/R10/R20 will.
|
|
90
|
+
- The five objects are spelled once (`IDEA_STATES`), so a renderer switching on hand-copied
|
|
91
|
+
strings cannot drift by a hyphen and silently draw nothing.
|
|
92
|
+
- Nothing here writes, and no credit moves. ADR 0313 stands: `shipped` is terminal, and
|
|
93
|
+
only the picture changes.
|
|
94
|
+
- `tests/idea_state.mjs` (31 cases, DB-free). The ordering, the zero-over-zero edge, the
|
|
95
|
+
well and the trail SQL are each mutation-probed.
|
|
96
|
+
|
|
97
|
+
## Rejected
|
|
98
|
+
|
|
99
|
+
- **Resolving the state in each renderer.** The cheapest thing to write and the reason the
|
|
100
|
+
done-when says "no surface has to infer one".
|
|
101
|
+
- **Deriving the state from `share` alone.** It merges a protostar with a remnant — the
|
|
102
|
+
precise distinction the two channels exist to draw, and the one BV2.R19's proof checks.
|
|
103
|
+
- **Treating an unreadable `share` as zero.** "We could not look" is not "everything was
|
|
104
|
+
removed"; ADR 0321 pays for that distinction upstream and discarding it here wastes it.
|
|
105
|
+
- **Status-first ordering** (a discarded idea is always a cold body). It contradicts the
|
|
106
|
+
object's own stated property the moment triage discards something that already paid.
|
|
107
|
+
- **Reading `suggested_goal_id` as a well.** Advisory by construction; it would populate a
|
|
108
|
+
nod queue with entries nothing can act on.
|
|
109
|
+
- **A sixth object for "unknown brightness".** The vocabulary is the owner's and is five;
|
|
110
|
+
the uncertainty is carried as a flag on the answer, not as a new thing in the sky.
|
package/docs/adr/README.md
CHANGED
|
@@ -413,3 +413,4 @@ This keeps the decision history honest and traceable.
|
|
|
413
413
|
| 0319 | [**A removal verdict is a row beside the question, because both answers close it the same way** ([task 1004095](https://cloudbongos.com/builders#/task/1004095), goal 1000095 — BONGOS-V2). [ADR 0313](0313-a-removal-is-proposed-by-the-ship-and-confirmed-by-a-person.md) settled that a ship deleting an earlier shipped task’s files files a QUESTION and a person answers it; task 1004090 built the question and nothing could answer it. Building the answer surfaced the property that decides the design: a proposal is a question, not work, so CONFIRMING and DISMISSING both leave nothing to build and both end the task at `abandoned` — meaning a status alone records neither, and brightness could not tell the star it must dim from the one it must not. ADR 0313 had already rejected the obvious alternative (a `removed` status; `shipped` is terminal and much of the ledger leans on it — a removal is a fact recorded BESIDE work, not a new terminal state). Decision: `lifecycle_removal_verdicts` (migration `lifecycle_009`), PRIMARY KEY on `proposal_task_id` so one proposal holds one answer ever — a second decide is REFUSED (409), never upserted and never an idempotent 200, because overwriting destroys the record that a person answered differently; the row is locked `FOR UPDATE` first, so simultaneous Confirm and Dismiss cannot both read “undecided”, and `ALREADY_DECIDED` is checked BEFORE `PROPOSAL_CLOSED` because an answered proposal is also abandoned and the useful message is the one naming the earlier verdict. The verdict and the status change commit in ONE transaction. What this does NOT ship is the target list: the affected tasks and paths stay PROSE in the proposal body (the owner’s 2026-09-20 decision, since [ADR 0242](0242-a-cascade-is-a-declaration-table-on-the-event-that-already-exists.md) forbids widening the runner to fan out), and nothing here parses it — brightness designs that storage. What brightness does get is structured: the verdict plus `ship_task_id`, denormalised out of the `source_ref` that encodes it as a string nothing can join on. Surface: spec decision 15’s “existing awaiting-nod surface” is the CARD, not the QUEUE — [ADR 0299](0299-the-nod-queue-stays-scoped-to-routed-filings.md) keeps that queue scoped to routed filings and a removal proposal has no idea lineage at all, so it gets its own slice on the same card at the same floor. The PERMISSION is reused (`task.promote`, Metic+, read and write both) and the VERB is not: no existing route means “that work is genuinely gone”, and `/tasks/:id/abandon` would close the question without recording which answer was given. Top-level `/removal-proposals` rather than `/tasks/removal-proposals`, because the manifest mounts `tasks` first and its `/tasks/:id` swallows a later file’s literal segment. Rot is INHERITED: `backlog` is rottable and `abandoned` is not, so an unanswered proposal rots and an answered one leaves the feed with no code written for either — pinned against the rot module’s own exported vocabulary. Rejected: the status as the record; parsing the body at confirm time; widening the nod queue; separate `/confirm` and `/dismiss` routes; upserting a second verdict; a `LIKE ‘prefix%’` match (a rule key may contain an underscore, which is a LIKE wildcard).](0319-a-removal-verdict-is-a-row-beside-the-question.md) | ideas / lifecycle |
|
|
414
414
|
| 0318 | [**Listing a file for task affinity is not claiming to own it** ([task 1004110](https://cloudbongos.com/builders#/task/1004110), goal 1000095 — BONGOS-V2). The case [ADR 0314](0314-module-protection-is-per-path-not-per-module.md) named and left open, closed by neither of the two routes it predicted. `builder-settings` derived `protected` — Archon-only to scope a goal to — on exactly one glob, `src/bongos/routes/me.js`, caught by the blanket `src/bongos/routes/` prefix. **That glob was never an ownership claim:** `MODULE_GLOBS` listed it for task AFFINITY and said in the same comment that the `GET /me` aggregator stays a thin core facade, and `isProtected()` cannot tell the two apart. **Both predicted routes were measured and rejected.** Narrowing the blanket prefix: all eighteen files under `src/bongos/routes/` are protected by that prefix AND NOTHING ELSE, so narrowing unwalls `auth.js`, `builders.js`, `backup.js` and `core-update.js` together — now pinned as a tripwire test rather than left as a caution. Moving `me.js` into `modules/builder-settings/`: the aggregator resolves TEN module ports (`lifecycle`, `reward`, `onboarding`, `government`, `specialities`, `grade`, `box`, `art` ×2, `discord`) and `builder-settings` is one of them, so hosting it inside one module means resolving nine foreign ports from the inside — the `core -> module` edge [ADR 0083](0083-modular-architecture-strangler-build-plan.md) rule 1 forbids. Decision: **ownership follows what the file is** — `me.js` moves to `kernel`, which already owns `src/bongos/routes/security.js`. This is 0314 one step on: owning the command is not owning the authority, and **being listed next to a module is not owning it either**. **Rejected: a general affinity tier** in `MODULE_GLOBS` mirroring `isCommandPath` — the audit does not support it. Three other modules (`kernel`, `devsecops`, `methodology`) are also protected only by paths outside their own directory, but in each the foreign path genuinely IS the domain; `builder-settings` was the only module protected by a path its own source called core, so a new tier would be a new place for a hole to hide, built for a population of one. `protectedModules()` goes 9 -> 8. **The wall that matters does not move:** a sub-Metic builder touching `/me` is still refused by `checkPermissionPaths`, asserted directly rather than assumed. The sixteen still-unowned route files remain [task 1004116](https://cloudbongos.com/builders#/task/1004116), whose option (a) this de-risks.](0318-listing-a-file-for-task-affinity-is-not-owning-it.md) | permissions / module scope |
|
|
415
415
|
| 0321 | [**Brightness is a payout-weighted share, and a removal's targets are rows** ([task 1004099](https://cloudbongos.com/builders#/task/1004099), goal 1000095 — BONGOS-V2). Size is an idea's total ideator payout and never falls; brightness is how much of that work is still alive, and the pair is what lets a thought whose version was torn out draw LARGE AND DARK rather than merging with one that never mattered. Two things had to be settled. **The removal facts were stored in the wrong direction**: [ADR 0319](0319-a-removal-verdict-is-a-row-beside-the-question.md) gave a confirmed removal a row carrying the verdict and `ship_task_id` — the task whose merge DELETED the files — and deliberately left out the tasks whose work was removed, saying brightness would design its own storage when it needed one. Those are different rows under different ideas, so reading one as the other dims the wrong star while looking like a working query. `<redacted>` stores `(proposal_task_id, removed_task_id, paths)` at PROPOSAL time, from the SAME derivation objects the proposal body renders as prose — one derivation, two renderings, so they cannot disagree and `removal-proposals.js` keeps its refusal to parse a body back. Proposal time and not verdict time because the attribution comes from capped, rate-limited GitHub commit-history reads that only exist while the cascade runs. NOT a runner fan-out ([ADR 0242](0242-a-cascade-is-a-declaration-table-on-the-event-that-already-exists.md)): the rule still files one task; this records a side fact about it. `ON CONFLICT DO NOTHING`, never `DO UPDATE`, since a degraded second walk finds FEWER paths and must not erase a good first read — and the writer runs on the cascade's SKIPPED row too, so a re-ship repairs what a derivation outage missed. **The share is weighted by PAYOUT, not by task count**, or deleting a one-line fix dims a star as hard as deleting the feature; weighting by what each hop earned also makes 'large and dead' exact, and makes the two channels a share of ONE number rather than two unrelated measurements. Basis is paid + estimated to match size, which required `priceDescentForIdea`/`ideaSizes` to return a per-task `byTask` summing EXACTLY to `credits` — including ledger payments for tasks the descent no longer reaches, which `idea-size.js` keeps in `credits` so size cannot fall and which would otherwise make the parts sum to less than the whole. Three edges, each silent: an idea that earned nothing is `share: 1, hasWork: false`, because zero over zero is not zero and a protostar is not a remnant (the BV2.R19 distinction); an unreadable removal port gives `share: null, attributable: false`, because 'could not look' is not 'nothing was removed'; and a CONFIRMED removal naming no target dims nothing at all — brightness cannot know which idea — so `countUnattributedConfirmed()` exists to say the gap out loud instead of quietly brightening the sky. Brightness lives in `economy` beside size and reaches lifecycle through the new `lifecycle.removals` port, resolved OPTIONALLY and NOT declared in `consumes` (declaring it would turn 'lifecycle off' into 'instance will not start' — the `ideas.descent` precedent). **No credit is clawed back and nothing here writes**: ADR 0313 stands, `shipped` is terminal, only the picture changes. Rejected: parsing the proposal body (ADR 0319 already refused it — a human-facing line shape fails silently when reworded); re-deriving at verdict time; treating `ship_task_id` as the removed task; counting tasks rather than payouts; clamping the share at the top, which would hide the anomaly it claims to prevent.](0321-brightness-is-a-weighted-share-and-the-targets-are-a-row.md) | ideas / economy |
|
|
416
|
+
| 0322 | [**The five states are derived once, and a remnant needs evidence** ([task 1004103](https://cloudbongos.com/builders#/task/1004103), goal 1000095 — BONGOS-V2). The ideator surface draws a thought as one of five objects — star, protostar, satellite, remnant, cold body — and three surfaces are about to draw them (the room, the descent, the sky). Every fact already existed: `idea_inbox.status` (`core_195`), [ADR 0321](0321-brightness-is-a-weighted-share-and-the-targets-are-a-row.md)’s `hasWork` / `share` / `attributable`, and `tasks.goal_id` + `tasks.status`. What was missing was ONE place that reads them: a state inferred in three renderers is three states, and the sky can say a thought went out while the room beside it still calls it alive, with nothing erroring. **Decision:** one pure resolver (`modules/ideas/idea-state.js`), brightness exposed on the `reward` port (ideas may not reach `credit_log` any other way — [ADR 0083](0083-modular-architecture-strangler-build-plan.md) rule 1 — and already declares `reward` in `consumes`), and the ORDER of the tests IS the decision. **MERGED wins over everything:** a folded thought keeps its own money (`trail-size.js` is emphatic) but is no longer its own point in the sky, so letting work win draws one idea twice, beside the thought that absorbed it. **WORK beats a DISCARD:** a cold body “never ignited, so it has no size at all” is a stated PROPERTY, and testing work first makes it true by construction — triage really can discard a duplicate whose twin already routed and paid, and `updateIdea` never touches the ledger. **A REMNANT needs EVIDENCE, never the absence of an answer:** `share: 0` is a confirmed removal, `share: null` is an unreadable one, and ADR 0321 pays for that distinction upstream — so an idea with work and no readable facts is a STAR carrying `attributable: false`, because reading a falsy share as death turns one unmounted module into a sky of hollow rings. **A PROTOSTAR is the absence of WORK, not of a status:** ignition is being PAID for something, so a promoted-but-unshipped idea is still unignited, which is exactly what the nod queue exists for. **Position is a second axis** (`well` / `open-space` / `awaitingNod`) because the design says the object alone cannot carry it, and the nod is asked of EVERY task, not only the one that named the well. **`suggested_goal_id` is deliberately NOT a well** — `projection.js` records it as strictly advisory, the routing hint on a filing that did not convert, so reading it would put a thought in a nod queue with no task to promote; the binding `tasks.goal_id` now rides on both of the trail’s task joins at no extra round trip. The page reads the ledger ONCE: the state attach hands economy back the `byTask` breakdown size just computed, all of them or none (a partial map reads a missing entry as “no work” and draws a paid star as a protostar). An absent `reward` port does not empty the sky — states still resolve, flagged unattributable. Nothing writes; ADR 0313 stands. Rejected: resolving in each renderer; deriving from `share` alone (it merges a protostar with a remnant, the exact BV2.R19 distinction); treating an unreadable share as zero; status-first ordering; reading the hint as a home; a sixth object for “unknown brightness” (the vocabulary is the owner’s and is five — the uncertainty is a flag on the answer, not a new thing in the sky).](0322-a-remnant-needs-evidence-and-merged-wins.md) | ideas / economy |
|
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
|
+
**1839 strings** across 3 surfaces · 1596 distinct pieces of copy · 1839 certain, 0 heuristic · 166 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` | 84 |
|
|
13
|
+
| `builders-hall` | `modules/hall-ui/public` | 84 | 1349 |
|
|
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
|
| `996edffc1966` | 2x | Access requests | modules/hall-ui/public/watch.html:46, modules/hall-ui/public/watch.html:61 |
|
|
79
79
|
| … | | _126 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1349 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -89,6 +89,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
89
89
|
| `66cea7cefa4e` | certain | '; for (const row of bodyRows) { html += ' | `modules/hall-ui/public/md-reader.js:220` |
|
|
90
90
|
| `53e4ac514458` | certain | '; out.push(html); continue; } // Lists (unordered '- ' or ordered '1. '); consecutive items collapse. if (/^( | `modules/hall-ui/public/md-reader.js:224` |
|
|
91
91
|
| `87fa099f5068` | certain | '; } html += ' | `modules/hall-ui/public/md-reader.js:224` |
|
|
92
|
+
| `af615fa9f404` | certain | (checked {…}) | `modules/hall-ui/public/deploy.js:152` |
|
|
92
93
|
| `544794f1ec8f` | certain | (later in | `modules/hall-ui/public/index.html:9` |
|
|
93
94
|
| `3ac2eb36ba97` | certain | (no sections) | `modules/hall-ui/public/drachmae.js:260` |
|
|
94
95
|
| `a4614c0b8eb5` | certain | (or use the Claude Code CLI) and open the project. | `modules/hall-ui/public/hall-render.js:864` |
|
|
@@ -235,8 +236,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
235
236
|
| `cab7a9526ca1` | certain | Changes save the moment you pick. “Default” clears your override and falls back to the system's choice. | `modules/hall-ui/public/settings.html:365` |
|
|
236
237
|
| `4b714191b423` | certain | Changes touching protected build surfaces, held for your approval. | `modules/hall-ui/public/gate.js:403` |
|
|
237
238
|
| `e6982a9ff948` | certain | Charter library | `modules/hall-ui/public/government.js:799` |
|
|
239
|
+
| `f66f5cdaa732` | certain | Checked against {…} — nothing blocks this move.{…} | `modules/hall-ui/public/deploy.js:155` |
|
|
238
240
|
| `f8725cf3ba62` | certain | Checking dependency order… | `modules/hall-ui/public/work.js:854` |
|
|
239
241
|
| `7a41b18c0de8` | certain | Checking for conflicts… | `modules/hall-ui/public/work.js:833` |
|
|
242
|
+
| `69da40d030b0` | certain | Checking what this would do… | `modules/hall-ui/public/deploy.js:145` |
|
|
240
243
|
| `aa3ba7d28a76` | certain | Checking your key… | `modules/hall-ui/public/settings.js:1053` |
|
|
241
244
|
| `834f8c6f3b72` | certain | Choose a builder… | `modules/hall-ui/public/goals-render.js:1222` |
|
|
242
245
|
| `b3d0e2af5176` | certain | Choose a goal first. | `modules/hall-ui/public/task.js:938` |
|
|
@@ -322,7 +325,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
322
325
|
| `2366356926b4` | certain | Could not mark the primer just now. Try again. | `modules/hall-ui/public/primer.js:259` |
|
|
323
326
|
| `753987b5da13` | certain | Could not reach the submit endpoint. | `modules/hall-ui/public/modules.js:297` |
|
|
324
327
|
| `6f500726f0ac` | certain | Could not read the report: {…} | `modules/hall-ui/public/watch.js:640` |
|
|
325
|
-
| `21c2f33168a3` | certain | Could not read this project's deploy state: {…} | `modules/hall-ui/public/deploy.js:
|
|
328
|
+
| `21c2f33168a3` | certain | Could not read this project's deploy state: {…} | `modules/hall-ui/public/deploy.js:254` |
|
|
326
329
|
| `8b470cebf53d` | certain | Could not remove your key. Try again. | `modules/hall-ui/public/settings.js:1133` |
|
|
327
330
|
| `4cf6bc8b377b` | certain | Could not remove. Try again. | `modules/hall-ui/public/settings.js:1132` |
|
|
328
331
|
| `7a778d188e87` | certain | Could not remove: {…} | `modules/hall-ui/public/government.js:369` |
|
|
@@ -616,8 +619,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
616
619
|
| `1ae18e58fead` | certain | Most recent first. Each load of this page is itself recorded in the audit log. | `modules/hall-ui/public/sessions.js:340` |
|
|
617
620
|
| `f14a91b3f625` | certain | Most recent first. Each row is one recorded work session; every id on it opens its record. | `modules/hall-ui/public/sessions.html:56` |
|
|
618
621
|
| `e52ae74f0052` | certain | Move to goal | `modules/hall-ui/public/task.js:581` |
|
|
619
|
-
| `e77d5f3beaef` | certain | Move to {…} | `modules/hall-ui/public/deploy.js:
|
|
620
|
-
| `e77d5f3beaef` | certain | Move to {…} | `modules/hall-ui/public/deploy.js:
|
|
622
|
+
| `e77d5f3beaef` | certain | Move to {…} | `modules/hall-ui/public/deploy.js:218` |
|
|
623
|
+
| `e77d5f3beaef` | certain | Move to {…} | `modules/hall-ui/public/deploy.js:314` |
|
|
621
624
|
| `ae84ebe1d735` | certain | Name cannot be blank. | `modules/hall-ui/public/settings.js:761` |
|
|
622
625
|
| `31e91ee6ce03` | certain | Name must be {…} characters or fewer. | `modules/hall-ui/public/settings.js:766` |
|
|
623
626
|
| `5e8199266a8a` | certain | Name unvouched | `modules/hall-ui/public/watch.js:374` |
|
|
@@ -653,7 +656,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
653
656
|
| `2a6d7552e21f` | certain | No other sessions. | `modules/hall-ui/public/settings-sessions.js:64` |
|
|
654
657
|
| `9f73b3f3dad0` | certain | No rank floor — any builder can claim this task | `modules/hall-ui/public/task-lib.js:62` |
|
|
655
658
|
| `3fd0c6fcb92e` | certain | No request and no invite needed. Sign in with GitHub, and a step-by-step guide takes you the rest of the way. | `modules/hall-ui/public/hall-render.js:277` |
|
|
656
|
-
| `2947c1ddea9a` | certain | No running box to deploy. | `modules/hall-ui/public/deploy.js:
|
|
659
|
+
| `2947c1ddea9a` | certain | No running box to deploy. | `modules/hall-ui/public/deploy.js:292` |
|
|
657
660
|
| `9fb9f766450d` | certain | No sections yet | `modules/hall-ui/public/primer.js:130` |
|
|
658
661
|
| `bef9fe43ba84` | certain | No sessions recorded yet. They land here as builders ship and end sessions. | `modules/hall-ui/public/sessions.js:146` |
|
|
659
662
|
| `4485497d87bb` | certain | No specialities yet. Create one below — it takes a name and a craft, and you can train it afterwards. | `modules/hall-ui/public/settings-specialities.js:169` |
|
|
@@ -666,6 +669,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
666
669
|
| `1967d2176f2e` | certain | Nobody has an open ask right now. | `modules/hall-ui/public/collab.html:78` |
|
|
667
670
|
| `c65c9f5c02e3` | certain | Nobody is waiting on you. Requests reach you by role — | `modules/hall-ui/public/collab.html:54` |
|
|
668
671
|
| `91c409a4aea5` | certain | Nobody vouched for this name — anyone can file a request naming anyone. Confirm who is asking before you admit | `modules/hall-ui/public/watch.js:374` |
|
|
672
|
+
| `428a62539050` | certain | Not checked yet — the runner takes this reading on its own tick. | `modules/hall-ui/public/deploy.js:150` |
|
|
669
673
|
| `c72e0bdb834a` | certain | Not declared in module.json — this is who ships the module. | `modules/hall-ui/public/modules.js:62` |
|
|
670
674
|
| `361b353ded5e` | certain | Not enough shipped work yet to chart. | `modules/hall-ui/public/hall-widgets.js:184` |
|
|
671
675
|
| `90230572d017` | certain | Not found | `modules/hall-ui/public/task.js:970` |
|
|
@@ -684,7 +688,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
684
688
|
| `fec5d78497e8` | certain | Nothing in the backlog right now. | `modules/hall-ui/public/work.js:1107` |
|
|
685
689
|
| `905e99f158c2` | certain | Nothing is discarded by omission: every task needs a decision before this can be submitted. Abandoning stamps | `modules/hall-ui/public/goals-render.js:1012` |
|
|
686
690
|
| `2ec0fbb20a42` | certain | Nothing is waiting. A spark appears here when its author offers a quick idea up for development. | `modules/hall-ui/public/ideas.js:747` |
|
|
687
|
-
| `9ac63d97239a` | certain | Nothing newer is published that this box can take. There is nothing to deploy. | `modules/hall-ui/public/deploy.js:
|
|
691
|
+
| `9ac63d97239a` | certain | Nothing newer is published that this box can take. There is nothing to deploy. | `modules/hall-ui/public/deploy.js:237` |
|
|
688
692
|
| `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/profile.js:242` |
|
|
689
693
|
| `ad9a17a8a5eb` | certain | Nothing shipped yet. | `modules/hall-ui/public/work.js:1068` |
|
|
690
694
|
| `f326632f2013` | certain | Nothing to submit — every module here ships with the core. | `modules/hall-ui/public/modules.js:258` |
|
|
@@ -859,7 +863,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
859
863
|
| `324af64c8b6e` | certain | See all {…} goals {…} | `modules/hall-ui/public/roadmap.js:207` |
|
|
860
864
|
| `a9c398651862` | certain | See the cross-project record | `modules/hall-ui/public/profile-canonical.js:114` |
|
|
861
865
|
| `17d5b5739f46` | certain | See the work board → | `modules/hall-ui/public/hall-render.js:1003` |
|
|
862
|
-
| `55cde0774831` | certain | See what would change | `modules/hall-ui/public/deploy.js:
|
|
866
|
+
| `55cde0774831` | certain | See what would change | `modules/hall-ui/public/deploy.js:121` |
|
|
863
867
|
| `75dc5463facc` | certain | Select at least 2 waiting tasks to copy a parallel-session prompt. | `modules/hall-ui/public/work.js:818` |
|
|
864
868
|
| `a98882faa482` | certain | Select at least 2 waiting tasks to copy a sequential prompt. | `modules/hall-ui/public/work.js:843` |
|
|
865
869
|
| `582bdd9435eb` | certain | Select task {…} for bulk actions | `modules/hall-ui/public/work.js:454` |
|
|
@@ -867,7 +871,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
867
871
|
| `7e1d54119e08` | certain | Select task {…} for bulk release | `modules/hall-ui/public/work.js:242` |
|
|
868
872
|
| `ae43a132699b` | certain | Selectable today | `modules/hall-ui/public/government.js:799` |
|
|
869
873
|
| `53cc6d8dd23c` | certain | Send invitation | `modules/hall-ui/public/goals-render.js:1211` |
|
|
870
|
-
| `a39b0f9d86e5` | certain | Serving {…} — read from the box itself, {…}. | `modules/hall-ui/public/deploy.js:
|
|
874
|
+
| `a39b0f9d86e5` | certain | Serving {…} — read from the box itself, {…}. | `modules/hall-ui/public/deploy.js:239` |
|
|
871
875
|
| `64a1f055129e` | certain | Session card richness | `modules/hall-ui/public/settings-render.js:83` |
|
|
872
876
|
| `d14e8e9acaff` | certain | Session ended. | `modules/hall-ui/public/settings-sessions.js:81` |
|
|
873
877
|
| `55e0a34bafed` | certain | Session log{…} | `modules/hall-ui/public/task.js:487` |
|
|
@@ -1009,6 +1013,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1009
1013
|
| `198ba9353bf6` | certain | The task feed did not answer. Nothing on the record has changed, only the read failed. Try again in a moment, | `modules/hall-ui/public/task.js:975` |
|
|
1010
1014
|
| `34555793f33e` | certain | The task list could not be loaded right now. | `modules/hall-ui/public/work.js:1301` |
|
|
1011
1015
|
| `aed969dd1e18` | certain | The unattended runner works only the goals listed here, and only while it is on. This is the switch — it lives | `modules/hall-ui/public/gate.html:54` |
|
|
1016
|
+
| `8c991355687d` | certain | The upgrade checked {…} and refused:{…} | `modules/hall-ui/public/deploy.js:160` |
|
|
1012
1017
|
| `a42a37c43bfb` | certain | The words this project shows people — what has been flagged, and what nobody has looked at. | `modules/hall-ui/public/copy-desk.js:328` |
|
|
1013
1018
|
| `bcdbded93d4e` | certain | The work board failed to load. Reload to try again. | `modules/hall-ui/public/work.js:1496` |
|
|
1014
1019
|
| `25794c439321` | certain | Then copy the project onto your machine and run the one-shot bootstrap (it checks your setup, installs depende | `modules/hall-ui/public/hall-render.js:890` |
|
|
@@ -1043,12 +1048,13 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1043
1048
|
| `9a685b01e2c6` | certain | This page opens at a higher rank. | `modules/hall-ui/public/government.html:37` |
|
|
1044
1049
|
| `9a685b01e2c6` | certain | This page opens at a higher rank. | `modules/hall-ui/public/project-settings.html:36` |
|
|
1045
1050
|
| `9a685b01e2c6` | certain | This page opens at a higher rank. | `modules/hall-ui/public/watch.html:40` |
|
|
1046
|
-
| `f93fcb24c6ba` | certain | This platform | `modules/hall-ui/public/deploy.js:
|
|
1047
|
-
| `6e9dfe1fb903` | certain | This restarts {…} onto core | `modules/hall-ui/public/deploy.js:
|
|
1051
|
+
| `f93fcb24c6ba` | certain | This platform | `modules/hall-ui/public/deploy.js:284` |
|
|
1052
|
+
| `6e9dfe1fb903` | certain | This restarts {…} onto core | `modules/hall-ui/public/deploy.js:218` |
|
|
1048
1053
|
| `69e8beced2ff` | certain | This sends the idea back to its author. Say why, and which section. | `modules/hall-ui/public/board-room.js:276` |
|
|
1049
1054
|
| `09256febc32d` | certain | This sentence has {…} {…} where a value is dropped in when it is shown. | `modules/hall-ui/public/copy-desk.js:422` |
|
|
1050
1055
|
| `c9e50a67988a` | certain | This task has shipped and its credits have landed. Neither Ship it nor Confirm is available. | `modules/hall-ui/public/task.js:719` |
|
|
1051
1056
|
| `62b0940efd7d` | certain | This task is already retired. Promote restores it to the backlog. | `modules/hall-ui/public/task.js:755` |
|
|
1057
|
+
| `4301ecd67891` | certain | This would fail. | `modules/hall-ui/public/deploy.js:160` |
|
|
1052
1058
|
| `2ad5823d2cd7` | certain | Three dials, all settings rather than code: | `modules/hall-ui/public/government.html:55` |
|
|
1053
1059
|
| `82367d2122af` | certain | To paste the sign-in code: | `modules/hall-ui/public/hall-render.js:825` |
|
|
1054
1060
|
| `f158ed1c24a2` | certain | Toggle fullscreen | `modules/hall-ui/public/diagram-viewer.js:101` |
|
|
@@ -1126,6 +1132,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1126
1132
|
| `b6b0fcb2bcee` | certain | You already have a pending request or invitation for this goal. | `modules/hall-ui/public/goals-render.js:1365` |
|
|
1127
1133
|
| `52e93bbc07a6` | certain | You are already a member of this goal. | `modules/hall-ui/public/goals-render.js:1366` |
|
|
1128
1134
|
| `46b1265ef172` | certain | You are not a member of this goal. | `modules/hall-ui/public/goals-render.js:1322` |
|
|
1135
|
+
| `921cb15a8188` | certain | You can still press Move — the runner will refuse it the same way, and the box is left where it is. | `modules/hall-ui/public/deploy.js:160` |
|
|
1129
1136
|
| `b31fc908c962` | certain | You claimed #{…}. Open a terminal to start work. | `modules/hall-ui/public/goals-page.js:418` |
|
|
1130
1137
|
| `b31fc908c962` | certain | You claimed #{…}. Open a terminal to start work. | `modules/hall-ui/public/goals-page.js:517` |
|
|
1131
1138
|
| `b31fc908c962` | certain | You claimed #{…}. Open a terminal to start work. | `modules/hall-ui/public/work.js:905` |
|
|
@@ -1236,7 +1243,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1236
1243
|
| `77ad318bb546` | certain | invited — awaiting their response | `modules/hall-ui/public/goals-render.js:1400` |
|
|
1237
1244
|
| `af0777cd098b` | certain | is hardcoded back inside this | `modules/hall-ui/public/index.html:56` |
|
|
1238
1245
|
| `c767b3e07826` | certain | is only the screen; the | `modules/hall-ui/public/diagrams.html:74` |
|
|
1239
|
-
| `d0e722302840` | certain | is published and this box is not on it yet. | `modules/hall-ui/public/deploy.js:
|
|
1246
|
+
| `d0e722302840` | certain | is published and this box is not on it yet. | `modules/hall-ui/public/deploy.js:121` |
|
|
1240
1247
|
| `aa530bd15088` | certain | itself). The registry stays the single source of truth for what the hall shows; a fitness check (scripts/gds/f | `modules/hall-ui/public/index.html:53` |
|
|
1241
1248
|
| `966b32c8af7e` | certain | last check-in {…} ago | `modules/hall-ui/public/gate.js:360` |
|
|
1242
1249
|
| `9018bf6e99eb` | certain | last used {…} · signed in {…} | `modules/hall-ui/public/settings-sessions.js:46` |
|
|
@@ -1251,7 +1258,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1251
1258
|
| `b9f2e0d43c94` | certain | no clock | `modules/hall-ui/public/government.js:607` |
|
|
1252
1259
|
| `e3317d58ec83` | certain | no cost logged | `modules/hall-ui/public/hall-render.js:352` |
|
|
1253
1260
|
| `e02979266baf` | certain | no data | `modules/hall-ui/public/hall-kit.js:735` |
|
|
1254
|
-
| `9e194a57d054` | certain | no reading | `modules/hall-ui/public/deploy.js:
|
|
1261
|
+
| `9e194a57d054` | certain | no reading | `modules/hall-ui/public/deploy.js:104` |
|
|
1255
1262
|
| `33ca71bef112` | certain | no tasks yet | `modules/hall-ui/public/goals-render.js:163` |
|
|
1256
1263
|
| `739a4bd6bd83` | certain | node scripts/setup-builder.js | `modules/hall-ui/public/hall-render.js:890` |
|
|
1257
1264
|
| `61f0f4b2f4ab` | certain | not categorised yet | `modules/hall-ui/public/goals-page.js:277` |
|
|
@@ -1279,7 +1286,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1279
1286
|
| `2fb1dad96280` | certain | pending, on the People tab | `modules/hall-ui/public/watch.html:46` |
|
|
1280
1287
|
| `3b22c5af029b` | certain | rank or above, or that it is your own. | `modules/hall-ui/public/copy-desk.html:47` |
|
|
1281
1288
|
| `80ddf28baee7` | certain | rank-key (kebab-case) | `modules/hall-ui/public/government.html:82` |
|
|
1282
|
-
| `41a4b66c21e5` | certain | reads the control plane's own observation · ADR 0293 · every move is recorded with who asked | `modules/hall-ui/public/deploy.js:
|
|
1289
|
+
| `41a4b66c21e5` | certain | reads the control plane's own observation · ADR 0293 · every move is recorded with who asked | `modules/hall-ui/public/deploy.js:296` |
|
|
1283
1290
|
| `f83f0a9d6b6a` | certain | recorded, on the Operations tab | `modules/hall-ui/public/watch.html:49` |
|
|
1284
1291
|
| `26da1df6fd4a` | certain | reflects it. | `modules/hall-ui/public/settings.html:136` |
|
|
1285
1292
|
| `d4bb81532896` | certain | repro steps, context, anything that helps… | `modules/hall-ui/public/ideas.html:84` |
|