@bongos/core 1.19.1045 → 1.19.1046
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 +87 -112
- package/docs/adr/0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md +14 -2
- package/docs/adr/README.md +1 -1
- package/docs/copy-inventory.md +17 -24
- package/docs/copy-registry.json +24 -97
- package/docs/file-map.md +2 -3
- package/docs/module-api-changelog.md +2 -0
- package/docs/recipes/windows-builders.md +1 -1
- package/modules/hall-ui/public/atlas.html +1 -1
- package/modules/hall-ui/public/blockers.html +1 -1
- package/modules/hall-ui/public/board-room.html +1 -1
- package/modules/hall-ui/public/collab.css +1 -1
- package/modules/hall-ui/public/collab.html +1 -1
- package/modules/hall-ui/public/copy-desk.html +1 -1
- package/modules/hall-ui/public/deploy.html +1 -1
- package/modules/hall-ui/public/diagrams.html +1 -1
- package/modules/hall-ui/public/drachmae.html +1 -1
- package/modules/hall-ui/public/fleet.html +1 -1
- package/modules/hall-ui/public/gate.html +1 -1
- package/modules/hall-ui/public/goals.html +1 -1
- package/modules/hall-ui/public/government.html +1 -1
- package/modules/hall-ui/public/idea.html +1 -1
- package/modules/hall-ui/public/ideas.html +1 -1
- package/modules/hall-ui/public/index.html +1 -1
- package/modules/hall-ui/public/modules.html +1 -1
- package/modules/hall-ui/public/primer.html +1 -1
- package/modules/hall-ui/public/profile.html +1 -1
- package/modules/hall-ui/public/project-settings.html +1 -1
- package/modules/hall-ui/public/ranks.html +1 -1
- package/modules/hall-ui/public/roadmap.html +1 -1
- package/modules/hall-ui/public/{people.css → roster.css} +7 -11
- package/modules/hall-ui/public/roster.html +5 -5
- package/modules/hall-ui/public/roster.js +6 -7
- package/modules/hall-ui/public/roster.states.json +1 -1
- package/modules/hall-ui/public/sessions.html +1 -1
- package/modules/hall-ui/public/settings.html +2 -2
- package/modules/hall-ui/public/settings.js +2 -2
- package/modules/hall-ui/public/shell.js +3 -10
- package/modules/hall-ui/public/studio.html +1 -1
- package/modules/hall-ui/public/style.css +2 -9
- package/modules/hall-ui/public/task.html +1 -1
- package/modules/hall-ui/public/watch.html +1 -1
- package/modules/hall-ui/public/work.html +1 -1
- package/modules/hall-ui/records/builders-roster.md +1 -1
- package/modules/hall-ui/records/roster-and-ledger.md +2 -2
- package/modules/platform-identity/account-visibility.js +3 -3
- package/modules/platform-identity/platform-identity.js +2 -2
- package/modules/platform-identity/routes/profile.js +1 -1
- package/modules/platform-identity/routes/sso.js +4 -3
- package/modules/platform-identity/scouting-authz.js +2 -2
- package/modules/platform-identity/tests/platform-identity.mjs +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +6 -0
- package/src/bongos/auth.js +9 -24
- package/src/bongos/serve-internal.js +13 -19
- package/src/module-api.js +1 -1
- package/tests/account_privacy_flags.mjs +1 -1
- package/tests/auth_resolve_failure.mjs +6 -6
- package/tests/core_upgrade_owner_door.mjs +1 -1
- package/tests/edit_hints.mjs +8 -8
- package/tests/effective_visibility_predicate.mjs +1 -1
- package/tests/government_parity.mjs +1 -1
- package/tests/hall_builders_page_pass.mjs +2 -2
- package/tests/hall_nav.mjs +8 -8
- package/tests/hall_page_gate_map.mjs +14 -11
- package/tests/hall_roster_world.mjs +47 -78
- package/tests/module_contributions.mjs +0 -1
- package/tests/nav_permission_atoms.mjs +1 -1
- package/tests/{scouting_page_gate.mjs → page_gate_second_door.mjs} +34 -29
- package/tests/profile_rollup_consent.mjs +4 -4
- package/tests/profile_route.mjs +3 -26
- package/tests/scouting_owner_access_and_reach.mjs +4 -8
- package/modules/hall-ui/public/people.html +0 -79
- package/modules/hall-ui/public/people.js +0 -321
- package/modules/hall-ui/public/people.states.json +0 -89
- package/tests/people_directory_clip.mjs +0 -269
- package/tests/people_name_only.mjs +0 -263
package/docs/adr/0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
- **Date:** 2026-09-25
|
|
5
5
|
- **Deciders:** the owner (direction given 2026-09-24 while reviewing goal 1000110 Wave 1; the D4 calls answered 2026-09-25), Claude.
|
|
6
6
|
- **Task:** [task 1004255](https://cloudbongos.com/builders#/task/1004255) (goal 1000110, Working area 2: account creation, management & community)
|
|
7
|
+
- **Amended:** 2026-09-25 evening, D5 — the owner's four placement calls from the Wave 2 review sheet, recorded by [task 1003444](https://cloudbongos.com/builders#/task/1003444).
|
|
7
8
|
- **Amends:** [ADR 0336](0336-a-guilds-record-is-the-sum-of-what-its-members-already-show.md) D5 (superseded by D4.4 below) and D8 (the map ranks by the rounded total); `docs/specs/<redacted>.md` D8 (D4.1); the privacy spec's "`hide_stats` beats everything" rule, for guild totals only, and only for a member who was told and left counting on (D4.4). ADR 0336 D4 (a guild's size is its public roster length) is **unchanged**.
|
|
8
9
|
- **Relates to:** [ADR 0141](<redacted>.md) (the hub is the identity provider; authority stays local), [ADR 0217](0217-rank-gates-inviting-not-viewing.md) (rank gates inviting, not viewing), [ADR 0334](0334-the-recruiting-directory-lists-a-hidden-builder-by-name.md) (the name-only recruiting tier), [ADR 0335](0335-an-invite-is-a-pre-approved-row-on-the-projects-own-instance.md) (an invite is the project's own row), [ADR 0255](0255-a-public-lists-ordering-is-part-of-its-payload.md) (a public list is ordered only by what it publishes)
|
|
9
10
|
|
|
@@ -21,9 +22,9 @@ Goal 1000110 Wave 1 (2026-09-24) showed what that costs. R15 ([task 1002291](htt
|
|
|
21
22
|
|
|
22
23
|
| A surface goes on… | when what it shows is… | e.g. |
|
|
23
24
|
|---|---|---|
|
|
24
|
-
| **the HUB** (`modules/public-landing/`, `modules/platform-identity/`) | the person across projects, or more than one project | the people directory, community (leaderboards, search, builder of the week), guilds, connections, recruiting and scouting, the public profile, platform-account settings (D4.3) |
|
|
25
|
+
| **the HUB** (`modules/public-landing/`, `modules/platform-identity/`) | the person across projects, or more than one project | the people directory, community (leaderboards, search, builder of the week), guilds, connections (primary home, D5.4), recruiting and scouting, the public profile (with "Projects you build on" in its own view, D5.3), platform-account settings (D4.3), project invitations and the "join a project" field on their own page (D5.2) |
|
|
25
26
|
| **the HALL** (the project's own instance, `modules/hall-ui/`) | this project's people and work | `/roster` (Builders), the project console (invites, admission, ranks), tasks, goals, in-project activity and achievements |
|
|
26
|
-
| **both** | a person-centred view that has a useful in-project cut | "Builders you may know" (D4.2) |
|
|
27
|
+
| **both** | a person-centred view that has a useful in-project cut | "Builders you may know" (D4.2); connections, where the hall's tab shows only your connections who also build on that project (D5.4) |
|
|
27
28
|
|
|
28
29
|
`modules/status-ui/` is neither: it is the public status dashboard at `status.<apex>`, not the hall. A hall page may *link* to the hub for the cross-project view, but it does not rebuild it. When a task's text places a cross-project surface in the hall, the task is re-scoped before anyone claims it, never built as written.
|
|
29
30
|
|
|
@@ -35,6 +36,8 @@ D1 decides where pages go. It moves no authority. ADR 0141's line stands: the hu
|
|
|
35
36
|
|
|
36
37
|
The hall's `/people` retires ([task 1003444](https://cloudbongos.com/builders#/task/1003444)). Its cross-project job, including ADR 0334's two-tier recruiting directory, moves to the one hub community page ([task 1003363](https://cloudbongos.com/builders#/task/1003363)). ADR 0334's predicates move unchanged; only the page that renders them changes. `/roster` ("Builders") stays as the in-project directory and stops linking out to `/people`.
|
|
37
38
|
|
|
39
|
+
**Amended by D5.1:** `/people` is deleted now, without waiting for [task 1003363](https://cloudbongos.com/builders#/task/1003363). Until that page ships, `/people` (and its legacy door `/scouting`) redirects to `/roster`.
|
|
40
|
+
|
|
38
41
|
### D4 — The owner's calls from the re-scope
|
|
39
42
|
|
|
40
43
|
1. **Hidden builders open to recruiters: the recruiter panel is recruiter-only, and public search is unchanged.** A builder who hides their numbers but stays open to recruiters appears in ADR 0334's name-only panel (login, display name, avatar) on the hub community page. The panel is shown only to a signed-in viewer that the recruiting door admits, which ADR 0334 defines as a project owner or a holder of `project.curate`. The public builder search (`GET /community/search`, [task 1002979](https://cloudbongos.com/builders#/task/1002979)) keeps listing such a builder by name with no numbers, the same as their public profile page already does. Private accounts stay out of both, and the private-and-discoverable sliver keeps its archon floor (ADR 0217 D2). This amends community-tab spec D8's "to every viewer identically": the public view stays the same for every viewer, and a signed-in recruiter also sees the panel. It adds no new disclosure class.
|
|
@@ -55,6 +58,15 @@ The hall's `/people` retires ([task 1003444](https://cloudbongos.com/builders#/t
|
|
|
55
58
|
|
|
56
59
|
The notice and the switch exist for this reason. A non-public member is told that their numbers count, and can turn it off for any guild they don't trust. This relaxes the owner-signed privacy rule "`hide_stats` beats everything" (privacy spec D2) for **guild totals only**, and only for a member who was told and left counting on. Every other surface keeps the rule.
|
|
57
60
|
|
|
61
|
+
### D5 — The owner's calls of 2026-09-25 evening (Wave 2 review)
|
|
62
|
+
|
|
63
|
+
Reviewing the Wave 2 sheet, the owner made four placement calls. They amend the D1 table above.
|
|
64
|
+
|
|
65
|
+
1. **Delete the hall's People page now.** The hall already has a Builders page (`/roster`), so `/people` goes without waiting for the hub community page ([task 1003363](https://cloudbongos.com/builders#/task/1003363)). The owner accepted that cross-project search and the recruiter name-only panel (D4.1) are absent until that page ships. [Task 1003444](https://cloudbongos.com/builders#/task/1003444) deleted the page, its nav entry and its page gate; `/people` and `/scouting` redirect to `/roster`. The recruiting API (`GET /scouting`, its own route gate and ADR 0334's predicates) is unchanged and waits for the hub page to render it.
|
|
66
|
+
2. **A builder's project invitations get their own hub page.** The invitations a builder has received (today a section of the hub's `/projects` page) move to a standalone hub page, and the "join a project" field (a project address and an optional note) moves there with them.
|
|
67
|
+
3. **"Projects you build on" moves to the builder's own profile, own view only.** Today a section of the hub's `/projects` page; a builder will see it on their own profile, and a visitor will not.
|
|
68
|
+
4. **Connections live on the hub first.** The hub is the primary home for connections. A project hall's connections tab becomes project-specific: it shows only your connections who also build on that project.
|
|
69
|
+
|
|
58
70
|
## Consequences
|
|
59
71
|
|
|
60
72
|
- Goal 1000110 is re-scoped against D1 before its Wave 2, in one owner-run script. Retargeted tasks carry a description append citing this ADR. Duplicates of the hub community page merge into task 1003363. Dependency edges are re-pointed before any merge or abandon, so no dependent is left on a dead edge. The goal's module scope widens to `public-landing` and `hall-ui`.
|
package/docs/adr/README.md
CHANGED
|
@@ -428,7 +428,7 @@ This keeps the decision history honest and traceable.
|
|
|
428
428
|
| 0334 | [**The recruiting directory lists a hidden builder by name, and hide changes a row's shape, not whether it exists** ([task 1002291](https://cloudbongos.com/builders#/task/1002291), R15 — goal 1000110). Privacy spec D2 (owner-signed) lists an active, public, hidden account on the recruiter surface "name-only (if not opted out)"; the directory dropped it outright, making hide a second opt-out while Settings told that builder recruiters would see their name and picture. `GET /scouting` now answers two tiers: `builders` (ranked, `scoutingListableSql`, unchanged) and `name_only` (`scoutingNameOnlySql` = the same predicate with the hide term flipped, so the tiers partition the directory and only the opt-out removes anyone), projected to `github_login`, `display_name`, `avatar_url` by `scouting-name-only.js`. The existence floor stays (a private account is the archon-floor D3 sliver's, never the directory's); presence never depends on activity; the only order is the login; the predicate is pinned to that one reader and its three columns. The hall's `/people` renders the tier as its own panel, never ranked, found by name, never by a role filter. Rejected: fixing only the copy; trailing rows in the ranked ledger; listing private discoverable accounts by name.](0334-the-recruiting-directory-lists-a-hidden-builder-by-name.md) | privacy / recruiting / hall |
|
|
429
429
|
| 0335 | [**An invite is a pre-approved row on the project's own instance, and `project.recruit` says who may send one** ([task 1002813](https://cloudbongos.com/builders#/task/1002813), R1 of the project admin console wave, goal 1000110 — BONGOS-V2). Supersedes ADR 0141 §5's "Invitations (deferred slice)" paragraph only. Formalises spike task 1002786's three decisions and reconciles them with six weeks of shipping: the instance invite route (task 1003044), the PATCH rescind (ADR 0201 D4.2) and the composed join door (ADR 0247) already exist, and the hub invite's dead end is now reachable from the creation wizard. **Decisions:** (D1) authority lives on the project's own instance, and the instance IS the project; the hub is identity, relay, echo, notification and links, and never writes a project's admission row; (D2) a recruit invite is an `access_requests` row with `status='invited'`, so signing in is the acceptance act and the gate is untouched; the row gains `kind ∈ (application, invite)` and `created_by` (the inviter, which a rescind would otherwise overwrite), reuses `note`, backfills exactly (`created_at = resolved_at`), and neither column ever enters an admission read; (D3) one new grantable atom, `project.recruit` (`system:false`, floor archon, widened per instance through the existing governance tab), guards the invite, the outstanding list, the invite rescind and the queue read, while `access_request.review` keeps the verdict; because inviting is admitting, a recruiter without the review atom may not approve or re-admit an APPLICANT through the invite route (409 to the queue); the hub sliver moves onto the atom, and the hub directory and hub invite KEEP `project.curate`, revising ADR 0210/0215/0248, since swapping the directory would raise a gate on a viewing surface (ADR 0217). **Task map:** R2 (task 1002814) = the migration, the invite writes and the sender list, still on `access_request.review`; R3 (task 1002815) = mint the atom, move the gates, the 409 clause, the sliver swap and the pins, and it lands after R2; R5 (task 1002817) is already delivered, so close it into task 1002331; task 1003362 folds into R3. Rejected: a new invitations table; the hub pending row as the invite; widening `access_request.review` instead of minting an atom; a per-project settings row for the floor; letting a recruiter's invite approve applications; `system:true`; swapping `project.curate` on the hub directory.](0335-an-invite-is-a-pre-approved-row-on-the-projects-own-instance.md) | governance / onboarding / platform-identity |
|
|
430
430
|
| 0336 | [**A guild is a hub-side group whose members each consent twice, and its collective record is only ever the sum of what those members already show** ([task 1002299](https://cloudbongos.com/builders#/task/1002299), goal 1000110 — the R23 design spike for goal 1000045's C7/C8/C9). No platform guild existed (every "guild" in the tree is Discord's). Decisions: (1) three hub tables in `platform-identity`, in their own `guilds.js` (the 1,500-line ratchet), distinct from instance-local `goal_members`: guilds (slug, name, `visibility ∈ public|unlisted` with **no default**), members (`membership_kind ∈ owner|member`, never `role` per ADR 0174; a partial unique index holds exactly one owner; a per-member `shown_publicly`), and requests; (2) two consents to join, no self-join, through ADR 0202's connections lifecycle verbatim (silent decline, 90-day swallowed re-ask, 30-day read-time expiry); `accountActiveSql` floors the feature; an **unlisted guild 404s to everyone on the public read, members included**, and takes invites only, because a slug is guessable; (3) the public roster is `shown_publicly AND accountVisibleSql`, and widening a guild to public changes no member's flag but the flipping owner's, so consent given to a small audience is never reused for a large one; (4) **the privacy resolution — NOT ratified; superseded by [ADR 0337](0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md) D4.4:** it proposed that a member is counted iff shown AND `rollupVisibleSql`, read-time, `no-store`, never stored, and N and M are both lengths of lists the reader can see. The guild record is therefore always a sum of numbers already on members' own public profiles, so nothing can be subtracted out. All-or-nothing is rejected (one member blanks everyone and hiding becomes costly), as is per-member consent to count hidden numbers (it breaks "hide_stats beats everything"). The trade-off: guilds of privacy-minded builders look smaller and rank lower. A union count of all members' projects is refused because it reveals shared private projects; (5) the namespace is `/g/<slug>`, `g` is reserved in the SEO spec's project-slug list, the slug is fixed in V1, and `tests/guild_namespace_reserved.mjs` pins the two documents together; (6) a guild engages a project only through the individual door: a guild application is each member's own vouched application, labelled through ADR 0260's live applicant-profile read (no new instance field); inviting a guild fans out ordinary individual invites to its public roster at that moment, **never a guild-level pre-approval** (that would let a guild owner decide admission to someone else's project); (7) the map ranks public guilds by size and counted works shipped, read-time, with a slug tiebreak, and R29 narrows to the visual. Scope changes for R24–R37 are tabled in the ADR, including R28's dependency on the abandoned R11 and R29/R31's archived orb goals.](0336-a-guilds-record-is-the-sum-of-what-its-members-already-show.md) | platform identity / privacy / social graph |
|
|
431
|
-
| 0337 | [**The hub account is the person, a hall account is their seat in one project, so anything that spans projects lives on the hub** ([task 1004255](https://cloudbongos.com/builders#/task/1004255), goal 1000110 — the owner's hub/hall re-scope, 2026-09-24/25). Extends [ADR 0141](<redacted>.md) from identity to placement: (1) a surface about the person across projects, or about more than one project, goes on the HUB (`public-landing`, `platform-identity`): people directory, community, guilds, connections, recruiting, platform-account settings; one about this project goes in the HALL (`hall-ui`); "Builders you may know" is on both; `status-ui` is the status dashboard, not the hall; (2) no authority moves, and hub actions still land as the project's own rows; (3) hall `/people` retires, ADR 0334's recruiting directory moves unchanged to the hub community page, `/roster` is the in-project directory; (4) owner calls: the hidden-builder recruiter panel is recruiter-only while public search is unchanged (amends community-tab spec D8); platform-account settings get a new hub page; **guild totals count hidden and private members by default, with a notice on the join card and a per-guild off switch (`counted_in_totals`), rounded to a 1–2–5 band, only once a guild has at least 3 of them, refreshed weekly; size stays the public roster length** (supersedes ADR 0336 D5; relaxes the privacy spec's "`hide_stats` beats everything" for guild totals only, for a member who was told), with the fake-account padding limit stated and accepted.](0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md) | platform identity / placement / privacy |
|
|
431
|
+
| 0337 | [**The hub account is the person, a hall account is their seat in one project, so anything that spans projects lives on the hub** ([task 1004255](https://cloudbongos.com/builders#/task/1004255), goal 1000110 — the owner's hub/hall re-scope, 2026-09-24/25). Extends [ADR 0141](<redacted>.md) from identity to placement: (1) a surface about the person across projects, or about more than one project, goes on the HUB (`public-landing`, `platform-identity`): people directory, community, guilds, connections, recruiting, platform-account settings; one about this project goes in the HALL (`hall-ui`); "Builders you may know" is on both; `status-ui` is the status dashboard, not the hall; (2) no authority moves, and hub actions still land as the project's own rows; (3) hall `/people` retires, ADR 0334's recruiting directory moves unchanged to the hub community page, `/roster` is the in-project directory; (4) owner calls: the hidden-builder recruiter panel is recruiter-only while public search is unchanged (amends community-tab spec D8); platform-account settings get a new hub page; **guild totals count hidden and private members by default, with a notice on the join card and a per-guild off switch (`counted_in_totals`), rounded to a 1–2–5 band, only once a guild has at least 3 of them, refreshed weekly; size stays the public roster length** (supersedes ADR 0336 D5; relaxes the privacy spec's "`hide_stats` beats everything" for guild totals only, for a member who was told), with the fake-account padding limit stated and accepted; (5) amended 2026-09-25 evening ([task 1003444](https://cloudbongos.com/builders#/task/1003444)): hall `/people` is deleted now rather than when the hub community page ships (it redirects to `/roster`, and cross-project search plus the recruiter name-only panel wait for task 1003363), a builder's invitations and the join-a-project field get their own hub page, "Projects you build on" moves to the builder's own profile (own view only), and connections live on the hub first while a hall's connections tab shows only connections who build on that project.](0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md) | platform identity / placement / privacy |
|
|
432
432
|
| 0338 | [**Modules travel through a Bongos-hosted store, and an acquired module keeps working forever** ([task 1003782](https://cloudbongos.com/builders#/task/1003782), goal 1000091 — working area 5, owner Will). A module had no transport of its own: it reached an instance only inside the core (ADR 0107 §6) or in the instance's repo. Weighed npm packages, a Bongos-hosted store and git refs against the four things area 5's criteria require — entitlement before install, a per-version score, a tester channel, and a delist that stops distribution. npm and git refs fail entitlement and delist by construction. **D1:** Cloud Bongos hosts the store; a module version is a tarball + hash manifest in the same format `package-core.js` already emits (same `isPublishable()` gate), registry rows on the control-plane DB, artifacts in the already-paid DO Spaces bucket, served by the control plane only after an entitlement + channel check; free modules take the same path at price zero; install/update verify hashes on arrival; modules' own npm deps still travel via npm (ADR 0138). No new fixed cost. **D2 (owner):** delisting, author withdrawal or deletion removes a module from the catalog and stops new acquisitions and updates, but **an acquired module keeps working forever** — the store never disables or removes an installed copy and a delist never revokes an entitlement; the holder is told no more updates will come. Security issues are not a special case; a remote kill switch would need a superseding ADR. Rejected: npm, git refs, remote disable on delist.](0338-modules-travel-through-a-bongos-hosted-store.md) | modules / distribution / economy |
|
|
433
433
|
| 0339 | [**A project's owner upgrades it, and a hosted project hands off to the hub's door** ([task 1004174](https://cloudbongos.com/builders#/task/1004174), goal 1000090 — the owner's ruling of 2026-09-26 that only a project's owner upgrades it). Amends ADR 0293 D5. **D1:** the deploy door's preview and move routes admit the OWNER of a tenant row (`co-tenant`/`cloud-host`) for that row, asked first; every other caller meets the unmodified `core.pin.move` gate, so a non-owner's refusal is unchanged whether or not the id exists and the widening can only admit. **D2:** the platform's own row stays atom-only. **D3:** `GET /core-update` names `<hub>/deploy?project=<slug>` on a federated project, and the hosted hall's banner and rail hand off there (the dead local Deploy item is gone); the hub's `/deploy` shell admits a project owner through `alsoAdmits: 'isProjectOwner'`. **D4:** the intent's actor records the door (`api:owner:<id>` / `api:archon:<id>`), both attributed on the `core_upgrades` ledger. Rejected: a tenant-side API that performs the upgrade, granting the system atom to owners, owners moving the platform row. ADR 0328 Phase 1 (task 1004159) should fold this gate into `requireProjectOwner`.](0339-a-projects-owner-upgrades-it-and-a-hosted-project-hands-off-to-the-hub-door.md) | provisioning / deploy door / permissions |
|
|
434
434
|
| 0340 | [**Every hall takes its update from Settings, and /deploy is the platform hall's page** ([task 1004296](https://cloudbongos.com/builders#/task/1004296), goal 1000090 — the owner's 2026-09-25 asks: a Settings version panel "just like iOS", and /deploy only in the Bongos hall). Amends ADR 0339 D3 and the reach of ADR 0293's page. **D1:** Settings → Software update in the core — the running core, the newest release the runner's own channel rule allows, and what each version in between carries from the newest package's release notes; every signed-in builder reads it, and "up to date" is said only from an answer. **D2:** its Update button leads to the door (local /deploy, the hub's /deploy?project=, or a `bongos upgrade` sentence), drawn only for holders of core.pin.move. **D3:** /deploy 302s to Settings on a hall without the provisioning module. **D4:** the banner links Settings everywhere but the platform; the rail is no longer re-pointed; /core-update drops deploy_url. **D5:** the registry reader moved into the core (module-api readPackageRegistry). Rejected: a second copy of the two-step door, gating the panel on the atom, a "moved" page.](0340-every-hall-takes-its-update-from-settings-and-deploy-is-the-platform-halls-page.md) | deploy door / settings / core update |
|
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
|
+
**2056 strings** across 3 surfaces · 1765 distinct pieces of copy · 2056 certain, 0 heuristic · 207 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` |
|
|
13
|
+
| `builders-hall` | `modules/hall-ui/public` | 102 | 1555 |
|
|
14
14
|
| `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
|
|
15
15
|
| `landing` | `modules/public-landing/public` | 5 | 401 |
|
|
16
16
|
|
|
@@ -76,9 +76,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
76
76
|
| `7926e30955d2` | 3x | ← Back to goal | modules/hall-ui/public/goals.html:199, modules/hall-ui/public/goals.html:210, modules/hall-ui/public/goals.html:222 |
|
|
77
77
|
| `07f422cbdb7e` | 2x | ) and capture-resistant by design. | modules/public-landing/public/projects.html:1056, modules/public-landing/public/projects.html:1083 |
|
|
78
78
|
| `22825067f4c5` | 2x | 1 builder | modules/public-landing/public/index.html:747, modules/public-landing/public/index.html:752 |
|
|
79
|
-
| … | |
|
|
79
|
+
| … | | _167 more in the JSON registry_ | |
|
|
80
80
|
|
|
81
|
-
## `builders-hall` —
|
|
81
|
+
## `builders-hall` — 1555 strings
|
|
82
82
|
|
|
83
83
|
| id | conf | text | where |
|
|
84
84
|
|---|---|---|---|
|
|
@@ -216,7 +216,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
216
216
|
| `2b8ad43383de` | certain | Board Room — {{worldName}} | `modules/hall-ui/public/board-room.html:6` |
|
|
217
217
|
| `da910fee01d7` | certain | Browse goals → | `modules/hall-ui/public/goals.js:83` |
|
|
218
218
|
| `1596210cea76` | certain | Build from your own machine — clone the repository, run the platform locally, and sign in from the terminal. | `modules/hall-ui/public/hall-render.js:864` |
|
|
219
|
-
| `29bd516ad17e` | certain | Builder directory | `modules/hall-ui/public/people.html:37` |
|
|
220
219
|
| `08bfcc9198ba` | certain | Builder id | `modules/hall-ui/public/government.html:109` |
|
|
221
220
|
| `306bc316184d` | certain | Builders you may know | `modules/hall-ui/public/profile-connections.js:158` |
|
|
222
221
|
| `60b248791dc3` | certain | Builders — {{worldName}} | `modules/hall-ui/public/roster.html:6` |
|
|
@@ -441,7 +440,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
441
440
|
| `bc481184a282` | certain | Every place you are currently signed in — this browser, your terminal, any dev box. A session refreshes for an | `modules/hall-ui/public/settings.html:163` |
|
|
442
441
|
| `47be006e5ad5` | certain | Every sitting since has been decided under the constitution below, not the ratified one. Nothing is re-applied | `modules/hall-ui/public/government.js:633` |
|
|
443
442
|
| `efafe5ce29ed` | certain | Every task linked to this criterion has shipped — a Metic can confirm it | `modules/hall-ui/public/goals-render.js:707` |
|
|
444
|
-
| `ddebbccd4b37` | certain | Everyone building across hosted projects, ranked by track record. Descriptive only — cross-project numbers nev | `modules/hall-ui/public/people.html:29` |
|
|
445
443
|
| `04bbccfe7465` | certain | Everything a new builder needs before claiming their first task. About a ten-minute read. | `modules/hall-ui/public/primer.html:42` |
|
|
446
444
|
| `89d9c0962048` | certain | Everything that fell out of it | `modules/hall-ui/public/idea.js:393` |
|
|
447
445
|
| `37110f7e2b27` | certain | Everything this builder has shipped. Seen one role at a time, with goals and ideas, under | `modules/hall-ui/public/profile.html:108` |
|
|
@@ -588,7 +586,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
588
586
|
| `a21788f84e29` | certain | Its author gave no scope recommendation. | `modules/hall-ui/public/board-room.js:295` |
|
|
589
587
|
| `b0bcb3f844ec` | certain | Its author marked this as needing development — anyone can turn it into a Full Idea, and they keep the credit | `modules/hall-ui/public/idea.js:445` |
|
|
590
588
|
| `680491549e47` | certain | Its author recommends this becomes | `modules/hall-ui/public/board-room.js:294` |
|
|
591
|
-
| `5e62ee5addf1` | certain | Its details are below. | `modules/hall-ui/public/shell.js:
|
|
589
|
+
| `5e62ee5addf1` | certain | Its details are below. | `modules/hall-ui/public/shell.js:675` |
|
|
592
590
|
| `d42a078838bf` | certain | Its notes could not be read. | `modules/hall-ui/public/settings-software-update.js:101` |
|
|
593
591
|
| `b7719e855009` | certain | Join goal | `modules/hall-ui/public/goals-render.js:953` |
|
|
594
592
|
| `9f9424a5100b` | certain | Join our Discord | `modules/hall-ui/public/hall-render.js:823` |
|
|
@@ -597,8 +595,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
597
595
|
| `d305f0df6f25` | certain | Jump to | `modules/hall-ui/public/palette.js:227` |
|
|
598
596
|
| `01176c156112` | certain | Jump to a goal or a thought | `modules/hall-ui/public/goal-map.html:81` |
|
|
599
597
|
| `01176c156112` | certain | Jump to a goal or a thought | `modules/hall-ui/public/thinking.html:80` |
|
|
600
|
-
| `2bfc5a50ce88` | certain | Jump to a page or record | `modules/hall-ui/public/shell.js:
|
|
601
|
-
| `eba610d25523` | certain | Jump to… | `modules/hall-ui/public/shell.js:
|
|
598
|
+
| `2bfc5a50ce88` | certain | Jump to a page or record | `modules/hall-ui/public/shell.js:494` |
|
|
599
|
+
| `eba610d25523` | certain | Jump to… | `modules/hall-ui/public/shell.js:496` |
|
|
602
600
|
| `bc779353aa0c` | certain | Karma — peer recognition and approvals, a separate counter from {…}. | `modules/hall-ui/public/profile.js:94` |
|
|
603
601
|
| `de0e1590667f` | certain | Keep all {…} {…} — they are the values the code drops in, and the change cannot land without them. | `modules/hall-ui/public/copy-desk.js:442` |
|
|
604
602
|
| `fbe40b5818a3` | certain | Key removed. | `modules/hall-ui/public/settings.js:1128` |
|
|
@@ -623,7 +621,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
623
621
|
| `a53e0cde7ff7` | certain | Link first — your rank role is set the moment you join. | `modules/hall-ui/public/settings.js:840` |
|
|
624
622
|
| `64e85f1691f9` | certain | Link your Discord account and you're added to the {{worldName}} server with your rank role already set — no in | `modules/hall-ui/public/settings.html:61` |
|
|
625
623
|
| `9a31cf5fe05b` | certain | Linking opens Discord's consent screen; unlinking applies at once. | `modules/hall-ui/public/settings.html:66` |
|
|
626
|
-
| `8e067a257eed` | certain | Listed by name only | `modules/hall-ui/public/people.html:53` |
|
|
627
624
|
| `daf84bba41b1` | certain | Loading goals… | `modules/hall-ui/public/goals.html:44` |
|
|
628
625
|
| `93ceeaa4e226` | certain | Loading idea | `modules/hall-ui/public/idea.html:32` |
|
|
629
626
|
| `2b5826012538` | certain | Loading profile… | `modules/hall-ui/public/profile.html:34` |
|
|
@@ -633,7 +630,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
633
630
|
| `20d8552e13db` | certain | Loading tasks… | `modules/hall-ui/public/work.html:32` |
|
|
634
631
|
| `217f64ef8667` | certain | Loading the catalog… | `modules/hall-ui/public/modules.html:59` |
|
|
635
632
|
| `a8b3b04b0b4d` | certain | Loading the copy desk… | `modules/hall-ui/public/copy-desk.html:28` |
|
|
636
|
-
| `2bde9c630fd2` | certain | Loading the directory… | `modules/hall-ui/public/people.html:40` |
|
|
637
633
|
| `fcd755e8dd30` | certain | Loading the five questions… | `modules/hall-ui/public/ideas.html:183` |
|
|
638
634
|
| `e201b4962858` | certain | Loading the idea | `modules/hall-ui/public/idea.html:43` |
|
|
639
635
|
| `9972fc9b4727` | certain | Loading the map… | `modules/hall-ui/public/atlas.html:51` |
|
|
@@ -782,7 +778,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
782
778
|
| `261d123970e8` | certain | Open goal #{…} | `modules/hall-ui/public/roadmap.js:112` |
|
|
783
779
|
| `5f3e0b179839` | certain | Open in Sessions | `modules/hall-ui/public/task.js:483` |
|
|
784
780
|
| `9f55e4674ebb` | certain | Open in the copy desk | `modules/hall-ui/public/studio.js:219` |
|
|
785
|
-
| `3366b115217b` | certain | Open navigation | `modules/hall-ui/public/shell.js:
|
|
781
|
+
| `3366b115217b` | certain | Open navigation | `modules/hall-ui/public/shell.js:485` |
|
|
786
782
|
| `855277dff074` | certain | Open task #{…} | `modules/hall-ui/public/goals-render.js:415` |
|
|
787
783
|
| `855277dff074` | certain | Open task #{…} | `modules/hall-ui/public/work.js:1036` |
|
|
788
784
|
| `99c630009152` | certain | Open tasks whose declared files overlap — sequence these before two builders collide. | `modules/hall-ui/public/goals.html:125` |
|
|
@@ -811,8 +807,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
811
807
|
| `54fa47e421a5` | certain | Peer recognition | `modules/hall-ui/public/hall-widgets.js:168` |
|
|
812
808
|
| `47d609ece51c` | certain | Pending invitations | `modules/hall-ui/public/goals-render.js:1412` |
|
|
813
809
|
| `a69aff719f1a` | certain | People asking to join. Approve or dismiss each request, re-read the ones you already decided, and take back an | `modules/hall-ui/public/watch.html:62` |
|
|
814
|
-
| `b95918d421ae` | certain | People — {{worldName}} | `modules/hall-ui/public/people.html:6` |
|
|
815
|
-
| `b95918d421ae` | certain | People — {{worldName}} | `modules/hall-ui/public/people.html:6` |
|
|
816
810
|
| `4a46b478edaf` | certain | Per page | `modules/hall-ui/public/hall-kit.js:74` |
|
|
817
811
|
| `e1e10dc5e357` | certain | Permissions is the Archon administration surface. The Constitution and the Board Room are yours to read. | `modules/hall-ui/public/government.js:896` |
|
|
818
812
|
| `6bc03d97457b` | certain | Pick a priority first. | `modules/hall-ui/public/task.js:878` |
|
|
@@ -989,12 +983,12 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
989
983
|
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:367` |
|
|
990
984
|
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:391` |
|
|
991
985
|
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/hall-render.js:461` |
|
|
992
|
-
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/shell.js:
|
|
993
|
-
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:
|
|
994
|
-
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:
|
|
986
|
+
| `e57ec24e13ef` | certain | Sign in with GitHub | `modules/hall-ui/public/shell.js:455` |
|
|
987
|
+
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:473` |
|
|
988
|
+
| `1883ad7f07fc` | certain | Sign out | `modules/hall-ui/public/shell.js:717` |
|
|
995
989
|
| `8ad669ab2565` | certain | Sign out everywhere | `modules/hall-ui/public/settings.html:171` |
|
|
996
990
|
| `ecc12c1dd4de` | certain | Skill voices | `modules/hall-ui/public/settings.html:350` |
|
|
997
|
-
| `87cee78ca134` | certain | Skip to content | `modules/hall-ui/public/shell.js:
|
|
991
|
+
| `87cee78ca134` | certain | Skip to content | `modules/hall-ui/public/shell.js:708` |
|
|
998
992
|
| `688ca7b6e30f` | certain | Slop — reads as machine-written | `modules/hall-ui/public/copy-desk.html:90` |
|
|
999
993
|
| `82df09a08476` | certain | So the Archon knows who you are | `modules/hall-ui/public/hall-render.js:294` |
|
|
1000
994
|
| `207af7ce6828` | certain | Software update | `modules/hall-ui/public/settings.html:409` |
|
|
@@ -1022,7 +1016,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1022
1016
|
| `5831de503015` | certain | Studio — {{worldName}} | `modules/hall-ui/public/studio.html:10` |
|
|
1023
1017
|
| `f79e1fb8ebd4` | certain | Suggested as you type; leave it on "no goal" and it waits for triage. | `modules/hall-ui/public/ideas.html:84` |
|
|
1024
1018
|
| `a1482eff4ead` | certain | Suggested for you | `modules/hall-ui/public/settings-specialities.js:137` |
|
|
1025
|
-
| `1e40f33483eb` | certain | Switch theme | `modules/hall-ui/public/shell.js:
|
|
1019
|
+
| `1e40f33483eb` | certain | Switch theme | `modules/hall-ui/public/shell.js:500` |
|
|
1026
1020
|
| `93fa2e97dd35` | certain | System default for this skill | `modules/hall-ui/public/settings.js:72` |
|
|
1027
1021
|
| `4894b1d9b0de` | certain | System oversight: people, operations and security. | `modules/hall-ui/public/watch.js:1335` |
|
|
1028
1022
|
| `e604fc3ace79` | certain | Task # | `modules/hall-ui/public/blockers.js:139` |
|
|
@@ -1043,7 +1037,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1043
1037
|
| `2fc66e722e33` | certain | Tasks open once you have read the builder primer. | `modules/hall-ui/public/work.html:43` |
|
|
1044
1038
|
| `44579eef0c8d` | certain | Tasks — {{worldName}} | `modules/hall-ui/public/work.html:6` |
|
|
1045
1039
|
| `44579eef0c8d` | certain | Tasks — {{worldName}} | `modules/hall-ui/public/work.html:6` |
|
|
1046
|
-
| `2f4f047dc1b4` | certain | Text size | `modules/hall-ui/public/shell.js:
|
|
1040
|
+
| `2f4f047dc1b4` | certain | Text size | `modules/hall-ui/public/shell.js:499` |
|
|
1047
1041
|
| `f420429f942e` | certain | That builder no longer exists. | `modules/hall-ui/public/goals-render.js:1284` |
|
|
1048
1042
|
| `545c59c1deb7` | certain | That is the session you are using right now. Ending it signs you out of this page. | `modules/hall-ui/public/settings-sessions.js:74` |
|
|
1049
1043
|
| `282c3fa2d456` | certain | That is the wording it already has. Change something, or file a flag instead if you only want to mark it. | `modules/hall-ui/public/copy-desk.js:438` |
|
|
@@ -1126,7 +1120,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1126
1120
|
| `bcdbded93d4e` | certain | The work board failed to load. Reload to try again. | `modules/hall-ui/public/work.js:1404` |
|
|
1127
1121
|
| `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` |
|
|
1128
1122
|
| `df316c3484de` | certain | Then drive it however you like: | `modules/hall-ui/public/hall-render.js:825` |
|
|
1129
|
-
| `bc3e5d620247` | certain | These builders are open to recruiting but keep their cross-project record hidden, so only who they are is show | `modules/hall-ui/public/people.html:54` |
|
|
1130
1123
|
| `a0140098c0e0` | certain | They already have an invitation or a join-request pending on this goal. | `modules/hall-ui/public/goals-render.js:1282` |
|
|
1131
1124
|
| `5151cf635644` | certain | They have asked to connect. | `modules/hall-ui/public/profile-connections.js:236` |
|
|
1132
1125
|
| `10219b02433e` | certain | They join as a member once they accept — you can change that afterwards. Nobody is added until they do. | `modules/hall-ui/public/goals-render.js:1214` |
|
|
@@ -1180,7 +1173,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1180
1173
|
| `13ced9b2fa12` | certain | Update ready | `modules/hall-ui/public/settings-software-update.js:145` |
|
|
1181
1174
|
| `55fde21d907b` | certain | Update to {…}{…} | `modules/hall-ui/public/settings-software-update.js:85` |
|
|
1182
1175
|
| `67fbc770b3b3` | certain | Upvote (+1) | `modules/hall-ui/public/builders.js:777` |
|
|
1183
|
-
| `16d7f809be8a` | certain | Use the control below to take it. | `modules/hall-ui/public/shell.js:
|
|
1176
|
+
| `16d7f809be8a` | certain | Use the control below to take it. | `modules/hall-ui/public/shell.js:672` |
|
|
1184
1177
|
| `e7e2a99a2bea` | certain | Use this | `modules/hall-ui/public/settings-specialities.js:148` |
|
|
1185
1178
|
| `e1ecd543a2ca` | certain | Using this speciality. | `modules/hall-ui/public/settings-specialities.js:199` |
|
|
1186
1179
|
| `6200bac6bdca` | certain | View all sessions | `modules/hall-ui/public/watch.html:99` |
|
|
@@ -1236,7 +1229,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1236
1229
|
| `d3a8b2b5b93f` | certain | Where {{currency}} and karma come from and where they go. | `modules/hall-ui/public/diagrams.html:67` |
|
|
1237
1230
|
| `68da8cb13058` | certain | Which version of Cloud Bongos this project runs, whether a newer one is ready for it, and what each newer vers | `modules/hall-ui/public/settings.html:410` |
|
|
1238
1231
|
| `f9ab9eb870a6` | certain | While you wait: install the Claude desktop app at | `modules/hall-ui/public/hall-render.js:437` |
|
|
1239
|
-
| `
|
|
1232
|
+
| `74d8c58ef235` | certain | Who builds on this project, ranked by work shipped. This project's own ledger — everyone who builds here is li | `modules/hall-ui/public/roster.html:28` |
|
|
1240
1233
|
| `7dbdb882e967` | certain | Who can find you. Your profile page can be public or private, and recruiters looking for builders are allowed | `modules/hall-ui/public/settings.html:111` |
|
|
1241
1234
|
| `b79ea4077bc5` | certain | Who can use it | `modules/hall-ui/public/settings.html:288` |
|
|
1242
1235
|
| `045c629729b7` | certain | Who’s on this goal, and what they’ve contributed to it. | `modules/hall-ui/public/goals.html:213` |
|
|
@@ -1293,7 +1286,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1293
1286
|
| `e25863ab2311` | certain | Your sky — {{worldName}} | `modules/hall-ui/public/thinking.html:6` |
|
|
1294
1287
|
| `e25863ab2311` | certain | Your sky — {{worldName}} | `modules/hall-ui/public/thinking.html:6` |
|
|
1295
1288
|
| `dd419ffd76f0` | certain | Your specialities | `modules/hall-ui/public/settings.html:252` |
|
|
1296
|
-
| `
|
|
1289
|
+
| `cc066f023e9c` | certain | Your track record across every project you build on, shown on your public profile. Hiding it takes effect imme | `modules/hall-ui/public/settings.html:96` |
|
|
1297
1290
|
| `a824e3e2057a` | certain | Your verdict on a review is recorded from the review itself — open it to dismiss it, note what you saw, or fil | `modules/hall-ui/public/studio.js:159` |
|
|
1298
1291
|
| `f6b12676169b` | certain | Your vote | `modules/hall-ui/public/hall-widgets.js:170` |
|
|
1299
1292
|
| `fe94ff29a2cc` | certain | Your wandering level could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:484` |
|
package/docs/copy-registry.json
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
"generator": "scripts/gds/copy-inventory.js",
|
|
4
4
|
"goal": 1000074,
|
|
5
5
|
"counts": {
|
|
6
|
-
"strings":
|
|
7
|
-
"unique_ids":
|
|
8
|
-
"certain":
|
|
6
|
+
"strings": 2056,
|
|
7
|
+
"unique_ids": 1765,
|
|
8
|
+
"certain": 2056,
|
|
9
9
|
"heuristic": 0,
|
|
10
|
-
"duplicate_ids":
|
|
10
|
+
"duplicate_ids": 207
|
|
11
11
|
},
|
|
12
12
|
"surfaces": {
|
|
13
13
|
"builders-hall": {
|
|
14
14
|
"at": "modules/hall-ui/public",
|
|
15
|
-
"files":
|
|
16
|
-
"strings":
|
|
15
|
+
"files": 102,
|
|
16
|
+
"strings": 1555
|
|
17
17
|
},
|
|
18
18
|
"status-dashboard": {
|
|
19
19
|
"at": "modules/status-ui/public",
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"modules/hall-ui/public/hall-render.js:367",
|
|
193
193
|
"modules/hall-ui/public/hall-render.js:391",
|
|
194
194
|
"modules/hall-ui/public/hall-render.js:461",
|
|
195
|
-
"modules/hall-ui/public/shell.js:
|
|
195
|
+
"modules/hall-ui/public/shell.js:455"
|
|
196
196
|
]
|
|
197
197
|
},
|
|
198
198
|
{
|
|
@@ -1262,16 +1262,6 @@
|
|
|
1262
1262
|
"modules/hall-ui/public/goals.html:202"
|
|
1263
1263
|
]
|
|
1264
1264
|
},
|
|
1265
|
-
{
|
|
1266
|
-
"id": "b95918d421ae",
|
|
1267
|
-
"surface": "builders-hall",
|
|
1268
|
-
"text": "People — {{worldName}}",
|
|
1269
|
-
"occurrences": 2,
|
|
1270
|
-
"at": [
|
|
1271
|
-
"modules/hall-ui/public/people.html:6",
|
|
1272
|
-
"modules/hall-ui/public/people.html:6"
|
|
1273
|
-
]
|
|
1274
|
-
},
|
|
1275
1265
|
{
|
|
1276
1266
|
"id": "5b08da0632c7",
|
|
1277
1267
|
"surface": "builders-hall",
|
|
@@ -1548,8 +1538,8 @@
|
|
|
1548
1538
|
"text": "Sign out",
|
|
1549
1539
|
"occurrences": 2,
|
|
1550
1540
|
"at": [
|
|
1551
|
-
"modules/hall-ui/public/shell.js:
|
|
1552
|
-
"modules/hall-ui/public/shell.js:
|
|
1541
|
+
"modules/hall-ui/public/shell.js:473",
|
|
1542
|
+
"modules/hall-ui/public/shell.js:717"
|
|
1553
1543
|
]
|
|
1554
1544
|
},
|
|
1555
1545
|
{
|
|
@@ -3410,15 +3400,6 @@
|
|
|
3410
3400
|
"origin": "js-markup",
|
|
3411
3401
|
"confidence": "certain"
|
|
3412
3402
|
},
|
|
3413
|
-
{
|
|
3414
|
-
"id": "29bd516ad17e",
|
|
3415
|
-
"surface": "builders-hall",
|
|
3416
|
-
"text": "Builder directory",
|
|
3417
|
-
"file": "modules/hall-ui/public/people.html",
|
|
3418
|
-
"line": 37,
|
|
3419
|
-
"origin": "html-text",
|
|
3420
|
-
"confidence": "certain"
|
|
3421
|
-
},
|
|
3422
3403
|
{
|
|
3423
3404
|
"id": "08bfcc9198ba",
|
|
3424
3405
|
"surface": "builders-hall",
|
|
@@ -5435,15 +5416,6 @@
|
|
|
5435
5416
|
"origin": "js-markup",
|
|
5436
5417
|
"confidence": "certain"
|
|
5437
5418
|
},
|
|
5438
|
-
{
|
|
5439
|
-
"id": "ddebbccd4b37",
|
|
5440
|
-
"surface": "builders-hall",
|
|
5441
|
-
"text": "Everyone building across hosted projects, ranked by track record. Descriptive only — cross-project numbers never carry authority here.",
|
|
5442
|
-
"file": "modules/hall-ui/public/people.html",
|
|
5443
|
-
"line": 29,
|
|
5444
|
-
"origin": "html-text",
|
|
5445
|
-
"confidence": "certain"
|
|
5446
|
-
},
|
|
5447
5419
|
{
|
|
5448
5420
|
"id": "04bbccfe7465",
|
|
5449
5421
|
"surface": "builders-hall",
|
|
@@ -6763,7 +6735,7 @@
|
|
|
6763
6735
|
"surface": "builders-hall",
|
|
6764
6736
|
"text": "Its details are below.",
|
|
6765
6737
|
"file": "modules/hall-ui/public/shell.js",
|
|
6766
|
-
"line":
|
|
6738
|
+
"line": 675,
|
|
6767
6739
|
"origin": "js-markup",
|
|
6768
6740
|
"confidence": "certain"
|
|
6769
6741
|
},
|
|
@@ -6844,7 +6816,7 @@
|
|
|
6844
6816
|
"surface": "builders-hall",
|
|
6845
6817
|
"text": "Jump to a page or record",
|
|
6846
6818
|
"file": "modules/hall-ui/public/shell.js",
|
|
6847
|
-
"line":
|
|
6819
|
+
"line": 494,
|
|
6848
6820
|
"origin": "js-markup",
|
|
6849
6821
|
"confidence": "certain"
|
|
6850
6822
|
},
|
|
@@ -6853,7 +6825,7 @@
|
|
|
6853
6825
|
"surface": "builders-hall",
|
|
6854
6826
|
"text": "Jump to…",
|
|
6855
6827
|
"file": "modules/hall-ui/public/shell.js",
|
|
6856
|
-
"line":
|
|
6828
|
+
"line": 496,
|
|
6857
6829
|
"origin": "js-markup",
|
|
6858
6830
|
"confidence": "certain"
|
|
6859
6831
|
},
|
|
@@ -7073,15 +7045,6 @@
|
|
|
7073
7045
|
"origin": "html-text",
|
|
7074
7046
|
"confidence": "certain"
|
|
7075
7047
|
},
|
|
7076
|
-
{
|
|
7077
|
-
"id": "8e067a257eed",
|
|
7078
|
-
"surface": "builders-hall",
|
|
7079
|
-
"text": "Listed by name only",
|
|
7080
|
-
"file": "modules/hall-ui/public/people.html",
|
|
7081
|
-
"line": 53,
|
|
7082
|
-
"origin": "html-text",
|
|
7083
|
-
"confidence": "certain"
|
|
7084
|
-
},
|
|
7085
7048
|
{
|
|
7086
7049
|
"id": "daf84bba41b1",
|
|
7087
7050
|
"surface": "builders-hall",
|
|
@@ -7163,15 +7126,6 @@
|
|
|
7163
7126
|
"origin": "html-text",
|
|
7164
7127
|
"confidence": "certain"
|
|
7165
7128
|
},
|
|
7166
|
-
{
|
|
7167
|
-
"id": "2bde9c630fd2",
|
|
7168
|
-
"surface": "builders-hall",
|
|
7169
|
-
"text": "Loading the directory…",
|
|
7170
|
-
"file": "modules/hall-ui/public/people.html",
|
|
7171
|
-
"line": 40,
|
|
7172
|
-
"origin": "html-text",
|
|
7173
|
-
"confidence": "certain"
|
|
7174
|
-
},
|
|
7175
7129
|
{
|
|
7176
7130
|
"id": "fcd755e8dd30",
|
|
7177
7131
|
"surface": "builders-hall",
|
|
@@ -8509,7 +8463,7 @@
|
|
|
8509
8463
|
"surface": "builders-hall",
|
|
8510
8464
|
"text": "Open navigation",
|
|
8511
8465
|
"file": "modules/hall-ui/public/shell.js",
|
|
8512
|
-
"line":
|
|
8466
|
+
"line": 485,
|
|
8513
8467
|
"origin": "js-markup",
|
|
8514
8468
|
"confidence": "certain"
|
|
8515
8469
|
},
|
|
@@ -8765,24 +8719,6 @@
|
|
|
8765
8719
|
"origin": "html-text",
|
|
8766
8720
|
"confidence": "certain"
|
|
8767
8721
|
},
|
|
8768
|
-
{
|
|
8769
|
-
"id": "b95918d421ae",
|
|
8770
|
-
"surface": "builders-hall",
|
|
8771
|
-
"text": "People — {{worldName}}",
|
|
8772
|
-
"file": "modules/hall-ui/public/people.html",
|
|
8773
|
-
"line": 6,
|
|
8774
|
-
"origin": "html-text",
|
|
8775
|
-
"confidence": "certain"
|
|
8776
|
-
},
|
|
8777
|
-
{
|
|
8778
|
-
"id": "b95918d421ae",
|
|
8779
|
-
"surface": "builders-hall",
|
|
8780
|
-
"text": "People — {{worldName}}",
|
|
8781
|
-
"file": "modules/hall-ui/public/people.html",
|
|
8782
|
-
"line": 6,
|
|
8783
|
-
"origin": "html-title",
|
|
8784
|
-
"confidence": "certain"
|
|
8785
|
-
},
|
|
8786
8722
|
{
|
|
8787
8723
|
"id": "4a46b478edaf",
|
|
8788
8724
|
"surface": "builders-hall",
|
|
@@ -10372,7 +10308,7 @@
|
|
|
10372
10308
|
"surface": "builders-hall",
|
|
10373
10309
|
"text": "Sign in with GitHub",
|
|
10374
10310
|
"file": "modules/hall-ui/public/shell.js",
|
|
10375
|
-
"line":
|
|
10311
|
+
"line": 455,
|
|
10376
10312
|
"origin": "js-markup",
|
|
10377
10313
|
"confidence": "certain"
|
|
10378
10314
|
},
|
|
@@ -10381,7 +10317,7 @@
|
|
|
10381
10317
|
"surface": "builders-hall",
|
|
10382
10318
|
"text": "Sign out",
|
|
10383
10319
|
"file": "modules/hall-ui/public/shell.js",
|
|
10384
|
-
"line":
|
|
10320
|
+
"line": 473,
|
|
10385
10321
|
"origin": "js-markup",
|
|
10386
10322
|
"confidence": "certain"
|
|
10387
10323
|
},
|
|
@@ -10390,7 +10326,7 @@
|
|
|
10390
10326
|
"surface": "builders-hall",
|
|
10391
10327
|
"text": "Sign out",
|
|
10392
10328
|
"file": "modules/hall-ui/public/shell.js",
|
|
10393
|
-
"line":
|
|
10329
|
+
"line": 717,
|
|
10394
10330
|
"origin": "js-markup",
|
|
10395
10331
|
"confidence": "certain"
|
|
10396
10332
|
},
|
|
@@ -10417,7 +10353,7 @@
|
|
|
10417
10353
|
"surface": "builders-hall",
|
|
10418
10354
|
"text": "Skip to content",
|
|
10419
10355
|
"file": "modules/hall-ui/public/shell.js",
|
|
10420
|
-
"line":
|
|
10356
|
+
"line": 708,
|
|
10421
10357
|
"origin": "js-text-assign",
|
|
10422
10358
|
"confidence": "certain"
|
|
10423
10359
|
},
|
|
@@ -10669,7 +10605,7 @@
|
|
|
10669
10605
|
"surface": "builders-hall",
|
|
10670
10606
|
"text": "Switch theme",
|
|
10671
10607
|
"file": "modules/hall-ui/public/shell.js",
|
|
10672
|
-
"line":
|
|
10608
|
+
"line": 500,
|
|
10673
10609
|
"origin": "js-markup",
|
|
10674
10610
|
"confidence": "certain"
|
|
10675
10611
|
},
|
|
@@ -10858,7 +10794,7 @@
|
|
|
10858
10794
|
"surface": "builders-hall",
|
|
10859
10795
|
"text": "Text size",
|
|
10860
10796
|
"file": "modules/hall-ui/public/shell.js",
|
|
10861
|
-
"line":
|
|
10797
|
+
"line": 499,
|
|
10862
10798
|
"origin": "js-markup",
|
|
10863
10799
|
"confidence": "certain"
|
|
10864
10800
|
},
|
|
@@ -11600,15 +11536,6 @@
|
|
|
11600
11536
|
"origin": "js-markup",
|
|
11601
11537
|
"confidence": "certain"
|
|
11602
11538
|
},
|
|
11603
|
-
{
|
|
11604
|
-
"id": "bc3e5d620247",
|
|
11605
|
-
"surface": "builders-hall",
|
|
11606
|
-
"text": "These builders are open to recruiting but keep their cross-project record hidden, so only who they are is shown. They are never ranked, and a role filter never finds them.",
|
|
11607
|
-
"file": "modules/hall-ui/public/people.html",
|
|
11608
|
-
"line": 54,
|
|
11609
|
-
"origin": "html-text",
|
|
11610
|
-
"confidence": "certain"
|
|
11611
|
-
},
|
|
11612
11539
|
{
|
|
11613
11540
|
"id": "a0140098c0e0",
|
|
11614
11541
|
"surface": "builders-hall",
|
|
@@ -12091,7 +12018,7 @@
|
|
|
12091
12018
|
"surface": "builders-hall",
|
|
12092
12019
|
"text": "Use the control below to take it.",
|
|
12093
12020
|
"file": "modules/hall-ui/public/shell.js",
|
|
12094
|
-
"line":
|
|
12021
|
+
"line": 672,
|
|
12095
12022
|
"origin": "js-markup",
|
|
12096
12023
|
"confidence": "certain"
|
|
12097
12024
|
},
|
|
@@ -12591,9 +12518,9 @@
|
|
|
12591
12518
|
"confidence": "certain"
|
|
12592
12519
|
},
|
|
12593
12520
|
{
|
|
12594
|
-
"id": "
|
|
12521
|
+
"id": "74d8c58ef235",
|
|
12595
12522
|
"surface": "builders-hall",
|
|
12596
|
-
"text": "Who builds on this project, ranked by work shipped. This project's own ledger —
|
|
12523
|
+
"text": "Who builds on this project, ranked by work shipped. This project's own ledger — everyone who builds here is listed.",
|
|
12597
12524
|
"file": "modules/hall-ui/public/roster.html",
|
|
12598
12525
|
"line": 28,
|
|
12599
12526
|
"origin": "html-text",
|
|
@@ -13104,9 +13031,9 @@
|
|
|
13104
13031
|
"confidence": "certain"
|
|
13105
13032
|
},
|
|
13106
13033
|
{
|
|
13107
|
-
"id": "
|
|
13034
|
+
"id": "cc066f023e9c",
|
|
13108
13035
|
"surface": "builders-hall",
|
|
13109
|
-
"text": "Your track record across every project you build on, shown on your public profile. Hiding it takes effect immediately everywhere — your profile, the
|
|
13036
|
+
"text": "Your track record across every project you build on, shown on your public profile. Hiding it takes effect immediately everywhere — your profile, the recruiting directory, and a recruiter's look-up of one builder.",
|
|
13110
13037
|
"file": "modules/hall-ui/public/settings.html",
|
|
13111
13038
|
"line": 96,
|
|
13112
13039
|
"origin": "html-text",
|
package/docs/file-map.md
CHANGED
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
│ ├── sessions/ ← CORE-DOMAIN carve (BV1.R82, default-on): the session_records corpus + data plane (upload, cross-builder search/deep-dive), the BFG read-the-room scorer, session-pulse/stale-claim helpers. Registers no port — reached via HTTP POST to its own /sessions route; resolves the economy `reward` port for the cost-plus token reward. CLAUDE.md, module.json, routes/sessions.js, bfg.js, pulse.js.
|
|
135
135
|
│ ├── autonomy/ ← CORE-DOMAIN carve (BV1.R83, default-on): the MAS autonomy surfaces — the $0 deterministic autonomy gate (System 3, inert until armed), the conductor/architect CLIs, and the in-process routine timers (incl. the weekly peer-vote-tally poller). Registers no port; resolves the lifecycle `tallyPeerVotes` doorway. CLAUDE.md, module.json, routes/autonomy.js, autonomy.js.
|
|
136
136
|
│ ├── status-ui/ ← CORE-DOMAIN WEB-SURFACE carve (BV1.R84, default-on): the public status dashboard at status.<apex>, moved from public-status/. NO routes/db/port — declares contributes.webSurfaces:[{host:"status.",dir:"public"}], served by the loader web-surface seam (moduleWebSurfaces → serve-internal). CLAUDE.md, module.json, public/{index.html,status.js,style.css,cursors/,snapshots/}.
|
|
137
|
-
│ ├── hall-ui/ ← CORE-DOMAIN WEB-SURFACE carve (BV1.R85, default-on): the authenticated builders' hall at builders.<apex>, moved from public-builders/ (~13k LOC, the largest). NO routes/db/port — declares contributes.webSurfaces:[{host:"builders.",dir:"public"}] for discovery, but UNLIKE status-ui keeps its DEDICATED serving block in serve-internal (the /builders shim + canonical redirects + citizen/Archon page gates + asset-stamping + hall-widget injection), partitioned out of the generic web-surface loop and served from BUILDERS_DIR. CLAUDE.md, module.json, records/ (one file per page family — what each family's redesign settled; CLAUDE.md points at them, and a new record is a new file there so concurrent hall tasks stop colliding on one insertion point, task 1003499), public/{index.html,builders.js,style.css,work,watch,gate,settings,ranks,sessions,primer,diagrams,atlas,...}.{html,js},cursors/,chime.wav. Four ARCHETYPE sheets sit beside the per-page ones: `record.css` (the task + idea records, task 1003305), `room.css` (the READING ROOMS — the primer + the diagrams index, task 1003306: the reading measure and rhythm, the table of contents, the progress hairline and the framed figure diagram-viewer.js upgrades on both pages), `oversight.css` (the OVERSIGHT family — government, watch, gate, task 1003469 (harbor was its fourth until task 1003890 removed the dev box): the row, the figure band inside a panel, the group head, the inline form, the grant toggle and the shared confirm modal; named oversight because the vocabulary wall bans "governance" on the government surface) and `panel.css` (the PANEL family — settings, profile, task 1003308 (pair was its third until task 1003890 removed the dev box): the row, the switch, the field with its label above, the chip control, the four voices and the sign-in gate; the hall's my-projects page was DELETED in the same task — "my projects" is the hub's user-level page, and the hall keeps no link or redirect; the family's fourth page `not-ready.html` was deleted by task 1003450, along with the emptied `requireNonXenosPage` gate that was the only thing redirecting to it). A page sheet then holds only what one page has and the others do not — `primer.css` the acknowledge gate, `diagrams.css` the legend strip, `gate.css` the hold reasons and file chips, `watch.css` the severities, the report reader and the grade trend, `settings.css` the rail layout, the group head, the token ladder and the voices grid, `profile.css` the identity band and the shelf, `
|
|
137
|
+
│ ├── hall-ui/ ← CORE-DOMAIN WEB-SURFACE carve (BV1.R85, default-on): the authenticated builders' hall at builders.<apex>, moved from public-builders/ (~13k LOC, the largest). NO routes/db/port — declares contributes.webSurfaces:[{host:"builders.",dir:"public"}] for discovery, but UNLIKE status-ui keeps its DEDICATED serving block in serve-internal (the /builders shim + canonical redirects + citizen/Archon page gates + asset-stamping + hall-widget injection), partitioned out of the generic web-surface loop and served from BUILDERS_DIR. CLAUDE.md, module.json, records/ (one file per page family — what each family's redesign settled; CLAUDE.md points at them, and a new record is a new file there so concurrent hall tasks stop colliding on one insertion point, task 1003499), public/{index.html,builders.js,style.css,work,watch,gate,settings,ranks,sessions,primer,diagrams,atlas,...}.{html,js},cursors/,chime.wav. Four ARCHETYPE sheets sit beside the per-page ones: `record.css` (the task + idea records, task 1003305), `room.css` (the READING ROOMS — the primer + the diagrams index, task 1003306: the reading measure and rhythm, the table of contents, the progress hairline and the framed figure diagram-viewer.js upgrades on both pages), `oversight.css` (the OVERSIGHT family — government, watch, gate, task 1003469 (harbor was its fourth until task 1003890 removed the dev box): the row, the figure band inside a panel, the group head, the inline form, the grant toggle and the shared confirm modal; named oversight because the vocabulary wall bans "governance" on the government surface) and `panel.css` (the PANEL family — settings, profile, task 1003308 (pair was its third until task 1003890 removed the dev box): the row, the switch, the field with its label above, the chip control, the four voices and the sign-in gate; the hall's my-projects page was DELETED in the same task — "my projects" is the hub's user-level page, and the hall keeps no link or redirect; the family's fourth page `not-ready.html` was deleted by task 1003450, along with the emptied `requireNonXenosPage` gate that was the only thing redirecting to it). A page sheet then holds only what one page has and the others do not — `primer.css` the acknowledge gate, `diagrams.css` the legend strip, `gate.css` the hold reasons and file chips, `watch.css` the severities, the report reader and the grade trend, `settings.css` the rail layout, the group head, the token ladder and the voices grid, `profile.css` the identity band and the shelf, `roster.css` the Builders roster's identity cell (was `people.css`, shared with the cross-project `/people` directory until task 1003444 deleted that page — `/people` and its legacy door `/scouting` now 302 to `/roster`), `thinking.css` THE SKY's one sheet (task 1004231 / sky part 3 — `thinking.html` at `/thinking` is the prototype the owner adopted as the design of record, `docs/design/mocks/sky/`, built over `GET /sky` + `GET /sky/mine`; its script is the seven `sky-*.js` files on one shared `window.OTBSky`; it replaced THE ROOM of task 1004098, which survives as the list drawer, and the old `/sky` page, whose URL 301s here; `idea-objects.js` beside it is the shared five-object vocabulary).
|
|
138
138
|
│ ├── lifecycle/ ← CORE-DOMAIN carve (BV1.R86, default-on): the build state machine — tasks · claims · versions · done-when · goals · dependencies · claim→ship→grade→credit · github-push + merge-lock + conflict-resolve + publish-reconciler. The LAST, most-coupled carve; registers the `lifecycle` kernel port (createTask, classifyTaskKind, tallyPeerVotes, work-tracking reads). CLAUDE.md, module.json, routes/{tasks,claims,versions,done-when,goals,dependencies,gate-approvals,analytics}.js, lifecycle.js, github-push.js, merge-lock.js, conflict-resolve.js, publish-reconciler.js, task-visuals.js + task-visual-db.js + routes/visuals.js (the optional ship-time visual, task 1003109 — the route file is NOT named task-*.js on purpose; see the module CLAUDE.md).
|
|
139
139
|
│ ├── copy-desk/ ← CORE-DOMAIN module (task 1003113 / R02 of goal 1000074, default-on): the COPY half of the design contract — ADR 0081 gave design TOKENS a repo-owned source of truth, text had none. Owns the FLAG (anyone in any role marks a string or a whole surface as needing an artist's attention, with a reason required in BOTH the route and a CHECK constraint) and the QUEUE an artist reads it from. READS R01's committed registry (docs/copy-registry.json, generated by scripts/gds/copy-inventory.js) and never writes it. NO LIVE CMS is the hard non-goal: no column here could hold replacement text, and copy_no_cms.mjs pins that. Key is `copy-desk`, not `copy` — the branding contract already owns a `copy` block, so the bare word reds the "core carries no module code" fitness check. R03 (task 1003114, ADR 0233) added the PROPOSAL: an artist writes the replacement wording and it becomes a Bongos task carrying a fenced copy-proposal patch — no row, NO second migration (a proposals table is the forbidden column with extra steps), and scripts/gds/copy-apply.js lands it as a real diff under a claim. CLAUDE.md, module.json, registry.js, flags.js, proposals.js, routes/copy-desk.js, migrations/copy_desk_001_flags.sql, tests/{copy_flags,copy_queue,copy_no_cms,copy_proposals}.mjs. Its hall surface lives with hall-ui (public/copy-desk.{html,js,css}), per the one-key-per-web-surface precedent.
|
|
140
140
|
│ ├── npm-release/ ← the deploy page for a project that publishes an npm package from GitHub (task 1002622, default-OFF — on only in the Bongos hall, which publishes @bongos/core). "Where the work is": every task finished in the last 14 days, placed in the stage it has actually reached (not merged · merged, no version yet · published, not running here · running here, not released · released · in no version), plus the version history — each version's tasks. The version↔task join reads the release-notes.json the package itself carries (scripts/gds/release-notes.js writes it at pack time), streamed out of the NEWEST version's npm tarball in-process (no child process, no sync call) when the running core's own copy stops short. module.json, work.js (the reading + the stage placement — the packument, tarball stream and tar reader it uses are the core's src/bongos/package-registry.js, reached through the doorway's readPackageRegistry since task 1004296), routes/work.js (GET /npm-release/work, gated core.pin.move like the page), public/work.{js,css} (the two sections /deploy lends it: #nr-work, #nr-versions). Task 1004301 added the same line on a task's own page: routes/task-where.js (GET /npm-release/task/:id, any signed-in builder — it shows nothing not already public) + public/task-widget.js, injected into task.html by the loader's uiSections seam (hallWidgetScripts file task-widget.js) to fill #task-contrib on otb:task-shown. Tests sit at the repo root — tests/npm_release_{work,page}.mjs — because a default-off module's own tests/ is skipped by the unit runner.
|
|
@@ -377,8 +377,7 @@ tests/
|
|
|
377
377
|
├── canonical_profile_url.mjs ← (task 1002804, goal 1000045 criterion C1, ADR 0214): the P08 proof — the canonical profile URL is resolved in ONE place, `handle` reaches `GET /builders/:id/profile` under the EXISTENCE predicate (so a hidden builder keeps their address), absent/provisional/private are BYTE-IDENTICAL so the numeric-id redirect cannot become an existence oracle, and the widened response still leaks no private column. Real core router over a WHERE-derived fake pool on a real socket; the real browser script in a vm above a stub DOM, run twice — as shipped (every surface dark, because `/u/<handle>` still 404s) and with the liveness constant flipped, so the three live behaviours are proved rather than deferred. Asserts its own DB-free lane membership. DB-free `unit` lane.
|
|
378
378
|
├── application_lifecycle.mjs ← (task 1002284, goal 1000045, ADR 0201 D1/D3.2/D4 + ADR 0208): the application lifecycle EXECUTED — apply, list-pending, approve, decline, RESCIND (`invited → dismissed`), idempotency on the state already held, and the two things that must never happen: a builder without `access_request.review` moving the queue, and a VOUCH buying admission. Real router, REAL `requirePermission` resolving against the real government catalog's rank seed, and the REAL `hasInvitedAccessRequest` from `src/bongos/db-kernel.js` pointed at the same in-memory `access_requests` table (a stubbed `./pool`), whose filter is built from each statement's own WHERE clause and which refuses a predicate it cannot read. The no-authority proof seeds a vouched row and asserts the approve path and the admission read are byte-identical to the unvouched twin, and that no statement on either path names `applicant_github_id`/`vouched_at`. DB-free `unit` lane.
|
|
379
379
|
├── application_echo.mjs ← (task 1002284, goal 1000045, ADR 0201 D1.3/D1.4): the hub's STATUSLESS echo of an application. Part A pins the domain functions — the read binds `APPLICATION_ECHO_WINDOW_DAYS` itself (one 30, not three), the write is an upsert on the pair, neither statement mentions a status, and a non-numeric principal is refused before any query (ADR 0171 D2). Part B runs the real `POST /my-projects/join` and `GET /my-projects` over an in-memory `platform_identity_application_echoes` table with the relay's answer scripted: only an accepted application leaves a trace — a standing membership, either door refusal, a members-only project and an unreachable project leave none — and best-effort is asserted in both directions (a failed echo write still reports the filed application; a failed echo read still lands the memberships listing). DB-free `unit` lane.
|
|
380
|
-
├── scouting_owner_access_and_reach.mjs ← (task 1002290, goal 1000045 C5, ADR 0210): the R14 proof — WHO may read the cross-project recruiting directory, and WHO appears in it. A project owner (an instance-asserted, hub-witnessed `membership_kind='owner'`) reads `GET /scouting` with no rank at all; a builder who is neither owner nor `project.curate` holder gets the unchanged 403; an un-witnessed owner claim is refused; a broken ownership read falls closed onto the permission gate rather than admitting or 500ing. And the recruiting opt-out finally bites: a public, unhidden, active account that opted out is absent from `/scouting
|
|
381
|
-
├── scouting_page_gate.mjs ← (task 1002290, goal 1000045 C5, ADR 0210 D3): the OTHER half of R14 — the `/builders/people` SHELL must admit exactly the two audiences `GET /scouting` admits. A project owner holding no permission reaches it; everyone the route refuses gets the byte-identical `?denied=project.curate` redirect; and each of six ways the `alsoAdmits` door can fail (module absent, function absent, throw, reject, non-boolean, prototype-only) fails CLOSED. Also pins that the other four page gates never consult the seam at all, and that exactly ONE gate declares a second door. Its own file because the route proof's ESM imports pull `auth.js` in before a session double could be installed — this one installs it first, the `government_page_gates.mjs` pattern. DB-free `unit` lane.
|
|
380
|
+
├── scouting_owner_access_and_reach.mjs ← (task 1002290, goal 1000045 C5, ADR 0210): the R14 proof — WHO may read the cross-project recruiting directory, and WHO appears in it. A project owner (an instance-asserted, hub-witnessed `membership_kind='owner'`) reads `GET /scouting` with no rank at all; a builder who is neither owner nor `project.curate` holder gets the unchanged 403; an un-witnessed owner claim is refused; a broken ownership read falls closed onto the permission gate rather than admitting or 500ing. And the recruiting opt-out finally bites: a public, unhidden, active account that opted out is absent from `/scouting`, returns when it opts back in, and the opt-out grants and denies no permission — an opted-out owner still reads the directory while being absent from their own copy of it. Since task 1002291 (R15, ADR 0334) it also proves the directory's NAME-ONLY tier: a hidden, reachable builder is listed by login, name and avatar alone, never ranked, and none of their record reaches the body. Fake pool filtered by each statement's own WHERE clause, real route, real `requirePermission` over the real government catalog, real HTTP. Mutation-checked five ways. DB-free `unit` lane.
|
|
382
381
|
├── terms_acceptance.mjs ← (task 1002913, goal 1000045, ADR 0213): the platform T&C acceptance record. Proves the four properties that make it evidence rather than a claim — the /terms page carries the cross-project consent ADR 0141 §4 deferred to it and it is apex-only; acceptance is written ONLY by the hub's own /sso/authorize (driven over the real router with an attacker-controlled query string, so a forged timestamp/version/activate flag reaches nothing); it is written ONCE (the fake pool interprets the upsert's own column assignments, so COALESCE is executed, not string-matched, and an assignment shape it cannot read throws instead of reading as "unchanged"); and consent is two columns in the shared predicate, so an account the hub witnessed before the terms existed publishes nothing. Plus the projection rule — every read whose row a JS twin judges must select both consent columns, or the twin denies everyone silently. DB-free `unit` lane, asserts its own lane membership.
|
|
383
382
|
├── applicant_profile_boundary.mjs ← (task 1002972, goal 1000045 C4, privacy spec D7, ADR 0241): THE D7 BOUNDARY proof for the applicant view a reviewer sees. Whitelists read from the MODULES’ own exports — the private branch against `recruiter-sliver`’s `SLIVER_KEYS`/`SLIVER_KEYS_HIDDEN`, the public branch against the public-page payload’s key list — so a third shape (the “new disclosure class” D7 forbids) reds this file. Pins THE CONSENT SWAP in both directions on the same account: a private builder who never opted into recruiting gets an applicant view and gets `null` from `getRecruiterSliver`, so a refactor routing the port through the recruiter sliver cannot pass quietly. `hide_stats` beats the application in both branches; provisional and terms-never-accepted disclose nothing; planted sentinels asserted absent from the whole body with the avatar-embedded `github_id` pinned as the one honest exception. Plus the federated gate (ADR 0205): no echo → 404 and NO account row read (asserted on the statement log), the witness matched against the AUTHENTICATED client, an out-of-window echo stops working, and `Cache-Control: no-store`. Real router + real HTTP over in-memory tables filtered by each statement’s own WHERE clause. DB-free `unit` lane, asserted in the file itself.
|
|
384
383
|
├── recruiter_sliver_boundary.mjs ← (task 1002968, goal 1000045 C2/C5, privacy spec D3, ADR 0215): THE PRE-ACCEPT BOUNDARY proof for the D3 recruiter sliver. A WHITELIST over the module's own exported key list (a sixth key fails whether or not this file was told about it), planted improbable sentinels asserted absent from the WHOLE response body with two controls against vacuity, the ceiling assertion (the handle a recruiter is handed 404s at `GET /profiles/:handle`, with a 200 control) and the gate (both recruiting routes admit the same two audiences and refuse byte-identically). Real router + real HTTP over an in-memory table filtered by each statement's own WHERE clause. DB-free `unit` lane, asserted in the file itself.
|
|
@@ -2577,5 +2577,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2577
2577
|
landed since 1.19.1043 with no explicit bump. run 36260641494. (task 1002620)
|
|
2578
2578
|
1.19.1045 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2579
2579
|
landed since 1.19.1044 with no explicit bump. run 36263855490. (task 1002620)
|
|
2580
|
+
1.19.1046 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2581
|
+
landed since 1.19.1045 with no explicit bump. run 36265788618. (task 1002620)
|
|
2580
2582
|
---------------------------------------------------------------------------
|
|
2581
2583
|
```
|