@bongos/core 1.19.725 → 1.19.727
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 +179 -494
- package/.devcontainer/Dockerfile +1 -1
- package/.devcontainer/devcontainer.json +2 -2
- package/.devcontainer/healthcheck.sh +1 -1
- package/.devcontainer/init-firewall.sh +1 -1
- package/.devcontainer/post-create.sh +2 -2
- package/.env.local.example +1 -1
- package/Dockerfile +1 -1
- package/docs/copy-inventory.md +1 -1
- package/docs/copy-registry.json +9 -9
- package/docs/module-api-changelog.md +4 -0
- package/docs/recipes/devbox-app-release.md +4 -4
- package/modules/dev-box/app/scripts/dmgbuild-settings.py +5 -5
- package/modules/dev-box/app/scripts/gen-brand.js +1 -1
- package/modules/dev-box/app/src/brand.js +1 -1
- package/modules/dev-box/app/test/unit.mjs +16 -16
- package/modules/dev-box/box-access.js +1 -1
- package/modules/dev-box/routes/box.js +1 -1
- package/modules/discord/discord-approvals.js +1 -1
- package/modules/grading/grader-model.js +1 -1
- package/modules/grading/grader-prompt.js +1 -1
- package/modules/grading/grader-workers/quality.js +1 -1
- package/modules/hall-ui/module.json +1 -1
- package/modules/hall-ui/public/brand-apply.js +1 -1
- package/modules/hall-ui/public/shell.js +1 -1
- package/modules/hall-ui/public/work.js +1 -1
- package/modules/lifecycle/conflict-resolve.js +1 -1
- package/modules/lifecycle/db-analytics.js +1 -1
- package/modules/lifecycle/routes/analytics.js +1 -1
- package/modules/onboarding/approval-broadcast.js +1 -1
- package/modules/onboarding/onboarding.js +1 -1
- package/modules/provisioning/tests/liveness.mjs +1 -1
- package/modules/public-landing/public/index.html +1 -1
- package/modules/public-landing/public/projects-floor.states.json +2 -2
- package/modules/public-landing/public/projects.probes.json +4 -4
- package/modules/public-landing/public/projects.states.json +2 -2
- package/modules/status-ui/module.json +1 -1
- package/modules/status-ui/public/status.js +4 -4
- package/modules/status-ui/public/style.css +1 -1
- package/modules/ui-design/kit/fixtures/cost-summary.json +1 -1
- package/modules/ui-design/kit/fixtures/featured-hub.json +1 -1
- package/modules/ui-design/kit/fixtures/featured.json +1 -1
- package/modules/ui-design/kit/fixtures/leaderboard.json +1 -1
- package/modules/ui-design/kit/fixtures/my-projects.json +1 -1
- package/modules/ui-design/kit/fixtures/progress.json +1 -1
- package/modules/ui-design/kit/fixtures/recent-shipped.json +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/cron/style_guide_audit.sh +1 -1
- package/scripts/discord/lib.js +1 -1
- package/scripts/discord/post.js +1 -1
- package/scripts/gds/audit-authorship.sh +1 -1
- package/scripts/gds/audit-replay.sh +29 -2
- package/scripts/gds/audit-ships.js +1 -1
- package/scripts/gds/backfill-sessions.js +2 -2
- package/scripts/gds/cf-tunnel.js +4 -4
- package/scripts/gds/claude-materialize.js +2 -2
- package/scripts/gds/cli-lib.js +6 -6
- package/scripts/gds/cutover-codemod.js +1 -1
- package/scripts/gds/dev-lib.js +2 -2
- package/scripts/gds/diagnose-achievements.js +2 -2
- package/scripts/gds/fitness-checks-identity.js +6 -4
- package/scripts/gds/gate-review.js +14 -6
- package/scripts/gds/gen-diagrams.js +1 -1
- package/scripts/gds/leak-scan-allowlist.js +293 -0
- package/scripts/gds/learning-capture.js +1 -1
- package/scripts/gds/linkify-refs.js +2 -2
- package/scripts/gds/local-preview-lib.js +1 -1
- package/scripts/gds/mirror-lineage-check.js +1 -1
- package/scripts/gds/mirror-redact.js +17 -2
- package/scripts/gds/newcomer-floor.templates.json +1 -1
- package/scripts/gds/package-core.js +18 -1
- package/scripts/gds/paste-token.js +1 -1
- package/scripts/gds/provision-units.js +2 -2
- package/scripts/gds/publish-manifest.js +15 -0
- package/scripts/gds/repo-metrics.js +1 -1
- package/scripts/gds/sandbox-stage.js +1 -1
- package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
- package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
- package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
- package/scripts/gds/seed-bongos-tasks.js +2 -2
- package/scripts/gds/seed-gds-v4-tasks.js +1 -1
- package/scripts/gds/seed-medusa-tasks.js +10 -10
- package/scripts/gds/seed-module-upstreaming.js +1 -1
- package/scripts/gds/seed-productization-tasks.js +6 -6
- package/scripts/gds/seed-provisioning-tasks.js +2 -2
- package/scripts/gds/seed-staging.sh +19 -6
- package/scripts/gds/ship-deploy-target.js +1 -1
- package/scripts/gds/ship-flow.js +1 -1
- package/scripts/gds/smoke-gds.js +1 -1
- package/scripts/status-probe.mjs +2 -2
- package/src/bongos/auth-discord.js +2 -2
- package/src/bongos/live-channel.js +1 -1
- package/src/bongos/permission-path-check.js +80 -3
- package/src/bongos/pool.js +1 -1
- package/src/bongos/routes/auth.js +11 -11
- package/src/bongos/routes/security.js +1 -1
- package/src/bongos/routes.js +1 -1
- package/src/branding.js +1 -1
- package/src/devbox-downloads.js +1 -1
- package/src/instance-config.js +2 -2
- package/src/module-api.js +1 -1
- package/src/module-loader/provenance.js +2 -2
- package/tests/art_stage.mjs +2 -2
- package/tests/auth_anthropic_identity.mjs +1 -1
- package/tests/auth_duplicate_cookie.mjs +1 -1
- package/tests/auth_error_brand.mjs +1 -1
- package/tests/auth_inactive_builder.mjs +1 -1
- package/tests/backup_cli.mjs +4 -4
- package/tests/bongos_box_connect.mjs +2 -2
- package/tests/bongos_downloads.mjs +2 -2
- package/tests/bongos_login.mjs +5 -5
- package/tests/box_connect_e2e.mjs +2 -2
- package/tests/box_dns_repoint.mjs +10 -10
- package/tests/box_host_keys.mjs +1 -1
- package/tests/box_onboard.mjs +9 -9
- package/tests/box_scope_session.mjs +1 -1
- package/tests/box_terminal_ssrf.mjs +7 -7
- package/tests/boxes.mjs +9 -9
- package/tests/branding.mjs +2 -2
- package/tests/bump_version.mjs +2 -2
- package/tests/cf_tunnel.mjs +40 -40
- package/tests/cli_token_reissue.mjs +7 -7
- package/tests/cloud_bongos_pack.mjs +1 -1
- package/tests/currency_label.mjs +8 -8
- package/tests/dev_lib.mjs +4 -4
- package/tests/devbox_dmg_backdrop.mjs +1 -1
- package/tests/devbox_downloads.mjs +2 -2
- package/tests/devbox_icons.mjs +1 -1
- package/tests/discord_approvals.mjs +1 -1
- package/tests/discord_oauth.mjs +2 -2
- package/tests/executed_closure.mjs +6 -1
- package/tests/first_admin_bootstrap.mjs +1 -1
- package/tests/gate_approvals.mjs +5 -5
- package/tests/government_protected_surfaces.mjs +137 -0
- package/tests/grade_aggregates_unavailable.mjs +1 -1
- package/tests/hook_user_agents.mjs +2 -2
- package/tests/init.mjs +6 -6
- package/tests/instance_config.mjs +1 -1
- package/tests/instance_manifest.mjs +5 -5
- package/tests/instance_mismatch_guard.mjs +13 -13
- package/tests/leak_scan_allowlist.mjs +94 -0
- package/tests/migrate_root_resolution.mjs +4 -4
- package/tests/mirror_redact.mjs +28 -4
- package/tests/module_catalog.mjs +5 -5
- package/tests/module_submissions.mjs +3 -3
- package/tests/package_core.mjs +1 -1
- package/tests/parallel-load.mjs +6 -6
- package/tests/projects_hub.mjs +2 -2
- package/tests/provision.mjs +50 -50
- package/tests/provisioning_github_app_routes.mjs +1 -1
- package/tests/provisioning_onboard_mode.mjs +2 -2
- package/tests/publish_reconciler.mjs +4 -4
- package/tests/sandbox_stage.mjs +1 -1
- package/tests/scrubber_corpus.mjs +3 -3
- package/tests/search_isolation.mjs +1 -1
- package/tests/session_records.mjs +1 -1
- package/tests/ship_card.mjs +6 -6
- package/tests/ship_ci_deploy.mjs +1 -1
- package/tests/single_host_hall.mjs +9 -9
- package/tests/smoke_preflight.mjs +1 -1
- package/tests/smoke_target.mjs +1 -1
- package/tests/status-probe.mjs +1 -1
- package/tests/status_mirror_sync.mjs +1 -1
- package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
- package/docs/design/mocks/_schemes.css +0 -604
- package/docs/design/mocks/component-sheet.html +0 -428
- package/docs/design/mocks/hall/_tokens.css +0 -370
- package/docs/design/mocks/hall/board/v1.html +0 -846
- package/docs/design/mocks/hall/board/v2.html +0 -858
- package/docs/design/mocks/hall/board/v3.html +0 -884
- package/docs/design/mocks/hall/goals/v1.html +0 -1212
- package/docs/design/mocks/hall/goals/v2.html +0 -1192
- package/docs/design/mocks/hall/goals/v3.html +0 -1205
- package/docs/design/mocks/hall/hall-sheet.html +0 -244
- package/docs/design/mocks/hall/reading/v1.html +0 -1125
- package/docs/design/mocks/hall/reading/v2.html +0 -1177
- package/docs/design/mocks/hall/reading/v3.html +0 -1150
- package/docs/design/mocks/hall/settings/v1.html +0 -1238
- package/docs/design/mocks/hall/settings/v2.html +0 -1235
- package/docs/design/mocks/hall/settings/v3.html +0 -1299
- package/docs/design/mocks/hall/task/v1.html +0 -633
- package/docs/design/mocks/hall/task/v2.html +0 -646
- package/docs/design/mocks/hall/task/v3.html +0 -647
- package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
- package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
- package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
- package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
- package/docs/design/mocks/hub/hub-sheet.html +0 -192
- package/docs/design/mocks/hub/mine.html +0 -465
- package/docs/design/mocks/hub/picker.html +0 -421
- package/docs/design/mocks/hub/planets.html +0 -356
- package/docs/design/mocks/hub/v1.html +0 -1209
- package/docs/design/mocks/hub/v2.html +0 -1257
- package/docs/design/mocks/hub/v3.html +0 -1496
- package/docs/design/mocks/hub/wizard.html +0 -421
- package/docs/design/mocks/landing/landing-sheet.html +0 -131
- package/docs/design/mocks/landing/v1.html +0 -956
- package/docs/design/mocks/landing/v2.html +0 -708
- package/docs/design/mocks/landing/v3.html +0 -911
- package/docs/design/mocks/landing-page-mock.html +0 -687
- package/docs/design/mocks/landing-palettes.html +0 -103
- package/docs/design/mocks/projects-hub-mock.html +0 -991
- package/docs/design/mocks/projects-hub-variants.html +0 -146
- package/docs/design/mocks/projects-page-mock.html +0 -167
- package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
- package/docs/design/mocks/world/blue-hud/hall.html +0 -595
- package/docs/design/mocks/world/blue-hud/landing.html +0 -424
- package/docs/design/mocks/world/blue-hud/status.html +0 -410
- package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
- package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
- package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
- package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
- package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
- package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
- package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
- package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
- package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
- package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
- package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
- package/docs/design/mocks/world/organic-cards/hall.html +0 -625
- package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
- package/docs/design/mocks/world/organic-cards/landing.html +0 -420
- package/docs/design/mocks/world/organic-cards/status.html +0 -458
- package/docs/design/mocks/world/world-sheet.html +0 -156
|
@@ -1,647 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en" data-mode="dark" data-theme="dark">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>Task detail, the hall in the world, v3 "the glass hall" (task 1003302)</title>
|
|
7
|
-
<link rel="icon" href="data:,">
|
|
8
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Manrope:wght@300;400;500;600&display=swap">
|
|
11
|
-
<link rel="stylesheet" href="../_tokens.css">
|
|
12
|
-
<style>
|
|
13
|
-
body{
|
|
14
|
-
/* the composition tokens for THIS version live here, on body, never on :root. v3 is the owner's dark
|
|
15
|
-
reference: the hall's own rendered plate sits behind the whole shell in dark under --plate-veil,
|
|
16
|
-
the sidebar and the topbar are glass over it, the record is one bg-card panel at --radius. The
|
|
17
|
-
plate token ships as none until the hall shoots its own plate, so this page is composed to be
|
|
18
|
-
complete without it: the ground then reads as the flat void, which is what light shows anyway. */
|
|
19
|
-
--shell-pad:24px;
|
|
20
|
-
--gutter:30px;
|
|
21
|
-
--content-w:1040px;
|
|
22
|
-
--panel-pad:34px;
|
|
23
|
-
--rail-open:248px;
|
|
24
|
-
--drawer-w:284px;
|
|
25
|
-
--nav-h:44px;
|
|
26
|
-
--air:34px;
|
|
27
|
-
margin:0;
|
|
28
|
-
background:var(--bg);
|
|
29
|
-
color:var(--ink);
|
|
30
|
-
font-family:var(--font-body);
|
|
31
|
-
font-size:16px;
|
|
32
|
-
line-height:1.5;
|
|
33
|
-
-webkit-font-smoothing:antialiased;
|
|
34
|
-
}
|
|
35
|
-
*{box-sizing:border-box;}
|
|
36
|
-
|
|
37
|
-
/* the ground: the hall's own plate under its veil. --plate is none until the hall shoots one, so
|
|
38
|
-
nothing paints here today and the void is the honest fallback. In light --plate-veil is none too:
|
|
39
|
-
light is the same room on paper, never a black panel. */
|
|
40
|
-
.plateGround{position:fixed;inset:0;z-index:0;pointer-events:none;background-image:var(--plate);background-size:cover;background-position:center;background-repeat:no-repeat;}
|
|
41
|
-
.plateGround::after{content:"";position:absolute;inset:0;background-image:var(--plate-veil);}
|
|
42
|
-
|
|
43
|
-
/* ── the skip link ── */
|
|
44
|
-
.skip{position:fixed;left:14px;top:-80px;z-index:200;display:inline-flex;align-items:center;min-height:38px;padding:0 18px;border-radius:var(--radius-pill);background:var(--bg-card);border:1px solid var(--rule);color:var(--ink);font-size:14px;text-decoration:none;transition:top 200ms cubic-bezier(.2,.7,.3,1);}
|
|
45
|
-
.skip:focus{top:10px;}
|
|
46
|
-
|
|
47
|
-
/* ── focus: one two tone ring, everywhere ── */
|
|
48
|
-
a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--focus);outline-offset:3px;box-shadow:0 0 0 8px var(--bg);border-radius:4px;}
|
|
49
|
-
#main:focus,#main:focus-visible{outline:none;}
|
|
50
|
-
body[data-state="focus"] .is-focus{outline:2px solid var(--focus);outline-offset:3px;box-shadow:0 0 0 8px var(--bg);border-radius:4px;}
|
|
51
|
-
|
|
52
|
-
/* ══ the shell: glass over the ground ══ */
|
|
53
|
-
.app-scrim{display:none;position:fixed;inset:0;z-index:var(--z-scrim);background:rgba(0,0,0,.55);}
|
|
54
|
-
|
|
55
|
-
.app-sidebar{position:fixed;left:0;top:0;bottom:0;width:var(--sidebar-w-rail);z-index:var(--z-sidebar);display:flex;flex-direction:column;overflow:hidden;background:var(--glass);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border-right:1px solid var(--glass-edge);}
|
|
56
|
-
/* the rail is the default at EVERY width; it opens on hover or focus-within, over the content,
|
|
57
|
-
so nothing below it reflows. No transition: the world authors motion on plates, not on chrome. */
|
|
58
|
-
.app-sidebar:hover,.app-sidebar:focus-within{width:var(--rail-open);}
|
|
59
|
-
.app-sidebar__brand{flex:none;height:var(--topbar-h);display:flex;align-items:center;padding:0 20px;}
|
|
60
|
-
.brand-mark{display:flex;align-items:center;gap:12px;min-height:38px;min-width:40px;text-decoration:none;color:var(--ink);}
|
|
61
|
-
.brand-mark__dot{width:10px;height:10px;border-radius:999px;border:1px solid var(--ink);flex:none;margin-left:2px;}
|
|
62
|
-
.brand-mark__name{font-weight:500;font-size:15px;letter-spacing:-.015em;white-space:nowrap;display:none;}
|
|
63
|
-
.app-sidebar:hover .brand-mark__name,.app-sidebar:focus-within .brand-mark__name{display:block;}
|
|
64
|
-
.app-sidebar__nav{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:8px 0 14px;}
|
|
65
|
-
.app-sidebar__nav::-webkit-scrollbar{width:0;}
|
|
66
|
-
.nav-group{padding:0 0 6px;}
|
|
67
|
-
.nav-group__head{display:none;align-items:center;justify-content:space-between;width:100%;min-height:30px;padding:8px 20px 6px;background:none;border:0;cursor:pointer;color:var(--ink-faint);font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;white-space:nowrap;}
|
|
68
|
-
.app-sidebar:hover .nav-group__head,.app-sidebar:focus-within .nav-group__head{display:flex;}
|
|
69
|
-
.nav-group__chevron{width:10px;height:6px;stroke:currentColor;fill:none;stroke-width:1.4;flex:none;}
|
|
70
|
-
.nav-item{display:flex;align-items:center;gap:14px;min-height:var(--nav-h);padding:0 20px;border-left:2px solid transparent;color:var(--ink-faint);text-decoration:none;font-size:14.5px;text-transform:lowercase;white-space:nowrap;}
|
|
71
|
-
.nav-item__label{display:none;overflow:hidden;text-overflow:ellipsis;}
|
|
72
|
-
.app-sidebar:hover .nav-item__label,.app-sidebar:focus-within .nav-item__label{display:block;}
|
|
73
|
-
.nav-icon{width:16px;height:16px;flex:none;stroke:currentColor;fill:none;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round;}
|
|
74
|
-
.nav-item:hover{color:var(--ink);background:var(--glass);}
|
|
75
|
-
.nav-item--active{color:var(--ink);border-left-color:var(--accent);}
|
|
76
|
-
.app-sidebar__foot{flex:none;border-top:1px solid var(--glass-edge);padding:8px 12px 12px;display:flex;flex-direction:column;align-items:stretch;gap:2px;}
|
|
77
|
-
.app-sidebar:hover .app-sidebar__foot,.app-sidebar:focus-within .app-sidebar__foot{flex-direction:row;align-items:center;gap:8px;padding:10px 18px 14px;}
|
|
78
|
-
.shell-user{display:flex;align-items:center;gap:11px;min-height:42px;justify-content:center;text-decoration:none;color:var(--ink);min-width:0;}
|
|
79
|
-
.app-sidebar:hover .shell-user,.app-sidebar:focus-within .shell-user{flex:1;justify-content:flex-start;}
|
|
80
|
-
.shell-user__avatar{width:28px;height:28px;border-radius:999px;flex:none;background:var(--glass-strong);border:1px solid var(--glass-edge);}
|
|
81
|
-
.shell-user__meta{display:none;min-width:0;}
|
|
82
|
-
.app-sidebar:hover .shell-user__meta,.app-sidebar:focus-within .shell-user__meta{display:grid;}
|
|
83
|
-
.shell-user__name{font-size:13.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
|
|
84
|
-
.shell-user__rank{font-family:var(--label-face);font-size:10.5px;letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);}
|
|
85
|
-
.shell-home,.shell-signout{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:34px;flex:none;color:var(--ink-faint);text-decoration:none;}
|
|
86
|
-
.shell-home:hover,.shell-signout:hover{color:var(--ink);}
|
|
87
|
-
.shell-home svg,.shell-signout svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round;}
|
|
88
|
-
|
|
89
|
-
.app-topbar{position:fixed;top:0;left:var(--sidebar-w-rail);right:0;height:var(--topbar-h);z-index:var(--z-topbar);display:flex;align-items:center;gap:16px;padding:0 var(--shell-pad);background:var(--glass);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border-bottom:1px solid var(--glass-edge);}
|
|
90
|
-
.topbar-menu{display:none;align-items:center;justify-content:center;width:36px;height:36px;margin-left:-8px;background:none;border:0;color:var(--ink);cursor:pointer;}
|
|
91
|
-
.topbar-menu svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.4;stroke-linecap:round;}
|
|
92
|
-
.topbar-title{margin:0;font-family:var(--font-display);font-weight:300;font-size:22px;letter-spacing:-.03em;text-transform:lowercase;color:var(--ink);}
|
|
93
|
-
.topbar-side{margin-left:auto;display:flex;align-items:center;gap:10px;}
|
|
94
|
-
.topbar-note{font-family:var(--font-mono);font-size:12px;font-variant-numeric:tabular-nums;color:var(--ink-faint);}
|
|
95
|
-
.topbar-jump{display:inline-flex;align-items:center;gap:9px;min-height:34px;padding:0 14px;background:var(--glass);border:1px solid var(--glass-edge);border-radius:var(--radius-pill);color:var(--ink-soft);cursor:pointer;font-family:var(--font-body);font-size:13.5px;text-transform:lowercase;}
|
|
96
|
-
.topbar-jump:hover{background:var(--glass-strong);color:var(--ink);}
|
|
97
|
-
.topbar-jump__kbd{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-faint);border:1px solid var(--glass-edge);border-radius:4px;padding:1px 5px;}
|
|
98
|
-
.topbar-jump__ic{display:none;width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.4;stroke-linecap:round;}
|
|
99
|
-
.zoom-toggle,.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;background:none;border:0;color:var(--ink-faint);cursor:pointer;}
|
|
100
|
-
.zoom-toggle:hover,.theme-toggle:hover{color:var(--ink);}
|
|
101
|
-
.zoom-toggle svg,.theme-toggle svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round;}
|
|
102
|
-
|
|
103
|
-
.app-content{position:relative;z-index:1;margin-left:var(--sidebar-w-rail);padding:var(--topbar-h) 0 0;min-height:100vh;}
|
|
104
|
-
.wrap{max-width:var(--content-w);margin:0 auto;padding:30px var(--gutter) 84px;}
|
|
105
|
-
|
|
106
|
-
/* ══ the record: one panel at --radius, the loosest of the three ══ */
|
|
107
|
-
.panel{background:var(--bg-card);border:1px solid var(--rule-soft);border-radius:var(--radius);padding:var(--panel-pad);}
|
|
108
|
-
.panel + .panel{margin-top:18px;}
|
|
109
|
-
|
|
110
|
-
.crumb{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;padding:0 4px 16px;}
|
|
111
|
-
.backlink{display:inline-flex;align-items:center;gap:7px;min-height:24px;padding:3px 0;color:var(--ink-soft);text-decoration:none;font-size:13.5px;text-transform:lowercase;}
|
|
112
|
-
.backlink:hover{color:var(--ink);text-decoration:underline;}
|
|
113
|
-
.backlink .ic{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;}
|
|
114
|
-
.crumbsub{margin:0;font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);font-variant-numeric:tabular-nums;}
|
|
115
|
-
.sE,.sX,.sL{display:none;}
|
|
116
|
-
|
|
117
|
-
.kind{display:flex;align-items:center;gap:14px;margin:0 0 16px;font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);}
|
|
118
|
-
.pill{display:inline-flex;align-items:center;min-height:26px;padding:0 13px;border-radius:var(--radius-pill);border:1px solid var(--rule);font-family:var(--font-body);font-size:12.5px;font-weight:500;letter-spacing:0;text-transform:lowercase;color:var(--ink-soft);background:none;}
|
|
119
|
-
.pill--ok{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 42%, transparent);background:var(--ok-weak);}
|
|
120
|
-
.pill--warn{color:var(--warn);border-color:color-mix(in srgb, var(--warn) 42%, transparent);background:var(--warn-weak);}
|
|
121
|
-
.pill--danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 42%, transparent);background:var(--danger-weak);}
|
|
122
|
-
.pill--info{color:var(--info);border-color:color-mix(in srgb, var(--info) 42%, transparent);background:var(--info-weak);}
|
|
123
|
-
.pill--none{color:var(--ink-faint);}
|
|
124
|
-
.pill--sm{min-height:22px;padding:0 9px;font-size:11.5px;}
|
|
125
|
-
|
|
126
|
-
h1.recTitle{margin:0 0 18px;font-family:var(--font-display);font-weight:300;font-size:clamp(25px,2.9vw,38px);line-height:1.12;letter-spacing:-.032em;color:var(--ink);max-width:24ch;}
|
|
127
|
-
.tid{font-family:var(--font-mono);font-size:.56em;letter-spacing:0;color:var(--ink-faint);font-variant-numeric:tabular-nums;margin-right:.5em;vertical-align:.14em;}
|
|
128
|
-
.meta{margin:0 0 8px;font-size:14.5px;color:var(--ink-soft);font-variant-numeric:tabular-nums;}
|
|
129
|
-
.meta b{font-weight:500;color:var(--ink);}
|
|
130
|
-
.note{margin:0 0 8px;font-size:14.5px;color:var(--ink-soft);font-variant-numeric:tabular-nums;}
|
|
131
|
-
.goalline{margin:18px 0 0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:15px;color:var(--ink-soft);}
|
|
132
|
-
.goalline a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--rule);display:inline-block;padding:3px 0;min-height:24px;line-height:18px;}
|
|
133
|
-
.goalline a:hover{border-bottom-color:var(--ink);}
|
|
134
|
-
.chip{display:inline-flex;align-items:center;gap:8px;min-height:26px;padding:0 12px;border:1px solid var(--rule-soft);border-radius:var(--radius-pill);font-size:12.5px;color:var(--ink-soft);}
|
|
135
|
-
.chip i{font-style:normal;font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;color:var(--ink-faint);text-transform:lowercase;}
|
|
136
|
-
|
|
137
|
-
.figs{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:var(--air) 0 0;border-top:1px solid var(--rule-soft);}
|
|
138
|
-
.fig{padding:20px 20px 4px 20px;border-left:1px solid var(--rule-soft);}
|
|
139
|
-
.fig:first-child{border-left:0;padding-left:0;}
|
|
140
|
-
.figL{display:block;font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);margin-bottom:12px;}
|
|
141
|
-
.figV{display:block;font-family:var(--font-display);font-weight:300;font-size:clamp(28px,3.2vw,44px);line-height:1;letter-spacing:-.035em;color:var(--ink);font-variant-numeric:tabular-nums;}
|
|
142
|
-
.figV u{text-decoration:none;font-size:.4em;letter-spacing:0;color:var(--ink-faint);margin-left:.3em;font-family:var(--font-mono);}
|
|
143
|
-
|
|
144
|
-
/* the world's signature component: five beats, exactly one lit */
|
|
145
|
-
.rail{display:grid;grid-template-columns:repeat(5,1fr);gap:0;margin:var(--air) 0 0;list-style:none;padding:0;}
|
|
146
|
-
.step{border-top:1px solid var(--rule-soft);padding:16px 18px 0 0;}
|
|
147
|
-
.stepDot{width:7px;height:7px;border-radius:999px;border:1px solid var(--ink-faint);margin-bottom:13px;}
|
|
148
|
-
.stepN{display:block;font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);margin-bottom:5px;}
|
|
149
|
-
.stepC{display:block;font-size:12.5px;line-height:1.35;color:var(--ink-faint);}
|
|
150
|
-
.step[aria-current="step"]{border-top-color:var(--accent);}
|
|
151
|
-
.step[aria-current="step"] .stepDot{background:var(--accent);border-color:var(--accent);}
|
|
152
|
-
.step[aria-current="step"] .stepN{color:var(--ink);}
|
|
153
|
-
.step[aria-current="step"] .stepC{color:var(--ink-soft);}
|
|
154
|
-
|
|
155
|
-
.sec{margin:var(--air) 0 0;}
|
|
156
|
-
.secH{display:flex;align-items:baseline;gap:12px;margin:0 0 14px;font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);}
|
|
157
|
-
.secH em{font-style:normal;font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;text-transform:lowercase;color:var(--ink-faint);border:1px solid var(--rule-soft);border-radius:var(--radius-pill);padding:2px 8px;}
|
|
158
|
-
.body{font-size:16px;line-height:1.6;color:var(--ink-soft);max-width:64ch;margin:0;}
|
|
159
|
-
.body b{font-weight:500;color:var(--ink);}
|
|
160
|
-
.desc{font-size:16px;line-height:1.65;color:var(--ink-soft);max-width:64ch;white-space:pre-wrap;margin:0;}
|
|
161
|
-
|
|
162
|
-
.fileList{list-style:none;margin:0;padding:0;}
|
|
163
|
-
.fileList li{border-top:1px solid var(--rule-soft);padding:13px 0;font-family:var(--font-mono);font-size:13px;color:var(--ink-soft);overflow-wrap:anywhere;}
|
|
164
|
-
.fileList li:first-child{border-top:0;padding-top:0;}
|
|
165
|
-
|
|
166
|
-
.depCols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--air);}
|
|
167
|
-
.depList{list-style:none;margin:0;padding:0;}
|
|
168
|
-
.depList li{display:flex;align-items:center;gap:14px;flex-wrap:wrap;border-top:1px solid var(--rule-soft);padding:14px 0;}
|
|
169
|
-
.depList li:first-child{border-top:0;padding-top:0;}
|
|
170
|
-
.dep{display:inline-flex;align-items:baseline;gap:11px;min-height:24px;padding:2px 0;color:var(--ink);text-decoration:none;font-size:15px;flex:1;min-width:0;}
|
|
171
|
-
.dep:hover{text-decoration:underline;}
|
|
172
|
-
.dep b{font-family:var(--font-mono);font-size:12.5px;font-weight:400;color:var(--ink-faint);font-variant-numeric:tabular-nums;flex:none;}
|
|
173
|
-
|
|
174
|
-
.ledger{display:grid;}
|
|
175
|
-
.lrow{display:grid;grid-template-columns:170px minmax(0,1fr);gap:22px;border-top:1px solid var(--rule-soft);padding:13px 0;align-items:baseline;}
|
|
176
|
-
.lrow:first-child{border-top:0;padding-top:0;}
|
|
177
|
-
.lk{font-family:var(--label-face);font-size:var(--label-size);letter-spacing:var(--label-space);text-transform:uppercase;color:var(--ink-faint);}
|
|
178
|
-
.lv{font-size:15px;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere;}
|
|
179
|
-
.lv.soft{color:var(--ink-soft);}
|
|
180
|
-
|
|
181
|
-
.actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
|
|
182
|
-
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 24px;border:1px solid var(--rule);border-radius:var(--radius-pill);background:none;color:var(--ink);font-family:var(--font-body);font-size:15px;text-transform:lowercase;text-decoration:none;cursor:pointer;}
|
|
183
|
-
.btn:hover{border-color:var(--ink-faint);}
|
|
184
|
-
.btn--primary{background:var(--accent);border-color:var(--accent);color:var(--accent-on);font-weight:500;}
|
|
185
|
-
.btn--primary:hover{background:var(--accent-lift);border-color:var(--accent-lift);}
|
|
186
|
-
.actNote{margin:0;font-size:14.5px;color:var(--ink-soft);flex:1;min-width:240px;}
|
|
187
|
-
|
|
188
|
-
.axes{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--rule-soft);}
|
|
189
|
-
.axis{padding:16px 18px 18px;border-left:1px solid var(--rule-soft);}
|
|
190
|
-
.axis:first-child{border-left:0;padding-left:0;}
|
|
191
|
-
.axisN{display:block;font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);margin-bottom:11px;}
|
|
192
|
-
.scoreRow{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;margin:22px 0 0;}
|
|
193
|
-
.scoreV{font-family:var(--font-display);font-weight:300;font-size:clamp(32px,3.8vw,50px);line-height:1;letter-spacing:-.035em;color:var(--ink);font-variant-numeric:tabular-nums;}
|
|
194
|
-
.scoreV u{text-decoration:none;font-size:.34em;color:var(--ink-faint);font-family:var(--font-mono);margin-left:.3em;}
|
|
195
|
-
|
|
196
|
-
/* ══ the states ══ */
|
|
197
|
-
.onlyLoading,.onlyEmpty,.onlyError{display:none;}
|
|
198
|
-
body[data-state="loading"] .rec,body[data-state="empty"] .rec,body[data-state="error"] .rec{display:none;}
|
|
199
|
-
body[data-state="loading"] .onlyLoading{display:block;}
|
|
200
|
-
body[data-state="empty"] .onlyEmpty{display:block;}
|
|
201
|
-
body[data-state="error"] .onlyError{display:block;}
|
|
202
|
-
body[data-state="loading"] .sP,body[data-state="empty"] .sP,body[data-state="error"] .sP{display:none;}
|
|
203
|
-
body[data-state="loading"] .sL{display:inline;}
|
|
204
|
-
body[data-state="empty"] .sE{display:inline;}
|
|
205
|
-
body[data-state="error"] .sX{display:inline;}
|
|
206
|
-
|
|
207
|
-
/* the skeleton tone has to survive BOTH modes: --bg-deep collapses to pure black in dark,
|
|
208
|
-
which made the whole loading state invisible on the black ground. */
|
|
209
|
-
.sk{background:color-mix(in srgb, var(--ink) 10%, var(--bg-card));border-radius:4px;}
|
|
210
|
-
.skEyebrow{width:160px;height:15px;margin-bottom:20px;}
|
|
211
|
-
.skTitle{width:min(100%,640px);height:34px;margin-bottom:12px;}
|
|
212
|
-
.skTitle2{width:min(70%,450px);height:34px;margin-bottom:22px;}
|
|
213
|
-
.skMeta{width:min(84%,520px);height:14px;margin-bottom:9px;}
|
|
214
|
-
.skMeta2{width:min(48%,290px);height:14px;}
|
|
215
|
-
.skFigL{width:74px;height:11px;margin-bottom:14px;}
|
|
216
|
-
.skFigV{width:88px;height:38px;}
|
|
217
|
-
.skSecH{width:118px;height:11px;margin-bottom:18px;}
|
|
218
|
-
.skLine{height:13px;margin-bottom:10px;}
|
|
219
|
-
.skVisual{margin-top:16px;height:220px;border-radius:var(--radius-sm);width:min(100%,620px);}
|
|
220
|
-
|
|
221
|
-
.bigLine{margin:0 0 14px;font-family:var(--font-display);font-weight:300;font-size:clamp(24px,2.6vw,34px);line-height:1.14;letter-spacing:-.03em;color:var(--ink);}
|
|
222
|
-
|
|
223
|
-
/* rail: v3's resting shape already. The state pins it, so hover cannot open it and the reviewer
|
|
224
|
-
sees the pure 64px rail the version defaults to at every width. */
|
|
225
|
-
body[data-state="rail"] .app-sidebar:hover,body[data-state="rail"] .app-sidebar:focus-within{width:var(--sidebar-w-rail);}
|
|
226
|
-
body[data-state="rail"] .app-sidebar:hover .nav-item__label,body[data-state="rail"] .app-sidebar:hover .nav-group__head,body[data-state="rail"] .app-sidebar:hover .brand-mark__name,body[data-state="rail"] .app-sidebar:hover .shell-user__meta{display:none;}
|
|
227
|
-
|
|
228
|
-
/* drawer: the mobile panel open over a scrim */
|
|
229
|
-
body[data-state="drawer"] .app-sidebar,body[data-state="drawer"] .app-sidebar:hover{width:var(--drawer-w);transform:none;z-index:var(--z-drawer);background:var(--bg-card);border-right:1px solid var(--rule);}
|
|
230
|
-
body[data-state="drawer"] .nav-item__label,body[data-state="drawer"] .nav-group__head,body[data-state="drawer"] .brand-mark__name,body[data-state="drawer"] .shell-user__meta{display:block;}
|
|
231
|
-
body[data-state="drawer"] .nav-group__head{display:flex;}
|
|
232
|
-
body[data-state="drawer"] .shell-user__meta{display:grid;}
|
|
233
|
-
body[data-state="drawer"] .app-sidebar__foot{flex-direction:row;align-items:center;gap:8px;padding:10px 18px 14px;}
|
|
234
|
-
body[data-state="drawer"] .shell-user{flex:1;justify-content:flex-start;}
|
|
235
|
-
body[data-state="drawer"] .app-scrim{display:block;}
|
|
236
|
-
body[data-state="drawer"] .topbar-menu{display:inline-flex;}
|
|
237
|
-
body[data-state="drawer"] .app-topbar{left:0;}
|
|
238
|
-
body[data-state="drawer"] .app-content{margin-left:0;}
|
|
239
|
-
body[data-state="drawer"] .wrap{max-width:640px;}
|
|
240
|
-
body[data-state="drawer"] .figs{grid-template-columns:repeat(2,1fr);}
|
|
241
|
-
body[data-state="drawer"] .fig{padding:18px 14px 4px;}
|
|
242
|
-
body[data-state="drawer"] .fig:nth-child(3){border-left:0;padding-left:0;}
|
|
243
|
-
body[data-state="drawer"] .fig:nth-child(3),body[data-state="drawer"] .fig:nth-child(4){border-top:1px solid var(--rule-soft);margin-top:14px;}
|
|
244
|
-
body[data-state="drawer"] .rail{grid-template-columns:1fr;}
|
|
245
|
-
body[data-state="drawer"] .depCols{grid-template-columns:1fr;}
|
|
246
|
-
body[data-state="drawer"] .axes{grid-template-columns:repeat(2,1fr);}
|
|
247
|
-
body[data-state="drawer"] .axis:nth-child(1),body[data-state="drawer"] .axis:nth-child(2),body[data-state="drawer"] .axis:nth-child(3){padding-left:0;}
|
|
248
|
-
body[data-state="drawer"] .axis:nth-child(3){border-left:0;}
|
|
249
|
-
body[data-state="drawer"] .lrow{grid-template-columns:1fr;gap:4px;}
|
|
250
|
-
|
|
251
|
-
@media (max-width:900px){
|
|
252
|
-
body{--gutter:20px;--shell-pad:16px;--panel-pad:22px;--air:26px;}
|
|
253
|
-
.app-sidebar{width:var(--drawer-w);transform:translateX(-100%);background:var(--bg-card);border-right:1px solid var(--rule);transition:transform 260ms cubic-bezier(.2,.7,.3,1);}
|
|
254
|
-
.app-sidebar:hover,.app-sidebar:focus-within{width:var(--drawer-w);}
|
|
255
|
-
.app-topbar{left:0;}
|
|
256
|
-
.app-content{margin-left:0;}
|
|
257
|
-
.topbar-menu{display:inline-flex;}
|
|
258
|
-
.topbar-note{display:none;}
|
|
259
|
-
.topbar-jump__label,.topbar-jump__kbd{display:none;}
|
|
260
|
-
.topbar-jump__ic{display:block;}
|
|
261
|
-
.topbar-jump{padding:0;width:34px;justify-content:center;}
|
|
262
|
-
body[data-state="drawer"] .app-sidebar{transform:none;}
|
|
263
|
-
body[data-state="rail"] .app-sidebar{transform:translateX(-100%);}
|
|
264
|
-
.figs{grid-template-columns:repeat(2,1fr);}
|
|
265
|
-
.fig{padding:18px 14px 4px;}
|
|
266
|
-
.fig:nth-child(3){border-left:0;padding-left:0;}
|
|
267
|
-
.fig:nth-child(3),.fig:nth-child(4){border-top:1px solid var(--rule-soft);margin-top:14px;}
|
|
268
|
-
.rail{grid-template-columns:1fr;}
|
|
269
|
-
.step{padding:14px 0 0;}
|
|
270
|
-
.depCols{grid-template-columns:1fr;}
|
|
271
|
-
.axes{grid-template-columns:repeat(2,1fr);}
|
|
272
|
-
.axis:nth-child(3){border-left:0;padding-left:0;}
|
|
273
|
-
.axis:nth-child(1),.axis:nth-child(2){padding-left:0;}
|
|
274
|
-
.lrow{grid-template-columns:1fr;gap:4px;}
|
|
275
|
-
h1.recTitle{max-width:none;}
|
|
276
|
-
.panel{border-radius:var(--radius-sm);}
|
|
277
|
-
}
|
|
278
|
-
</style>
|
|
279
|
-
<script>
|
|
280
|
-
(function(){try{var q=new URLSearchParams(location.search||location.hash.slice(1)||'').get('mode');
|
|
281
|
-
var m=(q==='light'||q==='dark')?q:'dark';
|
|
282
|
-
document.documentElement.setAttribute('data-mode',m);
|
|
283
|
-
document.documentElement.setAttribute('data-theme',m);}catch(e){}})();
|
|
284
|
-
</script>
|
|
285
|
-
</head>
|
|
286
|
-
<body class="mock" data-state="populated">
|
|
287
|
-
<!--
|
|
288
|
-
Task detail in the chrome world, v3 "the glass hall" (task 1003302, goal 1000081).
|
|
289
|
-
THESIS the hall gets a ground and a chrome: in dark the hall's own rendered plate sits behind the whole shell under its veil, the sidebar and topbar are glass over it, and the record is one calm bg-card panel at 16px radius with the loosest air of the three.
|
|
290
|
-
COMPOSITION first viewport at 1440: a 64px glass rail at the far left that opens to 248px over the content on hover or focus-within, a glass topbar, then one panel holding the TASK eyebrow with its pill, the title at 38px, the meta and goal lines, four figures on hairlines, and the five beat lifecycle rail with credit lit. Everything below is one column at 64ch inside the same panel.
|
|
291
|
-
LIGHT there is no plate in light and the veil resolves to none, so the ground is plain paper, the glass drops to a 5% ink tint with zero blur (a tint, not a frost), and the page becomes the same composition with the atmosphere removed. Light is the same room on paper, never a black panel.
|
|
292
|
-
RISK the plate token ships as none until the hall shoots its own, so today v3's atmosphere is theoretical and the version reads as v2 with rounder corners and more air; once a plate lands, a photographic ground under twenty seven dense pages costs legibility and adds a per page cost the other two do not have. The rail by default trades discoverability for calm: a newcomer sees twenty two unlabelled icons. Regions 15 and 16 (grade, session log) were proposed in this round and built by task 1003437; region 9 (the ship visual) draws nothing because task 1003322 shipped without one.
|
|
293
|
-
?state=populated the page with real data
|
|
294
|
-
?state=loading skeletons in the SHAPE of the final content
|
|
295
|
-
?state=empty a real URL for a task that does not exist
|
|
296
|
-
?state=error the feed failed
|
|
297
|
-
?state=rail the sidebar pinned to its 64px rail, hover disabled
|
|
298
|
-
?state=drawer the mobile drawer open
|
|
299
|
-
?state=focus keyboard focus rings on the page's real controls
|
|
300
|
-
-->
|
|
301
|
-
|
|
302
|
-
<a class="skip" href="#main">Skip to content</a>
|
|
303
|
-
|
|
304
|
-
<div class="plateGround" aria-hidden="true"></div>
|
|
305
|
-
<div class="app-scrim" id="app-scrim"></div>
|
|
306
|
-
|
|
307
|
-
<div class="app-sidebar" id="app-sidebar">
|
|
308
|
-
<div class="app-sidebar__brand">
|
|
309
|
-
<a class="brand-mark" href="/" id="brand-mark">
|
|
310
|
-
<span class="brand-mark__dot"></span><span class="brand-mark__name">Cloud Bongos</span></a>
|
|
311
|
-
</div>
|
|
312
|
-
<nav class="app-sidebar__nav" aria-label="Primary">
|
|
313
|
-
<div class="nav-group">
|
|
314
|
-
<a class="nav-item" id="nav-home" href="/" data-gate="always">
|
|
315
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M2.2 6.8 8 2.2l5.8 4.6V13H2.2z"/><path d="M6.4 13V9.4h3.2V13"/></svg>
|
|
316
|
-
<span class="nav-item__label">Home</span></a>
|
|
317
|
-
<a class="nav-item" id="nav-roadmap" href="/roadmap" data-gate="always">
|
|
318
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M2.4 4h11.2M2.4 8h7.4M2.4 12h4.6"/></svg>
|
|
319
|
-
<span class="nav-item__label">Roadmap</span></a>
|
|
320
|
-
<a class="nav-item" id="nav-goals" href="/goals" data-gate="always">
|
|
321
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="5.8"/><circle cx="8" cy="8" r="2.3"/></svg>
|
|
322
|
-
<span class="nav-item__label">Goals</span></a>
|
|
323
|
-
<a class="nav-item nav-item--active" id="nav-work" href="/work" data-gate="always" aria-current="page">
|
|
324
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><rect x="2.6" y="2.6" width="10.8" height="10.8" rx="1.4"/><path d="M5.4 8.2 7.2 10l3.4-4"/></svg>
|
|
325
|
-
<span class="nav-item__label">Tasks</span></a>
|
|
326
|
-
<a class="nav-item" id="nav-ideas" href="/ideas" data-gate="always">
|
|
327
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M5.6 9.6A4 4 0 1 1 10.4 9.6V11h-4.8z"/><path d="M6.6 13.4h2.8"/></svg>
|
|
328
|
-
<span class="nav-item__label">Ideas</span></a>
|
|
329
|
-
<a class="nav-item" id="nav-copy-desk" href="/copy-desk" data-gate="always">
|
|
330
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M5.2 2.6h5.6v2.8H5.2z"/><rect x="3" y="5.4" width="10" height="8" rx="1.2"/></svg>
|
|
331
|
-
<span class="nav-item__label">Copy desk</span></a>
|
|
332
|
-
</div>
|
|
333
|
-
<div class="nav-group nav-group--collapsible" data-group="you">
|
|
334
|
-
<button class="nav-group__head" data-gate="signed" data-group="you" aria-expanded="true" aria-controls="nav-group-you">
|
|
335
|
-
<span class="nav-group__head-label">You</span>
|
|
336
|
-
<svg class="nav-group__chevron" viewBox="0 0 10 6" aria-hidden="true"><path d="M1 1.4 5 5 9 1.4"/></svg></button>
|
|
337
|
-
<div class="nav-group__items" id="nav-group-you">
|
|
338
|
-
<a class="nav-item" id="nav-standing" href="/#standing" data-gate="signed">
|
|
339
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M3.2 13V8.4M8 13V3.4M12.8 13V6.4"/></svg>
|
|
340
|
-
<span class="nav-item__label">Standing</span></a>
|
|
341
|
-
<a class="nav-item" id="nav-profile" href="/profile" data-gate="signed">
|
|
342
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="5.4" r="2.6"/><path d="M3 13.4c.8-2.2 2.6-3.3 5-3.3s4.2 1.1 5 3.3"/></svg>
|
|
343
|
-
<span class="nav-item__label">Profile</span></a>
|
|
344
|
-
</div>
|
|
345
|
-
</div>
|
|
346
|
-
<div class="nav-group nav-group--collapsible" data-group="community">
|
|
347
|
-
<button class="nav-group__head" data-gate="signed" data-group="community" aria-expanded="true" aria-controls="nav-group-community">
|
|
348
|
-
<span class="nav-group__head-label">Community</span>
|
|
349
|
-
<svg class="nav-group__chevron" viewBox="0 0 10 6" aria-hidden="true"><path d="M1 1.4 5 5 9 1.4"/></svg></button>
|
|
350
|
-
<div class="nav-group__items" id="nav-group-community">
|
|
351
|
-
<a class="nav-item" id="nav-collab" href="/collab" data-gate="signed">
|
|
352
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="5.8" cy="5.4" r="2.2"/><circle cx="11" cy="6" r="1.7"/><path d="M2 13c.6-2 1.9-3 3.8-3s3.2 1 3.8 3"/></svg>
|
|
353
|
-
<span class="nav-item__label">Collab</span></a>
|
|
354
|
-
<a class="nav-item" id="nav-leaderboard" href="/#leaderboard" data-gate="signed">
|
|
355
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M5.2 2.6h5.6v3a2.8 2.8 0 0 1-5.6 0z"/><path d="M8 8.4v2.8M5.6 13.4h4.8"/></svg>
|
|
356
|
-
<span class="nav-item__label">Leaderboard</span></a>
|
|
357
|
-
<a class="nav-item" id="nav-people" href="/people" data-gate="signed">
|
|
358
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="5.6" cy="5.4" r="2.2"/><path d="M1.8 13c.5-2 1.9-3 3.8-3s3.3 1 3.8 3"/><path d="M11 3.4a2.2 2.2 0 0 1 0 4M11.6 10.3c1.5.3 2.4 1.2 2.8 2.7"/></svg>
|
|
359
|
-
<span class="nav-item__label">People</span></a>
|
|
360
|
-
</div>
|
|
361
|
-
</div>
|
|
362
|
-
<div class="nav-group nav-group--collapsible" data-group="docs">
|
|
363
|
-
<button class="nav-group__head" data-gate="signed" data-group="docs" aria-expanded="true" aria-controls="nav-group-docs">
|
|
364
|
-
<span class="nav-group__head-label">Docs</span>
|
|
365
|
-
<svg class="nav-group__chevron" viewBox="0 0 10 6" aria-hidden="true"><path d="M1 1.4 5 5 9 1.4"/></svg></button>
|
|
366
|
-
<div class="nav-group__items" id="nav-group-docs">
|
|
367
|
-
<a class="nav-item" id="nav-primer" href="/primer" data-gate="signed">
|
|
368
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M2.6 3h3.6A1.8 1.8 0 0 1 8 4.8v8a1.5 1.5 0 0 0-1.4-1.2H2.6z"/><path d="M13.4 3H9.8A1.8 1.8 0 0 0 8 4.8v8a1.5 1.5 0 0 1 1.4-1.2h4z"/></svg>
|
|
369
|
-
<span class="nav-item__label">Primer</span></a>
|
|
370
|
-
<a class="nav-item" id="nav-ranks" href="/ranks" data-gate="signed">
|
|
371
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 2.4 9.7 5.9l3.9.6-2.8 2.7.7 3.8L8 11.2 4.5 13l.7-3.8-2.8-2.7 3.9-.6z"/></svg>
|
|
372
|
-
<span class="nav-item__label">Ranks</span></a>
|
|
373
|
-
<a class="nav-item" id="nav-economy" href="/drachmae" data-gate="signed">
|
|
374
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="5.8"/><path d="M9.8 6.1a2.1 2.1 0 1 0-2.6 3.1h2.4"/></svg>
|
|
375
|
-
<span class="nav-item__label">Economy</span></a>
|
|
376
|
-
<a class="nav-item" id="nav-diagrams" href="/diagrams" data-gate="signed">
|
|
377
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><rect x="2.4" y="2.4" width="4.2" height="4.2" rx="1"/><rect x="9.4" y="9.4" width="4.2" height="4.2" rx="1"/><path d="M6.6 4.5h4.9v4.9"/></svg>
|
|
378
|
-
<span class="nav-item__label">Diagrams</span></a>
|
|
379
|
-
<a class="nav-item" id="nav-atlas" href="/atlas" data-gate="signed">
|
|
380
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="5.8"/><path d="M2.3 8h11.4"/><path d="M8 2.3c1.7 1.7 2.6 3.7 2.6 5.7S9.7 12 8 13.7C6.3 12 5.4 10 5.4 8s.9-4 2.6-5.7z"/></svg>
|
|
381
|
-
<span class="nav-item__label">Repo Atlas</span></a>
|
|
382
|
-
<a class="nav-item" id="nav-modules" href="/modules" data-gate="signed">
|
|
383
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M2.6 5.4 8 2.6l5.4 2.8L8 8.2z"/><path d="M2.6 5.4v5.2L8 13.4l5.4-2.8V5.4"/></svg>
|
|
384
|
-
<span class="nav-item__label">Modules</span></a>
|
|
385
|
-
<a class="nav-item" id="nav-apidocs" href="/docs" data-gate="signed">
|
|
386
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M6 4.6 2.9 8 6 11.4M10 4.6 13.1 8 10 11.4"/></svg>
|
|
387
|
-
<span class="nav-item__label">API docs</span></a>
|
|
388
|
-
</div>
|
|
389
|
-
</div>
|
|
390
|
-
<div class="nav-group nav-group--collapsible" data-group="government">
|
|
391
|
-
<button class="nav-group__head" data-gate="signed" data-group="government" aria-expanded="true" aria-controls="nav-group-government">
|
|
392
|
-
<span class="nav-group__head-label">Government</span>
|
|
393
|
-
<svg class="nav-group__chevron" viewBox="0 0 10 6" aria-hidden="true"><path d="M1 1.4 5 5 9 1.4"/></svg></button>
|
|
394
|
-
<div class="nav-group__items" id="nav-group-government">
|
|
395
|
-
<a class="nav-item" id="nav-watch" href="/watch" data-gate="signed">
|
|
396
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M1.9 8S4 4.3 8 4.3 14.1 8 14.1 8 12 11.7 8 11.7 1.9 8 1.9 8z"/><circle cx="8" cy="8" r="1.7"/></svg>
|
|
397
|
-
<span class="nav-item__label">Watch</span></a>
|
|
398
|
-
<a class="nav-item" id="nav-harbor" href="/harbor" data-gate="signed">
|
|
399
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="3.9" r="1.4"/><path d="M8 5.4v8M5.2 8h5.6"/><path d="M2.6 10c.4 2 2.6 3.3 5.4 3.3S13 12 13.4 10"/></svg>
|
|
400
|
-
<span class="nav-item__label">Harbor</span></a>
|
|
401
|
-
<a class="nav-item" id="nav-gate" href="/gate" data-gate="signed">
|
|
402
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M3 13.4V5.8L8 2.6l5 3.2v7.6"/><path d="M6.4 13.4V9.2h3.2v4.2"/></svg>
|
|
403
|
-
<span class="nav-item__label">Gate</span></a>
|
|
404
|
-
<a class="nav-item" id="nav-sessions" href="/sessions" data-gate="signed">
|
|
405
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="5.8"/><path d="M8 4.8V8l2.2 1.5"/></svg>
|
|
406
|
-
<span class="nav-item__label">Sessions</span></a>
|
|
407
|
-
<a class="nav-item" id="nav-government" href="/government" data-gate="signed">
|
|
408
|
-
<svg class="nav-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 2.3l5 1.9v3.6c0 3-2.1 5.3-5 6.1-2.9-.8-5-3.1-5-6.1V4.2z"/></svg>
|
|
409
|
-
<span class="nav-item__label">Permissions</span></a>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
</nav>
|
|
413
|
-
<div class="app-sidebar__foot">
|
|
414
|
-
<a class="shell-user" id="shell-user" href="/settings" title="Settings">
|
|
415
|
-
<span class="shell-user__avatar"></span>
|
|
416
|
-
<span class="shell-user__meta">
|
|
417
|
-
<span class="shell-user__name">Percy Jackson</span>
|
|
418
|
-
<span class="shell-user__rank">Owner</span></span></a>
|
|
419
|
-
<a class="shell-home" href="/" title="Back to Cloud Bongos">
|
|
420
|
-
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M2.2 6.8 8 2.2l5.8 4.6V13H2.2z"/></svg></a>
|
|
421
|
-
<a class="shell-signout" href="/api/bongos/auth/logout" title="Sign out">
|
|
422
|
-
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6.4 3H3.2v10h3.2"/><path d="M9.8 5.5 12.3 8l-2.5 2.5M12.3 8H6.6"/></svg></a>
|
|
423
|
-
</div>
|
|
424
|
-
</div>
|
|
425
|
-
|
|
426
|
-
<header class="app-topbar" id="app-topbar">
|
|
427
|
-
<button class="topbar-menu" id="topbar-menu" aria-label="Open navigation" aria-expanded="false" aria-controls="app-sidebar">
|
|
428
|
-
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M2.5 4.5h11M2.5 8h11M2.5 11.5h11"/></svg></button>
|
|
429
|
-
<h2 class="topbar-title">Tasks</h2>
|
|
430
|
-
<div class="topbar-side">
|
|
431
|
-
<span class="topbar-note">BONGOS-V1</span>
|
|
432
|
-
<button class="topbar-jump is-focus" id="topbar-jump" aria-label="Jump to a page or record">
|
|
433
|
-
<svg class="topbar-jump__ic" viewBox="0 0 16 16" aria-hidden="true"><circle cx="7.2" cy="7.2" r="4.6"/><path d="M10.6 10.6 13.6 13.6"/></svg>
|
|
434
|
-
<span class="topbar-jump__label">Jump to</span><kbd class="topbar-jump__kbd">Ctrl K</kbd></button>
|
|
435
|
-
<button class="zoom-toggle" aria-label="Text size">
|
|
436
|
-
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M1.8 12.6 5.3 3.6l3.5 9M3 10h4.6M10.6 12.6V7M9 8.6h3.4"/></svg></button>
|
|
437
|
-
<button class="theme-toggle" aria-label="Switch theme">
|
|
438
|
-
<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="5.6"/><path d="M8 2.4v11.2"/></svg></button>
|
|
439
|
-
</div>
|
|
440
|
-
</header>
|
|
441
|
-
|
|
442
|
-
<main class="app-content" id="main" tabindex="-1">
|
|
443
|
-
<div class="wrap">
|
|
444
|
-
|
|
445
|
-
<!-- region 1: the way back, and the sub line -->
|
|
446
|
-
<div class="crumb">
|
|
447
|
-
<a class="backlink is-focus" href="/work">
|
|
448
|
-
<svg class="ic" viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 3.6 5 8l4.4 4.4"/><path d="M5 8h7.2"/></svg>Back to Tasks</a>
|
|
449
|
-
<p class="crumbsub"><span class="sP">Task 1003322</span><span class="sL">Loading task</span><span class="sE">Not found</span><span class="sX">Could not load</span></p>
|
|
450
|
-
</div>
|
|
451
|
-
|
|
452
|
-
<!-- loading: the skeleton takes the shape of the final panel, including the ship visual figure -->
|
|
453
|
-
<div class="onlyLoading panel" aria-hidden="true">
|
|
454
|
-
<div class="sk skEyebrow"></div>
|
|
455
|
-
<div class="sk skTitle"></div>
|
|
456
|
-
<div class="sk skTitle2"></div>
|
|
457
|
-
<div class="sk skMeta"></div>
|
|
458
|
-
<div class="sk skMeta2"></div>
|
|
459
|
-
<div class="figs">
|
|
460
|
-
<div class="fig"><div class="sk skFigL"></div><div class="sk skFigV"></div></div>
|
|
461
|
-
<div class="fig"><div class="sk skFigL"></div><div class="sk skFigV"></div></div>
|
|
462
|
-
<div class="fig"><div class="sk skFigL"></div><div class="sk skFigV"></div></div>
|
|
463
|
-
<div class="fig"><div class="sk skFigL"></div><div class="sk skFigV"></div></div>
|
|
464
|
-
</div>
|
|
465
|
-
<div class="sec"><div class="sk skSecH"></div>
|
|
466
|
-
<div class="sk skLine" style="width:min(100%,620px)"></div>
|
|
467
|
-
<div class="sk skLine" style="width:min(88%,540px)"></div>
|
|
468
|
-
<div class="sk skVisual"></div>
|
|
469
|
-
</div>
|
|
470
|
-
<div class="sec"><div class="sk skSecH"></div>
|
|
471
|
-
<div class="sk skLine" style="width:min(100%,640px)"></div>
|
|
472
|
-
<div class="sk skLine" style="width:min(94%,600px)"></div>
|
|
473
|
-
<div class="sk skLine" style="width:min(66%,420px)"></div>
|
|
474
|
-
</div>
|
|
475
|
-
</div>
|
|
476
|
-
|
|
477
|
-
<!-- empty: the honest task-not-found case, at a real URL for a task that does not exist -->
|
|
478
|
-
<section class="onlyEmpty panel">
|
|
479
|
-
<p class="kind">TASK <span class="pill pill--none">no such task</span></p>
|
|
480
|
-
<p class="bigLine">1003999, no such task</p>
|
|
481
|
-
<p class="body">Tasks in the ledger are numbered separately from GitHub pull requests, so this may be a PR number rather than a task. The work board lists everything that does exist.</p>
|
|
482
|
-
<div class="actions" style="margin-top:26px"><a class="btn" href="/work">Open the work board</a></div>
|
|
483
|
-
</section>
|
|
484
|
-
|
|
485
|
-
<!-- error: the feed failed. The record is untouched; only the read failed -->
|
|
486
|
-
<section class="onlyError panel">
|
|
487
|
-
<p class="kind">TASK <span class="pill pill--danger">feed unavailable</span></p>
|
|
488
|
-
<p class="bigLine">Could not load 1003322</p>
|
|
489
|
-
<p class="body">The task feed did not answer. Nothing on the record has changed, only the read failed. Try again in a moment, or open the work board.</p>
|
|
490
|
-
<div class="actions" style="margin-top:26px"><button class="btn" type="button">Try again</button><a class="btn" href="/work">Open the work board</a></div>
|
|
491
|
-
</section>
|
|
492
|
-
|
|
493
|
-
<article class="rec">
|
|
494
|
-
<section class="panel">
|
|
495
|
-
|
|
496
|
-
<!-- region 2: the kind eyebrow, and the one place a lifecycle state is coloured -->
|
|
497
|
-
<p class="kind">TASK <span class="pill pill--ok">shipped</span></p>
|
|
498
|
-
|
|
499
|
-
<!-- region 3 -->
|
|
500
|
-
<h1 class="recTitle"><span class="tid">1003322</span>Carve public-landing/ into modules/public-landing/: manifest, the apex-root web surface, the nested CLAUDE.md for a newcomer</h1>
|
|
501
|
-
|
|
502
|
-
<!-- region 4 and 5 -->
|
|
503
|
-
<p class="meta"><b>BONGOS-V1</b> · feature · engineer · P1 · min rank Trusted</p>
|
|
504
|
-
<p class="note">Created 28 August 2026, 2 days ago.</p>
|
|
505
|
-
|
|
506
|
-
<!-- region 6: the goal it lives in, with the category it inherits -->
|
|
507
|
-
<p class="goalline">Goal <a href="/goals#/goal/1000080">1000080, Apex UI pass 2</a> <span class="chip"><i>inherited</i>platform</span></p>
|
|
508
|
-
|
|
509
|
-
<div class="figs">
|
|
510
|
-
<div class="fig"><span class="figL">Credits</span><span class="figV">60</span></div>
|
|
511
|
-
<div class="fig"><span class="figL">Estimated</span><span class="figV">240<u>m</u></span></div>
|
|
512
|
-
<div class="fig"><span class="figL">Actual</span><span class="figV">37<u>m</u></span></div>
|
|
513
|
-
<div class="fig"><span class="figL">Priority</span><span class="figV">P1</span></div>
|
|
514
|
-
</div>
|
|
515
|
-
|
|
516
|
-
<!-- the world's signature component: five beats, exactly one lit -->
|
|
517
|
-
<ol class="rail" aria-label="Lifecycle">
|
|
518
|
-
<li class="step"><div class="stepDot"></div><span class="stepN">Claim</span><span class="stepC">one builder, one worktree</span></li>
|
|
519
|
-
<li class="step"><div class="stepDot"></div><span class="stepN">Build</span><span class="stepC">the code and the docs</span></li>
|
|
520
|
-
<li class="step"><div class="stepDot"></div><span class="stepN">Grade</span><span class="stepC">the panel reads the diff</span></li>
|
|
521
|
-
<li class="step"><div class="stepDot"></div><span class="stepN">Ship</span><span class="stepC">merged, then deployed</span></li>
|
|
522
|
-
<li class="step" aria-current="step"><div class="stepDot"></div><span class="stepN">Credit</span><span class="stepC">60 credits landed</span></li>
|
|
523
|
-
</ol>
|
|
524
|
-
|
|
525
|
-
<!-- region 7: the claim. The API surfaces the most recent claim only, never the full ledger -->
|
|
526
|
-
<section class="sec">
|
|
527
|
-
<p class="secH">Claim</p>
|
|
528
|
-
<p class="body">Last claimed by <b>Percy Jackson</b> on 30 August 2026 at 09:12. Released, outcome shipped.</p>
|
|
529
|
-
</section>
|
|
530
|
-
|
|
531
|
-
<!-- region 8 -->
|
|
532
|
-
<section class="sec">
|
|
533
|
-
<p class="secH">Value</p>
|
|
534
|
-
<p class="body">The front door is a module. <b>public-landing/</b> now lives at <b>modules/public-landing/</b>, the third web surface module after status-UI and hall-UI and the first that answers at the apex root instead of a subdomain. All five apex pages are byte identical as served, apart from the module's own entry in the injected module list.</p>
|
|
535
|
-
</section>
|
|
536
|
-
|
|
537
|
-
<!-- region 9: the ship visual. Task 1003322 shipped without one, so NOTHING is drawn here.
|
|
538
|
-
No placeholder, no empty frame, no "no visual" line. The figure's geometry is only
|
|
539
|
-
visible in the loading skeleton above, which is the honest reading of the shipped page. -->
|
|
540
|
-
|
|
541
|
-
<!-- region 10 -->
|
|
542
|
-
<section class="sec">
|
|
543
|
-
<p class="secH">Description</p>
|
|
544
|
-
<p class="desc">Carve public-landing/ into modules/public-landing/ so the front door is a module like status-UI and hall-UI.
|
|
545
|
-
|
|
546
|
-
The loader's web surface seam speaks one language: a Host header prefix ("status.", "builders."), matched with host.startsWith(s.host). The apex root is not a prefix of anything, it is whatever is left once the subdomains are taken. So a surface names where it answers in exactly one of two ways, never both and never neither: { host: "status." } or { apexRoot: true }.
|
|
547
|
-
|
|
548
|
-
An empty host string must be rejected. Every string starts with the empty string, so an empty prefix answers on builders. and status. too, and makes isModuleSurfaceHost() true for every request, which is the predicate eleven /builders guards use to decide to step aside. The hall would stop serving itself, silently, from a declaration that reads as correct.
|
|
549
|
-
|
|
550
|
-
Ships with: the manifest, the apex-root web surface, a nested CLAUDE.md a newcomer can read, and an ADR. Prove byte identity by hashing the five apex pages as served, before and after.</p>
|
|
551
|
-
</section>
|
|
552
|
-
|
|
553
|
-
<!-- region 11 -->
|
|
554
|
-
<section class="sec">
|
|
555
|
-
<p class="secH">Touches <em>8 files</em></p>
|
|
556
|
-
<ul class="fileList">
|
|
557
|
-
<li>modules/public-landing/</li>
|
|
558
|
-
<li>src/bongos/module-loader.js</li>
|
|
559
|
-
<li>src/bongos/platform-server.js</li>
|
|
560
|
-
<li>src/bongos/serve-internal.js</li>
|
|
561
|
-
<li>docs/adr/0218-the-apex-root-web-surface.md</li>
|
|
562
|
-
<li>docs/architecture.md</li>
|
|
563
|
-
<li>docs/file-map.md</li>
|
|
564
|
-
<li>tests/fitness.mjs</li>
|
|
565
|
-
</ul>
|
|
566
|
-
</section>
|
|
567
|
-
|
|
568
|
-
<!-- region 12: dependencies, both directions -->
|
|
569
|
-
<div class="sec depCols">
|
|
570
|
-
<section>
|
|
571
|
-
<p class="secH">Blocked by</p>
|
|
572
|
-
<ul class="depList">
|
|
573
|
-
<li><a class="dep" href="/task/1003298"><b>1003298</b>The landing is built in the chrome world, and the world becomes the token contract</a><span class="pill pill--sm pill--ok">shipped</span></li>
|
|
574
|
-
<li><a class="dep" href="/task/1003301"><b>1003301</b>The hub's poster card: the room behind an orb</a><span class="pill pill--sm pill--ok">shipped</span></li>
|
|
575
|
-
</ul>
|
|
576
|
-
</section>
|
|
577
|
-
<section>
|
|
578
|
-
<p class="secH">Blocks</p>
|
|
579
|
-
<ul class="depList">
|
|
580
|
-
<li><a class="dep" href="/task/1003302"><b>1003302</b>The builders' hall composition round: three versions of five archetypes</a><span class="pill pill--sm pill--warn">active</span></li>
|
|
581
|
-
<li><a class="dep" href="/task/1003303"><b>1003303</b>Build the picked hall into modules/hall-ui/public/style.css</a><span class="pill pill--sm pill--danger">blocked</span></li>
|
|
582
|
-
</ul>
|
|
583
|
-
</section>
|
|
584
|
-
</div>
|
|
585
|
-
|
|
586
|
-
<!-- region 13 -->
|
|
587
|
-
<section class="sec">
|
|
588
|
-
<p class="secH">Shipped</p>
|
|
589
|
-
<p class="body">Shipped 30 August 2026 by <b>Percy Jackson</b>, 2 hours ago.</p>
|
|
590
|
-
</section>
|
|
591
|
-
|
|
592
|
-
<!-- region 14: the actions. A shipped task has no lifecycle control left, so the panel
|
|
593
|
-
carries an explanatory note instead, and no accent door. That is the One Warm Thing
|
|
594
|
-
Rule doing its job: nothing here is pressable-or-live, so nothing here is warm. -->
|
|
595
|
-
<section class="sec">
|
|
596
|
-
<p class="secH">Actions</p>
|
|
597
|
-
<div class="actions">
|
|
598
|
-
<p class="actNote">This task has shipped and its credits have landed. Neither Ship it nor Confirm is available.</p>
|
|
599
|
-
<button class="btn is-focus" type="button" id="copy-prompt-btn">Copy prompt</button>
|
|
600
|
-
<a class="btn is-focus" href="/work">Open the work board</a>
|
|
601
|
-
</div>
|
|
602
|
-
</section>
|
|
603
|
-
</section>
|
|
604
|
-
|
|
605
|
-
<!-- region 15: the grade panel — proposed in this round, built by task 1003437. -->
|
|
606
|
-
<section class="panel">
|
|
607
|
-
<p class="secH">Grade</p>
|
|
608
|
-
<p class="body" style="margin-bottom:20px">The adversarial panel of four workers. Every worker must independently report pass before confirmed becomes credits; one concerns falls the task through to the manual confirm path.</p>
|
|
609
|
-
<div class="axes">
|
|
610
|
-
<div class="axis"><span class="axisN">narc</span><span class="pill pill--sm pill--ok">pass</span></div>
|
|
611
|
-
<div class="axis"><span class="axisN">quality</span><span class="pill pill--sm pill--ok">pass</span></div>
|
|
612
|
-
<div class="axis"><span class="axisN">hacker</span><span class="pill pill--sm pill--ok">pass</span></div>
|
|
613
|
-
<div class="axis"><span class="axisN">efficiency</span><span class="pill pill--sm pill--ok">pass</span></div>
|
|
614
|
-
</div>
|
|
615
|
-
<div class="scoreRow">
|
|
616
|
-
<span class="scoreV">8.4<u>/10</u></span>
|
|
617
|
-
<span class="pill pill--ok">verdict pass</span>
|
|
618
|
-
<span class="crumbsub">threshold 6 · panel v4.0 · claude-sonnet-5</span>
|
|
619
|
-
</div>
|
|
620
|
-
</section>
|
|
621
|
-
|
|
622
|
-
<!-- region 16: the session log — proposed in this round, built by task 1003437. -->
|
|
623
|
-
<section class="panel">
|
|
624
|
-
<p class="secH">Session log</p>
|
|
625
|
-
<div class="ledger">
|
|
626
|
-
<div class="lrow"><span class="lk">Session</span><span class="lv">30 August 2026, Percy Jackson, 37m</span></div>
|
|
627
|
-
<div class="lrow"><span class="lk">Credits awarded</span><span class="lv">60</span></div>
|
|
628
|
-
<div class="lrow"><span class="lk">Handoff</span><span class="lv soft">Goal 1000080 is complete, 28 of 28 shipped. Three stale comments in src/bongos/ still name a file absorbed into the hub in task 1002763; they were stale before this diff.</span></div>
|
|
629
|
-
<div class="lrow"><span class="lk">Full log</span><span class="lv"><a class="dep" href="/sessions" style="font-size:15px">Open in Sessions</a></span></div>
|
|
630
|
-
</div>
|
|
631
|
-
</section>
|
|
632
|
-
|
|
633
|
-
</article>
|
|
634
|
-
</div>
|
|
635
|
-
</main>
|
|
636
|
-
|
|
637
|
-
<script>
|
|
638
|
-
/* the mock's state contract: read ?state= once and apply it. Nothing is built here, and no motion. */
|
|
639
|
-
(function () {
|
|
640
|
-
var ok = ['populated', 'loading', 'empty', 'error', 'rail', 'drawer', 'focus'];
|
|
641
|
-
var s = new URLSearchParams(location.search || location.hash.slice(1) || '').get('state') || 'populated';
|
|
642
|
-
if (ok.indexOf(s) === -1) s = 'populated';
|
|
643
|
-
document.body.setAttribute('data-state', s);
|
|
644
|
-
})();
|
|
645
|
-
</script>
|
|
646
|
-
</body>
|
|
647
|
-
</html>
|