diff --git a/core/ui/canvas/src/app/atrium/IntelligenceOS.tsx b/core/ui/canvas/src/app/atrium/IntelligenceOS.tsx index a51238c..ad64acf 100644 --- a/core/ui/canvas/src/app/atrium/IntelligenceOS.tsx +++ b/core/ui/canvas/src/app/atrium/IntelligenceOS.tsx @@ -7,13 +7,16 @@ import { BrainCircuit, CircleAlert, Clock3, + Crosshair, Layers3, Network, Radio, RefreshCw, Route, + SearchCheck, ShieldCheck, Sparkles, + TimerReset, } from 'lucide-react' import type { IntelligenceResourceRecord } from '@/api/intelligenceResourcesApi' @@ -49,7 +52,7 @@ const SURFACE_COPY: Record = { }, opportunities: { title: 'Opportunities', - subtitle: 'Cases and material shifts worth investigating or acting on.', + subtitle: 'Evidence-backed openings that may warrant a decision, response, or new watch.', }, agents: { title: 'Agents', @@ -210,7 +213,7 @@ function CoverageStrip({ groups, freshness }: { readonly groups: ResourceGroups; const entries = [ { icon: Radio, label: 'Sources', value: `${sources} admitted` }, { icon: Activity, label: 'Watches', value: `${monitors} active` }, - { icon: Layers3, label: 'Open cases', value: `${openCases} material` }, + { icon: Layers3, label: 'Decision openings', value: `${openCases} ready` }, { icon: Clock3, label: 'Freshness', value: freshness }, ] @@ -261,6 +264,107 @@ function AgentsView({ groups }: { readonly groups: ResourceGroups }) { ) } +function OpportunityStage({ + icon: Icon, + title, + detail, +}: { + readonly icon: typeof Crosshair + readonly title: string + readonly detail: string +}) { + return ( +
+
+ +
+
+
{title}
+

{detail}

+
+
+ ) +} + +function OpportunitySection({ + eyebrow, + title, + detail, + items, + empty, +}: { + readonly eyebrow: string + readonly title: string + readonly detail: string + readonly items: readonly IntelligenceResourceRecord[] + readonly empty: string +}) { + return ( +
+
+
+
{eyebrow}
+

{title}

+

{detail}

+
+ {items.length} current +
+ +
+ ) +} + +function OpportunitiesView({ groups }: { readonly groups: ResourceGroups }) { + const decisionOpenings = groups.opportunities.filter((item) => item.reference.resource_kind === 'case') + const emergingOpenings = groups.opportunities.filter((item) => item.reference.resource_kind === 'shift') + const earlySignals = groups.opportunities.filter((item) => item.reference.resource_kind === 'signal') + + return ( +
+ + +
+ Decision openings +

An Opportunity is intelligence awaiting a decision.

+

+ ACE promotes a signal or shift when the evidence suggests a favorable or avoidable window. It is not a lead, a task, or autonomous Work; it remains a proposal until a person investigates, accepts, dismisses, or turns it into Strategy. +

+
+
+ + + +
+
+
+ + + + {earlySignals.length > 0 && ( + + )} +
+ ) +} + function Metric({ label, value, detail, warning = false }: { readonly label: string; readonly value: number | string; readonly detail: string; readonly warning?: boolean }) { return ( @@ -297,9 +401,7 @@ function PageContent({ surface, groups, all, onStart }: { readonly surface: Surf if (surface === 'intelligence') return if (surface === 'connections') return if (surface === 'agents') return - if (surface === 'opportunities') { - return - } + if (surface === 'opportunities') return return } diff --git a/core/ui/canvas/src/app/journey/SessionsMenu.tsx b/core/ui/canvas/src/app/journey/SessionsMenu.tsx index f02b4ee..040d5fd 100644 --- a/core/ui/canvas/src/app/journey/SessionsMenu.tsx +++ b/core/ui/canvas/src/app/journey/SessionsMenu.tsx @@ -76,7 +76,7 @@ const RECENT_SESSIONS: readonly RecentSession[] = [ }, ] -// Outcome -> dot color. State semantics: in motion = live (brand green), +// Outcome -> dot color. State semantics: in motion = live (spectral cyan), // decided = success, shelved/archived = neutral (a category, not an alarm). const OUTCOME_DOT: Record = { 'in motion': 'bg-live animate-pulse', diff --git a/core/ui/canvas/src/design/__enforcement__/contrastAA.test.ts b/core/ui/canvas/src/design/__enforcement__/contrastAA.test.ts index f3978fa..0536a5e 100644 --- a/core/ui/canvas/src/design/__enforcement__/contrastAA.test.ts +++ b/core/ui/canvas/src/design/__enforcement__/contrastAA.test.ts @@ -67,13 +67,13 @@ const COLORS = { surfaceCanvas: '#FAFAFA', surfaceRaised: '#FFFFFF', surfaceRecessed: '#F4F4F4', - surfaceTint: '#E8F2FF', + surfaceTint: '#E9EEFF', ink: '#171717', inkStrong: '#0A0A0A', inkSoft: '#525252', inkMuted: '#737373', inkFaint: '#A3A3A3', - accent: '#0070F3', + accent: '#315DDE', accentInk: '#FFFFFF', success: '#16A34A', warning: '#D97706', diff --git a/core/ui/canvas/src/design/tokens.css b/core/ui/canvas/src/design/tokens.css index 44ba780..e5f87c2 100644 --- a/core/ui/canvas/src/design/tokens.css +++ b/core/ui/canvas/src/design/tokens.css @@ -2,13 +2,13 @@ * * The ACE design system — canonical token sheet. * - * Visual direction: ENGINEERED LIGHT. Bright neutral canvas, single - * electric-blue accent, hairline-shadow-as-border for elevation, 8px - * engineered buttons (not pills), 12px cards. The vocabulary of Vercel + - * v0 + OpenAI Devs — a working surface that instills trust through - * clarity, not warmth. Whiteboard, not parchment. + * Visual direction: ACE PRECISION. Bright neutral canvas outside the + * command center, a single cognitive-blue accent derived from the ACE mark, + * hairline-shadow-as-border for elevation, 8px engineered buttons (not + * pills), and 12px cards. The vocabulary is ACE's own: calm, exact, + * evidence-forward, and recognizable without borrowing a customer's brand. * - * See docs/design-system.md for the principles and layer model. + * See docs/design/ace-design-system-v1.md for the principles and layer model. * Every UI component composes from these tokens. No inline color/font/ * spacing in component code; if a value isn't expressible in tokens, the * design system gets a new token first. @@ -271,15 +271,15 @@ * reference these exclusively. Engineered-light IS the base — there is * no dark default to override from. * - * Color values draw from the Vercel/v0/OpenAI-Devs/Amie consensus: + * Color values use ACE's neutral working surfaces: * canvas #FAFAFA, raised #FFFFFF, line #EAEAEA, ink #171717 - * Single chromatic accent: Vercel electric blue #0070F3. + * Single chromatic accent: ACE cognitive blue #315DDE. */ --ace-surface-canvas: #FAFAFA; /* page / canvas ground */ --ace-surface-raised: #FFFFFF; /* cards, popovers, the lifted surface */ --ace-surface-recessed: #F4F4F4; /* highlight bands, captured-this-turn chips */ - --ace-surface-tint: #E8F2FF; /* accent-tinted background (convergence beat, banner) */ + --ace-surface-tint: #E9EEFF; /* accent-tinted background (convergence beat, banner) */ /* Legacy card surface aliases — keep so existing components don't break. Map them all to the new role tokens. */ @@ -322,13 +322,13 @@ --ace-focus-ring: 0 0 0 3px var(--ace-accent-soft); --ace-focus-ring-strong: 0 0 0 1px var(--ace-accent), 0 0 0 4px var(--ace-accent-soft); - /* Single chromatic accent — Vercel electric blue. Used for CTAs, + /* Single chromatic accent — ACE cognitive blue. Used for CTAs, active states, focus rings, the "next voice" arrow, the reconciliation banner edge, the convergence beat tint. Nowhere else. */ - --ace-accent: #0070F3; - --ace-accent-hover: #0061D5; - --ace-accent-soft: #E8F2FF; - --ace-accent-tint: rgba(0, 112, 243, 0.10); + --ace-accent: #315DDE; + --ace-accent-hover: #274CB8; + --ace-accent-soft: #E9EEFF; + --ace-accent-tint: rgba(49, 93, 222, 0.11); --ace-accent-ink: #FFFFFF; /* ============================================================================ @@ -345,14 +345,14 @@ A branded theme overrides --ace-voice-accent to retint everything in one move. */ --ace-north-star-bg: var(--ace-accent-soft); - --ace-north-star-line: rgba(0, 112, 243, 0.24); + --ace-north-star-line: rgba(49, 93, 222, 0.24); --ace-north-star-label: var(--ace-accent); /* Synthesis surface — the convergence-beat lock-in card. Same accent tint as the north star to signal "this is the system's verdict about itself." */ --ace-synthesis-paper: var(--ace-surface-tint); - --ace-synthesis-divider: rgba(0, 112, 243, 0.18); + --ace-synthesis-divider: rgba(49, 93, 222, 0.18); /* Sketch-chalk — the inked annotation strokes inside cards (calibration sparkline, contribution arrows). Dark-ink on light @@ -363,7 +363,7 @@ --ace-discipline-accent-fallback: var(--ace-ink-muted); /* Voice accent — the color that names ACE's voice in the room. - Engineered-light base = Vercel electric blue. Components rendering + ACE base = cognitive blue. Components rendering ACE's chrome (AceCard, ComposingIndicator, VisionAnchor, ShellNav mark, Briefing tile) consume this token rather than hardcoding the hex — so a branded extension theme can retint the voice globally @@ -374,7 +374,7 @@ --ace-voice-accent: var(--ace-accent); --ace-voice-accent-hover: var(--ace-accent-hover); --ace-voice-accent-soft: var(--ace-accent-soft); - --ace-voice-accent-strong: rgba(0, 112, 243, 0.50); + --ace-voice-accent-strong: rgba(49, 93, 222, 0.50); --ace-voice-accent-ink: var(--ace-accent-ink); /* Semantic status — used sparingly on sentinel pips, calibration diff --git a/core/ui/canvas/src/design/tokens.ts b/core/ui/canvas/src/design/tokens.ts index bc08d5e..537a546 100644 --- a/core/ui/canvas/src/design/tokens.ts +++ b/core/ui/canvas/src/design/tokens.ts @@ -19,9 +19,9 @@ // updates in the same commit. The tokens.css file is the source of // truth; this file is the JS-side mirror. // -// VISUAL DIRECTION (current, not permanent): engineered-light. Bright -// neutral canvas, single electric-blue accent (#0070F3), hairline-shadow -// elevation, 8px buttons, 12px cards. See docs/design-system.md. +// VISUAL DIRECTION: ACE precision. Bright neutral canvas outside Atrium, +// single cognitive-blue accent (#315DDE), hairline-shadow elevation, +// 8px buttons, and 12px cards. // --------------------------------------------------------------------------- // Layer 0 — Foundations @@ -87,15 +87,15 @@ export const SEMANTIC = { toneMediumSoft: 'rgba(176, 119, 53, 0.10)', } as const -// Single chromatic accent — Vercel electric blue. The only chromatic +// Single chromatic accent — ACE cognitive blue. The only chromatic // chrome in the engineered-light direction; everything else is // neutral. Theme `voice-accent` defaults to this and is the override // surface for branded extension themes (each retints it to its own accent). export const ACCENT = { - base: '#0070F3', - hover: '#0061D5', - soft: '#E8F2FF', - tint: 'rgba(0, 112, 243, 0.10)', + base: '#315DDE', + hover: '#274CB8', + soft: '#E9EEFF', + tint: 'rgba(49, 93, 222, 0.11)', ink: '#FFFFFF', } as const diff --git a/core/ui/canvas/src/index.css b/core/ui/canvas/src/index.css index e37e050..1b7d0cd 100644 --- a/core/ui/canvas/src/index.css +++ b/core/ui/canvas/src/index.css @@ -77,18 +77,12 @@ --color-card: var(--card); --color-foreground: var(--foreground); --color-background: var(--background); - /* Landmark semantic-role tokens (engineered-neutral spec). + /* ACE semantic-role tokens. * - * --primary → CTAs only (buttons that initiate work). Per the - * spec, primary buttons use dark neutral tones - * (midnight #292D3A), NOT brand green. Green is brand - * identity, not the CTA color. - * --brand → brand green #01A982. Used SPARINGLY for brand- - * identity moments (logo accents, key eyebrow, the - * rare brand-saturated emphasis). - * --live → in-motion signal (streaming pulse, partner-warm - * indicator). Shares hue with --brand intentionally - * — motion is alive, alive is brand. + * --primary → decisive actions, in ACE cognitive blue. + * --brand → ACE identity and selected intelligence, also blue. + * --live → in-motion evidence, in the logo's cyan register. + * --success → verified completion only, in semantic green. * * Selected/active state is NOT a token — it's a structural treatment * (ring-2 + shadow + bg-foreground at low opacity). Visual weight, @@ -125,17 +119,17 @@ } :root { - /* Landmark — light theme. + /* ACE — light theme. * Surfaces / text / borders use the cool-grey neutrals ladder - * (light cloud → cloud → slate → carbon → midnight). Primary is - * midnight, the dark CTA neutral. Brand green carries identity. */ + * (light cloud → cloud → slate → carbon → midnight). ACE blue carries + * identity and action; status colors keep their literal meaning. */ --background: #FFFFFF; /* paper white */ --foreground: #292D3A; /* midnight */ --card: #FFFFFF; --card-foreground: #292D3A; --popover: #FFFFFF; --popover-foreground: #292D3A; - --primary: #292D3A; /* midnight — CTAs */ + --primary: #315DDE; /* ACE cognitive blue — CTAs */ --primary-foreground: #FFFFFF; --secondary: #F7F7F7; /* light cloud */ --secondary-foreground: #292D3A; @@ -146,7 +140,7 @@ --destructive: oklch(0.577 0.245 27.325); --border: #E6E8E9; /* cloud */ --input: #E6E8E9; - --ring: #7D8A92; /* light carbon */ + --ring: #315DDE; /* Decorative palette — secondary colors from the brand * guide. NEVER used for interactive state. Reserved for data viz * + dynamic-element graphic motifs. Mapped onto chart-1..5 so @@ -157,25 +151,23 @@ --chart-4: #0070F8; /* blue */ --chart-5: #7764FC; /* purple */ /* Semantic role tokens — see @theme comment above for the contract. */ - --brand: #01A982; /* brand green — identity */ + --brand: #315DDE; /* ACE cognitive blue — identity */ --brand-foreground: #FFFFFF; - --live: #01A982; /* in-motion = brand green */ + --live: #0F8294; /* in-motion evidence = spectral cyan */ --live-foreground: #FFFFFF; - --success: #01A982; /* good = brand green */ + --success: #178A4B; /* verified completion */ --success-foreground: #FFFFFF; --warning: oklch(0.74 0.15 78); /* watch = amber (state, NOT chart-3 cyan) */ --warning-foreground: oklch(0.205 0 0); - /* --anchor → the marketing-hero surface. NOT graphite — hero cards - * are light. A pale green wash so heroes read as branded + crisp - * on white, with dark Midnight text. Green is the signature; the - * hero is where it gets a soft full-card presence. */ - --anchor: oklch(0.965 0.028 165); /* pale green wash */ + /* --anchor → the editorial hero surface. A pale blue wash makes an + * ACE-owned intelligence moment visible without turning it into a CTA. */ + --anchor: #EEF2FF; --anchor-foreground: #292D3A; /* Midnight text */ --radius: 0.625rem; --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.511 0.262 276.966); - --sidebar-primary-foreground: oklch(0.962 0.018 272.314); + --sidebar-primary: #315DDE; + --sidebar-primary-foreground: #FFFFFF; --sidebar-accent: oklch(0.97 0 0); --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); @@ -183,51 +175,45 @@ } .dark { - /* Landmark — dark theme. Background = charcoal, surface cards - * use dark carbon, text + foreground use light cloud / cloud. - * Per the spec, dark-mode primary is also dark — but for visibility - * on charcoal we lift it slightly to carbon. */ - --background: #111212; /* charcoal */ + /* ACE — dark theme. A cool blue-black surface ladder reflects the + * logo without tinting every surface blue. */ + --background: #080B12; --foreground: #F7F7F7; /* light cloud */ - --card: #3E4550; /* dark carbon */ + --card: #121824; --card-foreground: #F7F7F7; - --popover: #3E4550; + --popover: #151C29; --popover-foreground: #F7F7F7; - --primary: #F7F7F7; /* light CTA on dark bg */ - --primary-foreground: #111212; - --secondary: #3E4550; + --primary: #7597FF; + --primary-foreground: #071020; + --secondary: #1B2332; --secondary-foreground: #F7F7F7; - --muted: #3E4550; /* dark carbon */ - --muted-foreground: #B1B9BE; /* slate */ - --accent: #3E4550; + --muted: #171E2A; + --muted-foreground: #A8B3C4; + --accent: #202A3A; --accent-foreground: #F7F7F7; --destructive: oklch(0.704 0.191 22.216); - --border: #535C66; /* carbon */ - --input: #535C66; - --ring: #7D8A92; /* light carbon */ + --border: #29354A; + --input: #35435B; + --ring: #7597FF; --chart-1: #05CC93; --chart-2: #00E0AF; --chart-3: #62E5F6; --chart-4: #0070F8; --chart-5: #7764FC; - /* Dark-mode brand + live — same hue, slightly lifted for contrast on - * charcoal background. */ - --brand: #05CC93; /* jade green (brighter in dark) */ - --brand-foreground: #111212; - --live: #05CC93; - --live-foreground: #111212; - --success: #05CC93; - --success-foreground: #111212; + --brand: #7597FF; + --brand-foreground: #071020; + --live: #55D6E6; + --live-foreground: #071020; + --success: #48C77A; + --success-foreground: #07140C; --warning: oklch(0.78 0.15 78); --warning-foreground: oklch(0.205 0 0); - /* Dark mode: a green-tinted dark surface (not flat carbon) so the - * hero still reads as branded against the Charcoal page. */ - --anchor: oklch(0.30 0.03 165); /* green-tinted dark carbon */ + --anchor: #131E38; --anchor-foreground: #F7F7F7; --sidebar: oklch(0.205 0 0); --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.585 0.233 277.117); - --sidebar-primary-foreground: oklch(0.962 0.018 272.314); + --sidebar-primary: #7597FF; + --sidebar-primary-foreground: #071020; --sidebar-accent: oklch(0.269 0 0); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); @@ -239,31 +225,39 @@ * the shared ACE semantic tokens. Keeping this scoped prevents a domain or * command-center preference from becoming a kernel-wide theme decision. */ .atrium-command-center.dark { - --background: #0A0C0C; - --foreground: #F3F6F4; - --card: #131616; - --card-foreground: #F3F6F4; - --popover: #161A19; - --popover-foreground: #F3F6F4; - --primary: #F3F6F4; - --primary-foreground: #0A0C0C; - --secondary: #1B201E; - --secondary-foreground: #F3F6F4; - --muted: #151918; - --muted-foreground: #9AA5A0; - --accent: #202624; - --accent-foreground: #F3F6F4; - --border: #29312E; - --input: #343D39; - --ring: #71E3B4; - --anchor: #101916; - --anchor-foreground: #F3F6F4; - --sidebar: #0D1010; - --sidebar-foreground: #E9EEEB; - --sidebar-accent: #191E1C; - --sidebar-accent-foreground: #F3F6F4; - --sidebar-border: #252C29; - --sidebar-ring: #71E3B4; + --background: #070A10; + --foreground: #F2F5FA; + --card: #101620; + --card-foreground: #F2F5FA; + --popover: #141B27; + --popover-foreground: #F2F5FA; + --primary: #7597FF; + --primary-foreground: #071020; + --secondary: #1A2230; + --secondary-foreground: #F2F5FA; + --muted: #141B25; + --muted-foreground: #9CA9BC; + --accent: #1C2636; + --accent-foreground: #F2F5FA; + --border: #263248; + --input: #33425A; + --ring: #7597FF; + --brand: #7597FF; + --brand-foreground: #071020; + --live: #55D6E6; + --live-foreground: #071020; + --success: #48C77A; + --success-foreground: #07140C; + --anchor: #111B32; + --anchor-foreground: #F2F5FA; + --sidebar: #090D14; + --sidebar-foreground: #EAF0F8; + --sidebar-primary: #7597FF; + --sidebar-primary-foreground: #071020; + --sidebar-accent: #161E2B; + --sidebar-accent-foreground: #F2F5FA; + --sidebar-border: #222D40; + --sidebar-ring: #7597FF; } @layer base { diff --git a/docs/design/ace-design-system-v1.md b/docs/design/ace-design-system-v1.md new file mode 100644 index 0000000..d994da4 --- /dev/null +++ b/docs/design/ace-design-system-v1.md @@ -0,0 +1,80 @@ +# ACE design system v1 + +## Product thesis + +ACE is an Intelligence Operating System. Its interface should make one current, +evidence-backed picture feel calm enough to trust and precise enough to act on. +The system belongs to ACE itself; a public Domain Pack changes vocabulary, sources, +and decision policy, not the product's identity. + +The ACE mark is the brand source. It moves from cyan through blue to violet, but the +application deliberately chooses one dominant color: **ACE cognitive blue**. Cyan is +reserved for live evidence, violet is reserved for rare composition/agent-memory +moments, and green returns to its literal semantic role: verified success. + +## Reference lock + +Research was synthesized from: + +- **Primary — Linear Changelog:** midnight command-center density, restrained type, + graphite borders, and surface layering instead of decorative shadows. +- **Borrowed — Warp:** a disciplined electric-blue focus treatment that highlights + active product state without tinting the whole interface. +- **Borrowed — Parallel:** evidence-forward research hierarchy and a clear separation + between a synthesized answer and its source record. + +Preserve: cool near-black surfaces, compact Inter/Spline-style typography, 8–12px +radii, thin borders, evidence one interaction away, and one dominant accent. + +Reject: HPE green as the Core identity, Vercel-branded blue language, rainbow category +chrome, giant KPI walls, decorative glow, glassmorphism, and gradients outside the +ACE mark or a rare brand transition. + +## Color roles + +| Role | Light | Dark / Atrium | Meaning | +|---|---:|---:|---| +| ACE cognitive blue | `#315DDE` | `#7597FF` | Primary actions, selected intelligence, links, focus, ACE identity | +| Spectral cyan | `#0F8294` | `#55D6E6` | Live/in-motion evidence only | +| Success green | `#178A4B` | `#48C77A` | Verified, completed, or accepted state only | +| Canvas | `#FFFFFF` | `#070A10` | Working surface / Atrium command center | +| Card | `#FFFFFF` | `#101620` | Evidence and intelligence records | +| Border | `#E6E8E9` | `#263248` | Structure without decorative elevation | + +Blue does not mean “good.” Green does not mean “ACE.” A Domain Pack may add chart or +taxonomy hues, but it must not change these meanings. + +## Typography and density + +- Spline Sans is the product voice; Spline Sans Mono is used for timestamps, counts, + identities, receipts, and provenance. +- Product headings use medium/semibold weight and tight tracking, not oversized bold + marketing typography. +- Spacing follows the existing 4px grid. Atrium stays compact; onboarding may breathe + more, but it should still feel like the same operating system. + +## Surfaces and interaction + +- Use borders and small tonal steps for depth. Avoid a stack of large shadows. +- Cards use 8–12px radius; pills are reserved for status and short filters. +- Blue appears on the active navigation item, focus ring, primary action, intelligence + lineage, and key identity moments. +- Every synthesized claim should be one interaction from evidence and provenance. +- Motion communicates a state change. It never decorates an otherwise static card. + +## Domain and deployment boundary + +Core ships the ACE base theme and owns its tokens, accessibility, primitives, and +Atrium composition. Public Domain Packs inherit the ACE theme and contribute only +domain vocabulary, data visualization needs, and semantic policy. + +Customer-specific branding is a deployment overlay. For example, an HPE deployment +may install an HPE theme privately, but the public Market Intelligence pack must not +make HPE green, fonts, or product naming its default. + +## Opportunity product language + +An Opportunity is intelligence awaiting a decision: a favorable or avoidable opening +supported by a Signal, a material Shift, and enough evidence to form a bounded Case. +It is not a lead, task, or autonomous action. See +[Atrium opportunity contract v1](atrium-opportunity-contract-v1.md). diff --git a/docs/design/atrium-command-center-reference-lock-v1.md b/docs/design/atrium-command-center-reference-lock-v1.md index 600eaea..4983ce2 100644 --- a/docs/design/atrium-command-center-reference-lock-v1.md +++ b/docs/design/atrium-command-center-reference-lock-v1.md @@ -24,23 +24,25 @@ command-center visual direction. The visual system is anchored in three researched patterns: -- Dovetail's "Midnight Command Center": deep charcoal surface hierarchy, - compact information density, thin borders, restrained radii, and no decorative - shadow stack. -- Paradigm's strategic-intelligence surfaces: rigorous status treatment, - evidence-forward rows, and high-contrast reading panels. -- Perplexity's answer experience: one calm question entry point, a sourced answer, - and explicit refusal to invent an answer when evidence is insufficient. - -ACE retains its mint brand identity for confirmed/live state. It is not expanded -into a rainbow category system. Monospace typography is reserved for receipts, -timestamps, counts, and provenance. +- Linear's changelog: a midnight command center built with subtle surface steps, + graphite borders, compact typography, and almost no decorative shadow. +- Warp's precision workbench: electric blue reserved for focus, active state, and + the product in action rather than spread across every surface. +- Parallel's research workspace: evidence-forward hierarchy, durable source context, + and a clear separation between the narrative answer and its supporting record. + +The ACE mark supplies the identity: cognitive blue is the primary/action color, +spectral cyan means live evidence, and semantic green means verified success only. +The blue-cyan-violet logo gradient stays inside the mark and rare brand moments; it +does not become a rainbow component system. Monospace typography is reserved for +receipts, timestamps, counts, and provenance. ## Decisions | Area | Decision | Reason | |---|---|---| | Theme | Dark, dense, evidence-first | Atrium should read as an always-on operating surface, not a marketing dashboard. | +| Brand | ACE cognitive blue on cool blue-black neutrals | Core must be recognizable without inheriting a customer's palette. | | Home | Briefing plus attention plus stream | One current narrative is primary; changes and open cases remain visible around it. | | Domain identity | Derive the display name from the governed page `product_id` | Core stays domain-neutral while every deployment is oriented. | | Status | One compact coverage strip | Avoid a wall of KPI cards; show operational context in one scan. | @@ -56,6 +58,7 @@ timestamps, counts, and provenance. - command-line cosplay; - a World-specific route or hard-coded World vocabulary inside Core; - a separate World dashboard that forks the Atrium experience. +- a public domain pack that silently replaces ACE identity with a customer's brand; - a source-catalog wall or agent-by-agent configuration wizard during first use; - a blank dashboard or a second guided tour after the first Brief is ready. diff --git a/docs/design/atrium-intelligence-experience-v0.8.0-work-packet-v1.md b/docs/design/atrium-intelligence-experience-v0.8.0-work-packet-v1.md index 7176afa..e5306fa 100644 --- a/docs/design/atrium-intelligence-experience-v0.8.0-work-packet-v1.md +++ b/docs/design/atrium-intelligence-experience-v0.8.0-work-packet-v1.md @@ -32,7 +32,7 @@ Research was intentionally locked before implementation: can be visible without claiming an arbiter of truth. ACE preserves available evidence and names degraded or unsupported state instead of inventing certainty. - The existing ACE Canvas design system remains the visual source of truth: Spline Sans, paper and - cloud surfaces, restrained brand green, Midnight text, semantic status colors, canonical shadcn + cloud surfaces, restrained ACE cognitive blue, Midnight text, semantic status colors, canonical shadcn primitives, and the existing accessibility enforcement suite. ## Product decisions diff --git a/docs/design/atrium-opportunity-contract-v1.md b/docs/design/atrium-opportunity-contract-v1.md new file mode 100644 index 0000000..b9963b5 --- /dev/null +++ b/docs/design/atrium-opportunity-contract-v1.md @@ -0,0 +1,51 @@ +# Atrium opportunity contract v1 + +## Definition + +An **Opportunity** is a decision-relevant opening inferred from current evidence. It +exists when a Signal or combination of Signals produces a material Shift and that +Shift implies a favorable or avoidable window worth investigating. + +It is deliberately not: + +- a sales lead; +- downstream Work or a task; +- an Agent's unreviewed suggestion; +- a generic alert with no decision consequence. + +The lifecycle is: + +`Entity graph -> Signal -> Shift -> Opportunity candidate -> Case -> Decision -> Action -> Outcome -> Feedback` + +ACE may detect and rank the candidate. A person still decides whether to investigate, +accept, dismiss, defer, or convert it into Strategy and downstream Work. + +## Required presentation + +Every decision-ready Opportunity should answer: + +1. **What opened?** The favorable or avoidable window. +2. **Why now?** The material Shift relative to the baseline. +3. **Why it matters?** Expected upside, avoided harm, or learning value. +4. **What supports it?** Cited evidence, provenance, and conflicts. +5. **How certain are we?** Confidence and known uncertainty. +6. **How long is the window?** Time horizon, urgency, or expiry condition. +7. **What decision is needed?** A bounded question and recommended next step. +8. **Who owns the decision?** Persona or accountable principal when configured. + +If those fields are incomplete, Atrium presents the record as an early Signal or +emerging Shift—not as a scored, decision-ready Opportunity. + +## Domain examples + +| Domain | Opportunity | +|---|---| +| World / AI | A model-price move opens a near-term migration or workload-expansion window. | +| World / AI | A new security requirement creates an avoidable readiness gap before enforcement. | +| Market Intelligence | A competitor claim change opens defensible positioning whitespace. | +| Market Intelligence | Repeated customer evidence reveals an underserved need worth testing in the next launch. | +| Market Intelligence | A competitor weakness and a launch window align around a specific buying group. | + +The Core contract does not encode these nouns. Domain Packs declare the entities, +Shift types, personas, thresholds, and synthesis language that give the shared +Opportunity lifecycle its local meaning.