@bongos/core 1.21.176 → 1.21.178
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 +186 -496
- package/.claude/skills/planning-session/SKILL.md +2 -2
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +0 -6
- package/clients/bongos-client/index.cjs +0 -6
- package/clients/bongos-client/index.d.ts +0 -6
- package/clients/bongos-client/index.mjs +0 -6
- package/config/scheduled-routines.json +3 -8
- package/docs/adr/0042-builder-self-deploy-ci-auto-merge.md +3 -2
- package/docs/adr/0091-bounding-the-kernel-and-db-carve.md +1 -1
- package/docs/adr/0093-tranche-2-core-carve-sequence.md +1 -1
- package/docs/api/openapi.json +1 -87
- package/docs/api-reference.md +1 -8
- package/docs/canonical-permissions.md +4 -4
- package/docs/copy-inventory.md +25 -39
- package/docs/copy-registry.json +73 -200
- package/docs/file-map.md +6 -11
- package/docs/handoff-template.md +1 -1
- package/docs/module-api-changelog.md +4 -0
- package/docs/modules-contract.md +2 -2
- package/docs/onboarding/diagrams/README.md +3 -7
- package/docs/onboarding/diagrams/assertions.json +3 -3
- package/docs/page-inventory.json +4 -7
- package/docs/page-readings.json +1520 -1569
- package/docs/recipes/ops-gotchas.md +3 -1
- package/modules/autonomy/db.js +9 -0
- package/modules/autonomy/module.json +2 -2
- package/modules/autonomy/pollers/daily-checks.js +262 -0
- package/modules/autonomy/pollers/routine-timers.js +7 -5
- package/modules/autonomy/rank-roles.js +64 -0
- package/modules/autonomy/server-schedule.js +37 -0
- package/modules/government/catalog.js +10 -7
- package/modules/government/decision-board.js +0 -1
- package/modules/government/decision-rules.js +0 -1
- package/modules/government/docket.js +0 -1
- package/modules/government/protected-surfaces.js +1 -1
- package/modules/government/protected-surfaces.json +2 -3
- 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/city.html +1 -1
- package/modules/hall-ui/public/collab.html +1 -1
- package/modules/hall-ui/public/commands.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.css +4 -26
- package/modules/hall-ui/public/gate.html +12 -27
- package/modules/hall-ui/public/gate.js +26 -176
- package/modules/hall-ui/public/gate.states.json +4 -22
- package/modules/hall-ui/public/goal-map.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/my-agents.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/roster.html +1 -1
- package/modules/hall-ui/public/sessions.html +1 -1
- package/modules/hall-ui/public/settings.html +1 -1
- package/modules/hall-ui/public/shell.js +1 -1
- package/modules/hall-ui/public/street-card.js +5 -9
- package/modules/hall-ui/public/street-desk.js +2 -2
- package/modules/hall-ui/public/street-inside.js +1 -1
- package/modules/hall-ui/public/street.html +1 -1
- package/modules/hall-ui/public/studio.html +1 -1
- package/modules/hall-ui/public/task.html +1 -1
- package/modules/hall-ui/public/thinking.html +1 -1
- package/modules/hall-ui/public/tweak-editor.html +1 -1
- package/modules/hall-ui/public/watch.html +1 -1
- package/modules/hall-ui/public/work.html +1 -1
- package/modules/lifecycle/matter-acts.js +0 -6
- package/modules/lifecycle/module.json +0 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +36 -0
- package/scripts/bongos/adopt-preflight.js +3 -3
- package/scripts/bongos/api-alias-caller-scan.js +2 -2
- package/scripts/bongos/audit-authorship.sh +1 -8
- package/scripts/bongos/audit-rank-roles.js +15 -56
- package/scripts/bongos/bump-version.js +46 -9
- package/scripts/bongos/codemod-rename-scripts-gds.js +0 -1
- package/scripts/bongos/diagram-facts.js +1 -1
- package/scripts/bongos/do-api.js +1 -1
- package/scripts/bongos/doc-cli-guard.js +2 -0
- package/scripts/bongos/doc-control-claims.js +2 -2
- package/scripts/bongos/fitness-checks-identity.js +4 -15
- package/scripts/bongos/gen-diagrams.js +3 -3
- package/scripts/bongos/government-walk.js +3 -9
- package/scripts/bongos/hard-floor.js +52 -0
- package/scripts/bongos/publish-manifest.js +3 -3
- package/scripts/bongos/pulse.js +5 -3
- package/scripts/bongos/routine-schedule.js +38 -3
- package/scripts/bongos/run-unit-tests.js +17 -5
- package/scripts/bongos/ship-regen.js +2 -3
- package/scripts/gds/{goal-names.js → hard-floor.js} +3 -4
- package/scripts/security/dep-audit.js +50 -124
- package/src/bongos/module-scope-map.js +2 -2
- package/src/bongos/permission-path-check.js +1 -1
- package/src/bongos/route-rank-check.js +1 -8
- package/src/bongos/routes.js +1 -2
- package/src/module-api.js +1 -1
- package/src/modules.js +1 -1
- package/tests/acclaim_feed_evidence_db.mjs +42 -23
- package/tests/adr_0089_scope.mjs +7 -5
- package/tests/autonomy_daily_checks.mjs +201 -0
- package/tests/bump_version.mjs +52 -18
- package/tests/claude_materialize.mjs +12 -12
- package/tests/copy_desk_flags_db.mjs +22 -14
- package/tests/effective_visibility_predicate.mjs +0 -18
- package/tests/gating_review_retired.mjs +1 -1
- package/tests/government_act_alone_buildings.mjs +1 -3
- package/tests/government_board_membership_db.mjs +35 -22
- package/tests/government_protected_surfaces.mjs +29 -13
- package/tests/governor_docket.mjs +0 -2
- package/tests/governor_matter_acts.mjs +6 -8
- package/tests/hall_city.mjs +1 -1
- package/tests/hall_matter_card.mjs +2 -2
- package/tests/hall_oversight_world.mjs +16 -12
- package/tests/hall_street_desk.mjs +4 -3
- package/tests/hall_street_inside.mjs +1 -1
- package/tests/helpers.mjs +34 -0
- package/tests/howto_state.mjs +33 -56
- package/tests/howto_state_db.mjs +68 -0
- package/tests/idea_credit_streams_db.mjs +11 -3
- package/tests/integration_parked_ratchet.mjs +7 -1
- package/tests/nav_permission_atoms.mjs +1 -1
- package/tests/page_notes_db.mjs +12 -8
- package/tests/page_tweak_no_rearm.mjs +50 -0
- package/tests/publish_manifest.mjs +64 -0
- package/tests/routine_capture_kind.mjs +18 -7
- package/tests/routine_schedule.mjs +42 -0
- package/tests/search_isolation.mjs +5 -103
- package/tests/search_isolation_db.mjs +140 -0
- package/tests/session_earnings_mirror_db.mjs +2 -0
- package/tests/workflow_exec_paths.mjs +9 -11
- package/modules/lifecycle/routes/gate-approvals.js +0 -299
- package/scripts/bongos/artifact-staleness.js +0 -267
- package/scripts/bongos/ci-grade.js +0 -82
- package/scripts/bongos/classify-discipline.js +0 -153
- package/scripts/bongos/codemod-rename-src-gds.js +0 -145
- package/scripts/bongos/coreB-carve-proof.sh +0 -725
- package/scripts/bongos/gate-review.js +0 -330
- package/scripts/bongos/goal-names.js +0 -102
- package/scripts/bongos/rename-goals.js +0 -109
- package/scripts/bongos/seed-adopt-tasks.js +0 -75
- package/scripts/bongos/seed-api-contract-goal-tasks.js +0 -141
- package/scripts/bongos/seed-board-room-tasks.js +0 -196
- package/scripts/bongos/seed-bongos-app-tasks.js +0 -294
- package/scripts/bongos/seed-bongos-coreB-tranche1-tasks.js +0 -81
- package/scripts/bongos/seed-bongos-coreB-tranche2-tasks.js +0 -100
- package/scripts/bongos/seed-bongos-goal-hierarchy-tasks.js +0 -307
- package/scripts/bongos/seed-bongos-module-system-tasks.js +0 -346
- package/scripts/bongos/seed-bongos-tasks.js +0 -214
- package/scripts/bongos/seed-bongos-v1-seo-tasks.js +0 -104
- package/scripts/bongos/seed-bv1-community-tasks.js +0 -131
- package/scripts/bongos/seed-bv1-privacy-invites-tasks.js +0 -133
- package/scripts/bongos/seed-bv1-profile-page-tasks.js +0 -161
- package/scripts/bongos/seed-bv1-r01-delta-tasks.js +0 -154
- package/scripts/bongos/seed-bv2-tweak-mode-tasks.js +0 -277
- package/scripts/bongos/seed-gds-v4-tasks.js +0 -624
- package/scripts/bongos/seed-governance-tasks.js +0 -340
- package/scripts/bongos/seed-medusa-tasks.js +0 -440
- package/scripts/bongos/seed-module-upstreaming.js +0 -219
- package/scripts/bongos/seed-productization-tasks.js +0 -235
- package/scripts/bongos/seed-project-admin-console-tasks.js +0 -88
- package/scripts/bongos/seed-provisioning-tasks.js +0 -83
- package/scripts/bongos/seed-strict-versioning-tasks.js +0 -275
- package/scripts/bongos/seed-v2-world-tasks.js +0 -283
- package/scripts/gds/artifact-staleness.js +0 -7
- package/scripts/gds/ci-grade.js +0 -7
- package/scripts/gds/classify-discipline.js +0 -7
- package/scripts/gds/codemod-rename-src-gds.js +0 -7
- package/scripts/gds/coreB-carve-proof.sh +0 -8
- package/scripts/gds/gate-review.js +0 -7
- package/scripts/gds/rename-goals.js +0 -7
- package/scripts/gds/seed-adopt-tasks.js +0 -7
- package/scripts/gds/seed-api-contract-goal-tasks.js +0 -7
- package/scripts/gds/seed-board-room-tasks.js +0 -6
- package/scripts/gds/seed-bongos-app-tasks.js +0 -7
- package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +0 -7
- package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +0 -7
- package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +0 -7
- package/scripts/gds/seed-bongos-module-system-tasks.js +0 -7
- package/scripts/gds/seed-bongos-tasks.js +0 -7
- package/scripts/gds/seed-bongos-v1-seo-tasks.js +0 -6
- package/scripts/gds/seed-bv1-community-tasks.js +0 -6
- package/scripts/gds/seed-bv1-privacy-invites-tasks.js +0 -6
- package/scripts/gds/seed-bv1-profile-page-tasks.js +0 -6
- package/scripts/gds/seed-bv1-r01-delta-tasks.js +0 -6
- package/scripts/gds/seed-bv2-tweak-mode-tasks.js +0 -6
- package/scripts/gds/seed-gds-v4-tasks.js +0 -7
- package/scripts/gds/seed-governance-tasks.js +0 -7
- package/scripts/gds/seed-medusa-tasks.js +0 -7
- package/scripts/gds/seed-module-upstreaming.js +0 -7
- package/scripts/gds/seed-productization-tasks.js +0 -7
- package/scripts/gds/seed-project-admin-console-tasks.js +0 -6
- package/scripts/gds/seed-provisioning-tasks.js +0 -7
- package/scripts/gds/seed-strict-versioning-tasks.js +0 -7
- package/scripts/gds/seed-v2-world-tasks.js +0 -7
- package/scripts/migrate_cost_ledger.sh +0 -178
- package/tests/artifact_staleness.mjs +0 -207
- package/tests/gate_approvals.mjs +0 -611
- package/tests/gate_review.mjs +0 -152
- package/tests/goal_names.mjs +0 -120
- package/tests/newcomer_generator.mjs +0 -48
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
|
|
180
180
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
181
181
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
182
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
182
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
183
183
|
<script src="/builders/palette.js" defer></script>
|
|
184
184
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
185
185
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
|
|
79
79
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
80
80
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
81
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
81
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
82
82
|
<script src="/builders/palette.js" defer></script>
|
|
83
83
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
84
84
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
97
97
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
98
98
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
99
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
99
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
100
100
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
101
101
|
<script src="/builders/palette.js" defer></script>
|
|
102
102
|
<script src="/builders/diagram-viewer.js?v=2026-06-14-diagviewer-1" defer></script>
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
|
|
97
97
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
98
98
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
99
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
99
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
100
100
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
101
101
|
<script src="/builders/palette.js" defer></script>
|
|
102
102
|
<script src="/builders/md-reader.js?v=2026-09-02-mdreader-2"></script>
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
59
59
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
60
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
60
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
61
61
|
<script src="/builders/palette.js" defer></script>
|
|
62
62
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
63
63
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -1,30 +1,8 @@
|
|
|
1
|
-
/* gate.css — Page-local styles for the
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
gate's own: the hold reasons (a hard floor reads in the danger ink), and the
|
|
5
|
-
changed-file run. The ?v= cache-bust is stamped from this file's content hash
|
|
6
|
-
at boot (src/asset-version.js). */
|
|
1
|
+
/* gate.css — Page-local styles for the Autobongos panel, still served at /gate
|
|
2
|
+
(task 1004859 removed the held-PR list that used to share this page). The ?v=
|
|
3
|
+
cache-bust is stamped from this file's content hash at boot (src/asset-version.js). */
|
|
7
4
|
|
|
8
|
-
/*
|
|
9
|
-
floor is the danger ink on the path and a name on the line, never a flag glyph. */
|
|
10
|
-
.gate-reason .ov-key { max-width: 40%; }
|
|
11
|
-
.gate-reason--floor .ov-key { color: var(--danger); }
|
|
12
|
-
.gate-reason__floor { font-family: var(--label-face); font-size: 10.5px; letter-spacing: var(--label-space); text-transform: var(--label-case); color: var(--danger); white-space: nowrap; }
|
|
13
|
-
|
|
14
|
-
/* The changed files: one chip per path, wrapping, the overflow named as a count. */
|
|
15
|
-
.gate-files { display: flex; flex-wrap: wrap; gap: 6px 8px; margin: 12px 0 0; }
|
|
16
|
-
.gate-files .fact-chip { text-transform: none; letter-spacing: normal; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
|
|
17
|
-
.gate-files__more { align-self: center; font-size: 12px; color: var(--ink-faint); }
|
|
18
|
-
|
|
19
|
-
/* On a phone the path takes the line with its floor label at the right, and the
|
|
20
|
-
reason drops under it in full width. */
|
|
21
|
-
@media (max-width: 640px) {
|
|
22
|
-
.gate-reason .ov-key { max-width: none; }
|
|
23
|
-
.gate-reason > span:nth-of-type(2) { flex: 1 1 100%; order: 3; }
|
|
24
|
-
.gate-reason__floor { margin-left: auto; }
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/* The Autobongos runner panel (task 1004509): a status line with the switch,
|
|
5
|
+
/* The runner panel (task 1004509): a status line with the switch,
|
|
28
6
|
a checklist only while something is missing, goals as chips, and the
|
|
29
7
|
machine facts folded under Details. */
|
|
30
8
|
.rn-head { display: flex; align-items: center; gap: 12px; }
|
|
@@ -3,17 +3,16 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>
|
|
7
|
-
<meta name="description" content="
|
|
6
|
+
<title>Autobongos — {{worldName}}</title>
|
|
7
|
+
<meta name="description" content="The Autobongos runner: switch unattended building on or off, choose the goals it may work, and pause any builder's runner.">
|
|
8
8
|
<link rel="icon" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><text x='16' y='24' font-size='24' text-anchor='middle' font-family='sans-serif'>⌂</text></svg>">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
11
|
<link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
|
|
12
12
|
<link rel="stylesheet" href="/builders/oversight.css">
|
|
13
|
-
<link rel="stylesheet" href="/builders/hall-ask.css">
|
|
14
13
|
<link rel="stylesheet" href="/builders/gate.css">
|
|
15
14
|
</head>
|
|
16
|
-
<body data-page="gate" data-page-title="
|
|
15
|
+
<body data-page="gate" data-page-title="Autobongos">
|
|
17
16
|
|
|
18
17
|
<div class="app">
|
|
19
18
|
<aside class="app-sidebar" id="app-sidebar" aria-label="Primary"></aside>
|
|
@@ -24,7 +23,7 @@
|
|
|
24
23
|
<!-- The page's one h1, for screen readers: no page shows its head (task
|
|
25
24
|
1004836), so its sub-line went in task 1004829. -->
|
|
26
25
|
<div class="page-head page-head--board">
|
|
27
|
-
<h1 class="page-head__h">
|
|
26
|
+
<h1 class="page-head__h">Autobongos</h1>
|
|
28
27
|
</div>
|
|
29
28
|
|
|
30
29
|
<main id="hall-main">
|
|
@@ -37,17 +36,12 @@
|
|
|
37
36
|
</section>
|
|
38
37
|
|
|
39
38
|
<section id="gate-body" hidden>
|
|
40
|
-
<!-- The
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
page because the Gate is already the owner's protected-surface
|
|
47
|
-
surface, and because the switch and the held PRs answer the same
|
|
48
|
-
question from two ends: what is allowed to reach main unattended.
|
|
49
|
-
Archon-only — the panel stays hidden for a Metic, and the routes
|
|
50
|
-
behind it are system:true/archon server-side regardless. -->
|
|
39
|
+
<!-- The Autobongos fence (task 1003908, ADR 0307 §6): what is allowed to
|
|
40
|
+
reach main unattended. This page held the held-PR list too until task
|
|
41
|
+
1004859 removed it; the URL stays /gate so bookmarks keep working.
|
|
42
|
+
Archon-only — a Metic gets the note below instead, and the routes
|
|
43
|
+
behind the panel are system:true/archon server-side regardless. -->
|
|
44
|
+
<p class="scroll__lede" id="gate-archon-only" hidden></p>
|
|
51
45
|
<section class="scroll" id="fence-panel" aria-labelledby="fence-h" hidden>
|
|
52
46
|
<h2 class="scroll__h" id="fence-h">Autobongos runner</h2>
|
|
53
47
|
<!-- One panel (task 1004509): a checklist while anything the runner
|
|
@@ -58,13 +52,6 @@
|
|
|
58
52
|
work, whether you paused it, and whether it is checking in. -->
|
|
59
53
|
<div id="fence-builders"></div>
|
|
60
54
|
</section>
|
|
61
|
-
|
|
62
|
-
<section class="scroll" aria-labelledby="gate-list-h">
|
|
63
|
-
<h2 class="scroll__h" id="gate-list-h">Held pull requests</h2>
|
|
64
|
-
<p class="scroll__lede">Each one touched a protected surface and stopped at the gate check.</p>
|
|
65
|
-
<div id="gate-list"><span class="kit-skel"></span></div>
|
|
66
|
-
<p class="ov-foot" id="gate-checking" hidden></p>
|
|
67
|
-
</section>
|
|
68
55
|
</section>
|
|
69
56
|
</main>
|
|
70
57
|
|
|
@@ -77,13 +64,11 @@
|
|
|
77
64
|
|
|
78
65
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
79
66
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
80
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
67
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
81
68
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
82
69
|
<script src="/builders/palette.js" defer></script>
|
|
83
70
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
84
71
|
<script src="/builders/hall-kit.js"></script>
|
|
85
|
-
|
|
86
|
-
<script src="/builders/hall-ask.js"></script>
|
|
87
|
-
<script src="/builders/gate.js?v=2026-10-01-runner-checklist"></script>
|
|
72
|
+
<script src="/builders/gate.js?v=2026-10-25-autobongos"></script>
|
|
88
73
|
</body>
|
|
89
74
|
</html>
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
// public-builders/gate.js —
|
|
1
|
+
// public-builders/gate.js — Autobongos, the owner's runner panel (/builders/gate).
|
|
2
2
|
//
|
|
3
|
-
// The
|
|
4
|
-
//
|
|
5
|
-
// gate-
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// gate-owner-approved status) and re-runs the check so the PR merges. It is the
|
|
9
|
-
// page's one real decision, so a held PR is the hall's ask card (task 1004829) —
|
|
10
|
-
// drawn only for a viewer the approve route would let through.
|
|
3
|
+
// The page is still served at /gate so bookmarks keep working, but it no longer
|
|
4
|
+
// holds pull requests: task 1004859 removed the held-PR list (and GET/POST
|
|
5
|
+
// /gate-approvals behind it), because the gate-review CI check it waited on never
|
|
6
|
+
// ran. The owner chose to keep the page for what else it held — the Autobongos
|
|
7
|
+
// fence: the switch, the allowed goals, the priority, each builder's runner.
|
|
11
8
|
//
|
|
12
|
-
// Like The Watch, this reads /api/bongos/me to show a Sealed notice for
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
9
|
+
// Like The Watch, this reads /api/bongos/me to show a Sealed notice for a viewer
|
|
10
|
+
// the panel is not for — DEFENCE IN DEPTH only. Every route behind the panel is
|
|
11
|
+
// gated server-side (ADR 0016), and the page itself is gated by
|
|
12
|
+
// requireGovernmentPage. On 401 → web sign-in.
|
|
16
13
|
|
|
17
14
|
(() => {
|
|
18
15
|
'use strict';
|
|
@@ -22,7 +19,7 @@
|
|
|
22
19
|
// /lib/bongos-client.js. baseUrl:'' passes the full `${API}${path}` URLs below
|
|
23
20
|
// through unchanged; result-mode ({ status, ok, data }) preserves control flow 1:1.
|
|
24
21
|
const api = window.BongosClient.createClient({ baseUrl: '', credentials: 'same-origin', throwOnError: false });
|
|
25
|
-
const { escapeHtml
|
|
22
|
+
const { escapeHtml } = window.OTB;
|
|
26
23
|
const { emptyStateHtml } = window.OTBKit;
|
|
27
24
|
const rankLabel = (rank) => window.OTB.rankLabel(rank, { empty: '' });
|
|
28
25
|
const toast = (msg) => window.OTB.toast(msg);
|
|
@@ -60,157 +57,6 @@
|
|
|
60
57
|
return `${path} → ${status}`;
|
|
61
58
|
}
|
|
62
59
|
|
|
63
|
-
// ---- formatters ----------------------------------------------------------
|
|
64
|
-
|
|
65
|
-
const shortSha = (s) => (typeof s === 'string' ? s.slice(0, 7) : '');
|
|
66
|
-
const VERDICT_LABEL = { escalate: 'Hard floor', needs_trust: 'Needs trust', pass: 'Clear' };
|
|
67
|
-
const verdictLabel = (v) => VERDICT_LABEL[v] || (v || 'held');
|
|
68
|
-
// How many files a row shows before it names the rest as a count.
|
|
69
|
-
const FILES_SHOWN = 12;
|
|
70
|
-
|
|
71
|
-
// ---- actions -------------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
// The card IS the confirmation (task 1004829): its question names the PR and
|
|
74
|
-
// its answer's result line says what approving does, so the old modal that
|
|
75
|
-
// repeated both is gone. A failed press gives the chip back.
|
|
76
|
-
async function approve(pr, btn) {
|
|
77
|
-
if (btn) btn.disabled = true;
|
|
78
|
-
try {
|
|
79
|
-
const r = await sendJson('POST', `/gate-approvals/${pr.number}/approve`, {});
|
|
80
|
-
toast(r.message || 'Approval recorded.');
|
|
81
|
-
load();
|
|
82
|
-
} catch (err) {
|
|
83
|
-
if (err && err.kind === '401') return;
|
|
84
|
-
if (btn) btn.disabled = false;
|
|
85
|
-
toast(`Could not approve: ${err.message || err}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// ---- render --------------------------------------------------------------
|
|
90
|
-
|
|
91
|
-
// One held PR, one oversight row (oversight.css .ov-row). This is the page
|
|
92
|
-
// that shows the most facts in the hall — title, verdict, trust, task, PR,
|
|
93
|
-
// author, sha, diff, every hold reason and the changed files — and every one
|
|
94
|
-
// of them survives the rebuild: the verdict is a state pill instead of a band,
|
|
95
|
-
// the reasons are hairline detail lines, the files are chips.
|
|
96
|
-
function renderRow(pr, mayApprove) {
|
|
97
|
-
const floor = pr.verdict !== 'needs_trust';
|
|
98
|
-
const reasons = (pr.reasons || []).map((r) =>
|
|
99
|
-
`<li class="gate-reason${r.hard_floor ? ' gate-reason--floor' : ''}">` +
|
|
100
|
-
`<span class="ov-key">${escapeHtml(r.path)}</span>` +
|
|
101
|
-
`<span>${escapeHtml(r.reason)}</span>` +
|
|
102
|
-
(r.hard_floor ? '<span class="gate-reason__floor">hard floor</span>' : '') +
|
|
103
|
-
'</li>').join('')
|
|
104
|
-
|| '<li><span>Held by the gate check.</span></li>';
|
|
105
|
-
|
|
106
|
-
const files = pr.files || [];
|
|
107
|
-
const chips = files.slice(0, FILES_SHOWN).map((f) =>
|
|
108
|
-
`<span class="fact-chip" title="${escapeHtml(f.path)}">${escapeHtml(f.path)}</span>`).join('');
|
|
109
|
-
const more = files.length > FILES_SHOWN ? `<span class="gate-files__more">+${files.length - FILES_SHOWN} more</span>` : '';
|
|
110
|
-
const filesHtml = files.length
|
|
111
|
-
? `<div class="gate-files" aria-label="Changed files"><span class="ov-fact">${fmtInt(files.length)} file${files.length === 1 ? '' : 's'}</span>${chips}${more}</div>`
|
|
112
|
-
: '';
|
|
113
|
-
|
|
114
|
-
const facts = [
|
|
115
|
-
`<span class="fact-pill fact-pill--${floor ? 'danger' : 'warn'}">${escapeHtml(verdictLabel(pr.verdict))}</span>`,
|
|
116
|
-
pr.author_trusted ? '<span class="fact-pill fact-pill--info">author trusted</span>' : '',
|
|
117
|
-
pr.task ? `<span class="ov-fact"><a href="/#/task/${encodeURIComponent(pr.task)}">task ${escapeHtml(String(pr.task))}</a></span>` : '',
|
|
118
|
-
`<span class="ov-fact">by <b>${escapeHtml(pr.author || 'unknown')}</b></span>`,
|
|
119
|
-
`<span class="ov-mono">${escapeHtml(shortSha(pr.head_sha))}</span>`,
|
|
120
|
-
`<span class="ov-fact"><a href="${escapeHtml(pr.url)}/files" target="_blank" rel="noopener">view diff</a></span>`,
|
|
121
|
-
].filter(Boolean).join('');
|
|
122
|
-
|
|
123
|
-
const title = `<a class="ov-row__title" href="${escapeHtml(pr.url)}" target="_blank" rel="noopener">${escapeHtml(pr.title || `PR #${pr.number}`)}<span class="ov-mono">#${escapeHtml(String(pr.number))}</span></a>`;
|
|
124
|
-
const detail = `<div class="ov-row__facts">${facts}</div>
|
|
125
|
-
<ul class="ov-lines">${reasons}</ul>
|
|
126
|
-
${filesHtml}`;
|
|
127
|
-
|
|
128
|
-
// The decision, as the ask card — only where the server said this viewer's
|
|
129
|
-
// approval would be let through (`viewer_may_approve`: the approve route's
|
|
130
|
-
// permission AND the release building's act-alone rule). Everyone else reads
|
|
131
|
-
// the same facts as a plain row.
|
|
132
|
-
if (mayApprove && !pr.already_approved && window.OTBAsk) {
|
|
133
|
-
const holder = document.createElement('ul');
|
|
134
|
-
holder.innerHTML = window.OTBAsk.html({
|
|
135
|
-
q: `Let PR #${pr.number} through?`,
|
|
136
|
-
saidHtml: title + detail,
|
|
137
|
-
row: true,
|
|
138
|
-
opts: [{
|
|
139
|
-
label: 'Approve',
|
|
140
|
-
result: `Clears the hold on ${shortSha(pr.head_sha)}; it merges once the check passes`,
|
|
141
|
-
rec: true,
|
|
142
|
-
attrs: { 'data-act': 'approve' },
|
|
143
|
-
}],
|
|
144
|
-
});
|
|
145
|
-
const card = holder.firstElementChild;
|
|
146
|
-
const btn = card.querySelector('[data-act=approve]');
|
|
147
|
-
if (btn) btn.addEventListener('click', () => approve(pr, btn));
|
|
148
|
-
return card;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const action = pr.already_approved
|
|
152
|
-
? '<span class="ov-fact ov-ok">Approved. Re-check pending.</span>'
|
|
153
|
-
: '<span class="ov-fact">Waiting for approval</span>';
|
|
154
|
-
|
|
155
|
-
const el = document.createElement('li');
|
|
156
|
-
el.className = 'ov-row';
|
|
157
|
-
el.innerHTML =
|
|
158
|
-
`<div class="ov-row__main">
|
|
159
|
-
${title}
|
|
160
|
-
${detail}
|
|
161
|
-
</div>
|
|
162
|
-
<div class="ov-row__right">${action}</div>`;
|
|
163
|
-
return el;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// The glass strip above the panel: the shell's .stat-row, each tile a figure
|
|
167
|
-
// with the one clause that makes it a fact rather than a number.
|
|
168
|
-
function renderSummary(awaiting) {
|
|
169
|
-
const floors = awaiting.filter((p) => p.verdict === 'escalate').length;
|
|
170
|
-
const trust = awaiting.filter((p) => p.verdict === 'needs_trust').length;
|
|
171
|
-
const tiles = [
|
|
172
|
-
['Held', fmtInt(awaiting.length), 'at the gate check'],
|
|
173
|
-
['Hard floor', fmtInt(floors), 'only an owner may clear'],
|
|
174
|
-
['Needs trust', fmtInt(trust), 'an author not yet trusted'],
|
|
175
|
-
];
|
|
176
|
-
document.getElementById('gate-summary').innerHTML = tiles.map(([label, num, sub]) =>
|
|
177
|
-
`<div class="stat-tile"><span class="stat-tile__label">${escapeHtml(label)}</span><span class="stat-tile__num">${num}</span><span class="stat-tile__sub">${escapeHtml(sub)}</span></div>`).join('');
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async function load() {
|
|
181
|
-
const list = document.getElementById('gate-list');
|
|
182
|
-
const checkingEl = document.getElementById('gate-checking');
|
|
183
|
-
let resp;
|
|
184
|
-
try {
|
|
185
|
-
resp = await fetchJson('/gate-approvals');
|
|
186
|
-
} catch (err) {
|
|
187
|
-
if (err && err.kind === '401') return;
|
|
188
|
-
if (err && err.kind === '403') { showSealed(); return; }
|
|
189
|
-
list.innerHTML = emptyStateHtml('Could not load held pull requests just now.');
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const awaiting = resp.awaiting || [];
|
|
194
|
-
renderSummary(awaiting);
|
|
195
|
-
|
|
196
|
-
if (awaiting.length === 0) {
|
|
197
|
-
list.innerHTML = emptyStateHtml('Nothing is held.');
|
|
198
|
-
} else {
|
|
199
|
-
list.innerHTML = '';
|
|
200
|
-
const rows = document.createElement('ul');
|
|
201
|
-
rows.className = 'ov-rows';
|
|
202
|
-
for (const pr of awaiting) rows.appendChild(renderRow(pr, resp.viewer_may_approve === true));
|
|
203
|
-
list.appendChild(rows);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (resp.checking > 0) {
|
|
207
|
-
checkingEl.hidden = false;
|
|
208
|
-
checkingEl.textContent = `${resp.checking} more PR${resp.checking === 1 ? ' is' : 's are'} still being checked.`;
|
|
209
|
-
} else {
|
|
210
|
-
checkingEl.hidden = true;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
60
|
function showSealed() {
|
|
215
61
|
document.getElementById('gate-sealed').hidden = false;
|
|
216
62
|
document.getElementById('gate-body').hidden = true;
|
|
@@ -219,12 +65,18 @@
|
|
|
219
65
|
if (body) body.textContent = `Available from the ${rankLabel('metic')} rank up.`;
|
|
220
66
|
}
|
|
221
67
|
|
|
68
|
+
// A Metic is admitted to the page (page.view.government) but the runner controls
|
|
69
|
+
// are the Archon's (autonomy.fence.manage). Say so rather than draw an empty page.
|
|
70
|
+
function showArchonOnly() {
|
|
71
|
+
const note = document.getElementById('gate-archon-only');
|
|
72
|
+
note.hidden = false;
|
|
73
|
+
note.textContent = `The Autobongos controls are for the ${rankLabel('archon')}.`;
|
|
74
|
+
}
|
|
75
|
+
|
|
222
76
|
// ---- the Autobongos fence (task 1003908, ADR 0307 §6) --------------------
|
|
223
77
|
//
|
|
224
|
-
// The kill switch and the goal allowlist for the unattended runner
|
|
225
|
-
//
|
|
226
|
-
// a person in the loop; the held-PR list and this panel are the same question
|
|
227
|
-
// from two ends.
|
|
78
|
+
// The kill switch and the goal allowlist for the unattended runner — what may
|
|
79
|
+
// reach main without a person in the loop.
|
|
228
80
|
//
|
|
229
81
|
// ARCHON ONLY, and the panel simply is not rendered for anyone else. That is
|
|
230
82
|
// cosmetic: POST /autonomy/fence and the two allowlist routes carry
|
|
@@ -585,19 +437,17 @@
|
|
|
585
437
|
me = null;
|
|
586
438
|
}
|
|
587
439
|
const rank = (me && (me.builder || me).rank || '').toLowerCase();
|
|
588
|
-
// ADR 0157:
|
|
440
|
+
// ADR 0157: this page sits at the `page.view.government` floor (metic). The
|
|
589
441
|
// server's requireGovernmentPage is the wall — this only decides whether to render the
|
|
590
442
|
// body or the sealed notice, so it must agree or a Metic sees "sealed" on a page
|
|
591
443
|
// they were just admitted to.
|
|
592
444
|
if (rank !== 'metic' && rank !== 'archon') { showSealed(); return; }
|
|
593
445
|
|
|
594
446
|
document.getElementById('gate-body').hidden = false;
|
|
595
|
-
if (rank
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
}
|
|
600
|
-
await load();
|
|
447
|
+
if (rank !== 'archon') { showArchonOnly(); return; }
|
|
448
|
+
document.getElementById('fence-panel').hidden = false;
|
|
449
|
+
// Independent reads, so one round trip rather than three.
|
|
450
|
+
await Promise.all([loadRunners(), loadFence(), loadBuilderRunners()]);
|
|
601
451
|
}
|
|
602
452
|
|
|
603
453
|
init();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_": "
|
|
2
|
+
"_": "Autobongos — the owner's runner panel behind requireGovernmentPage, still served at /gate (task 1004859 removed the held-PR list). Measured at three widths in both modes rather than looked at once.",
|
|
3
3
|
"page": "/builders/gate",
|
|
4
4
|
"surface": "hall-ui",
|
|
5
5
|
"stub": {
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"/api/(gds|bongos)/goals",
|
|
14
14
|
"/api/(gds|bongos)/inbox/",
|
|
15
15
|
"/api/(gds|bongos)/versions",
|
|
16
|
-
"/api/(gds|bongos)/gate-approvals",
|
|
17
16
|
"/api/(gds|bongos)/builders",
|
|
18
|
-
"/api/(gds|bongos)/access-requests"
|
|
17
|
+
"/api/(gds|bongos)/access-requests",
|
|
18
|
+
"/api/(gds|bongos)/autonomy/"
|
|
19
19
|
],
|
|
20
20
|
"ignoreConsole": [
|
|
21
21
|
"/api/(gds|bongos)/",
|
|
@@ -46,23 +46,6 @@
|
|
|
46
46
|
},
|
|
47
47
|
"out": {
|
|
48
48
|
"auth": false
|
|
49
|
-
},
|
|
50
|
-
"approve": {
|
|
51
|
-
"auth": true,
|
|
52
|
-
"actions": [
|
|
53
|
-
[
|
|
54
|
-
"wait",
|
|
55
|
-
700
|
|
56
|
-
],
|
|
57
|
-
[
|
|
58
|
-
"clickIfVisible",
|
|
59
|
-
"[data-act=approve]"
|
|
60
|
-
],
|
|
61
|
-
[
|
|
62
|
-
"wait",
|
|
63
|
-
250
|
|
64
|
-
]
|
|
65
|
-
]
|
|
66
49
|
}
|
|
67
50
|
},
|
|
68
51
|
"reducedMotion": {
|
|
@@ -73,6 +56,5 @@
|
|
|
73
56
|
600
|
|
74
57
|
]
|
|
75
58
|
]
|
|
76
|
-
}
|
|
77
|
-
"_states": "task 1003469: `approve` opens the confirm modal on the first held PR. clickIfVisible, because the kit's own stub carries no /gate-approvals fixture and renders the empty list — the modal is measured against the harness."
|
|
59
|
+
}
|
|
78
60
|
}
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
|
|
140
140
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
141
141
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
142
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
142
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
143
143
|
<script src="/builders/palette.js" defer></script>
|
|
144
144
|
|
|
145
145
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
|
|
237
237
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
238
238
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
239
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
239
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
240
240
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
241
241
|
<script src="/builders/palette.js" defer></script>
|
|
242
242
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
|
|
135
135
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
136
136
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
137
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
137
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
138
138
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
139
139
|
<script src="/builders/palette.js" defer></script>
|
|
140
140
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
|
|
53
53
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
54
54
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
55
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
55
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
56
56
|
<script src="/builders/palette.js" defer></script>
|
|
57
57
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib" defer></script>
|
|
58
58
|
<!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
|
|
228
228
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
229
229
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
230
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
230
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
231
231
|
<script src="/builders/palette.js" defer></script>
|
|
232
232
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
233
233
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
<script src="/builders/welcome-boot.js?v=2026-10-23-city1" defer></script>
|
|
120
120
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab" defer></script>
|
|
121
121
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3" defer></script>
|
|
122
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
122
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos" defer></script>
|
|
123
123
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
124
124
|
<script src="/builders/palette.js" defer></script>
|
|
125
125
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
|
|
128
128
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
129
129
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
130
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
130
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
131
131
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
132
132
|
<script src="/builders/palette.js" defer></script>
|
|
133
133
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
63
63
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
64
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
64
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
65
65
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
66
66
|
<script src="/builders/palette.js" defer></script>
|
|
67
67
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
|
|
113
113
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
114
114
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
115
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
115
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
116
116
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
117
117
|
<script src="/builders/palette.js" defer></script>
|
|
118
118
|
<!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
chrome exists before the page script runs. -->
|
|
208
208
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
209
209
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
210
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
210
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
211
211
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
212
212
|
<script src="/builders/palette.js" defer></script>
|
|
213
213
|
<!-- shared frontend toolkit (window.OTB) — loaded before profile.js, which pulls from it. -->
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
|
|
72
72
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
73
73
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
74
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
74
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
75
75
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
76
76
|
<script src="/builders/palette.js" defer></script>
|
|
77
77
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
chrome exists before the page script runs. -->
|
|
74
74
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
75
75
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
76
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
76
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
77
77
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
78
78
|
<script src="/builders/palette.js" defer></script>
|
|
79
79
|
<!-- shared frontend toolkit (window.OTB) — loaded before ranks.js, which pulls from it. -->
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
45
45
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
46
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
46
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
47
47
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
48
48
|
<script src="/builders/palette.js" defer></script>
|
|
49
49
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
chrome exists before the page script runs. -->
|
|
56
56
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
57
57
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
58
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
58
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
59
59
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
60
60
|
<script src="/builders/palette.js" defer></script>
|
|
61
61
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
chrome exists before the page script runs. -->
|
|
112
112
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
113
113
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
114
|
-
<script src="/builders/shell.js?v=2026-10-25-
|
|
114
|
+
<script src="/builders/shell.js?v=2026-10-25-autobongos"></script>
|
|
115
115
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
116
116
|
<script src="/builders/palette.js" defer></script>
|
|
117
117
|
<!-- shared frontend toolkit (window.OTB) — loaded BEFORE sessions.js so it can pull from it. -->
|