@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,428 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>Sunrise component sheet — projects surfaces redesign (task 1002696, Loop 1)</title>
|
|
7
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Baloo+2:wght@500;600;700&family=Quicksand:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap">
|
|
10
|
-
<style>
|
|
11
|
-
/* ════════════════════════════════════════════════════════════════════════
|
|
12
|
-
SUNRISE TOKEN LAYER — the future public-landing/assets/sunrise.css.
|
|
13
|
-
Two tiers:
|
|
14
|
-
· CONTRACT tokens — the branding pack overrides these (themeMarkup vars).
|
|
15
|
-
· DERIVED tokens — computed from contract tokens via color-mix, so an
|
|
16
|
-
instance re-theme carries the whole page with zero extra pack entries.
|
|
17
|
-
State colors (--ok/--warn/--err) are semantic, not brand: they stay fixed
|
|
18
|
-
unless a pack deliberately overrides them.
|
|
19
|
-
════════════════════════════════════════════════════════════════════════ */
|
|
20
|
-
:root{
|
|
21
|
-
/* contract tier (matches config/branding theme.ui.colors) */
|
|
22
|
-
--bg:#fff7ed; --bg-card:#ffffff; --bg-deep:#ffedd5;
|
|
23
|
-
--ink:#2a1f17; --ink-soft:#6b5d52; --ink-faint:#9c8d80;
|
|
24
|
-
--rule:#fdba74; --rule-soft:#fed7aa;
|
|
25
|
-
--accent:#f97316; --accent-deep:#ea580c; --sea:#38bdf8; --terracotta:#fb7185;
|
|
26
|
-
--font-display:"Baloo 2","Quicksand",system-ui,"Arial Rounded MT Bold",sans-serif;
|
|
27
|
-
--font-body:"Quicksand",system-ui,-apple-system,"Segoe UI",sans-serif;
|
|
28
|
-
--font-mono:"Fira Code",ui-monospace,SFMono-Regular,Menlo,monospace;
|
|
29
|
-
|
|
30
|
-
/* semantic state tier (fixed meanings; overridable deliberately) */
|
|
31
|
-
--ok:#16a34a; --warn:#d97706; --err:#dc2626;
|
|
32
|
-
|
|
33
|
-
/* derived tier — every value below is mixed from the tiers above */
|
|
34
|
-
--card:color-mix(in srgb, var(--bg-card) 92%, var(--bg));
|
|
35
|
-
--line:color-mix(in srgb, var(--rule-soft) 55%, var(--bg-card));
|
|
36
|
-
--ok-soft:color-mix(in srgb, var(--ok) 12%, var(--bg-card));
|
|
37
|
-
--warn-soft:color-mix(in srgb, var(--warn) 13%, var(--bg-card));
|
|
38
|
-
--err-soft:color-mix(in srgb, var(--err) 10%, var(--bg-card));
|
|
39
|
-
--accent-soft:color-mix(in srgb, var(--accent) 13%, var(--bg-card));
|
|
40
|
-
--sea-soft:color-mix(in srgb, var(--sea) 14%, var(--bg-card));
|
|
41
|
-
--neutral-soft:color-mix(in srgb, var(--ink) 7%, var(--bg-card));
|
|
42
|
-
--shadow-card:0 24px 60px -24px color-mix(in srgb, var(--accent-deep) 22%, transparent),
|
|
43
|
-
0 6px 22px -8px color-mix(in srgb, var(--ink) 10%, transparent);
|
|
44
|
-
}
|
|
45
|
-
*{box-sizing:border-box;margin:0;padding:0;}
|
|
46
|
-
[hidden]{display:none !important;}
|
|
47
|
-
body{font-family:var(--font-body);color:var(--ink);background:var(--bg);min-height:100vh;-webkit-font-smoothing:antialiased;overflow-x:hidden;}
|
|
48
|
-
.sky{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;
|
|
49
|
-
background:linear-gradient(180deg,#e9f5fd 0%,#fde8c8 34%,#fff4e6 62%,#fffdfa 100%);}
|
|
50
|
-
.cloud{position:absolute;border-radius:50%;background:rgba(255,255,255,0.55);filter:blur(38px);}
|
|
51
|
-
.cloud.a{width:380px;height:380px;top:-120px;left:-80px;}
|
|
52
|
-
.cloud.b{width:300px;height:300px;top:4%;right:-60px;background:rgba(255,224,178,0.5);}
|
|
53
|
-
.cloud.c{width:460px;height:460px;bottom:-200px;left:24%;background:rgba(255,255,255,0.4);}
|
|
54
|
-
|
|
55
|
-
.top{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:20px clamp(18px,4vw,40px);}
|
|
56
|
-
.top .mark{font-family:var(--font-display);font-weight:700;font-size:22px;letter-spacing:-0.5px;text-transform:lowercase;color:var(--ink);text-decoration:none;}
|
|
57
|
-
.top .mark span{color:var(--accent);}
|
|
58
|
-
.sheet-tag{font-size:12.5px;font-weight:700;color:var(--ink-faint);background:var(--bg-card);border:1.5px solid var(--line);border-radius:999px;padding:6px 14px;}
|
|
59
|
-
|
|
60
|
-
.wrap{position:relative;z-index:1;max-width:980px;margin:0 auto;padding:clamp(8px,2vw,28px) clamp(16px,4vw,40px) 90px;}
|
|
61
|
-
.intro{background:var(--card);border-radius:26px;box-shadow:var(--shadow-card);padding:clamp(22px,3.6vw,36px);margin-bottom:26px;}
|
|
62
|
-
.intro h1{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3.4vw,30px);letter-spacing:-0.5px;margin-bottom:8px;}
|
|
63
|
-
.intro p{font-size:15px;color:var(--ink-soft);font-weight:500;line-height:1.6;max-width:70ch;}
|
|
64
|
-
.intro p+p{margin-top:8px;}
|
|
65
|
-
|
|
66
|
-
section.block{background:var(--card);border-radius:26px;box-shadow:var(--shadow-card);padding:clamp(22px,3.6vw,36px);margin-bottom:26px;}
|
|
67
|
-
.block>h2{font-family:var(--font-display);font-weight:700;font-size:21px;letter-spacing:-0.3px;margin-bottom:4px;}
|
|
68
|
-
.block>.note{font-size:13.5px;font-weight:500;color:var(--ink-soft);line-height:1.55;margin-bottom:20px;max-width:74ch;}
|
|
69
|
-
.block h3{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink-soft);margin:22px 0 10px;}
|
|
70
|
-
.block h3:first-of-type{margin-top:0;}
|
|
71
|
-
|
|
72
|
-
/* token swatches */
|
|
73
|
-
.swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;}
|
|
74
|
-
.sw{border:1.5px solid var(--line);border-radius:14px;overflow:hidden;background:var(--bg-card);}
|
|
75
|
-
.sw .c{height:52px;}
|
|
76
|
-
.sw .n{padding:7px 10px;font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);}
|
|
77
|
-
.sw .t{font-size:10px;font-weight:700;color:var(--ink-faint);padding:0 10px 7px;letter-spacing:0.3px;text-transform:uppercase;}
|
|
78
|
-
|
|
79
|
-
/* ── chips: lifecycle + verification overlay ─────────────────────────── */
|
|
80
|
-
.chip{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;letter-spacing:0.3px;border-radius:999px;padding:4px 12px;background:var(--neutral-soft);color:var(--ink-soft);}
|
|
81
|
-
.chip .cdot{width:7px;height:7px;border-radius:50%;background:var(--ink-faint);flex:0 0 auto;}
|
|
82
|
-
.chip .rec{font-weight:600;color:inherit;opacity:0.72;font-size:11.5px;}
|
|
83
|
-
.chip.busy{background:var(--accent-soft);color:var(--accent-deep);}
|
|
84
|
-
.chip.busy .cdot{background:var(--accent);animation:chipPulse 1.4s ease-in-out infinite;}
|
|
85
|
-
.chip.live{background:var(--ok-soft);color:var(--ok);}
|
|
86
|
-
.chip.live .cdot{background:var(--ok);}
|
|
87
|
-
.chip.maybe{background:var(--warn-soft);color:var(--warn);}
|
|
88
|
-
.chip.maybe .cdot{background:var(--warn);}
|
|
89
|
-
.chip.down{background:var(--err-soft);color:var(--err);}
|
|
90
|
-
.chip.down .cdot{background:var(--err);}
|
|
91
|
-
.chip.bad{background:var(--err-soft);color:var(--err);}
|
|
92
|
-
.chip.bad .cdot{background:var(--err);}
|
|
93
|
-
.chip.calm{background:var(--neutral-soft);color:var(--ink-faint);}
|
|
94
|
-
.chip.calm .cdot{background:var(--ink-faint);}
|
|
95
|
-
@keyframes chipPulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 35%,transparent)}50%{box-shadow:0 0 0 5px transparent}}
|
|
96
|
-
.chiprow{display:flex;flex-wrap:wrap;gap:10px;align-items:center;}
|
|
97
|
-
.lblrow{display:grid;grid-template-columns:190px 1fr;gap:8px 16px;align-items:center;font-size:13px;color:var(--ink-soft);font-weight:600;}
|
|
98
|
-
.lblrow>span:nth-child(odd){text-align:right;color:var(--ink-faint);font-size:12px;}
|
|
99
|
-
|
|
100
|
-
/* ── progress strips: one visual, four flow vocabularies ─────────────── */
|
|
101
|
-
.strip{border:2px solid var(--sea-soft);border-radius:18px;padding:16px 18px 13px;background:linear-gradient(180deg,color-mix(in srgb,var(--sea) 7%,var(--bg-card)) 0%,var(--bg-card) 100%);margin-bottom:14px;}
|
|
102
|
-
.strip .stages{display:flex;list-style:none;margin-bottom:6px;}
|
|
103
|
-
.strip .stages li{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;position:relative;}
|
|
104
|
-
.strip .stages li:not(:first-child)::before{content:"";position:absolute;top:11px;right:50%;width:100%;height:3px;border-radius:2px;background:var(--sea-soft);z-index:0;margin-right:12px;}
|
|
105
|
-
.strip .stages li.done:not(:first-child)::before{background:var(--sea);}
|
|
106
|
-
.strip .sdot{position:relative;z-index:1;width:24px;height:24px;border-radius:50%;border:3px solid var(--sea-soft);background:var(--bg-card);display:flex;align-items:center;justify-content:center;}
|
|
107
|
-
.strip .stages li.done .sdot{border-color:var(--sea);background:var(--sea);}
|
|
108
|
-
.strip .stages li.done .sdot::after{content:"";width:8px;height:5px;border-left:2.5px solid #fff;border-bottom:2.5px solid #fff;transform:rotate(-45deg) translate(1px,-1px);}
|
|
109
|
-
.strip .stages li.now .sdot{border-color:var(--sea);}
|
|
110
|
-
.strip .stages li.now .sdot::after{content:"";width:8px;height:8px;border-radius:50%;background:var(--sea);animation:beatPulse 1.2s ease-in-out infinite;}
|
|
111
|
-
@keyframes beatPulse{0%,100%{transform:scale(.7);opacity:.6}50%{transform:scale(1.15);opacity:1}}
|
|
112
|
-
.strip .slbl{font-size:12px;font-weight:700;color:color-mix(in srgb,var(--sea) 55%,var(--ink-faint));}
|
|
113
|
-
.strip .stages li.now .slbl,.strip .stages li.done .slbl{color:color-mix(in srgb,var(--sea) 40%,var(--ink));}
|
|
114
|
-
.strip .pnote{text-align:center;font-size:13px;font-weight:600;color:var(--ink-soft);min-height:18px;}
|
|
115
|
-
/* landed variant — final stage VERIFIED (probe answered), not just script-finished */
|
|
116
|
-
.strip.isLive{border-color:var(--ok-soft);background:linear-gradient(180deg,color-mix(in srgb,var(--ok) 7%,var(--bg-card)) 0%,var(--bg-card) 100%);}
|
|
117
|
-
.strip.isLive .stages li.done:not(:first-child)::before{background:var(--ok);}
|
|
118
|
-
.strip.isLive .stages li.done .sdot{border-color:var(--ok);background:var(--ok);}
|
|
119
|
-
.strip.isLive .slbl,.strip.isLive .stages li.done .slbl{color:var(--ok);}
|
|
120
|
-
.strip.isLive .pnote{color:var(--ok);}
|
|
121
|
-
/* teardown flow — deliberate, calm: neutral inks, never red, never green */
|
|
122
|
-
.strip.flowDown{border-color:var(--line);background:linear-gradient(180deg,var(--neutral-soft) 0%,var(--bg-card) 100%);}
|
|
123
|
-
.strip.flowDown .stages li:not(:first-child)::before{background:var(--line);}
|
|
124
|
-
.strip.flowDown .stages li.done:not(:first-child)::before{background:var(--ink-faint);}
|
|
125
|
-
.strip.flowDown .sdot{border-color:var(--line);}
|
|
126
|
-
.strip.flowDown .stages li.done .sdot{border-color:var(--ink-faint);background:var(--ink-faint);}
|
|
127
|
-
.strip.flowDown .stages li.now .sdot{border-color:var(--ink-soft);}
|
|
128
|
-
.strip.flowDown .stages li.now .sdot::after{background:var(--ink-soft);}
|
|
129
|
-
.strip.flowDown .slbl{color:var(--ink-faint);}
|
|
130
|
-
.strip.flowDown .stages li.now .slbl,.strip.flowDown .stages li.done .slbl{color:var(--ink-soft);}
|
|
131
|
-
|
|
132
|
-
/* ── project card (the /projects unit) ───────────────────────────────── */
|
|
133
|
-
.proj{border:2px solid var(--line);border-radius:18px;padding:18px 20px;background:var(--bg-card);margin-bottom:16px;}
|
|
134
|
-
.proj.gone{opacity:0.72;}
|
|
135
|
-
.projHead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
|
|
136
|
-
.projName{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-0.3px;}
|
|
137
|
-
.projMeta{font-size:13px;font-weight:600;color:var(--ink-faint);margin-top:6px;display:flex;gap:14px;flex-wrap:wrap;}
|
|
138
|
-
.projMeta code{font-family:var(--font-mono);font-size:12.5px;background:var(--bg-deep);border-radius:6px;padding:1px 6px;color:var(--accent-deep);}
|
|
139
|
-
.addr{margin-top:12px;font-size:14.5px;font-weight:600;color:var(--ink-soft);}
|
|
140
|
-
.addr a{color:var(--accent-deep);font-weight:700;text-decoration:none;}
|
|
141
|
-
.projMsg{font-size:13.5px;font-weight:600;margin-top:10px;color:var(--ink-soft);line-height:1.5;}
|
|
142
|
-
.projMsg.err{color:var(--err);}
|
|
143
|
-
.projMsg details{margin-top:8px;}
|
|
144
|
-
.projMsg summary{cursor:pointer;font-size:12.5px;font-weight:700;color:var(--ink-faint);}
|
|
145
|
-
.projMsg pre{margin-top:7px;font-family:var(--font-mono);font-size:11.5px;line-height:1.5;color:var(--ink-soft);background:var(--neutral-soft);border-radius:10px;padding:10px 12px;white-space:pre-wrap;word-break:break-word;}
|
|
146
|
-
.actions{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap;align-items:center;}
|
|
147
|
-
|
|
148
|
-
/* ── buttons ── */
|
|
149
|
-
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;cursor:pointer;font-family:var(--font-display);font-weight:700;font-size:15px;color:#fff;background:var(--accent);border:none;border-radius:999px;padding:11px 22px;text-decoration:none;box-shadow:0 10px 22px -8px color-mix(in srgb,var(--accent) 70%,transparent);transition:transform .15s ease, box-shadow .15s ease;}
|
|
150
|
-
.btn:hover{transform:translateY(-1px);}
|
|
151
|
-
.btn:disabled{background:color-mix(in srgb,var(--ink) 12%,var(--bg-deep));color:color-mix(in srgb,var(--ink) 40%,var(--bg-deep));box-shadow:none;cursor:not-allowed;transform:none;}
|
|
152
|
-
.btn.ghost{background:transparent;color:var(--ink-soft);box-shadow:none;border:2px solid var(--line);}
|
|
153
|
-
.btn.ghost:hover{border-color:var(--accent);color:var(--accent-deep);}
|
|
154
|
-
.btn.small{font-size:13.5px;padding:8px 16px;}
|
|
155
|
-
.btn.danger{background:transparent;color:var(--err);box-shadow:none;border:2px solid color-mix(in srgb,var(--err) 35%,transparent);}
|
|
156
|
-
.btn.danger:hover{background:var(--err-soft);border-color:var(--err);}
|
|
157
|
-
.linklike{background:none;border:none;cursor:pointer;font-family:var(--font-body);font-weight:700;font-size:13.5px;color:var(--accent-deep);text-decoration:underline;padding:6px 4px;}
|
|
158
|
-
|
|
159
|
-
/* ── create-wizard pieces ── */
|
|
160
|
-
.beats{display:flex;align-items:flex-start;list-style:none;margin:6px 0 10px;max-width:520px;}
|
|
161
|
-
.beats li{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;position:relative;}
|
|
162
|
-
.beats li:not(:first-child)::before{content:"";position:absolute;top:13px;right:50%;width:100%;height:3px;border-radius:2px;background:var(--line);z-index:0;margin-right:14px;}
|
|
163
|
-
.beats li.done:not(:first-child)::before{background:var(--accent);}
|
|
164
|
-
.beats .dot{position:relative;z-index:1;width:28px;height:28px;border-radius:50%;border:3px solid var(--line);background:var(--bg-card);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:13px;color:var(--ink-faint);}
|
|
165
|
-
.beats li.now .dot{border-color:var(--accent);color:var(--accent-deep);box-shadow:0 0 0 6px color-mix(in srgb,var(--accent) 14%,transparent);}
|
|
166
|
-
.beats li.done .dot{border-color:var(--accent);background:var(--accent);color:#fff;}
|
|
167
|
-
.beats .lbl{font-size:12px;font-weight:700;color:var(--ink-faint);letter-spacing:0.2px;}
|
|
168
|
-
.beats li.now .lbl{color:var(--accent-deep);}
|
|
169
|
-
.beats li.done .lbl{color:var(--ink-soft);}
|
|
170
|
-
|
|
171
|
-
.choices{display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:560px;}
|
|
172
|
-
.choice{text-align:left;cursor:pointer;background:var(--bg-card);border:2px solid var(--line);border-radius:18px;padding:16px;font-family:var(--font-body);transition:all .15s ease;}
|
|
173
|
-
.choice[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,var(--bg-card));box-shadow:0 8px 24px -12px color-mix(in srgb,var(--accent) 35%,transparent);}
|
|
174
|
-
.choice b{display:block;font-size:15.5px;font-weight:700;margin-bottom:3px;}
|
|
175
|
-
.choice p{font-size:13px;font-weight:500;color:var(--ink-soft);line-height:1.45;}
|
|
176
|
-
|
|
177
|
-
.field{display:block;margin-bottom:16px;max-width:520px;}
|
|
178
|
-
.field>span{display:block;font-size:13.5px;font-weight:700;color:var(--ink-soft);margin-bottom:7px;letter-spacing:0.2px;}
|
|
179
|
-
input[type=text]{width:100%;font-family:var(--font-body);font-size:17px;font-weight:600;color:var(--ink);background:var(--bg-card);border:2px solid var(--line);border-radius:14px;padding:13px 16px;outline:none;}
|
|
180
|
-
input[type=text]:focus{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 13%,transparent);}
|
|
181
|
-
.hint{font-size:13px;font-weight:600;color:var(--ink-faint);margin-top:7px;}
|
|
182
|
-
.hint.ok{color:var(--ok);}
|
|
183
|
-
.hint.err{color:var(--err);}
|
|
184
|
-
.hint code,.addrBig code{font-family:var(--font-mono);font-size:12.5px;background:var(--bg-deep);border-radius:6px;padding:1px 6px;color:var(--accent-deep);}
|
|
185
|
-
|
|
186
|
-
/* the collapsed address step — a confirmation, not a form (task 1002704) */
|
|
187
|
-
.addrConfirm{border:2px solid var(--ok-soft);border-radius:18px;padding:18px 20px;background:linear-gradient(180deg,color-mix(in srgb,var(--ok) 6%,var(--bg-card)) 0%,var(--bg-card) 100%);max-width:560px;}
|
|
188
|
-
.addrBig{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-0.3px;}
|
|
189
|
-
.addrBig code{font-size:16px;padding:2px 9px;}
|
|
190
|
-
.addrConfirm p{font-size:13.5px;font-weight:500;color:var(--ink-soft);line-height:1.5;margin-top:6px;}
|
|
191
|
-
.addrConfirm details{margin-top:12px;}
|
|
192
|
-
.addrConfirm summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--ink-faint);}
|
|
193
|
-
.addrConfirm details .inner{margin-top:10px;}
|
|
194
|
-
.addrConfirm details .warnLine{font-size:12.5px;font-weight:600;color:var(--warn);margin-top:8px;}
|
|
195
|
-
|
|
196
|
-
/* step list (done panel) */
|
|
197
|
-
.steps{list-style:none;counter-reset:hs;max-width:620px;}
|
|
198
|
-
.steps>li{position:relative;background:var(--bg-card);border:2px solid var(--line);border-radius:18px;padding:16px 18px 16px 58px;margin-bottom:12px;counter-increment:hs;}
|
|
199
|
-
.steps>li::before{content:counter(hs);position:absolute;left:16px;top:16px;width:28px;height:28px;border-radius:50%;background:var(--bg-deep);color:var(--accent-deep);font-family:var(--font-display);font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;}
|
|
200
|
-
.steps b{font-size:15px;}
|
|
201
|
-
.steps p{font-size:13.5px;font-weight:500;color:var(--ink-soft);line-height:1.55;margin-top:4px;}
|
|
202
|
-
.steps>li.sdone{border-color:var(--ok-soft);background:linear-gradient(180deg,color-mix(in srgb,var(--ok) 6%,var(--bg-card)) 0%,var(--bg-card) 100%);}
|
|
203
|
-
.steps>li.sdone::before{content:"✓";background:var(--ok);color:#fff;}
|
|
204
|
-
.steps>li.slocked{opacity:.6;}
|
|
205
|
-
.steps details{margin-top:10px;}
|
|
206
|
-
.steps summary{cursor:pointer;font-weight:700;font-size:12.5px;color:var(--ink-faint);}
|
|
207
|
-
|
|
208
|
-
/* confirm dialog */
|
|
209
|
-
.dialog{max-width:480px;background:var(--bg-card);border:2px solid var(--line);border-radius:22px;padding:24px 26px;box-shadow:var(--shadow-card);}
|
|
210
|
-
.dialog h4{font-family:var(--font-display);font-weight:700;font-size:19px;margin-bottom:8px;}
|
|
211
|
-
.dialog p{font-size:14px;font-weight:500;color:var(--ink-soft);line-height:1.55;}
|
|
212
|
-
.dialog ul{margin:10px 0 0 18px;font-size:13.5px;font-weight:500;color:var(--ink-soft);line-height:1.6;}
|
|
213
|
-
.dialog .actions{margin-top:18px;}
|
|
214
|
-
|
|
215
|
-
.copyRules{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
|
|
216
|
-
.copyRules>div{border:2px solid var(--line);border-radius:16px;padding:14px 16px;font-size:13.5px;line-height:1.55;}
|
|
217
|
-
.copyRules .no{border-color:var(--err-soft);}
|
|
218
|
-
.copyRules .no b{color:var(--err);display:block;font-size:12px;letter-spacing:0.4px;margin-bottom:6px;}
|
|
219
|
-
.copyRules .yes{border-color:var(--ok-soft);}
|
|
220
|
-
.copyRules .yes b{color:var(--ok);display:block;font-size:12px;letter-spacing:0.4px;margin-bottom:6px;}
|
|
221
|
-
|
|
222
|
-
@media (max-width:640px){.choices,.copyRules{grid-template-columns:1fr;}.lblrow{grid-template-columns:1fr;}.lblrow>span:nth-child(odd){text-align:left;}}
|
|
223
|
-
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none !important;transition:none !important;}}
|
|
224
|
-
</style>
|
|
225
|
-
</head>
|
|
226
|
-
<body>
|
|
227
|
-
<div class="sky" aria-hidden="true"><div class="cloud a"></div><div class="cloud b"></div><div class="cloud c"></div></div>
|
|
228
|
-
|
|
229
|
-
<header class="top">
|
|
230
|
-
<a class="mark" href="#">cloud <span>bongos</span></a>
|
|
231
|
-
<span class="sheet-tag">Loop 1 · component sheet · task 1002696</span>
|
|
232
|
-
</header>
|
|
233
|
-
|
|
234
|
-
<div class="wrap">
|
|
235
|
-
|
|
236
|
-
<div class="intro">
|
|
237
|
-
<p style="font-weight:700;color:#b45309;margin-bottom:10px;">Historical Loop-1 artifact — the backdrop direction moved on (owner, later the same day): surfaces went all-in on the space sky with light/dark modes. Current truth: <code>projects-page-mock.html</code> + <code>public-landing/assets/cosmos.css</code>. The chips, strips, cards, and copy below remain the approved vocabulary.</p>
|
|
238
|
-
<h1>The sunrise system, tokenized</h1>
|
|
239
|
-
<p>Every building block of the redesigned project surfaces, in every state it can be in — so you can judge the look before any page is rebuilt. The brand stays the sunrise you know; what's new is underneath: one shared token layer (an instance can re-theme all of it), one chip vocabulary that only claims what the platform verified, and each flow speaking its own stage names.</p>
|
|
240
|
-
<p><strong>How to review:</strong> react to anything — a color, a label, a phrase, a shape. "The unreachable red is too alarming," "the recency text is too quiet," "torn-down cards should be smaller." Loop 2 applies the approved sheet to the three real pages and stages them for your walk.</p>
|
|
241
|
-
</div>
|
|
242
|
-
|
|
243
|
-
<section class="block">
|
|
244
|
-
<h2>1 · Tokens</h2>
|
|
245
|
-
<p class="note">Top row: the brand palette (an instance's branding pack overrides these). Bottom row: state + derived colors — mixed automatically from the brand, so a re-themed instance keeps a coherent page without extra work. Green/amber/red keep fixed meanings: verified good, unverified, wrong.</p>
|
|
246
|
-
<div class="swatches">
|
|
247
|
-
<div class="sw"><div class="c" style="background:#fff7ed"></div><div class="n">--bg</div><div class="t">brand</div></div>
|
|
248
|
-
<div class="sw"><div class="c" style="background:#ffedd5"></div><div class="n">--bg-deep</div><div class="t">brand</div></div>
|
|
249
|
-
<div class="sw"><div class="c" style="background:#f97316"></div><div class="n">--accent</div><div class="t">brand</div></div>
|
|
250
|
-
<div class="sw"><div class="c" style="background:#ea580c"></div><div class="n">--accent-deep</div><div class="t">brand</div></div>
|
|
251
|
-
<div class="sw"><div class="c" style="background:#38bdf8"></div><div class="n">--sea</div><div class="t">brand</div></div>
|
|
252
|
-
<div class="sw"><div class="c" style="background:#fb7185"></div><div class="n">--terracotta</div><div class="t">brand</div></div>
|
|
253
|
-
<div class="sw"><div class="c" style="background:#2a1f17"></div><div class="n">--ink</div><div class="t">brand</div></div>
|
|
254
|
-
<div class="sw"><div class="c" style="background:#16a34a"></div><div class="n">--ok</div><div class="t">state · verified good</div></div>
|
|
255
|
-
<div class="sw"><div class="c" style="background:#d97706"></div><div class="n">--warn</div><div class="t">state · unverified</div></div>
|
|
256
|
-
<div class="sw"><div class="c" style="background:#dc2626"></div><div class="n">--err</div><div class="t">state · wrong</div></div>
|
|
257
|
-
<div class="sw"><div class="c" style="background:color-mix(in srgb,#16a34a 12%,#fff)"></div><div class="n">--ok-soft</div><div class="t">derived</div></div>
|
|
258
|
-
<div class="sw"><div class="c" style="background:color-mix(in srgb,#2a1f17 7%,#fff)"></div><div class="n">--neutral-soft</div><div class="t">derived</div></div>
|
|
259
|
-
</div>
|
|
260
|
-
</section>
|
|
261
|
-
|
|
262
|
-
<section class="block">
|
|
263
|
-
<h2>2 · Chips — the one status vocabulary</h2>
|
|
264
|
-
<p class="note">Eight states, both surfaces, never reused for anything else. The new rule: <strong>"live" always carries when it was last verified.</strong> A card the platform hasn't re-checked says so; a card that failed its check says that louder. Torn down is calm and neutral — the owner asked for it, it is not a failure.</p>
|
|
265
|
-
<div class="lblrow">
|
|
266
|
-
<span>waiting for a runner</span><span><span class="chip busy"><span class="cdot"></span>queued</span></span>
|
|
267
|
-
<span>runner working</span><span><span class="chip busy"><span class="cdot"></span>standing up</span></span>
|
|
268
|
-
<span>verified alive</span><span><span class="chip live"><span class="cdot"></span>live <span class="rec">· checked 2m ago</span></span></span>
|
|
269
|
-
<span>not re-checked lately</span><span><span class="chip maybe"><span class="cdot"></span>live? <span class="rec">· last seen 3h ago</span></span></span>
|
|
270
|
-
<span>failed its check</span><span><span class="chip down"><span class="cdot"></span>unreachable <span class="rec">· since 14:02</span></span></span>
|
|
271
|
-
<span>standup stopped</span><span><span class="chip bad"><span class="cdot"></span>snagged</span></span>
|
|
272
|
-
<span>teardown running</span><span><span class="chip busy"><span class="cdot"></span>tearing down</span></span>
|
|
273
|
-
<span>deliberate end</span><span><span class="chip calm"><span class="cdot"></span>torn down</span></span>
|
|
274
|
-
</div>
|
|
275
|
-
</section>
|
|
276
|
-
|
|
277
|
-
<section class="block">
|
|
278
|
-
<h2>3 · Progress strips — each flow speaks its own stages</h2>
|
|
279
|
-
<p class="note">Today one vocabulary ("Request filed → Standing it up → Live") renders for every flow — including teardown, whose final stage reads "Live" while the server is being destroyed. Each flow now owns its labels, and <strong>the final stage only lights when the platform verified it</strong> (the address strip claims "answering" only after a probe against the real domain succeeds).</p>
|
|
280
|
-
|
|
281
|
-
<h3>Standup — mid-flight</h3>
|
|
282
|
-
<div class="strip">
|
|
283
|
-
<ol class="stages"><li class="done"><span class="sdot"></span><span class="slbl">Request filed</span></li><li class="now"><span class="sdot"></span><span class="slbl">Standing it up</span></li><li><span class="sdot"></span><span class="slbl">Live</span></li></ol>
|
|
284
|
-
<p class="pnote">Raising the server, database, and address. Nothing needed from you.</p>
|
|
285
|
-
</div>
|
|
286
|
-
|
|
287
|
-
<h3>Standup — landed (probe answered)</h3>
|
|
288
|
-
<div class="strip isLive">
|
|
289
|
-
<ol class="stages"><li class="done"><span class="sdot"></span><span class="slbl">Request filed</span></li><li class="done"><span class="sdot"></span><span class="slbl">Standing it up</span></li><li class="done"><span class="sdot"></span><span class="slbl">Live</span></li></ol>
|
|
290
|
-
<p class="pnote">Answering at spike-harbor.cloudbongos.com — verified just now.</p>
|
|
291
|
-
</div>
|
|
292
|
-
|
|
293
|
-
<h3>Teardown — calm, its own words, never "Live"</h3>
|
|
294
|
-
<div class="strip flowDown">
|
|
295
|
-
<ol class="stages"><li class="done"><span class="sdot"></span><span class="slbl">Teardown queued</span></li><li class="now"><span class="sdot"></span><span class="slbl">Winding down</span></li><li><span class="sdot"></span><span class="slbl">Torn down</span></li></ol>
|
|
296
|
-
<p class="pnote">Taking the server offline. The repository stays yours; the database is kept.</p>
|
|
297
|
-
</div>
|
|
298
|
-
|
|
299
|
-
<h3>Revive — a torn-down project coming back</h3>
|
|
300
|
-
<div class="strip">
|
|
301
|
-
<ol class="stages"><li class="done"><span class="sdot"></span><span class="slbl">Revive queued</span></li><li class="now"><span class="sdot"></span><span class="slbl">Standing it up</span></li><li><span class="sdot"></span><span class="slbl">Back live</span></li></ol>
|
|
302
|
-
<p class="pnote">Bringing it back on the newest platform version.</p>
|
|
303
|
-
</div>
|
|
304
|
-
|
|
305
|
-
<h3>Address — claimed only when it really answers</h3>
|
|
306
|
-
<div class="strip">
|
|
307
|
-
<ol class="stages"><li class="done"><span class="sdot"></span><span class="slbl">Address queued</span></li><li class="now"><span class="sdot"></span><span class="slbl">Wiring the address</span></li><li><span class="sdot"></span><span class="slbl">Answering there</span></li></ol>
|
|
308
|
-
<p class="pnote">Setting up DNS and the secure connection for <strong>mercury.example.com</strong>.</p>
|
|
309
|
-
</div>
|
|
310
|
-
</section>
|
|
311
|
-
|
|
312
|
-
<section class="block">
|
|
313
|
-
<h2>4 · Project cards — every state an owner can meet</h2>
|
|
314
|
-
<p class="note">The /projects unit. New here: verification recency on every live claim, a plain-sentence error with the raw detail folded away, <strong>Try again</strong> on snagged cards (nothing silently "keeps retrying" anymore), and <strong>Bring it back</strong> on torn-down cards — revive existed in the platform but had no button.</p>
|
|
315
|
-
|
|
316
|
-
<h3>Live, verified</h3>
|
|
317
|
-
<div class="proj">
|
|
318
|
-
<div class="projHead"><span class="projName">Spike Harbor</span><span class="chip live"><span class="cdot"></span>live <span class="rec">· checked 2m ago</span></span></div>
|
|
319
|
-
<div class="projMeta"><span>repo <code>percy/spike-harbor</code></span><span>standalone server</span></div>
|
|
320
|
-
<div class="addr">Answering at <a href="#">spike-harbor.cloudbongos.com</a></div>
|
|
321
|
-
<div class="actions"><button class="btn small ghost">Change address</button><button class="btn small danger">Tear it down</button></div>
|
|
322
|
-
</div>
|
|
323
|
-
|
|
324
|
-
<h3>Live? — the platform hasn't re-checked lately</h3>
|
|
325
|
-
<div class="proj">
|
|
326
|
-
<div class="projHead"><span class="projName">Mercury</span><span class="chip maybe"><span class="cdot"></span>live? <span class="rec">· last seen 3h ago</span></span></div>
|
|
327
|
-
<div class="projMeta"><span>repo <code>percy/mercury</code></span></div>
|
|
328
|
-
<div class="addr">Last answered at <a href="#">mercury.cloudbongos.com</a></div>
|
|
329
|
-
<div class="projMsg">We haven't been able to confirm it recently — checking again in the background.</div>
|
|
330
|
-
</div>
|
|
331
|
-
|
|
332
|
-
<h3>Unreachable — it failed its check, and we say so</h3>
|
|
333
|
-
<div class="proj">
|
|
334
|
-
<div class="projHead"><span class="projName">Mercury</span><span class="chip down"><span class="cdot"></span>unreachable <span class="rec">· since 14:02</span></span></div>
|
|
335
|
-
<div class="projMeta"><span>repo <code>percy/mercury</code></span></div>
|
|
336
|
-
<div class="addr">Not answering at <a href="#">mercury.cloudbongos.com</a></div>
|
|
337
|
-
<div class="projMsg">The server stopped answering. We keep checking and this card will update the moment it's back.</div>
|
|
338
|
-
</div>
|
|
339
|
-
|
|
340
|
-
<h3>Snagged — plain sentence first, detail folded, a real retry</h3>
|
|
341
|
-
<div class="proj">
|
|
342
|
-
<div class="projHead"><span class="projName">Swag</span><span class="chip bad"><span class="cdot"></span>snagged</span></div>
|
|
343
|
-
<div class="projMeta"><span>repo <code>percy/swag</code></span></div>
|
|
344
|
-
<div class="projMsg err">The server didn't come up. We stopped after 3 tries — nothing more will happen until you try again.
|
|
345
|
-
<details><summary>Technical details</summary><pre>healthz probe: connect ECONNREFUSED 127.0.0.1:3010
|
|
346
|
-
unit exited: status=203/EXEC (/usr/bin/node not found)</pre></details>
|
|
347
|
-
</div>
|
|
348
|
-
<div class="actions"><button class="btn small">Try again</button><button class="btn small danger">Tear it down</button></div>
|
|
349
|
-
</div>
|
|
350
|
-
|
|
351
|
-
<h3>Torn down — calm, with the door back</h3>
|
|
352
|
-
<div class="proj gone">
|
|
353
|
-
<div class="projHead"><span class="projName">Old Drum</span><span class="chip calm"><span class="cdot"></span>torn down</span></div>
|
|
354
|
-
<div class="projMeta"><span>repo <code>percy/old-drum</code></span></div>
|
|
355
|
-
<div class="projMsg">Torn down on Aug 3. The repository is still yours, and its database is kept — bringing it back takes one click.</div>
|
|
356
|
-
<div class="actions"><button class="btn small">Bring it back</button></div>
|
|
357
|
-
</div>
|
|
358
|
-
</section>
|
|
359
|
-
|
|
360
|
-
<section class="block">
|
|
361
|
-
<h2>5 · Create wizard pieces</h2>
|
|
362
|
-
<p class="note">The flow keeps its four beats. The address step is the big change (your call, decided Aug 12): every project gets <strong>its address assigned up front</strong> — the step confirms rather than asks, and the custom-domain path folds into a disclosure.</p>
|
|
363
|
-
|
|
364
|
-
<h3>The beat line</h3>
|
|
365
|
-
<ol class="beats"><li class="done"><span class="dot">1</span><span class="lbl">Name</span></li><li class="done"><span class="dot">2</span><span class="lbl">Home</span></li><li class="now"><span class="dot">3</span><span class="lbl">Address</span></li><li><span class="dot">4</span><span class="lbl">Create</span></li></ol>
|
|
366
|
-
|
|
367
|
-
<h3>The address step — a confirmation, not a form</h3>
|
|
368
|
-
<div class="addrConfirm">
|
|
369
|
-
<div class="addrBig"><code>spike-harbor.cloudbongos.com</code> — yours from the moment it stands up.</div>
|
|
370
|
-
<p>Sign-in, sharing, everything just works. You can point a domain you own at it any time.</p>
|
|
371
|
-
<details><summary>Use a domain I own instead</summary>
|
|
372
|
-
<div class="inner">
|
|
373
|
-
<label class="field"><span>Domain you own</span><input type="text" placeholder="mercury.example.com"></label>
|
|
374
|
-
<p class="warnLine">Starting with no address at all is possible — but sign-in on your project can't be set up until it has one.</p>
|
|
375
|
-
</div>
|
|
376
|
-
</details>
|
|
377
|
-
</div>
|
|
378
|
-
|
|
379
|
-
<h3>Choice cards — visibility stated before you commit</h3>
|
|
380
|
-
<div class="choices">
|
|
381
|
-
<button class="choice" aria-pressed="true"><b>Start fresh</b><p>We create a new <strong>public</strong> repository named <code style="font-family:var(--font-mono);font-size:12px">spike-harbor</code> for you. You can make it private on GitHub any time.</p></button>
|
|
382
|
-
<button class="choice"><b>Adopt a repo I have</b><p>Pick one of your existing repositories. We never change its visibility — public stays public, private stays private.</p></button>
|
|
383
|
-
</div>
|
|
384
|
-
</section>
|
|
385
|
-
|
|
386
|
-
<section class="block">
|
|
387
|
-
<h2>6 · Done-panel steps — only promises somebody real will keep</h2>
|
|
388
|
-
<p class="note">The checklist renders from the platform's canonical plan, now filtered by hosting shape: a self-hosted project never sees a step that assumes our runner. States: done (verified), current, and locked (waiting on a prerequisite).</p>
|
|
389
|
-
<ol class="steps">
|
|
390
|
-
<li class="sdone"><b>Create the repository</b><p>Done — <code style="font-family:var(--font-mono);font-size:12px">percy/spike-harbor</code> exists and the scaffold landed.</p></li>
|
|
391
|
-
<li><b>Turn on GitHub sign-in</b><p>One click — GitHub asks you to approve the app, and we wire it in. You'll be seated as this project's first Owner.</p><details><summary>Do it by hand instead</summary><p>The manual path, for operators who prefer it.</p></details></li>
|
|
392
|
-
<li class="slocked"><b>Step inside your project's hall</b><p>Unlocks once sign-in is on — then your project greets you by name.</p></li>
|
|
393
|
-
</ol>
|
|
394
|
-
</section>
|
|
395
|
-
|
|
396
|
-
<section class="block">
|
|
397
|
-
<h2>7 · The teardown confirm — the truth, itemized</h2>
|
|
398
|
-
<p class="note">The current dialog says "the server and database go away" — the database actually stays. The redesign says exactly what happens (and keeping the database is now deliberate policy, decided Aug 12).</p>
|
|
399
|
-
<div class="dialog">
|
|
400
|
-
<h4>Tear down Spike Harbor?</h4>
|
|
401
|
-
<p>Here's exactly what happens:</p>
|
|
402
|
-
<ul>
|
|
403
|
-
<li>The server goes away — the address stops answering.</li>
|
|
404
|
-
<li>Your repository is untouched. It's yours, on GitHub.</li>
|
|
405
|
-
<li>The database is kept, so bringing the project back later restores its memory.</li>
|
|
406
|
-
</ul>
|
|
407
|
-
<div class="actions"><button class="btn small danger">Yes, tear it down</button><button class="btn small ghost">Keep it running</button></div>
|
|
408
|
-
</div>
|
|
409
|
-
</section>
|
|
410
|
-
|
|
411
|
-
<section class="block">
|
|
412
|
-
<h2>8 · Voice — before and after</h2>
|
|
413
|
-
<p class="note">The copy rules in one glance: no raw computer output as the headline, no wall-clock promises, no claims the platform can't back.</p>
|
|
414
|
-
<div class="copyRules">
|
|
415
|
-
<div class="no"><b>TODAY</b>The standup hit a snag: fatal: could not read Username for 'https://github.com': No such device or address</div>
|
|
416
|
-
<div class="yes"><b>REDESIGN</b>We couldn't reach the project's repository. <u>Technical details</u></div>
|
|
417
|
-
<div class="no"><b>TODAY</b>Waiting for a runner to pick it up — usually under a minute.</div>
|
|
418
|
-
<div class="yes"><b>REDESIGN</b>Waiting for a runner to pick it up. This card updates the moment it starts.</div>
|
|
419
|
-
<div class="no"><b>TODAY</b>The platform keeps retrying — this card updates as it recovers.</div>
|
|
420
|
-
<div class="yes"><b>REDESIGN</b>We stopped after 3 tries — nothing more will happen until you try again. <strong>[Try again]</strong></div>
|
|
421
|
-
<div class="no"><b>TODAY</b>Really tear it down? The server and database go away; the repo stays yours.</div>
|
|
422
|
-
<div class="yes"><b>REDESIGN</b>The server goes away. Your repository is untouched. The database is kept.</div>
|
|
423
|
-
</div>
|
|
424
|
-
</section>
|
|
425
|
-
|
|
426
|
-
</div>
|
|
427
|
-
</body>
|
|
428
|
-
</html>
|