@bongos/core 1.24.79 → 1.24.80
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 +495 -350
- package/.claude/skills/ask-for-help/SKILL.md +1 -1
- package/.claude/skills/builder-sequence/SKILL.md +1 -1
- package/.claude/skills/design/SKILL.md +1 -1
- package/.claude/skills/goal-create/SKILL.md +1 -1
- package/.claude/skills/planning-session/SKILL.md +1 -1
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +8 -0
- package/clients/bongos-client/index.cjs +8 -0
- package/clients/bongos-client/index.d.ts +11 -0
- package/clients/bongos-client/index.mjs +8 -0
- package/docs/adr/0274-one-kernel-three-role-packs.md +2 -2
- package/docs/adr/0399-the-visor-is-glass-over-the-scene-and-owns-no-camera.md +91 -0
- package/docs/adr/0400-a-chain-reserves-work-and-each-sub-quest-is-still-claimed-alone.md +109 -0
- package/docs/adr/0401-one-options-menu-opens-every-settings-screen-in-a-frame.md +53 -0
- package/docs/adr/README.md +3 -0
- package/docs/api/openapi.json +195 -3
- package/docs/api-reference.md +8 -4
- package/docs/architecture.md +7 -3
- package/docs/copy-inventory.md +390 -370
- package/docs/copy-registry.json +719 -518
- package/docs/design/characters/character-sprites-source.webp +0 -0
- package/docs/file-map.md +7 -8
- package/docs/module-api-changelog.md +2 -0
- package/docs/modules-contract.md +5 -0
- package/docs/onboarding/slash-commands.md +1 -1
- package/docs/packs/{engineer.md → artisan.md} +5 -5
- package/docs/packs/artist.md +50 -4
- package/docs/page-inventory.json +15 -4
- package/docs/page-readings.json +3182 -3336
- package/docs/{packs/ideator.md → recipes/ideation-playbook.md} +5 -48
- package/migrations/core_296_crafts_artisan_artist.sql +72 -0
- package/migrations/core_297_builder_character.sql +30 -0
- package/modules/copy-desk/proposals.js +1 -1
- package/modules/economy/credits-by-craft.js +29 -15
- package/modules/hall-ui/public/ai-studio.html +4 -4
- package/modules/hall-ui/public/atlas.html +5 -5
- package/modules/hall-ui/public/atlas.js +3 -1
- package/modules/hall-ui/public/blockers.html +5 -5
- package/modules/hall-ui/public/board-room.html +4 -4
- package/modules/hall-ui/public/characters/artisan.png +0 -0
- package/modules/hall-ui/public/characters/artist.png +0 -0
- package/modules/hall-ui/public/characters/patron.png +0 -0
- package/modules/hall-ui/public/city.css +2 -1
- package/modules/hall-ui/public/city.html +9 -6
- package/modules/hall-ui/public/city.js +7 -1
- package/modules/hall-ui/public/collab.html +4 -4
- package/modules/hall-ui/public/commands.html +4 -4
- package/modules/hall-ui/public/copy-desk.html +4 -4
- package/modules/hall-ui/public/craft-mode.js +258 -64
- package/modules/hall-ui/public/deploy.html +4 -4
- package/modules/hall-ui/public/diagram-viewer.js +2 -1
- package/modules/hall-ui/public/dom-utils.js +1 -1
- package/modules/hall-ui/public/goal-map.html +9 -6
- package/modules/hall-ui/public/goals.html +5 -5
- package/modules/hall-ui/public/government.html +4 -4
- package/modules/hall-ui/public/hall-render.js +3 -1
- package/modules/hall-ui/public/home-city-draw.js +3 -3
- package/modules/hall-ui/public/home-city.css +4 -0
- package/modules/hall-ui/public/home-city.js +17 -9
- package/modules/hall-ui/public/home-gallery.js +8 -1
- package/modules/hall-ui/public/home-idea-box.css +2 -2
- package/modules/hall-ui/public/home-idea-box.js +3 -3
- package/modules/hall-ui/public/idea.html +5 -5
- package/modules/hall-ui/public/ideas.html +5 -5
- package/modules/hall-ui/public/index.html +11 -7
- package/modules/hall-ui/public/market-watch-item.html +4 -4
- package/modules/hall-ui/public/market-watch-rules.html +4 -4
- package/modules/hall-ui/public/market-watch.html +6 -9
- package/modules/hall-ui/public/market-watch.js +22 -45
- package/modules/hall-ui/public/modules.html +4 -4
- package/modules/hall-ui/public/money.html +4 -4
- package/modules/hall-ui/public/my-agents.html +4 -4
- package/modules/hall-ui/public/options-menu.js +409 -0
- package/modules/hall-ui/public/paintbrush.js +3 -3
- package/modules/hall-ui/public/palette.js +11 -13
- package/modules/hall-ui/public/primer.html +5 -5
- package/modules/hall-ui/public/profile-crafts.js +1 -1
- package/modules/hall-ui/public/profile-roles.js +23 -19
- package/modules/hall-ui/public/profile.css +1 -1
- package/modules/hall-ui/public/profile.html +19 -18
- package/modules/hall-ui/public/profile.js +19 -18
- package/modules/hall-ui/public/profile.states.json +4 -4
- package/modules/hall-ui/public/project-settings.html +4 -4
- package/modules/hall-ui/public/roster.html +4 -4
- package/modules/hall-ui/public/roster.js +3 -3
- package/modules/hall-ui/public/settings.css +24 -4
- package/modules/hall-ui/public/settings.html +21 -17
- package/modules/hall-ui/public/settings.js +44 -44
- package/modules/hall-ui/public/shell-game.css +65 -0
- package/modules/hall-ui/public/shell-game.js +283 -3
- package/modules/hall-ui/public/shell.js +7 -26
- package/modules/hall-ui/public/sky-interaction.js +7 -0
- package/modules/hall-ui/public/speciality-tools.js +1 -2
- package/modules/hall-ui/public/street-inside.js +3 -4
- package/modules/hall-ui/public/street.html +4 -4
- package/modules/hall-ui/public/studio.html +5 -5
- package/modules/hall-ui/public/style.css +73 -47
- package/modules/hall-ui/public/task-detail.js +5 -4
- package/modules/hall-ui/public/task.html +5 -5
- package/modules/hall-ui/public/thinking.css +10 -0
- package/modules/hall-ui/public/thinking.html +9 -6
- package/modules/hall-ui/public/tweak-editor.html +5 -5
- package/modules/hall-ui/public/tweak-editor.js +5 -1
- package/modules/hall-ui/public/update-pill.js +91 -2
- package/modules/hall-ui/public/visor.css +80 -0
- package/modules/hall-ui/public/visor.js +316 -0
- package/modules/hall-ui/public/watch-repo-invite.js +159 -0
- package/modules/hall-ui/public/watch.html +6 -5
- package/modules/hall-ui/public/watch.js +17 -2
- package/modules/hall-ui/public/welcome-boot.js +15 -6
- package/modules/hall-ui/public/work.html +5 -5
- package/modules/hall-ui/records/builders-roster.md +2 -2
- package/modules/hall-ui/records/craft-mode.md +13 -11
- package/modules/hall-ui/records/game-mode.md +2 -2
- package/modules/hall-ui/records/governor-street.md +1 -1
- package/modules/hall-ui/records/home-city.md +3 -1
- package/modules/hall-ui/records/market-watch-settings.md +2 -0
- package/modules/hall-ui/records/options-menu.md +15 -0
- package/modules/hall-ui/records/profile-roles.md +11 -11
- package/modules/hall-ui/records/sky.md +3 -3
- package/modules/hall-ui/records/start-screen.md +21 -0
- package/modules/hall-ui/records/tweak-editor.md +1 -1
- package/modules/hall-ui/records/update-pill.md +12 -0
- package/modules/hall-ui/records/visor.md +23 -0
- package/modules/hall-ui/records/welcome-tower.md +5 -5
- package/modules/ideas/ideator-stats.js +3 -1
- package/modules/ideas/inbox.js +2 -2
- package/modules/lifecycle/activity.js +1 -1
- package/modules/lifecycle/cascade.js +4 -4
- package/modules/lifecycle/goal-spec-task.js +1 -1
- package/modules/lifecycle/help-requests.js +19 -15
- package/modules/lifecycle/kickoff-checklist.js +3 -3
- package/modules/lifecycle/kickoff-seed.js +1 -1
- package/modules/lifecycle/migrations/lifecycle_021_crafts_artisan_artist.sql +29 -0
- package/modules/lifecycle/mingle.js +4 -4
- package/modules/lifecycle/page-tweak-write.js +1 -1
- package/modules/lifecycle/routes/task-write-routes.js +3 -1
- package/modules/lifecycle/routes/tasks.js +3 -3
- package/modules/lifecycle/ship-card.js +2 -3
- package/modules/lifecycle/task-classifier.js +39 -29
- package/modules/lifecycle/tests/cascade.mjs +7 -7
- package/modules/onboarding/founding-mode.js +3 -0
- package/modules/onboarding/genesis-home.js +21 -1
- package/modules/onboarding/routes/onboarding.js +2 -0
- package/modules/page-notes/notes.js +3 -2
- package/modules/page-notes/split.js +1 -1
- package/modules/platform-identity/craft-rollup.js +35 -7
- package/modules/platform-identity/migrations/platform_identity_036_crafts_artisan_artist.sql +45 -0
- package/modules/platform-identity/platform-identity.js +2 -2
- package/modules/platform-identity/routes/community-leaderboard.js +2 -1
- package/modules/platform-identity/routes/community-search.js +2 -1
- package/modules/platform-identity/routes/sso.js +2 -1
- package/modules/platform-identity/tests/platform-identity.mjs +6 -6
- package/modules/public-landing/public/community.html +3 -5
- package/modules/public-landing/public/index.html +1 -1
- package/modules/public-landing/public/projects.html +1 -1
- package/modules/specialities/migrations/specialities_004_crafts_artisan_artist.sql +30 -0
- package/modules/specialities/routes/specialities.js +2 -2
- package/modules/status-ui/public/status.js +1 -1
- package/modules/ui-design/kit/fixtures/community-leaderboard.json +10 -10
- package/modules/ui-design/kit/fixtures/community-search.json +2 -2
- package/modules/ui-design/kit/fixtures/scouting-recruiter.json +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +70 -0
- package/scripts/bongos/autobongos-loop.js +1 -1
- package/scripts/bongos/discipline-modes.json +7 -12
- package/scripts/bongos/fitness.js +1 -1
- package/scripts/bongos/gen-hall-sitemap.js +7 -7
- package/scripts/bongos/grade-smoke.js +2 -2
- package/scripts/bongos/init.js +2 -2
- package/scripts/bongos/newcomer-floor.config.json +1 -2
- package/scripts/bongos/newcomer-floor.js +4 -3
- package/scripts/bongos/newcomer-floor.templates.json +10 -12
- package/scripts/bongos/newcomer-floor.test.js +47 -38
- package/scripts/bongos/role-pack-guard.js +5 -4
- package/scripts/bongos/seed-tasks.example.json +3 -3
- package/scripts/bongos/setup.js +20 -107
- package/scripts/bongos/start.js +2 -2
- package/scripts/bongos/task.js +5 -4
- package/scripts/bongos/triage.js +1 -1
- package/scripts/bongos/worktree.js +16 -4
- package/scripts/setup-builder.js +6 -46
- package/src/bongos/auth-admission.js +8 -8
- package/src/bongos/craft-mode.js +2 -0
- package/src/bongos/db.js +39 -1
- package/src/bongos/github-repos.js +78 -0
- package/src/bongos/module-scope-map.js +22 -0
- package/src/bongos/role-stats.js +27 -11
- package/src/bongos/routes/github.js +100 -2
- package/src/bongos/routes/me.js +33 -0
- package/src/bongos/serve-internal.js +26 -9
- package/src/crafts.js +66 -0
- package/src/module-api.js +6 -1
- package/src/module-loader/manifest-schema.js +16 -0
- package/src/modules.js +2 -2
- package/src/role-responsibilities.js +6 -5
- package/tests/acclaim_feed_evidence_db.mjs +1 -1
- package/tests/activity_rollup_as_of.mjs +1 -1
- package/tests/api_alias_caller_ratchet.mjs +3 -3
- package/tests/application_lifecycle.mjs +1 -1
- package/tests/artist_review.mjs +1 -1
- package/tests/artist_review_goal.mjs +1 -1
- package/tests/blocker_hall_live_proof.mjs +1 -1
- package/tests/blocker_tasks_named_db.mjs +2 -2
- package/tests/canonical_profile_url.mjs +1 -1
- package/tests/cap_newcomer_tasks.mjs +13 -13
- package/tests/character_creation.mjs +294 -0
- package/tests/claim_gate_open_blocker.mjs +2 -2
- package/tests/claim_gate_rebase.mjs +6 -6
- package/tests/claude_materialize.mjs +1 -1
- package/tests/clawback_confirmed_backlog.mjs +3 -3
- package/tests/collab_page.mjs +8 -9
- package/tests/collab_self_settling.mjs +2 -2
- package/tests/community_leaderboard_route.mjs +13 -5
- package/tests/community_proof_db.mjs +3 -0
- package/tests/community_search_route.mjs +7 -6
- package/tests/conductor.mjs +1 -1
- package/tests/conductor_main_e2e.mjs +8 -8
- package/tests/copy_desk_flags_db.mjs +1 -1
- package/tests/copy_desk_page_approve.mjs +2 -2
- package/tests/copy_desk_page_claim.mjs +2 -2
- package/tests/copy_desk_page_next.mjs +1 -1
- package/tests/copy_desk_page_release.mjs +1 -1
- package/tests/copy_desk_page_submit.mjs +2 -2
- package/tests/core_258_box_session_claims_db.mjs +1 -1
- package/tests/craft_mode.mjs +48 -34
- package/tests/craft_mode_home.mjs +20 -20
- package/tests/craft_mode_looks.mjs +16 -15
- package/tests/craft_mode_nav.mjs +31 -29
- package/tests/craft_review_mode.mjs +46 -41
- package/tests/crafts_vocabulary.mjs +70 -0
- package/tests/cross_discipline_priority_direction.mjs +5 -5
- package/tests/fitness.mjs +7 -11
- package/tests/funded_project_pays_proof_db.mjs +1 -1
- package/tests/genesis_home.mjs +21 -1
- package/tests/github_chip.mjs +3 -3
- package/tests/github_repo_invite.mjs +379 -0
- package/tests/goal_criterion_confirm_ui.mjs +1 -1
- package/tests/goal_invite_consent.mjs +1 -1
- package/tests/goal_map_page.mjs +2 -2
- package/tests/goal_sort_staleness.mjs +1 -1
- package/tests/goal_spec_task.mjs +1 -1
- package/tests/goal_spec_task_db.mjs +3 -3
- package/tests/grade_engine.mjs +2 -2
- package/tests/grader_no_artifact.mjs +1 -1
- package/tests/grader_prompt_fencing.mjs +1 -1
- package/tests/grader_prompt_window_bound.mjs +1 -1
- package/tests/grader_reader_lens.mjs +2 -2
- package/tests/grader_severity_gate.mjs +1 -1
- package/tests/grader_unbacked_score.mjs +1 -1
- package/tests/hall_approval_queue.mjs +1 -1
- package/tests/hall_board_world.mjs +2 -2
- package/tests/hall_builders_page_pass.mjs +1 -1
- package/tests/hall_city.mjs +1 -1
- package/tests/hall_fullscreen.mjs +27 -3
- package/tests/hall_kit_charts.mjs +1 -1
- package/tests/hall_landing_boot.mjs +1 -1
- package/tests/hall_my_agents.mjs +16 -16
- package/tests/hall_nav.mjs +22 -15
- package/tests/hall_options_menu.mjs +247 -0
- package/tests/hall_oversight_world.mjs +1 -1
- package/tests/hall_palette.mjs +8 -9
- package/tests/hall_profile_world.mjs +3 -3
- package/tests/hall_record_world.mjs +2 -2
- package/tests/hall_settings_world.mjs +2 -1
- package/tests/hall_sitemap.mjs +6 -5
- package/tests/hall_start_screen.mjs +244 -0
- package/tests/hall_street.mjs +2 -2
- package/tests/hall_street_inside.mjs +17 -9
- package/tests/hall_studio_world.mjs +3 -3
- package/tests/hall_visor.mjs +224 -0
- package/tests/help_requests.mjs +47 -15
- package/tests/helpers.mjs +4 -4
- package/tests/home_city.mjs +6 -4
- package/tests/home_city_widget.mjs +33 -14
- package/tests/home_gallery_widget.mjs +4 -4
- package/tests/home_idea_box.mjs +6 -6
- package/tests/hub_community_page.mjs +3 -3
- package/tests/hub_craft_rollup.mjs +75 -36
- package/tests/hub_recent_ships.mjs +3 -2
- package/tests/idea_cascade.mjs +2 -2
- package/tests/idea_credit_streams_db.mjs +1 -1
- package/tests/idea_detail_page.mjs +1 -1
- package/tests/idea_ideate_full.mjs +5 -2
- package/tests/idea_spark_hall.mjs +1 -1
- package/tests/init.mjs +3 -3
- package/tests/instance_manifest.mjs +2 -2
- package/tests/kickoff_checklist.mjs +1 -1
- package/tests/leaderboard_roles.mjs +34 -25
- package/tests/lifecycle_claim_ladder_refs.mjs +55 -0
- package/tests/lightbulb.mjs +14 -10
- package/tests/main_discipline.mjs +8 -8
- package/tests/markdown_line_endings.mjs +1 -1
- package/tests/market_watch_pages.mjs +52 -74
- package/tests/me_streak_leaderboard_queries.mjs +3 -3
- package/tests/migration_allocation.mjs +1 -1
- package/tests/mingle.mjs +36 -21
- package/tests/module-scope-map.mjs +22 -2
- package/tests/module_api.mjs +1 -0
- package/tests/module_contributions.mjs +13 -13
- package/tests/module_manifest.mjs +29 -0
- package/tests/module_skills_hook.mjs +2 -2
- package/tests/modules.mjs +14 -7
- package/tests/nav_permission_atoms.mjs +2 -1
- package/tests/needs_rebase.mjs +1 -1
- package/tests/newcomer_restock.mjs +13 -13
- package/tests/page_notes_panel.mjs +22 -22
- package/tests/page_tweak_no_block.mjs +1 -1
- package/tests/paintbrush.mjs +7 -7
- package/tests/privacy_matrix.mjs +1 -0
- package/tests/profile_activity.mjs +20 -23
- package/tests/profile_earnings.mjs +1 -1
- package/tests/profile_nudge_prefs.mjs +4 -4
- package/tests/profile_role_headline.mjs +73 -46
- package/tests/profile_role_stats.mjs +55 -45
- package/tests/profile_rollup_consent.mjs +19 -6
- package/tests/profile_route.mjs +12 -12
- package/tests/profile_ui_cross_project.mjs +4 -4
- package/tests/project_invite_suggestions.mjs +2 -2
- package/tests/promote_goal_id.mjs +1 -1
- package/tests/publish_manifest.mjs +1 -1
- package/tests/rank_floor_wiring.mjs +1 -1
- package/tests/regrade_actual_minutes.mjs +1 -1
- package/tests/removal_proposal.mjs +2 -2
- package/tests/reward_gate.mjs +4 -4
- package/tests/reward_mode_cost_plus_only.mjs +1 -1
- package/tests/role_responsibilities.mjs +18 -12
- package/tests/role_stats_db.mjs +17 -16
- package/tests/scouting_rollup_fanout.mjs +5 -5
- package/tests/seed_tasks.mjs +5 -2
- package/tests/session_earnings_mirror_db.mjs +1 -1
- package/tests/session_reward_on_land_db.mjs +1 -1
- package/tests/session_reward_reconcile_db.mjs +2 -2
- package/tests/sessions_kit_pager.mjs +1 -1
- package/tests/settings_art_key_absent.mjs +2 -2
- package/tests/settings_main_role.mjs +21 -20
- package/tests/setup_flow.mjs +3 -3
- package/tests/setup_smoke.mjs +20 -0
- package/tests/ship_card.mjs +6 -6
- package/tests/specialities.mjs +16 -4
- package/tests/speciality_db_shape.mjs +6 -6
- package/tests/speciality_injection.mjs +17 -17
- package/tests/speciality_offer_ui.mjs +5 -5
- package/tests/speciality_offered.mjs +6 -5
- package/tests/speciality_session_skills.mjs +7 -7
- package/tests/speciality_skills.mjs +11 -11
- package/tests/speciality_walkthrough_ui.mjs +2 -2
- package/tests/sso_checkin_identity_spoof.mjs +2 -1
- package/tests/task_classifier_vocab.mjs +10 -0
- package/tests/task_cli.mjs +11 -3
- package/tests/task_criteria_unlink_db.mjs +2 -2
- package/tests/task_discipline_required.mjs +38 -16
- package/tests/task_goal_required.mjs +4 -4
- package/tests/task_needs_db.mjs +1 -1
- package/tests/tweak_replaces_artist_review.mjs +1 -1
- package/tests/update_pill.mjs +153 -2
- package/tests/upkeep_home.mjs +1 -1
- package/tests/v3_c1_options_proof.mjs +145 -0
- package/tests/visual_review.mjs +3 -3
- package/tests/watch_applications_queue.mjs +8 -5
- package/tests/watch_sealed_floor.mjs +3 -1
- package/tests/welcome_boot.mjs +12 -9
- package/tests/welcome_boot_browser.mjs +13 -13
- package/tests/worktree_helper.mjs +16 -1
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
<!-- The faces (Manrope, JetBrains Mono) come from the branding pack's font
|
|
12
12
|
links, injected into this head by the server like every hall page's
|
|
13
13
|
(tests/hall_tokens.mjs: no hall page hardcodes a web-font stylesheet). -->
|
|
14
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
15
|
-
<link rel="stylesheet" href="/builders/
|
|
14
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
15
|
+
<link rel="stylesheet" href="/builders/visor.css?v=2026-11-10-visor">
|
|
16
|
+
<link rel="stylesheet" href="/builders/thinking.css?v=2026-11-10-visor">
|
|
16
17
|
</head>
|
|
17
18
|
<!-- THE PROJECT SKY (task 1004232 / sky part 4 of 5, goal 1000095; ADR 0331,
|
|
18
19
|
ADR 0227 §11). The SAME page as /thinking — docs/design/mocks/sky/
|
|
@@ -138,11 +139,13 @@
|
|
|
138
139
|
</div>
|
|
139
140
|
|
|
140
141
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
141
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
142
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
142
143
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
143
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
144
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
144
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
145
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
145
146
|
<script src="/builders/hall-dialog.js"></script>
|
|
147
|
+
<!-- task 1005148: the visor (glass over the scene, game mode only; ADR 0399), after the shell and hall-dialog.js -->
|
|
148
|
+
<script src="/builders/visor.js?v=2026-11-10-visor"></script>
|
|
146
149
|
<script src="/builders/palette.js" defer></script>
|
|
147
150
|
|
|
148
151
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|
|
@@ -151,7 +154,7 @@
|
|
|
151
154
|
<script src="/builders/sky-data.js?v=2026-09-30-uat1"></script>
|
|
152
155
|
<script src="/builders/sky-layout.js?v=2026-09-27-split"></script>
|
|
153
156
|
<script src="/builders/sky-draw.js?v=2026-09-27-split"></script>
|
|
154
|
-
<script src="/builders/sky-interaction.js?v=2026-
|
|
157
|
+
<script src="/builders/sky-interaction.js?v=2026-11-10-visor"></script>
|
|
155
158
|
<script src="/builders/sky-panel.js?v=2026-09-30-uat1"></script>
|
|
156
159
|
<script src="/builders/sky-composer.js?v=2026-09-27-split"></script>
|
|
157
160
|
<script src="/builders/sky-tour.js?v=2026-09-27-split"></script>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<!-- task 1003470: the family sheet the list's figure band and group heads
|
|
13
13
|
come from (.ov-figs, .ov-group__head), linked before the page's own. -->
|
|
14
14
|
<link rel="stylesheet" href="/builders/oversight.css">
|
|
@@ -251,10 +251,10 @@
|
|
|
251
251
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
252
252
|
|
|
253
253
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
254
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
254
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
255
255
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
256
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
257
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
256
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
257
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
258
258
|
<script src="/builders/hall-dialog.js"></script>
|
|
259
259
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
260
260
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
<!-- task 1003458: the hall's ONE claim/release action + refusal copy (window.OTBClaimAction).
|
|
268
268
|
Before goals-render.js, which destructures errCode/errDetails/friendlyClaimError from it. -->
|
|
269
269
|
<script src="/builders/claim-action.js?v=2026-09-26-claimaction1"></script>
|
|
270
|
-
<script src="/builders/task-detail.js?v=2026-
|
|
270
|
+
<script src="/builders/task-detail.js?v=2026-11-10-options"></script>
|
|
271
271
|
<script src="/builders/brand-apply.js?v=2026-06-27-r75"></script>
|
|
272
272
|
<script src="/builders/goals-lib.js?v=2026-08-21-goalslib1"></script>
|
|
273
273
|
<!-- task 1003480: the per-goal dependency forest's pure model + layout —
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<link rel="stylesheet" href="/builders/oversight.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/government.css">
|
|
14
14
|
</head>
|
|
@@ -155,10 +155,10 @@
|
|
|
155
155
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
156
156
|
|
|
157
157
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
158
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
158
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
159
159
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
160
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
161
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
160
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
161
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
162
162
|
<script src="/builders/hall-dialog.js"></script>
|
|
163
163
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
164
164
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -206,6 +206,8 @@
|
|
|
206
206
|
// task 1005076: incomplete setup holds the hall behind setup-gate.js.
|
|
207
207
|
setup: (onboarding && onboarding.setup) || null,
|
|
208
208
|
builder,
|
|
209
|
+
// task 1005147: the character this builder holds (null: character creation shows).
|
|
210
|
+
character: ctx.lastMeState ? ctx.lastMeState.character : undefined,
|
|
209
211
|
});
|
|
210
212
|
}
|
|
211
213
|
// The project's door, as the platform pushed it into this instance's pack
|
|
@@ -611,7 +613,7 @@
|
|
|
611
613
|
}
|
|
612
614
|
return { place: idx + 1, total: ranked.length, role };
|
|
613
615
|
}
|
|
614
|
-
const ROLE_AS = {
|
|
616
|
+
const ROLE_AS = { artisan: 'an artisan', artist: 'an artist' };
|
|
615
617
|
// "#2 as an artist" — only when it says something the overall place does not.
|
|
616
618
|
function rolePlaceText(p) {
|
|
617
619
|
if (!p || !p.role || !ROLE_AS[p.role.craft] || p.role.place === p.place) return '';
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
const h = hash(x.id), recent = i - x.week <= 1;
|
|
252
252
|
band.push(circle(80 + (h % 1000) / 1000 * 840, 14 + (Math.floor(h / 1000) % 1000) / 1000 * (SKY_H - 34), recent ? 1.7 : 1.1, Object.assign({ fill: I.star, opacity: recent ? 0.75 : 0.28 }, x.week === i ? { class: 'hc-twinkle' } : {})));
|
|
253
253
|
});
|
|
254
|
-
out.push(node('a', { href: '/', class: 'hc-door hc-sky', '
|
|
254
|
+
out.push(node('a', { href: '/thinking', class: 'hc-door hc-sky', 'aria-label': `The ideas: ${fresh} new this week. Open the sky.`, 'data-tip': 'Ideas', 'data-tip-body': `${fresh} new this week. Click to look up at the sky.` }, band));
|
|
255
255
|
|
|
256
256
|
// every building on the ground, back to front; the civic core draws as one district
|
|
257
257
|
const items = m.areas.map((a) => ({ k: 'area', a, depth: a.x + a.y + FOOT }));
|
|
@@ -363,7 +363,7 @@
|
|
|
363
363
|
const p = P(tr[0], tr[1], 0);
|
|
364
364
|
g.push(line(p, [p[0], p[1] - 9], I.dark, 1.6), circle(p[0], p[1] - 16, 8.5 + (n % 3) * 1.5, { fill: I.tree[n % 3] }));
|
|
365
365
|
});
|
|
366
|
-
return node('a', { href: '/', class: 'hc-door hc-museum' + quiet('museum'), 'data-craft-door': '
|
|
366
|
+
return node('a', { href: '/', class: 'hc-door hc-museum' + quiet('museum'), 'data-craft-door': 'artist', 'aria-label': 'The art museum, where the artists’ works hang. Go in.', 'data-tip': 'The art museum', 'data-tip-body': 'The art district: where the artists’ works hang, beside the park. Click to go in.' }, g);
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
|
|
@@ -489,7 +489,7 @@
|
|
|
489
489
|
const DOORS = {
|
|
490
490
|
area: { href: '/goals', tip: 'Building', body: 'Every goal building in the city. Click to open the goals.', aria: 'The goal buildings. Open the goals.' },
|
|
491
491
|
civic: { href: (Gov && Gov.STREET_HREF) || '/builders/street', tip: 'Government', body: 'The Cloud Bongos core. Click to walk the street.', aria: 'The government district. Walk the street.' },
|
|
492
|
-
museum: { href: '/', door: '
|
|
492
|
+
museum: { href: '/', door: 'artist', tip: 'Art', body: 'The art museum. Click to go into the gallery.', aria: 'The art museum. Go into the gallery.' },
|
|
493
493
|
};
|
|
494
494
|
const first = {};
|
|
495
495
|
out.push(node('g', { class: 'hc-hits' }, hits.map(({ s, d }) => {
|
|
@@ -93,10 +93,14 @@ html[data-theme="dark"] .home-city.hc-is-sky { background: linear-gradient(color
|
|
|
93
93
|
.hc-slab { animation: hc-lift 20s ease-in-out infinite; }
|
|
94
94
|
.hc-orb, .hc-twinkle { animation: hc-glow 24s ease-in-out infinite; }
|
|
95
95
|
|
|
96
|
+
/* task 1005148: with the visor up (game mode), Home's greeting row keeps clear of its Actions pill. */
|
|
97
|
+
html.visor-on .hall-standing { transform: translateX(-140px); }
|
|
98
|
+
|
|
96
99
|
/* a phone: the ladder runs full width under the city */
|
|
97
100
|
@media (max-width: 700px) {
|
|
98
101
|
.hc-stage { flex-direction: column; align-items: stretch; }
|
|
99
102
|
.hc-svg { width: 100%; }
|
|
100
103
|
.hc-ladder { width: auto; margin: 12px 18px 4px; }
|
|
101
104
|
.hc-time { padding: 6px 16px 16px; }
|
|
105
|
+
html.visor-on .hall-standing { transform: none; } /* task 1005148: the visor's pills are in its bottom row here */
|
|
102
106
|
}
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
const SPEED = { rw: -1 / 34, play: 1 / 96, ff: 1 / 26 };
|
|
40
40
|
const STILL = () => !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);
|
|
41
41
|
const CRAFTS = [
|
|
42
|
-
['art', '
|
|
43
|
-
['build', '
|
|
42
|
+
['art', 'artist', 'Art', 'pages designed'],
|
|
43
|
+
['build', 'artisan', 'Build', 'shipped'],
|
|
44
44
|
['idea', 'ideating', 'Ideas', 'ideas'],
|
|
45
|
-
['gov', '
|
|
45
|
+
['gov', 'patron', 'Govern', 'votes and decisions'],
|
|
46
46
|
];
|
|
47
47
|
// the ideator's line: a lightbulb, a star, and an arrow into the work
|
|
48
48
|
const IDEATOR = [
|
|
@@ -74,7 +74,10 @@
|
|
|
74
74
|
return d && !isNaN(d) ? 'week of ' + d.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', timeZone: 'UTC' }) : 'that week';
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
//
|
|
77
|
+
// The ideator's sky Home went with the Ideating mode when the ideator folded into
|
|
78
|
+
// the artist (task 1005141): every craft now lands in the builder's city, and the
|
|
79
|
+
// sky is a door away (the city's sky door, Your thinking). Kept as one switch so the
|
|
80
|
+
// sky branch can come back as its own view without re-plumbing the draw.
|
|
78
81
|
function craft() {
|
|
79
82
|
const CM = window.OTBCraftMode;
|
|
80
83
|
const m = CM && typeof CM.current === 'function' ? CM.current() : document.documentElement.dataset.craft;
|
|
@@ -292,11 +295,13 @@
|
|
|
292
295
|
|
|
293
296
|
// ---- the artist's Home (task 1005060): in Artistry the same section is the gallery,
|
|
294
297
|
// home-gallery.js, the bench in the museum the city's art district opens onto ----
|
|
295
|
-
//
|
|
296
|
-
//
|
|
298
|
+
// The idea box (home-idea-box.js) opens the artist's Home above the gallery: ideation
|
|
299
|
+
// folded into the artist (task 1005141), so the box task 1005078 built for Ideating moved
|
|
300
|
+
// with it. It shows even when the sky could not be read: filing an idea needs no picture.
|
|
297
301
|
function craftHome() {
|
|
298
|
-
const
|
|
299
|
-
const
|
|
302
|
+
const isArtist = document.documentElement.dataset.craft === 'artist';
|
|
303
|
+
const art = !!gallery && isArtist;
|
|
304
|
+
const idea = !!ideaBox && isArtist;
|
|
300
305
|
host.classList.toggle('hc--gallery', art);
|
|
301
306
|
if (gallery) gallery.show(art);
|
|
302
307
|
if (ideaBox) ideaBox.show(idea);
|
|
@@ -306,7 +311,7 @@
|
|
|
306
311
|
// ---- the governor's Home is the street; tests swap the hop for a recorder ----
|
|
307
312
|
function streetHop() {
|
|
308
313
|
const href = window.GovCity && window.GovCity.STREET_HREF;
|
|
309
|
-
if (document.documentElement.dataset.craft !== '
|
|
314
|
+
if (document.documentElement.dataset.craft !== 'patron' || !href) return false;
|
|
310
315
|
(window.OTBHomeStreetHop || ((h) => window.location.assign(h)))(href);
|
|
311
316
|
return true;
|
|
312
317
|
}
|
|
@@ -348,6 +353,9 @@
|
|
|
348
353
|
new MutationObserver(() => { if (model) drawScene(); }).observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] });
|
|
349
354
|
document.addEventListener('otb:craft', () => { if (model) { drawScene(); drawLadder(); } });
|
|
350
355
|
window.addEventListener('resize', () => { if (model) drawLadder(); });
|
|
356
|
+
// task 1005148: Home's city as the visor's scene; R13 adds its camera's actions here.
|
|
357
|
+
window.__visorScene = { name: 'home', place: 'Home' };
|
|
358
|
+
if (window.OTBVisor) window.OTBVisor.scene(window.__visorScene);
|
|
351
359
|
load();
|
|
352
360
|
}
|
|
353
361
|
|
|
@@ -272,7 +272,14 @@
|
|
|
272
272
|
if (e.key === 'ArrowLeft') { go(at - 1); e.preventDefault(); }
|
|
273
273
|
else if (e.key === 'ArrowRight') { go(at + 1); e.preventDefault(); }
|
|
274
274
|
else if ((e.key === 'f' || e.key === 'F') && !e.metaKey && !e.ctrlKey && !e.altKey) { setFs(!isFs()); e.preventDefault(); }
|
|
275
|
-
else if (e.key === 'Escape') {
|
|
275
|
+
else if (e.key === 'Escape') {
|
|
276
|
+
// Spent only when it closed something (ADR 0399 §2.4 row 5, task 1005144); an Escape that
|
|
277
|
+
// closed nothing falls through to the options menu in game mode.
|
|
278
|
+
var reading = track.querySelectorAll('.hg-hang.is-reading');
|
|
279
|
+
if (isFs() || reading.length) e.preventDefault();
|
|
280
|
+
if (isFs()) setFs(false);
|
|
281
|
+
reading.forEach(function (h) { read(h, false); });
|
|
282
|
+
}
|
|
276
283
|
});
|
|
277
284
|
track.addEventListener('click', function (e) {
|
|
278
285
|
var h = e.target.closest('.hg-heart');
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
.hib-said--err { color: var(--danger); }
|
|
30
30
|
.hib-said a { color: var(--ink); }
|
|
31
31
|
|
|
32
|
-
/* The setup guide is about building on your own machine;
|
|
33
|
-
html[data-craft="
|
|
32
|
+
/* The setup guide is about building on your own machine; an artist's Home opens on the box */
|
|
33
|
+
html[data-craft="artist"] #welcome-scroll { display: none; }
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// (goal 1000095, the owner's "work-first hall", 2026-11-04; record
|
|
3
3
|
// modules/hall-ui/records/home-city.md § "The idea box").
|
|
4
4
|
//
|
|
5
|
-
// In Ideating, the first thing
|
|
5
|
+
// In the artist's Home (Ideating folded into it, task 1005141), the first thing is a place to type an idea and file it; the sky
|
|
6
6
|
// and the ladder of ideators stay under it, secondary. It is ONE box and a button
|
|
7
7
|
// (owner, 2026-11-05: "only one box"): Enter files, Shift+Enter starts a new line, and
|
|
8
8
|
// the box grows with what is typed. The first line is the idea's title, any lines after
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// Your thinking, where every thought the builder filed is listed.
|
|
13
13
|
//
|
|
14
14
|
// It is not a hall widget of its own (Home's stats zone holds one): home-city.js
|
|
15
|
-
// attaches it at the top of its section and shows it when the craft is
|
|
15
|
+
// attaches it at the top of its section and shows it when the craft is Artist, the
|
|
16
16
|
// way it shows the gallery in Artistry. It reads nothing; it writes one thing.
|
|
17
17
|
(function () {
|
|
18
18
|
'use strict';
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
});
|
|
98
98
|
|
|
99
99
|
return {
|
|
100
|
-
// shown in
|
|
100
|
+
// shown in the artist's Home
|
|
101
101
|
show: function (on) { root.hidden = !on; },
|
|
102
102
|
};
|
|
103
103
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<!-- The record archetype, shared with task.html (task 1003305). idea.css below
|
|
13
13
|
carries only what an idea record has and a task record does not. -->
|
|
14
14
|
<link rel="stylesheet" href="/builders/record.css">
|
|
@@ -51,15 +51,15 @@
|
|
|
51
51
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
52
52
|
|
|
53
53
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
54
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
54
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
55
55
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
56
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
57
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
56
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
57
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
58
58
|
<script src="/builders/hall-dialog.js"></script>
|
|
59
59
|
<script src="/builders/palette.js" defer></script>
|
|
60
60
|
<!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
|
|
61
61
|
written inside an idea's own prose keeps resolving from this page. -->
|
|
62
|
-
<script src="/builders/task-detail.js?v=2026-
|
|
62
|
+
<script src="/builders/task-detail.js?v=2026-11-10-options" defer></script>
|
|
63
63
|
<script src="/builders/brand-apply.js?v=2026-06-19-r56" defer></script>
|
|
64
64
|
<script src="/builders/md-reader.js" defer></script>
|
|
65
65
|
<script src="/builders/idea.js?v=2026-08-22-r153" defer></script>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
13
13
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
14
14
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
15
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
15
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
16
16
|
<link rel="stylesheet" href="/builders/ideas.css">
|
|
17
17
|
</head>
|
|
18
18
|
<body data-page="ideas" data-page-title="Ideas">
|
|
@@ -226,17 +226,17 @@
|
|
|
226
226
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
227
227
|
|
|
228
228
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
229
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
229
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
230
230
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
231
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
232
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
231
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
232
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
233
233
|
<script src="/builders/hall-dialog.js"></script>
|
|
234
234
|
<script src="/builders/palette.js" defer></script>
|
|
235
235
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
236
236
|
<script src="/builders/vote-control.js"></script>
|
|
237
237
|
<!-- task 1003069 (R08) — the quick-filing form's routed result links a task
|
|
238
238
|
through window.OTBTaskDetail.href(); guarded if this ever loads without it. -->
|
|
239
|
-
<script src="/builders/task-detail.js?v=2026-
|
|
239
|
+
<script src="/builders/task-detail.js?v=2026-11-10-options" defer></script>
|
|
240
240
|
<script src="/builders/ideas.js?v=2026-09-24-r04fold"></script>
|
|
241
241
|
</body>
|
|
242
242
|
</html>
|
|
@@ -18,10 +18,12 @@
|
|
|
18
18
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
19
19
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
20
20
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
21
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
21
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
22
|
+
<link rel="stylesheet" href="/builders/visor.css?v=2026-11-10-visor">
|
|
22
23
|
<link rel="stylesheet" href="/builders/welcome-boot.css?v=2026-11-07-brand-mark">
|
|
24
|
+
<link rel="stylesheet" href="/builders/shell-game.css?v=2026-11-10-start-screen">
|
|
23
25
|
<link rel="stylesheet" href="/builders/hall-ask.css">
|
|
24
|
-
<link rel="stylesheet" href="/builders/home-city.css">
|
|
26
|
+
<link rel="stylesheet" href="/builders/home-city.css?v=2026-11-10-visor">
|
|
25
27
|
<link rel="stylesheet" href="/builders/home-gallery.css">
|
|
26
28
|
<link rel="stylesheet" href="/builders/home-idea-box.css">
|
|
27
29
|
</head>
|
|
@@ -98,7 +100,7 @@
|
|
|
98
100
|
<!-- shared frontend toolkit (window.OTB) — loaded FIRST so every consuming
|
|
99
101
|
IIFE below can pull escapeHtml/$/fmtNum/... from one place. -->
|
|
100
102
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
101
|
-
<script src="/builders/task-detail.js?v=2026-
|
|
103
|
+
<script src="/builders/task-detail.js?v=2026-11-10-options" defer></script>
|
|
102
104
|
<!-- R56 (task 1195): apply the instance currency label from window.__BRANDING__
|
|
103
105
|
to [data-currency-label]/[data-currency-tmpl] markup + expose OTBBranding.
|
|
104
106
|
Loaded BEFORE builders.js so the global is ready when the hall renders. -->
|
|
@@ -108,11 +110,13 @@
|
|
|
108
110
|
<!-- task 1004785: the first-visit-of-the-day welcome (the tower). Before shell.js, which asks it
|
|
109
111
|
before the craft picker so the two never stack. Home only. -->
|
|
110
112
|
<script src="/builders/welcome-boot.js?v=2026-11-07-brand-mark" defer></script>
|
|
111
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
113
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options" defer></script>
|
|
112
114
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers" defer></script>
|
|
113
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
114
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
115
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor" defer></script>
|
|
116
|
+
<script src="/builders/shell.js?v=2026-11-10-character" defer></script>
|
|
115
117
|
<script src="/builders/hall-dialog.js" defer></script>
|
|
118
|
+
<!-- task 1005148: the visor (glass over the scene, game mode only; ADR 0399), after the shell and hall-dialog.js -->
|
|
119
|
+
<script src="/builders/visor.js?v=2026-11-10-visor" defer></script>
|
|
116
120
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
117
121
|
<script src="/builders/palette.js" defer></script>
|
|
118
122
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -135,7 +139,7 @@
|
|
|
135
139
|
<script src="/builders/home-city-draw.js" defer></script>
|
|
136
140
|
<script src="/builders/home-gallery.js" defer></script>
|
|
137
141
|
<script src="/builders/home-idea-box.js" defer></script>
|
|
138
|
-
<script src="/builders/home-city.js" defer></script>
|
|
142
|
+
<script src="/builders/home-city.js?v=2026-11-10-visor" defer></script>
|
|
139
143
|
<!-- task 1003455: the shared blocker-row renderer (window.OTBBlockersLib), read by
|
|
140
144
|
both goal-inbox.js's attention-inbox slice below and the /blockers page.
|
|
141
145
|
Loaded BEFORE goal-inbox.js, which calls it while rendering. -->
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<link rel="stylesheet" href="/builders/market-watch.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body data-page="market-watch-item" data-page-title="Market Watch">
|
|
@@ -72,10 +72,10 @@
|
|
|
72
72
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
73
73
|
|
|
74
74
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
75
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
75
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
76
76
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
77
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
78
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
77
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
78
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
79
79
|
<script src="/builders/hall-dialog.js"></script>
|
|
80
80
|
<script src="/builders/palette.js" defer></script>
|
|
81
81
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<link rel="stylesheet" href="/builders/hall-ask.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/market-watch-rules.css">
|
|
14
14
|
</head>
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
42
42
|
|
|
43
43
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
44
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
44
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
45
45
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
46
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
47
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
46
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
47
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
48
48
|
<script src="/builders/hall-dialog.js"></script>
|
|
49
49
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
50
50
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<link rel="stylesheet" href="/builders/market-watch.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/market-watch-settings.css">
|
|
14
14
|
</head>
|
|
@@ -26,11 +26,8 @@
|
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
28
|
<main id="hall-main">
|
|
29
|
-
<!-- task
|
|
30
|
-
|
|
31
|
-
settings routes are the wall, ADR 0016). #settings is where the old
|
|
32
|
-
/market-watch-settings URL lands. -->
|
|
33
|
-
<div id="mw-tabs" hidden></div>
|
|
29
|
+
<!-- task 1005144: the owner's settings panel below shows only inside the options
|
|
30
|
+
menu's frame (?embed=1); a plain visit is the watch alone, with no tab strip. -->
|
|
34
31
|
|
|
35
32
|
<div id="mw-panel-watch">
|
|
36
33
|
<p class="hall-loading hall-loading--page" id="mw-loading" role="status">Loading the watch…</p>
|
|
@@ -186,10 +183,10 @@
|
|
|
186
183
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
187
184
|
|
|
188
185
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
189
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
186
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
190
187
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
191
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
192
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
188
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
189
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
193
190
|
<script src="/builders/hall-dialog.js"></script>
|
|
194
191
|
<script src="/builders/palette.js" defer></script>
|
|
195
192
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
// GET /market-watch/home, which every signed-in member may make. Where the module is off
|
|
4
4
|
// its routes do not exist, so the page shows its quiet off state rather than an error.
|
|
5
5
|
//
|
|
6
|
-
// task
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
6
|
+
// task 1005144 (ADR 0401): the owner's settings (task 1004938's page, then task 1005045's
|
|
7
|
+
// Settings tab here) are an entry in the ONE options menu. The menu opens this page in its
|
|
8
|
+
// frame (?embed=1, shell-game.js) and the page then shows the settings panel ALONE; a plain
|
|
9
|
+
// visit shows the watch and no tab strip, and an old #settings link goes on to the menu.
|
|
10
|
+
// The four settings routes stay the wall (ADR 0016): a reader who is not the owner gets the
|
|
11
|
+
// panel's own "only the owner" line from their 403.
|
|
10
12
|
(() => {
|
|
11
13
|
'use strict';
|
|
12
14
|
|
|
@@ -107,54 +109,29 @@
|
|
|
107
109
|
});
|
|
108
110
|
}
|
|
109
111
|
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
// than paying a second round trip; it asks itself only where the shell did not.
|
|
114
|
-
async function viewerRank() {
|
|
115
|
-
try {
|
|
116
|
-
const shared = window.__hallReads && window.__hallReads['/me'];
|
|
117
|
-
let me;
|
|
118
|
-
if (shared) {
|
|
119
|
-
me = await shared; // the data, false on a 403, or null when unreadable
|
|
120
|
-
} else {
|
|
121
|
-
const res = await fetch('/api/bongos/me', { credentials: 'same-origin' });
|
|
122
|
-
me = res.ok ? await res.json() : null;
|
|
123
|
-
}
|
|
124
|
-
const b = (me && (me.builder || me)) || {};
|
|
125
|
-
return b.rank ? String(b.rank).toLowerCase() : null;
|
|
126
|
-
} catch (_) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
112
|
+
// Inside the options menu's frame: the settings panel alone, and no watch read.
|
|
113
|
+
function embedded() {
|
|
114
|
+
return !!(window.OTBShellGame && window.OTBShellGame.embedded && window.OTBShellGame.embedded());
|
|
129
115
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
function mountOwnerTabs() {
|
|
134
|
-
$('mw-tabs').hidden = false;
|
|
135
|
-
window.OTBKit.makeTabs({
|
|
136
|
-
mount: $('mw-tabs'),
|
|
137
|
-
hash: true,
|
|
138
|
-
initial: 'watch',
|
|
139
|
-
tabs: [
|
|
140
|
-
{ id: 'watch', label: 'Watch', panel: 'mw-panel-watch' },
|
|
141
|
-
{ id: 'settings', label: 'Settings', panel: 'mw-panel-settings' },
|
|
142
|
-
],
|
|
143
|
-
});
|
|
116
|
+
function showSettingsOnly() {
|
|
117
|
+
$('mw-panel-watch').hidden = true;
|
|
118
|
+
$('mw-panel-settings').hidden = false;
|
|
144
119
|
window.OTBMarketWatchSettings.load();
|
|
145
120
|
}
|
|
121
|
+
// An old link to the owner's tab (/market-watch#settings) opens the menu entry instead.
|
|
122
|
+
function settingsLinkMoved() {
|
|
123
|
+
if (String(window.location.hash || '') !== '#settings') return false;
|
|
124
|
+
const game = window.OTBShellGame;
|
|
125
|
+
const menu = game && game.menuPath ? game.menuPath() : '/settings';
|
|
126
|
+
window.location.replace(menu + '?open=market-watch');
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
146
129
|
|
|
147
130
|
async function load() {
|
|
131
|
+
if (embedded()) return moduleOff() ? show('mw-off') : showSettingsOnly();
|
|
132
|
+
if (settingsLinkMoved()) return;
|
|
148
133
|
if (moduleOff()) return show('mw-off');
|
|
149
|
-
const rank = viewerRank();
|
|
150
134
|
await loadDesk();
|
|
151
|
-
// Where the module's routes are not mounted there is nothing to set, so no tab.
|
|
152
|
-
// A watch that failed to READ (mw-fail) still gets the tab on purpose: the settings
|
|
153
|
-
// are their own read, and a broken watch must not lock the owner out of its switch,
|
|
154
|
-
// cap and key — the old settings page never depended on the desk either. The failure
|
|
155
|
-
// line stays on the Watch tab, where it belongs.
|
|
156
|
-
if (!$('mw-off').hidden) return;
|
|
157
|
-
if ((await rank) === 'archon') mountOwnerTabs();
|
|
158
135
|
}
|
|
159
136
|
|
|
160
137
|
async function loadDesk() {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-10-options">
|
|
12
12
|
<!-- task 1004366: a store version's how-to reads as a document, so it borrows the
|
|
13
13
|
reading room's article card (room.css is scoped to its own primer- classes). -->
|
|
14
14
|
<link rel="stylesheet" href="/builders/room.css">
|
|
@@ -126,10 +126,10 @@
|
|
|
126
126
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
127
127
|
|
|
128
128
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
129
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
129
|
+
<script src="/builders/shell-game.js?v=2026-11-10-options"></script>
|
|
130
130
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
131
|
-
<script src="/builders/craft-mode.js?v=2026-11-
|
|
132
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
131
|
+
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
132
|
+
<script src="/builders/shell.js?v=2026-11-10-character"></script>
|
|
133
133
|
<script src="/builders/hall-dialog.js"></script>
|
|
134
134
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
135
135
|
<script src="/builders/palette.js" defer></script>
|