@bongos/core 1.18.0 → 1.18.18
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 +1740 -640
- package/.claude/skills/builder-box/SKILL.md +6 -0
- package/.claude/skills/builder-sequence/SKILL.md +97 -0
- package/.claude/skills/builder-ship/SKILL.md +8 -2
- package/.claude/skills/builder-start/SKILL.md +11 -0
- package/.claude/skills/builder-sync/SKILL.md +41 -0
- package/.claude/skills/fix-task/SKILL.md +64 -0
- package/.claude/skills/goal-create/SKILL.md +158 -0
- package/.claude/skills/goal-review/SKILL.md +3 -1
- package/.claude/skills/idea-triage/SKILL.md +14 -8
- package/.claude/skills/merge-mode/SKILL.md +2 -2
- package/.claude/skills/new-project/SKILL.md +1 -0
- package/.claude/skills/planning-session/SKILL.md +45 -18
- package/.env.local.example +4 -3
- package/README.md +5 -3
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +2 -2
- package/clients/bongos-client/bongos-client.global.js +82 -18
- package/clients/bongos-client/index.cjs +82 -18
- package/clients/bongos-client/index.d.ts +131 -29
- package/clients/bongos-client/index.mjs +82 -18
- package/config/branding.neutral.json +11 -2
- package/config/governance.neutral.json +21 -0
- package/docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md +24 -0
- package/docs/adr/0090-metic-task-authoring.md +1 -1
- package/docs/adr/0142-project-context-is-prose-only.md +41 -0
- package/docs/adr/0143-onboarding-repo-picker-oauth-scope.md +35 -0
- package/docs/adr/0144-devbox-rehome-onto-cloudbongos-plane.md +41 -0
- package/docs/adr/0144-federated-single-logout-backchannel.md +42 -0
- package/docs/adr/0145-devbox-app-branding-driven-module.md +44 -0
- package/docs/adr/0145-free-hosted-project-tier-isolation-and-domain-separation.md +62 -0
- package/docs/adr/0146-configurable-reward-mode-cost-plus-only.md +53 -0
- package/docs/adr/0147-standalone-live-docs-regen.md +39 -0
- package/docs/adr/0148-task-scoped-box-source-access.md +48 -0
- package/docs/adr/0149-bongos-dev-local-launcher.md +57 -0
- package/docs/adr/0150-box-first-boot-bringup-vendored-instances.md +68 -0
- package/docs/adr/0151-governance-permissions-as-atom-ranks-as-roles.md +229 -0
- package/docs/adr/0152-landing-gate-served-by-the-core-app.md +92 -0
- package/docs/adr/0152-metic-task-abandonment.md +67 -0
- package/docs/adr/0153-sequential-chain-runner.md +51 -0
- package/docs/adr/0154-goal-owner-criterion-authoring.md +86 -0
- package/docs/adr/README.md +15 -2
- package/docs/api/openapi.json +2648 -483
- package/docs/api-reference.md +73 -13
- package/docs/architecture.md +4 -2
- package/docs/branding-contract.md +3 -1
- package/docs/canonical-permissions.md +21 -8
- package/docs/file-map.md +15 -7
- package/docs/onboarding/diagrams/01-task-lifecycle.mmd +2 -2
- package/docs/onboarding/diagrams/02-rank-ladder.mmd +3 -1
- package/docs/onboarding/diagrams/05-versioning.mmd +1 -3
- package/docs/onboarding/diagrams/assertions.json +4 -7
- package/docs/onboarding/drachmae-and-karma.md +3 -3
- package/docs/onboarding/primer.md +17 -16
- package/docs/onboarding/slash-commands.md +124 -0
- package/docs/recipes/builder-box-lifecycle.md +23 -0
- package/docs/recipes/devbox-app-release.md +14 -4
- package/docs/recipes/instance-first-run.md +16 -0
- package/docs/recipes/local-dev.md +81 -0
- package/docs/recipes/ops-gotchas.md +19 -1
- package/docs/recipes/overnight-builder.md +1 -1
- package/docs/recipes/packaging-the-core.md +13 -0
- package/docs/recipes/parallel-goal-waves.md +174 -0
- package/docs/recipes/ship-and-regrade.md +2 -2
- package/docs/recipes/standalone-live-docs.md +48 -0
- package/docs/recipes/upgrading-the-core.md +5 -2
- package/docs/recipes/work-on-a-task-from-your-dev-box.md +108 -0
- package/migrations/003_pms.sql +6 -7
- package/migrations/006_pms_v2.sql +3 -31
- package/migrations/039_newcomer_friendly_column.sql +5 -0
- package/migrations/102_remove_box_first_provision_approval.sql +4 -0
- package/migrations/core_192_github_oauth_tokens.sql +33 -0
- package/migrations/core_193_task_needs_rebase.sql +28 -0
- package/migrations/core_194_confirmed_backlog_clawback.sql +63 -0
- package/migrations/core_195_idea_triage_provenance.sql +57 -0
- package/migrations/core_196_session_reward_topup.sql +69 -0
- package/modules/autonomy/pollers/routine-timers.js +9 -8
- package/modules/builder-settings/wandering-prefs.js +61 -18
- package/modules/dev-box/app/README.md +73 -0
- package/modules/dev-box/app/assets/tray/mac-alertTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-alertTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-busyTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-busyTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-offTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-offTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-onTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-onTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/win-alert.png +0 -0
- package/modules/dev-box/app/assets/tray/win-busy.png +0 -0
- package/modules/dev-box/app/assets/tray/win-off.png +0 -0
- package/modules/dev-box/app/assets/tray/win-on.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background@2x.png +0 -0
- package/modules/dev-box/app/build-resources/icon.png +0 -0
- package/modules/dev-box/app/electron-builder.tmpl.yml +95 -0
- package/modules/dev-box/app/electron-builder.yml +95 -0
- package/modules/dev-box/app/package-lock.json +5291 -0
- package/modules/dev-box/app/package.json +30 -0
- package/modules/dev-box/app/renderer/app.js +319 -0
- package/modules/dev-box/app/renderer/index.html +45 -0
- package/modules/dev-box/app/renderer/styles.css +246 -0
- package/modules/dev-box/app/renderer/theme.generated.css +16 -0
- package/modules/dev-box/app/scripts/apply-dmg-backdrop.sh +82 -0
- package/modules/dev-box/app/scripts/dmgbuild-settings.py +39 -0
- package/modules/dev-box/app/scripts/gen-brand.js +138 -0
- package/modules/dev-box/app/scripts/gen-dmg-backdrop.py +323 -0
- package/modules/dev-box/app/scripts/gen-icons.js +286 -0
- package/modules/dev-box/app/scripts/vendor-client.js +23 -0
- package/modules/dev-box/app/src/box-controller.js +287 -0
- package/modules/dev-box/app/src/brand.generated.json +13 -0
- package/modules/dev-box/app/src/brand.js +16 -0
- package/modules/dev-box/app/src/config.js +19 -0
- package/modules/dev-box/app/src/gds-client.js +90 -0
- package/modules/dev-box/app/src/main.js +610 -0
- package/modules/dev-box/app/src/pairing.js +57 -0
- package/modules/dev-box/app/src/preload.js +29 -0
- package/modules/dev-box/app/src/session-store.js +58 -0
- package/modules/dev-box/app/src/ssh-setup.js +569 -0
- package/modules/dev-box/app/src/task-picker.js +70 -0
- package/modules/dev-box/app/src/tray.js +99 -0
- package/modules/dev-box/app/src/updater.js +55 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +698 -0
- package/modules/dev-box/app/test/unit.mjs +526 -0
- package/modules/dev-box/box-access.js +121 -4
- package/modules/dev-box/boxes.js +20 -0
- package/modules/dev-box/module.json +1 -1
- package/modules/dev-box/routes/box.js +87 -3
- package/modules/economy/credits.js +116 -25
- package/modules/economy/reward.js +8 -0
- package/modules/economy/streak.js +2 -1
- package/modules/governance/CLAUDE.md +15 -0
- package/modules/governance/catalog.js +419 -0
- package/modules/governance/config.js +174 -0
- package/modules/governance/db.js +125 -0
- package/modules/governance/migrations/governance_001_tables.sql +81 -0
- package/modules/governance/migrations/governance_002_seed_and_backfill.sql +103 -0
- package/modules/governance/migrations/governance_003_task_abandon_metic.sql +28 -0
- package/modules/governance/migrations/governance_004_criterion_create.sql +39 -0
- package/modules/governance/migrations/governance_005_resync_builder_rank_roles.sql +56 -0
- package/modules/governance/module.json +10 -0
- package/modules/governance/protected-surfaces.js +88 -0
- package/modules/governance/protected-surfaces.json +80 -0
- package/modules/governance/rank-roles.js +83 -0
- package/modules/governance/resolver.js +221 -0
- package/modules/governance/routes/governance.js +89 -0
- package/modules/governance/routes/role-sync.js +49 -0
- package/modules/governance/session-scopes.js +127 -0
- package/modules/governance/session-scopes.json +38 -0
- package/modules/hall-ui/public/atlas.css +117 -0
- package/modules/hall-ui/public/atlas.html +3 -114
- package/modules/hall-ui/public/brand-apply.js +34 -6
- package/modules/hall-ui/public/builders.js +187 -219
- package/modules/hall-ui/public/diagrams.html +2 -0
- package/modules/hall-ui/public/dom-utils.js +27 -0
- package/modules/hall-ui/public/drachmae.html +2 -0
- package/modules/hall-ui/public/drachmae.js +54 -1
- package/modules/hall-ui/public/gate.css +98 -0
- package/modules/hall-ui/public/gate.html +3 -95
- package/modules/hall-ui/public/goal-inbox.js +4 -1
- package/modules/hall-ui/public/goals-page.js +626 -114
- package/modules/hall-ui/public/goals.css +79 -1
- package/modules/hall-ui/public/goals.html +38 -11
- package/modules/hall-ui/public/hall-widgets.js +62 -52
- package/modules/hall-ui/public/harbor.css +123 -0
- package/modules/hall-ui/public/harbor.html +3 -120
- package/modules/hall-ui/public/index.html +11 -4
- package/modules/hall-ui/public/instances-panel.js +4 -1
- package/modules/hall-ui/public/modules.css +63 -0
- package/modules/hall-ui/public/modules.html +3 -60
- package/modules/hall-ui/public/my-projects.html +78 -0
- package/modules/hall-ui/public/my-projects.js +142 -0
- package/modules/hall-ui/public/new-project-wizard.js +7 -3
- package/modules/hall-ui/public/not-ready.html +2 -0
- package/modules/hall-ui/public/pair.css +73 -0
- package/modules/hall-ui/public/pair.html +3 -70
- package/modules/hall-ui/public/palette.js +302 -0
- package/modules/hall-ui/public/primer.css +13 -0
- package/modules/hall-ui/public/primer.html +2 -0
- package/modules/hall-ui/public/profile.html +2 -0
- package/modules/hall-ui/public/ranks.html +2 -0
- package/modules/hall-ui/public/roadmap.css +179 -0
- package/modules/hall-ui/public/roadmap.html +9 -172
- package/modules/hall-ui/public/roadmap.js +329 -316
- package/modules/hall-ui/public/scouting.html +45 -0
- package/modules/hall-ui/public/scouting.js +73 -0
- package/modules/hall-ui/public/sessions.css +16 -0
- package/modules/hall-ui/public/sessions.html +3 -13
- package/modules/hall-ui/public/settings.html +2 -0
- package/modules/hall-ui/public/settings.js +4 -4
- package/modules/hall-ui/public/shell.js +143 -18
- package/modules/hall-ui/public/style.css +231 -39
- package/modules/hall-ui/public/task-detail.js +347 -26
- package/modules/hall-ui/public/task.html +6 -1
- package/modules/hall-ui/public/watch.html +2 -0
- package/modules/hall-ui/public/work.html +8 -6
- package/modules/hall-ui/public/work.js +1 -1
- package/modules/ideas/inbox.js +61 -11
- package/modules/ideas/routes/inbox.js +23 -0
- package/modules/lifecycle/claim-eligibility.js +72 -0
- package/modules/lifecycle/db.js +519 -139
- package/modules/lifecycle/done-when.js +18 -3
- package/modules/lifecycle/github-push.js +19 -2
- package/modules/lifecycle/goal-advisory.js +114 -0
- package/modules/lifecycle/goal-authz.js +62 -0
- package/modules/lifecycle/lifecycle.js +9 -0
- package/modules/lifecycle/publish-reconciler.js +109 -6
- package/modules/lifecycle/routes/claims.js +68 -23
- package/modules/lifecycle/routes/done-when.js +110 -15
- package/modules/lifecycle/routes/goals.js +8 -38
- package/modules/lifecycle/routes/tasks.js +38 -6
- package/modules/lifecycle/ship-card.js +6 -0
- package/modules/onboarding/onboarding-state.js +1 -1
- package/modules/platform-identity/CLAUDE.md +15 -0
- package/modules/platform-identity/hub-device.js +147 -0
- package/modules/platform-identity/hub-keys.js +151 -0
- package/modules/platform-identity/migrations/platform_identity_001_tables.sql +114 -0
- package/modules/platform-identity/migrations/platform_identity_002_client_origin_index.sql +18 -0
- package/modules/platform-identity/migrations/platform_identity_003_project_memberships.sql +42 -0
- package/modules/platform-identity/migrations/platform_identity_004_projects.sql +44 -0
- package/modules/platform-identity/migrations/platform_identity_005_builder_activity.sql +42 -0
- package/modules/platform-identity/module.json +18 -0
- package/modules/platform-identity/platform-identity.js +531 -0
- package/modules/platform-identity/pollers/code-sweep.js +43 -0
- package/modules/platform-identity/routes/my-projects.js +140 -0
- package/modules/platform-identity/routes/projects.js +107 -0
- package/modules/platform-identity/routes/scouting.js +35 -0
- package/modules/platform-identity/routes/sso.js +402 -0
- package/modules/platform-identity/tests/platform-identity.mjs +388 -0
- package/modules/platform-identity/ui/.gitkeep +0 -0
- package/modules/security/routes/reports.js +10 -0
- package/modules/sessions/db.js +166 -21
- package/modules/sessions/module.json +1 -1
- package/modules/sessions/pollers/session-reward-reconcile.js +78 -0
- package/modules/sessions/routes/sessions.js +33 -0
- package/modules/status-ui/public/explore.html +54 -0
- package/modules/status-ui/public/explore.js +67 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/assets/anim/idle/frame_00.webp +0 -0
- package/public-landing/assets/anim/idle/frame_01.webp +0 -0
- package/public-landing/assets/anim/idle/frame_02.webp +0 -0
- package/public-landing/assets/anim/idle/frame_03.webp +0 -0
- package/public-landing/assets/anim/idle/frame_04.webp +0 -0
- package/public-landing/assets/anim/idle/frame_05.webp +0 -0
- package/public-landing/assets/anim/idle/frame_06.webp +0 -0
- package/public-landing/assets/anim/idle/frame_07.webp +0 -0
- package/public-landing/assets/anim/idle/frame_08.webp +0 -0
- package/public-landing/assets/anim/idle/frame_09.webp +0 -0
- package/public-landing/assets/anim/idle/frame_10.webp +0 -0
- package/public-landing/assets/anim/idle/frame_11.webp +0 -0
- package/public-landing/assets/anim/idle/frame_12.webp +0 -0
- package/public-landing/assets/anim/idle/frame_13.webp +0 -0
- package/public-landing/assets/anim/idle/frame_14.webp +0 -0
- package/public-landing/assets/anim/idle/frame_15.webp +0 -0
- package/public-landing/assets/anim/idle/frame_16.webp +0 -0
- package/public-landing/assets/anim/idle/frame_17.webp +0 -0
- package/public-landing/assets/anim/idle/frame_18.webp +0 -0
- package/public-landing/assets/anim/idle/frame_19.webp +0 -0
- package/public-landing/assets/anim/idle/frame_20.webp +0 -0
- package/public-landing/assets/anim/idle/frame_21.webp +0 -0
- package/public-landing/assets/anim/idle/frame_22.webp +0 -0
- package/public-landing/assets/anim/idle/frame_23.webp +0 -0
- package/public-landing/assets/anim/idle/frame_24.webp +0 -0
- package/public-landing/assets/anim/idle/frame_25.webp +0 -0
- package/public-landing/assets/anim/idle/frame_26.webp +0 -0
- package/public-landing/assets/anim/idle/frame_27.webp +0 -0
- package/public-landing/assets/anim/idle/frame_28.webp +0 -0
- package/public-landing/assets/anim/idle/frame_29.webp +0 -0
- package/public-landing/assets/anim/idle/frame_30.webp +0 -0
- package/public-landing/assets/anim/idle/frame_31.webp +0 -0
- package/public-landing/assets/anim/idle/frame_32.webp +0 -0
- package/public-landing/assets/anim/idle/frame_33.webp +0 -0
- package/public-landing/assets/anim/idle/frame_34.webp +0 -0
- package/public-landing/assets/anim/idle/frame_35.webp +0 -0
- package/public-landing/assets/anim/idle/frame_36.webp +0 -0
- package/public-landing/assets/anim/idle/frame_37.webp +0 -0
- package/public-landing/assets/anim/idle/frame_38.webp +0 -0
- package/public-landing/assets/anim/idle/frame_39.webp +0 -0
- package/public-landing/assets/anim/idle/frame_40.webp +0 -0
- package/public-landing/assets/anim/idle/frame_41.webp +0 -0
- package/public-landing/assets/anim/idle/frame_42.webp +0 -0
- package/public-landing/assets/anim/idle/frame_43.webp +0 -0
- package/public-landing/create.html +252 -62
- package/public-landing/gate/README.md +137 -0
- package/public-landing/gate/dispmaps/bar.png +0 -0
- package/public-landing/gate/dispmaps/flat.png +0 -0
- package/public-landing/gate/dispmaps/key.png +0 -0
- package/public-landing/gate/index.html +587 -0
- package/public-landing/gate/previews/cloud-bongos.jpg +0 -0
- package/public-landing/gate/previews/off-the-boats.jpg +0 -0
- package/public-landing/gate/space.css +799 -0
- package/public-landing/gate/space.js +1826 -0
- package/public-landing/gate/sprites/enter.png +0 -0
- package/public-landing/gate/sprites/search.png +0 -0
- package/public-landing/gate/sprites/terminal-blank.png +0 -0
- package/public-landing/gate/sprites/tile.png +0 -0
- package/public-landing/world/assets/clouds/cloud-island-large.png +0 -0
- package/public-landing/world/assets/clouds/cloud-puff.png +0 -0
- package/public-landing/world/assets/creatures/creature-whale-cargo.png +0 -0
- package/public-landing/world/assets/creatures/creature-whale-glide.png +0 -0
- package/public-landing/world/assets/plates/plate-clouds-near.png +0 -0
- package/public-landing/world/assets/plates/scene-establishing.png +0 -0
- package/scripts/gds/abandon.js +6 -4
- package/scripts/gds/api.js +10 -5
- package/scripts/gds/api.ps1 +26 -0
- package/scripts/gds/api.sh +6 -0
- package/scripts/gds/audit-ships.js +7 -1
- package/scripts/gds/backfill-sessions.js +78 -18
- package/scripts/gds/backup.js +23 -1
- package/scripts/gds/box-connect-lib.js +124 -31
- package/scripts/gds/box-sync.js +66 -0
- package/scripts/gds/box.js +225 -53
- package/scripts/gds/cf-tunnel.js +145 -6
- package/scripts/gds/claim.js +34 -3
- package/scripts/gds/cli-lib.js +161 -21
- package/scripts/gds/code.js +6 -2
- package/scripts/gds/deploy-divergence.js +209 -0
- package/scripts/gds/dev-lib.js +309 -0
- package/scripts/gds/dev.js +322 -0
- package/scripts/gds/doctor.js +90 -61
- package/scripts/gds/fetch-art-key.js +1 -1
- package/scripts/gds/fetch-sound-prefs.js +2 -2
- package/scripts/gds/fitness.js +228 -12
- package/scripts/gds/gds-db-backup.service +16 -1
- package/scripts/gds/gds-db-offsite.service +9 -1
- package/scripts/gds/gen-api-client.js +1 -1
- package/scripts/gds/gen-api-docs.js +36 -14
- package/scripts/gds/gen-diagrams.js +45 -28
- package/scripts/gds/gen-file-map.js +2 -1
- package/scripts/gds/gen-freshness.js +32 -0
- package/scripts/gds/gen-repo-map.js +3 -2
- package/scripts/gds/gen-session-index.js +14 -5
- package/scripts/gds/hooks/pre-push.js +2 -2
- package/scripts/gds/init.js +60 -3
- package/scripts/gds/install-git-hooks.js +1 -1
- package/scripts/gds/key-card.js +15 -6
- package/scripts/gds/key-status.js +1 -1
- package/scripts/gds/linkify-refs.js +35 -9
- package/scripts/gds/lint-migrations.js +102 -0
- package/scripts/gds/login.js +58 -11
- package/scripts/gds/mirror-redact.js +5 -0
- package/scripts/gds/package-core.js +263 -4
- package/scripts/gds/paste-token.js +7 -1
- package/scripts/gds/preflight.js +126 -0
- package/scripts/gds/provision.js +268 -19
- package/scripts/gds/publish-manifest.js +22 -1
- package/scripts/gds/reauth.js +7 -3
- package/scripts/gds/regen-instance-docs.js +47 -0
- package/scripts/gds/run-unit-tests.js +42 -16
- package/scripts/gds/seed-bongos-v1-seo-tasks.js +104 -0
- package/scripts/gds/seed-bv1-profiles-tasks.js +126 -0
- package/scripts/gds/sequence.js +425 -0
- package/scripts/gds/session-cost.js +10 -1
- package/scripts/gds/setup.js +72 -5
- package/scripts/gds/shell.js +5 -3
- package/scripts/gds/ship.js +433 -59
- package/scripts/gds/smoke-gds.js +139 -8
- package/scripts/gds/start.js +171 -22
- package/scripts/gds/status.js +1 -1
- package/scripts/gds/triage.js +10 -9
- package/scripts/gds/upgrade.js +271 -7
- package/scripts/migrate.sh +10 -0
- package/scripts/status-mirror-sync.js +114 -84
- package/src/bongos/api-errors.js +1 -0
- package/src/bongos/auth.js +809 -107
- package/src/bongos/db-kernel.js +27 -0
- package/src/bongos/db.js +105 -0
- package/src/bongos/github-repos.js +93 -0
- package/src/bongos/module-scope-map.js +27 -1
- package/src/bongos/permission-path-check.js +136 -102
- package/src/bongos/repo-info.js +47 -11
- package/src/bongos/route-rank-check.js +429 -46
- package/src/bongos/routes/_helpers.js +12 -1
- package/src/bongos/routes/auth.js +312 -13
- package/src/bongos/routes/backup.js +58 -2
- package/src/bongos/routes/github.js +90 -0
- package/src/bongos/routes/instance.js +15 -3
- package/src/bongos/routes/me.js +35 -1
- package/src/bongos/routes.js +2 -0
- package/src/bongos/serve-internal.js +84 -15
- package/src/branding.js +49 -2
- package/src/instance-config.js +46 -0
- package/src/module-api.js +140 -1
- package/src/platform-server.js +86 -9
- package/tests/abandon_task.mjs +59 -3
- package/tests/api_cli_flags.mjs +53 -0
- package/tests/auth_page_gate.mjs +13 -0
- package/tests/backfill_sessions.mjs +127 -1
- package/tests/backup_cli.mjs +54 -0
- package/tests/bongos_box_connect.mjs +77 -0
- package/tests/box_access.mjs +130 -1
- package/tests/box_credential.mjs +125 -0
- package/tests/box_host_keys.mjs +24 -0
- package/tests/box_infra_resolve.mjs +149 -0
- package/tests/box_scope_session.mjs +6 -2
- package/tests/box_sync.mjs +55 -0
- package/tests/box_task_scope.mjs +99 -0
- package/tests/branding.mjs +41 -23
- package/tests/cf_ruleset_preflight.mjs +142 -0
- package/tests/cf_tunnel.mjs +37 -0
- package/tests/claim_gate_rebase.mjs +98 -0
- package/tests/clawback_confirmed_backlog.mjs +103 -0
- package/tests/cli_lib_formatters.mjs +20 -0
- package/tests/confirm_attribution.mjs +30 -46
- package/tests/credit_grant.mjs +198 -10
- package/tests/criterion_authoring_gate.mjs +272 -0
- package/tests/criterion_progress.mjs +33 -1
- package/tests/dev_lib.mjs +253 -0
- package/tests/devbox_artifact_gate.mjs +75 -0
- package/tests/devbox_dmg_backdrop.mjs +137 -0
- package/tests/devbox_icons.mjs +304 -0
- package/tests/devbox_installer_brand.mjs +232 -0
- package/tests/devbox_key_register.mjs +234 -0
- package/tests/docs_openapi_route.mjs +110 -0
- package/tests/doctor_hooks.mjs +141 -0
- package/tests/extract_json.mjs +140 -0
- package/tests/fitness.mjs +89 -0
- package/tests/gen_freshness.mjs +96 -0
- package/tests/github_repos_helpers.mjs +91 -0
- package/tests/github_token_store.mjs +121 -0
- package/tests/goal_advisory.mjs +251 -0
- package/tests/goal_criterion_confirm_ui.mjs +269 -0
- package/tests/goal_routes.mjs +59 -4
- package/tests/goal_tier.mjs +12 -3
- package/tests/governance_catalog.mjs +129 -0
- package/tests/governance_claim_eligibility.mjs +262 -0
- package/tests/governance_config.mjs +187 -0
- package/tests/governance_ownership_scope.mjs +410 -0
- package/tests/governance_page_gates.mjs +324 -0
- package/tests/governance_parity.mjs +336 -0
- package/tests/governance_principals.mjs +232 -0
- package/tests/governance_protected_surfaces.mjs +208 -0
- package/tests/governance_require_permission.mjs +223 -0
- package/tests/governance_resolver.mjs +84 -0
- package/tests/governance_role_sync.mjs +231 -0
- package/tests/governance_seed.mjs +127 -0
- package/tests/governance_session_scope.mjs +434 -0
- package/tests/governance_vanilla_boot.mjs +203 -0
- package/tests/grade_attribution.mjs +7 -7
- package/tests/hall_audit.mjs +223 -0
- package/tests/hall_nav.mjs +191 -0
- package/tests/hall_palette.mjs +206 -0
- package/tests/hall_signout.mjs +124 -0
- package/tests/hook_user_agents.mjs +10 -0
- package/tests/idea_triage.mjs +162 -0
- package/tests/idp_device_exchange.mjs +198 -0
- package/tests/idp_federation.mjs +100 -0
- package/tests/init.mjs +51 -0
- package/tests/instance_config.mjs +65 -0
- package/tests/instance_mismatch_guard.mjs +23 -6
- package/tests/instance_release_config.mjs +104 -0
- package/tests/linkify_refs.mjs +15 -2
- package/tests/migrations_forward_safe.mjs +86 -0
- package/tests/module_api.mjs +1 -1
- package/tests/module_contributions.mjs +55 -0
- package/tests/module_loader.mjs +10 -5
- package/tests/module_scope_active_claims.mjs +94 -0
- package/tests/needs_rebase.mjs +92 -0
- package/tests/one_active_claim_per_session.mjs +76 -0
- package/tests/override_attribution.mjs +10 -8
- package/tests/override_request_ownership.mjs +8 -4
- package/tests/package_core.mjs +246 -1
- package/tests/parse_cookie_decode.mjs +42 -0
- package/tests/pay_on_land.mjs +129 -0
- package/tests/platform_boot.mjs +100 -1
- package/tests/post_login_landing.mjs +42 -0
- package/tests/preflight_checks.mjs +72 -0
- package/tests/provision.mjs +289 -7
- package/tests/pruned_lockfile_integrity.mjs +79 -0
- package/tests/publish_branch_route.mjs +53 -0
- package/tests/publish_reconciler.mjs +187 -2
- package/tests/repo_info_binding.mjs +248 -0
- package/tests/reward_gate.mjs +11 -2
- package/tests/reward_mode_cost_plus_only.mjs +116 -0
- package/tests/reward_mode_surfacing.mjs +168 -0
- package/tests/route_permission_check.mjs +301 -0
- package/tests/route_rank_check.mjs +254 -12
- package/tests/route_validation.mjs +30 -0
- package/tests/sequence.mjs +267 -0
- package/tests/session_digest.mjs +44 -0
- package/tests/session_index.mjs +18 -6
- package/tests/session_records.mjs +39 -1
- package/tests/session_reward_on_land.mjs +381 -0
- package/tests/session_reward_reconcile.mjs +229 -0
- package/tests/ship_api_client_pathspec.mjs +100 -0
- package/tests/ship_base_flag.mjs +93 -0
- package/tests/ship_ci_deploy.mjs +140 -3
- package/tests/ship_upstream_deletion.mjs +57 -0
- package/tests/smoke_target.mjs +233 -0
- package/tests/start_env_guard.mjs +87 -0
- package/tests/start_rebase_warning.mjs +103 -0
- package/tests/status_mirror_sync.mjs +122 -0
- package/tests/stop_refcheck.mjs +19 -1
- package/tests/task_goal_link.mjs +15 -6
- package/tests/upgrade.mjs +393 -5
- package/tests/web_admission_status.mjs +162 -0
- package/tests/write_validation_gaps.mjs +110 -0
- package/.gitignore +0 -91
- package/docs/adr/0139-platform-history-migration-to-cloudbongos.md +0 -94
- package/docs/adr/0140-cloudbongos-standalone-reprovision.md +0 -43
- package/scripts/hall-preview/fixtures/access-requests.json +0 -20
- package/scripts/hall-preview/fixtures/achievements.json +0 -76
- package/scripts/hall-preview/fixtures/analytics__builder.json +0 -251
- package/scripts/hall-preview/fixtures/audit-log.json +0 -68
- package/scripts/hall-preview/fixtures/blockers__detail.json +0 -12
- package/scripts/hall-preview/fixtures/box__me.json +0 -5
- package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +0 -69
- package/scripts/hall-preview/fixtures/builders__active-claims.json +0 -1
- package/scripts/hall-preview/fixtures/builders__directory.json +0 -81
- package/scripts/hall-preview/fixtures/builders__roster.json +0 -48
- package/scripts/hall-preview/fixtures/goals.json +0 -502
- package/scripts/hall-preview/fixtures/goals__25.json +0 -96
- package/scripts/hall-preview/fixtures/goals__26.json +0 -67
- package/scripts/hall-preview/fixtures/goals__3.json +0 -103
- package/scripts/hall-preview/fixtures/goals__35.json +0 -49
- package/scripts/hall-preview/fixtures/goals__conflicts.json +0 -154
- package/scripts/hall-preview/fixtures/goals__detail.json +0 -96
- package/scripts/hall-preview/fixtures/goals__inbox.json +0 -5
- package/scripts/hall-preview/fixtures/goals__requests.json +0 -3
- package/scripts/hall-preview/fixtures/grades__by-builder.json +0 -32
- package/scripts/hall-preview/fixtures/inbox.json +0 -330
- package/scripts/hall-preview/fixtures/inbox__detail.json +0 -15
- package/scripts/hall-preview/fixtures/instance.json +0 -124
- package/scripts/hall-preview/fixtures/leaderboard.json +0 -184
- package/scripts/hall-preview/fixtures/me.json +0 -476
- package/scripts/hall-preview/fixtures/me__art-key__own.json +0 -6
- package/scripts/hall-preview/fixtures/me__event-sound-prefs.json +0 -209
- package/scripts/hall-preview/fixtures/me__recent-ships.json +0 -304
- package/scripts/hall-preview/fixtures/me__render.json +0 -5
- package/scripts/hall-preview/fixtures/me__skill-prefs.json +0 -143
- package/scripts/hall-preview/fixtures/me__sound-prefs.json +0 -67
- package/scripts/hall-preview/fixtures/me__wandering.json +0 -43
- package/scripts/hall-preview/fixtures/override-requests.json +0 -15
- package/scripts/hall-preview/fixtures/provisioning__fleet.json +0 -1
- package/scripts/hall-preview/fixtures/provisioning__fleet__cost-ledger.json +0 -1
- package/scripts/hall-preview/fixtures/provisioning__instances.json +0 -1
- package/scripts/hall-preview/fixtures/public__analytics__ecosystem.json +0 -516
- package/scripts/hall-preview/fixtures/public__bounty-table.json +0 -37
- package/scripts/hall-preview/fixtures/public__cost-summary.json +0 -742
- package/scripts/hall-preview/fixtures/public__estimation-drift.json +0 -41
- package/scripts/hall-preview/fixtures/public__grades.json +0 -50
- package/scripts/hall-preview/fixtures/public__progress.json +0 -124
- package/scripts/hall-preview/fixtures/public__recent-shipped.json +0 -426
- package/scripts/hall-preview/fixtures/public__repo-health.json +0 -160
- package/scripts/hall-preview/fixtures/public__repo-info.json +0 -5
- package/scripts/hall-preview/fixtures/security__docs.json +0 -10
- package/scripts/hall-preview/fixtures/security__reports.json +0 -31
- package/scripts/hall-preview/fixtures/sessions__search.json +0 -9
- package/scripts/hall-preview/fixtures/tasks.json +0 -2420
- package/scripts/hall-preview/fixtures/tasks__claimable.json +0 -2555
- package/scripts/hall-preview/fixtures/tasks__detail.json +0 -111
- package/scripts/hall-preview/fixtures/tasks__peer-votes__feed.json +0 -330
- package/scripts/hall-preview/fixtures/versions.json +0 -89
|
@@ -65,6 +65,28 @@
|
|
|
65
65
|
--z-drawer: 150;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
/* ---------- spacing scale (task 2179) ----------
|
|
69
|
+
Four steps, deliberately matching the values the sheet had already converged
|
|
70
|
+
on (a census found 6/10/16/20 dominant), so this NAMES the existing rhythm
|
|
71
|
+
rather than restyling the hall. It governs the three things that decide
|
|
72
|
+
density — card padding, card gap, section gap — and is not a mandate to
|
|
73
|
+
rewrite every inset; chip and control padding stay as authored.
|
|
74
|
+
|
|
75
|
+
Kept in its OWN block rather than added to :root above: :root is the
|
|
76
|
+
pack-driven theming contract an instance overrides, and the program's audit
|
|
77
|
+
requires it unchanged. Spacing is structure, not theme.
|
|
78
|
+
|
|
79
|
+
1 6px tight — inside a row or chip
|
|
80
|
+
2 10px default gap between siblings
|
|
81
|
+
3 16px comfortable — secondary card padding
|
|
82
|
+
4 20px card padding, card gap, section gap */
|
|
83
|
+
:root {
|
|
84
|
+
--space-1: 6px;
|
|
85
|
+
--space-2: 10px;
|
|
86
|
+
--space-3: 16px;
|
|
87
|
+
--space-4: 20px;
|
|
88
|
+
}
|
|
89
|
+
|
|
68
90
|
/* ---------- dark theme ----------
|
|
69
91
|
Only the NEUTRALS flip; the instance pack's accent/sea/terracotta + fonts
|
|
70
92
|
survive, and every derived token (color-mix on these vars) re-derives
|
|
@@ -212,8 +234,7 @@ button { font-family: var(--font-body); }
|
|
|
212
234
|
flex-direction: column;
|
|
213
235
|
background: var(--surface);
|
|
214
236
|
border-right: 1px solid var(--border);
|
|
215
|
-
overflow
|
|
216
|
-
overflow-x: hidden;
|
|
237
|
+
overflow: hidden;
|
|
217
238
|
}
|
|
218
239
|
|
|
219
240
|
.app-sidebar__brand {
|
|
@@ -253,6 +274,19 @@ button { font-family: var(--font-body); }
|
|
|
253
274
|
display: flex;
|
|
254
275
|
flex-direction: column;
|
|
255
276
|
gap: 2px;
|
|
277
|
+
/* task 1002446: the nav list is the scroller, not the whole sidebar. The
|
|
278
|
+
brand and foot were already flex-shrink:0 — the intent was always that they
|
|
279
|
+
stay put — but with overflow on .app-sidebar they scrolled away with
|
|
280
|
+
everything else, so the 2175 nav groups pushed "Sign out" 27px under a
|
|
281
|
+
844px-tall window. Scrolling the list instead pins sign-out for good,
|
|
282
|
+
however many groups a later task adds. `min-height: 0` is what lets a flex
|
|
283
|
+
child shrink below its content and actually scroll; the explicit
|
|
284
|
+
`overflow-x: hidden` keeps the clip .app-sidebar used to provide, since
|
|
285
|
+
`overflow-y: auto` alone would promote the x axis to auto and give the
|
|
286
|
+
collapsed rail a stray sideways scrollbar. */
|
|
287
|
+
min-height: 0;
|
|
288
|
+
overflow-y: auto;
|
|
289
|
+
overflow-x: hidden;
|
|
256
290
|
}
|
|
257
291
|
.nav-group { display: flex; flex-direction: column; gap: 2px; }
|
|
258
292
|
.nav-group + .nav-group { margin-top: 14px; }
|
|
@@ -358,6 +392,7 @@ button { font-family: var(--font-body); }
|
|
|
358
392
|
}
|
|
359
393
|
.shell-user__rank { font-size: 11.5px; color: var(--ink-faint); }
|
|
360
394
|
.shell-signin,
|
|
395
|
+
.shell-home,
|
|
361
396
|
.shell-signout {
|
|
362
397
|
display: flex;
|
|
363
398
|
align-items: center;
|
|
@@ -369,12 +404,14 @@ button { font-family: var(--font-body); }
|
|
|
369
404
|
font-weight: 500;
|
|
370
405
|
color: var(--ink-soft);
|
|
371
406
|
}
|
|
407
|
+
.shell-home { text-decoration: none; }
|
|
372
408
|
.shell-signin {
|
|
373
409
|
justify-content: center;
|
|
374
410
|
background: var(--accent);
|
|
375
411
|
color: #fff;
|
|
376
412
|
}
|
|
377
413
|
.shell-signin:hover { background: var(--accent-deep); color: #fff; text-decoration: none; }
|
|
414
|
+
.shell-home:hover,
|
|
378
415
|
.shell-signout:hover { background: var(--surface-2); color: var(--ink); text-decoration: none; }
|
|
379
416
|
|
|
380
417
|
.app-body {
|
|
@@ -487,11 +524,11 @@ button { font-family: var(--font-body); }
|
|
|
487
524
|
flex: 1;
|
|
488
525
|
}
|
|
489
526
|
|
|
490
|
-
.app-views .view > .view-zone + .view-zone { margin-top:
|
|
527
|
+
.app-views .view > .view-zone + .view-zone { margin-top: var(--space-4); }
|
|
491
528
|
.view-zone--band {
|
|
492
529
|
display: grid;
|
|
493
530
|
grid-template-columns: 1fr 1fr;
|
|
494
|
-
gap:
|
|
531
|
+
gap: var(--space-4);
|
|
495
532
|
align-items: start;
|
|
496
533
|
}
|
|
497
534
|
.view-zone--band > .scroll { margin: 0; }
|
|
@@ -527,7 +564,7 @@ button { font-family: var(--font-body); }
|
|
|
527
564
|
.nav-item__label,
|
|
528
565
|
.nav-group__head,
|
|
529
566
|
.shell-user__meta { display: none; }
|
|
530
|
-
.nav-item, .shell-signout { justify-content: center; padding: 0; }
|
|
567
|
+
.nav-item, .shell-home, .shell-signout { justify-content: center; padding: 0; }
|
|
531
568
|
.nav-item--active::before { left: -6px; }
|
|
532
569
|
.shell-user { justify-content: center; padding: 2px 0; }
|
|
533
570
|
.shell-signin { font-size: 0; padding: 0; height: 34px; }
|
|
@@ -544,7 +581,7 @@ button { font-family: var(--font-body); }
|
|
|
544
581
|
html.drawer-open .app-sidebar { transform: translateX(0); box-shadow: var(--shadow-pop); }
|
|
545
582
|
.app-body { margin-left: 0; }
|
|
546
583
|
.brand-mark__name, .nav-item__label, .nav-group__head, .shell-user__meta { display: block; }
|
|
547
|
-
.nav-item, .shell-signout { justify-content: flex-start; padding: 0 10px; }
|
|
584
|
+
.nav-item, .shell-home, .shell-signout { justify-content: flex-start; padding: 0 10px; }
|
|
548
585
|
.shell-user { justify-content: flex-start; }
|
|
549
586
|
.shell-signin { font-size: 13.5px; padding: 0 10px; }
|
|
550
587
|
.shell-signin::after { content: none; }
|
|
@@ -564,12 +601,17 @@ button { font-family: var(--font-body); }
|
|
|
564
601
|
|
|
565
602
|
/* ---------- cards (the .scroll legacy name is load-bearing) ---------- */
|
|
566
603
|
|
|
604
|
+
/* The three sanctioned card levels (task 2179). Anything that looks like a card
|
|
605
|
+
is one of these — a fourth variant is a design decision, not a local override:
|
|
606
|
+
.scroll primary — the default surface for a section
|
|
607
|
+
.scroll--quiet secondary — a card INSIDE a card, or supporting detail
|
|
608
|
+
.scroll--bare none — layout-only, for stat rows and grids */
|
|
567
609
|
.scroll {
|
|
568
610
|
background: var(--surface);
|
|
569
611
|
border: 1px solid var(--border);
|
|
570
612
|
border-radius: var(--radius);
|
|
571
|
-
padding:
|
|
572
|
-
margin: 0 0
|
|
613
|
+
padding: var(--space-4);
|
|
614
|
+
margin: 0 0 var(--space-4);
|
|
573
615
|
/* anchor jumps must clear the 56px sticky top bar */
|
|
574
616
|
scroll-margin-top: calc(var(--topbar-h) + 16px);
|
|
575
617
|
}
|
|
@@ -580,6 +622,16 @@ button { font-family: var(--font-body); }
|
|
|
580
622
|
border-radius: 0;
|
|
581
623
|
padding: 0;
|
|
582
624
|
}
|
|
625
|
+
/* Secondary level: recedes against a primary card via surface-2 and a quieter,
|
|
626
|
+
smaller header. Use for supporting detail — not to fit more onto Home. */
|
|
627
|
+
.scroll--quiet {
|
|
628
|
+
background: var(--surface-2);
|
|
629
|
+
padding: var(--space-3);
|
|
630
|
+
}
|
|
631
|
+
.scroll--quiet > .scroll__h {
|
|
632
|
+
font-size: 13.5px;
|
|
633
|
+
color: var(--ink-soft);
|
|
634
|
+
}
|
|
583
635
|
|
|
584
636
|
.scroll__h {
|
|
585
637
|
margin: 0 0 6px;
|
|
@@ -680,6 +732,12 @@ button { font-family: var(--font-body); }
|
|
|
680
732
|
.rail-link:hover { background: var(--surface-2); color: var(--ink); text-decoration: none; }
|
|
681
733
|
.rail-link--active { background: var(--accent-weak); color: var(--accent-text); }
|
|
682
734
|
|
|
735
|
+
/* task 2174: a Standing rail section — the scroll-spy anchor holding one or
|
|
736
|
+
more cards. The extra air between groups is what makes the grouping legible
|
|
737
|
+
without adding a second level of headings above the cards' own. */
|
|
738
|
+
.standing-group + .standing-group { margin-top: 16px; }
|
|
739
|
+
.standing-group:last-child > .scroll:last-child { margin-bottom: 0; }
|
|
740
|
+
|
|
683
741
|
@media (max-width: 768px) {
|
|
684
742
|
.standing-layout { grid-template-columns: minmax(0, 1fr); }
|
|
685
743
|
.section-rail {
|
|
@@ -843,6 +901,25 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
843
901
|
.ledger th.ledger__sortable[aria-sort="ascending"]::after { content: " ↑"; }
|
|
844
902
|
.ledger th.ledger__sortable[aria-sort="descending"]::after { content: " ↓"; }
|
|
845
903
|
|
|
904
|
+
/* task 1002446: a ledger's column count is fixed by its data, so its min-content
|
|
905
|
+
width outruns a phone and drags the whole page sideways — measured at 390w:
|
|
906
|
+
leaderboard 218px, Standing's ships table 19px, Home's recent-work 8px. (The
|
|
907
|
+
.rank-tip fix in the same task is what exposed these; its 62px used to swamp
|
|
908
|
+
them.) The strip goes on the ledger's PARENT, not on the ledger. Making the
|
|
909
|
+
table itself `display: block` does turn it into a scroller, but it also re-wraps
|
|
910
|
+
its rows in an anonymous table box that is shrink-to-fit, so any ledger NARROWER
|
|
911
|
+
than its card stops short of the card's right edge — measured at 390w on
|
|
912
|
+
/profile, #works-table's rows rendered 240px inside a 329px card, which is every
|
|
913
|
+
empty state in the hall. Left a table, it keeps `width: 100%` (fills) and lets
|
|
914
|
+
min-content push past the card, which is what the card then scrolls — the same
|
|
915
|
+
strip treatment .section-rail / .kit-tabs already use. Sticky headers go with
|
|
916
|
+
it: sticky would otherwise resolve against the new scrollport instead of the
|
|
917
|
+
window, so it is switched off rather than left silently broken. */
|
|
918
|
+
@media (max-width: 640px) {
|
|
919
|
+
:has(> .ledger) { overflow-x: auto; }
|
|
920
|
+
.ledger th { position: static; }
|
|
921
|
+
}
|
|
922
|
+
|
|
846
923
|
/* ---------- filters / pager / buttons ---------- */
|
|
847
924
|
|
|
848
925
|
.filters {
|
|
@@ -989,7 +1066,7 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
989
1066
|
.profile__karma-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-faint); }
|
|
990
1067
|
.profile__placeholder { color: var(--ink-faint); font-size: 13.5px; }
|
|
991
1068
|
|
|
992
|
-
.profile__budget, .profile__needs {
|
|
1069
|
+
.profile__budget, .profile__needs, .profile__rebase {
|
|
993
1070
|
grid-column: 1 / -1;
|
|
994
1071
|
border-radius: var(--radius-sm);
|
|
995
1072
|
padding: 10px 14px;
|
|
@@ -1001,6 +1078,8 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
1001
1078
|
.profile__needs--action { background: var(--warn-weak); color: var(--warn); border-color: color-mix(in srgb, var(--warn) 25%, transparent); }
|
|
1002
1079
|
.profile__needs--covered { background: var(--ok-weak); color: var(--ok); border-color: color-mix(in srgb, var(--ok) 22%, transparent); }
|
|
1003
1080
|
.profile__needs-act { font-weight: 600; white-space: nowrap; }
|
|
1081
|
+
/* ADR 0120 part 5: owed-rebase gate banner — danger-tinted (it blocks new claims). */
|
|
1082
|
+
.profile__rebase { background: var(--danger-weak); color: var(--danger); border-color: color-mix(in srgb, var(--danger) 25%, transparent); }
|
|
1004
1083
|
|
|
1005
1084
|
.disc-pref { margin-right: 4px; }
|
|
1006
1085
|
|
|
@@ -1063,6 +1142,18 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
1063
1142
|
.rank-tip__list li { margin: 2px 0; }
|
|
1064
1143
|
.rank-tip__more { margin: 6px 0 0; color: var(--ink-faint); }
|
|
1065
1144
|
|
|
1145
|
+
/* The tip is 240px anchored to the badge's LEFT edge, and the badge sits partway
|
|
1146
|
+
across the identity band — so under ~640px it reaches past the viewport and
|
|
1147
|
+
drags the whole page into sideways scroll. `visibility: hidden` still occupies
|
|
1148
|
+
layout, so that happened on every hall page at phone width with nothing even
|
|
1149
|
+
visible (measured: 62px of phantom scroll at 390w). Below the breakpoint where
|
|
1150
|
+
.profile already reflows, drop it: it is a hover popover, and a touch on the
|
|
1151
|
+
badge follows .rank-badge-stretch to /ranks — the full ladder the tip's own
|
|
1152
|
+
footer points at. The badge keeps its aria-label, so the rank is still named. */
|
|
1153
|
+
@media (max-width: 640px) {
|
|
1154
|
+
.rank-tip { display: none; }
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1066
1157
|
/* ---------- karma / acclaim ---------- */
|
|
1067
1158
|
|
|
1068
1159
|
.karma-badge__trend { font-variant-numeric: tabular-nums; }
|
|
@@ -1586,35 +1677,6 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
1586
1677
|
.ranks-rise__body { font-size: 13.5px; }
|
|
1587
1678
|
.ranks-rise__body p { margin: 8px 0; }
|
|
1588
1679
|
|
|
1589
|
-
/* ---------- security / roster / admin leftovers ---------- */
|
|
1590
|
-
|
|
1591
|
-
.sev-badge {
|
|
1592
|
-
display: inline-flex;
|
|
1593
|
-
align-items: center;
|
|
1594
|
-
height: 20px;
|
|
1595
|
-
padding: 0 9px;
|
|
1596
|
-
border-radius: 999px;
|
|
1597
|
-
font-size: 11.5px;
|
|
1598
|
-
font-weight: 600;
|
|
1599
|
-
}
|
|
1600
|
-
.sev-low { background: var(--surface-2); color: var(--ink-soft); }
|
|
1601
|
-
.sev-medium { background: var(--info-weak); color: var(--info); }
|
|
1602
|
-
.sev-high { background: var(--warn-weak); color: var(--warn); }
|
|
1603
|
-
.sev-critical { background: var(--danger-weak); color: var(--danger); }
|
|
1604
|
-
|
|
1605
|
-
.security-audit-details summary { cursor: pointer; font-weight: 600; font-size: 13.5px; }
|
|
1606
|
-
.override__rationale { font-size: 12.5px; color: var(--ink-soft); }
|
|
1607
|
-
|
|
1608
|
-
.roster__stale { color: var(--warn); }
|
|
1609
|
-
.roster__inactive { color: var(--ink-faint); }
|
|
1610
|
-
.roster__self { font-weight: 600; }
|
|
1611
|
-
#roster-table td:last-child { white-space: nowrap; }
|
|
1612
|
-
#roster-table td:last-child button { margin-left: 6px; }
|
|
1613
|
-
|
|
1614
|
-
.skill-prefs__select { min-width: 160px; }
|
|
1615
|
-
.skill-prefs__default { color: var(--ink-faint); }
|
|
1616
|
-
.voices__select { min-width: 160px; }
|
|
1617
|
-
|
|
1618
1680
|
/* ---------- toast + copy toast + deep-link overlay ---------- */
|
|
1619
1681
|
|
|
1620
1682
|
.toast {
|
|
@@ -1718,7 +1780,9 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
1718
1780
|
overflow-y: auto;
|
|
1719
1781
|
}
|
|
1720
1782
|
.td-touches { font-size: 12.5px; color: var(--ink-faint); word-break: break-word; margin: 0 0 12px; }
|
|
1721
|
-
|
|
1783
|
+
/* Shared small-caps label: overlay section heads and triage form-field labels. */
|
|
1784
|
+
.td-section-h, .td-field > span { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-faint); }
|
|
1785
|
+
.td-section-h { margin: 0 0 4px; }
|
|
1722
1786
|
.td-deps { margin: 0 0 12px; }
|
|
1723
1787
|
.td-dep-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 3px; }
|
|
1724
1788
|
.td-dep { font-size: 13px; color: var(--accent-text); text-decoration: none; }
|
|
@@ -1741,6 +1805,30 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
1741
1805
|
.td-btn:disabled { opacity: 0.6; cursor: default; }
|
|
1742
1806
|
.td-action-note { flex-basis: 100%; font-size: 12.5px; color: var(--warn); margin: 4px 0 0; }
|
|
1743
1807
|
|
|
1808
|
+
/* Idea triage inside the record overlay (task 1002447). A two-column grid so
|
|
1809
|
+
promote's five fields fit the panel without scrolling; --wide spans both. */
|
|
1810
|
+
.td-form { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 10px; margin: 14px 0 0; }
|
|
1811
|
+
.td-field { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
|
|
1812
|
+
.td-field--wide { grid-column: 1 / -1; }
|
|
1813
|
+
.td-field input, .td-field select {
|
|
1814
|
+
font: inherit;
|
|
1815
|
+
font-size: 13px;
|
|
1816
|
+
padding: 5px 8px;
|
|
1817
|
+
border: 1px solid var(--border-strong);
|
|
1818
|
+
border-radius: var(--radius-sm);
|
|
1819
|
+
background: var(--surface);
|
|
1820
|
+
color: var(--ink);
|
|
1821
|
+
min-width: 0;
|
|
1822
|
+
max-width: 100%;
|
|
1823
|
+
}
|
|
1824
|
+
.td-form .td-actions, .td-form-hint, .td-form .td-action-note { grid-column: 1 / -1; }
|
|
1825
|
+
.td-form .td-actions { margin: 4px 0 0; }
|
|
1826
|
+
.td-form-hint { font-size: 12.5px; color: var(--ink-soft); margin: 0; }
|
|
1827
|
+
|
|
1828
|
+
@media (max-width: 460px) {
|
|
1829
|
+
.td-form { grid-template-columns: 1fr; }
|
|
1830
|
+
}
|
|
1831
|
+
|
|
1744
1832
|
/* ---------- misc shared bits ---------- */
|
|
1745
1833
|
|
|
1746
1834
|
.vgoal { border: 1px solid var(--border); border-radius: var(--radius); }
|
|
@@ -1945,3 +2033,107 @@ a.stat-tile:hover {
|
|
|
1945
2033
|
.next-up__title:hover { color: var(--accent-text); }
|
|
1946
2034
|
.next-up__meta { font-size: 12px; color: var(--ink-faint); font-variant-numeric: tabular-nums; }
|
|
1947
2035
|
.next-up__foot { margin: 0 0 14px; font-size: 13px; }
|
|
2036
|
+
|
|
2037
|
+
/* ---------- jump palette (task 2178) ----------
|
|
2038
|
+
The top-bar slot + the Ctrl/Cmd-K overlay. Styled from existing tokens only —
|
|
2039
|
+
no new theme vars, so dark mode follows the neutral flip for free. The overlay
|
|
2040
|
+
mirrors .deeplink-card's posture (fixed scrim + centred panel, z above the
|
|
2041
|
+
drawer) so the two modal surfaces read as one system. */
|
|
2042
|
+
.topbar-jump {
|
|
2043
|
+
display: inline-flex;
|
|
2044
|
+
align-items: center;
|
|
2045
|
+
gap: 8px;
|
|
2046
|
+
height: 32px;
|
|
2047
|
+
padding: 0 10px;
|
|
2048
|
+
border: 1px solid var(--border);
|
|
2049
|
+
border-radius: var(--radius-sm);
|
|
2050
|
+
background: var(--surface);
|
|
2051
|
+
color: var(--ink-faint);
|
|
2052
|
+
font: inherit;
|
|
2053
|
+
font-size: 13px;
|
|
2054
|
+
cursor: pointer;
|
|
2055
|
+
min-width: 0;
|
|
2056
|
+
}
|
|
2057
|
+
.topbar-jump:hover { color: var(--ink-soft); border-color: var(--ink-faint); }
|
|
2058
|
+
.topbar-jump svg { width: 15px; height: 15px; flex-shrink: 0; }
|
|
2059
|
+
.topbar-jump__label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
2060
|
+
.topbar-jump__kbd {
|
|
2061
|
+
font-family: inherit;
|
|
2062
|
+
font-size: 11px;
|
|
2063
|
+
color: var(--ink-faint);
|
|
2064
|
+
border: 1px solid var(--border);
|
|
2065
|
+
border-radius: 4px;
|
|
2066
|
+
padding: 1px 5px;
|
|
2067
|
+
white-space: nowrap;
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2070
|
+
.palette { position: fixed; inset: 0; z-index: 2100; }
|
|
2071
|
+
.palette__scrim { position: absolute; inset: 0; background: color-mix(in srgb, var(--ink) 45%, transparent); }
|
|
2072
|
+
.palette__panel {
|
|
2073
|
+
position: relative;
|
|
2074
|
+
margin: 10vh auto 0;
|
|
2075
|
+
max-width: 560px;
|
|
2076
|
+
width: calc(100% - 32px);
|
|
2077
|
+
background: var(--surface);
|
|
2078
|
+
border: 1px solid var(--border);
|
|
2079
|
+
border-radius: var(--radius);
|
|
2080
|
+
box-shadow: var(--shadow-pop);
|
|
2081
|
+
overflow: hidden;
|
|
2082
|
+
}
|
|
2083
|
+
.palette__input {
|
|
2084
|
+
width: 100%;
|
|
2085
|
+
box-sizing: border-box;
|
|
2086
|
+
border: none;
|
|
2087
|
+
border-bottom: 1px solid var(--border);
|
|
2088
|
+
background: transparent;
|
|
2089
|
+
color: var(--ink);
|
|
2090
|
+
font: inherit;
|
|
2091
|
+
font-size: 15px;
|
|
2092
|
+
padding: 14px 16px;
|
|
2093
|
+
outline: none;
|
|
2094
|
+
}
|
|
2095
|
+
.palette__input::placeholder { color: var(--ink-faint); }
|
|
2096
|
+
.palette__list {
|
|
2097
|
+
list-style: none;
|
|
2098
|
+
margin: 0;
|
|
2099
|
+
padding: 6px;
|
|
2100
|
+
max-height: 50vh;
|
|
2101
|
+
overflow-y: auto;
|
|
2102
|
+
}
|
|
2103
|
+
.palette__item {
|
|
2104
|
+
display: flex;
|
|
2105
|
+
align-items: baseline;
|
|
2106
|
+
gap: 10px;
|
|
2107
|
+
padding: 8px 10px;
|
|
2108
|
+
border-radius: var(--radius-sm);
|
|
2109
|
+
cursor: pointer;
|
|
2110
|
+
}
|
|
2111
|
+
.palette__item--active { background: var(--accent-weak); }
|
|
2112
|
+
.palette__group {
|
|
2113
|
+
font-size: 11px;
|
|
2114
|
+
letter-spacing: 0.04em;
|
|
2115
|
+
text-transform: uppercase;
|
|
2116
|
+
color: var(--ink-faint);
|
|
2117
|
+
flex-shrink: 0;
|
|
2118
|
+
min-width: 68px;
|
|
2119
|
+
}
|
|
2120
|
+
.palette__label { font-size: 13.5px; color: var(--ink); }
|
|
2121
|
+
.palette__item--active .palette__label { color: var(--accent-text); font-weight: 600; }
|
|
2122
|
+
.palette__hint, .palette__empty { font-size: 12px; color: var(--ink-faint); }
|
|
2123
|
+
.palette__empty { padding: 14px 12px; line-height: 1.6; }
|
|
2124
|
+
.palette__empty kbd {
|
|
2125
|
+
font-family: inherit;
|
|
2126
|
+
border: 1px solid var(--border);
|
|
2127
|
+
border-radius: 4px;
|
|
2128
|
+
padding: 0 4px;
|
|
2129
|
+
}
|
|
2130
|
+
html.palette-open { overflow: hidden; }
|
|
2131
|
+
|
|
2132
|
+
@media (max-width: 768px) {
|
|
2133
|
+
/* The slot keeps its icon as an affordance; the label + hint would crowd the
|
|
2134
|
+
title on a phone. Ctrl/Cmd-K still opens it on a keyboard. */
|
|
2135
|
+
.topbar-jump__label, .topbar-jump__kbd { display: none; }
|
|
2136
|
+
.topbar-jump { padding: 0 8px; }
|
|
2137
|
+
.palette__panel { margin-top: 6vh; }
|
|
2138
|
+
.palette__group { min-width: 56px; }
|
|
2139
|
+
}
|