Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
tag:
description: Git tag to publish
required: true
default: v0.8.0
default: v0.8.1

permissions:
contents: read
Expand Down
23 changes: 21 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

Notable user- and contributor-visible changes are recorded here.

## Unreleased
## 0.8.1

### Atrium live onboarding binding
### Intelligence Builder product experience

- Project declarative, non-authorizing onboarding profiles and every append-only Intelligence
Builder session revision through the existing authenticated resource plane. The projection adds
Expand All @@ -15,6 +15,25 @@ Notable user- and contributor-visible changes are recorded here.
when the exact session reaches `first_briefing_ready`.
- Add the paired World AI Command Center acceptance journey over four real builder agent roles and
two already-admitted recorded official-source lineages.
- Make Atrium the Intelligence OS command center with Intelligence, Opportunities, Agents,
Connections, and Strategy as first-class destinations while keeping downstream Work outside the
product center.
- Define Opportunities as evidence-backed decision openings across Cases, material Shifts, and
early Signals rather than as leads or tasks.
- Establish the ACE design system with cognitive blue as the primary identity, cyan reserved for
live intelligence, violet for agent/memory composition, and green for verified outcomes.
- Add a local-only immutable resource replay for the World AI Command Center demo without adding a
second persistence, authority, or domain state path.
- Forward the shared resource-detail sheet overlay ref through its Radix boundary so opening cited
Brief details remains free of React runtime warnings on desktop and mobile.
- Project canonical Brief sections and every decision-facing Signal, Shift, Case, Decision,
Action, Outcome, and Feedback record into a visual **What changed / Why it matters / How we know /
When it changed** grammar in Atrium. Generic fallbacks disclose missing materiality or event time
instead of inventing it; unknowns, limitations, receipts, and lineage remain available in the
same governed resource detail.

The patch preserves schema head v177, exactly eleven public MCP tools, the Core 0.8 compatibility
line, and the existing reference action adapter 0.4.0 boundary.

## 0.8.0

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM python:3.12-slim

ARG ACE_VERSION=0.8.0
ARG ACE_VERSION=0.8.1
LABEL org.opencontainers.image.title="ace-core" \
org.opencontainers.image.version="${ACE_VERSION}" \
org.opencontainers.image.source="https://github.com/augmented-cognition-engine/core"
Expand Down
27 changes: 24 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ monitors, and an intelligence system that improves with governed feedback. ACE i
provenance, authority, durable state, and exact receipts stay built into the result instead of
becoming infrastructure every product team must recreate.

![version 0.8.0](https://img.shields.io/badge/version-0.8.0-blue)
![version 0.8.1](https://img.shields.io/badge/version-0.8.1-blue)
![Python 3.12](https://img.shields.io/badge/python-3.12-blue)
![License Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-green)
![status: developer preview](https://img.shields.io/badge/status-developer%20preview-orange)
Expand Down Expand Up @@ -386,7 +386,28 @@ transforms only), `ace.intelligence.personas/v1alpha1` (personas plus signal-rou

---

## What 0.8.0 adds
## What 0.8.1 adds

0.8.1 turns the Intelligence OS foundation into a clearer first-run product experience without
changing the 0.8 public architecture or widening authority.

- **Live onboarding state.** Atrium projects the exact append-only Intelligence Builder session
and shows proposal, working, blocked, retrying, and complete states from durable records.
- **A decision-oriented command center.** Intelligence, Opportunities, Agents, Connections, and
Strategy are first-class destinations. An Opportunity is intelligence awaiting a decision: a
Case, material Shift, or early Signal with evidence and a next decision window.
- **Decision-readable intelligence.** Briefs and every decision-facing Signal, Shift, Case,
Decision, Action, Outcome, and Feedback record use a visual What / Why / How / When grammar.
Missing materiality or event time stays visibly missing, while evidence, unknowns, limits,
receipts, and lineage remain inspectable rather than overwhelming the answer.
- **An ACE-owned visual identity.** Cognitive blue leads the shared product, cyan marks live
intelligence, violet is reserved for agent and memory composition, and green means verified
success. Customer branding remains a replaceable deployment overlay.
- **A reproducible World AI demonstration.** The paired World release supplies the guided
Connect → Map → Watch → Brief journey and an immutable local replay through the same governed
resource plane.

### What 0.8.0 added

0.8.0 makes the **Intelligence Operating System** the coherent product experience rather than an
architecture users have to assemble themselves.
Expand Down Expand Up @@ -824,7 +845,7 @@ stay host-free, and host adapters are the only `core.engine` edge into the publi

## Maturity and limitations

**0.8.0 is a published developer-preview release.** Its Intelligence OS claim is bounded to
**0.8.1 is a published developer-preview release.** Its Intelligence OS claim is bounded to
the provider-free and installed-artifact journeys recorded in the evidence archive and the
single-node topology below. Read this section before you build on it.

Expand Down
24 changes: 14 additions & 10 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ Roadmap outcome states are used strictly:

## Current release checkpoint

The latest published release is `ace-core` 0.8.0 on PyPI and GitHub.
The latest published release is `ace-core` 0.8.1 on PyPI and GitHub.

The 0.8 release makes the existing Builder, composition, memory, authority, action, and outcome
capabilities coherent as one **Intelligence Operating System**. One governed point-in-time resource
Expand All @@ -88,23 +88,27 @@ thin MCP surface remains exactly eleven tools. The exact pre-publication source,
proof, verification, and limitations are bound by the
[Intelligence OS release closeout](docs/evidence/intelligence-os-v0.8.0-release-closeout-v1.md).

The [0.8.0 GitHub Release](https://github.com/augmented-cognition-engine/core/releases/tag/v0.8.0)
and public [`ace-core==0.8.0`](https://pypi.org/project/ace-core/0.8.0/) package are the current
developer-preview release line. Atrium is a repository-delivered optional workspace rather than a
second state or authority path.
The [0.8.1 GitHub Release](https://github.com/augmented-cognition-engine/core/releases/tag/v0.8.1)
and public [`ace-core==0.8.1`](https://pypi.org/project/ace-core/0.8.1/) package are the current
developer-preview release line. The patch binds live onboarding state into Atrium, defines
Opportunities as evidence-backed decision openings, establishes the ACE design system, and adds a
reproducible World AI resource replay. Atrium remains a repository-delivered optional workspace
rather than a second state or authority path.

### Passed hardening — Atrium live onboarding binding
### Passed hardening — Atrium live onboarding and product experience

The post-0.8 candidate closes one experience gap without creating a new product layer. Core now
The 0.8.1 patch closes one experience gap without creating a new product layer. Core now
projects one inert onboarding profile plus the exact append-only Intelligence Builder session
history through the same authenticated resource plane Atrium already consumes. Atrium renders
proposal, working, blocked, retrying, and complete states from those durable records and opens the
first Brief only after `first_briefing_ready`. World AI supplies the paired domain profile and a
four-agent `Connect -> Map -> Watch -> Brief` acceptance journey over admitted official-source
evidence. Core PR #145 and World PR #24 landed after repository, installed-artifact, browser,
naked-kernel, and package checks passed. The follow-on demo-polish packet adds a local-only replay
of an immutable domain resource page and replaces internal persistence language with user-facing
setup status. It does not change the 0.9 Collaborative Intelligence promise.
naked-kernel, and package checks passed. Follow-on work adds a local-only replay of an immutable
domain resource page, replaces internal persistence language with user-facing setup status,
defines the Opportunity experience, introduces the ACE-owned design system, and applies a truthful
visual What / Why / How / When grammar across Briefs and decision-facing intelligence. It does not change the 0.9
Collaborative Intelligence promise.

The prior [0.7.0 GitHub Release](https://github.com/augmented-cognition-engine/core/releases/tag/v0.7.0)
and [`ace-core==0.7.0`](https://pypi.org/project/ace-core/0.7.0/) package remain the passed
Expand Down
2 changes: 1 addition & 1 deletion ace/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Public Python package identity for ACE."""

__version__ = "0.8.0"
__version__ = "0.8.1"
2 changes: 1 addition & 1 deletion ace_mcp_client/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ace_mcp_client — standalone MCP thin client for ACE
# Zero engine imports. Pure HTTP calls to the ACE API.

__version__ = "0.8.0"
__version__ = "0.8.1"
2 changes: 1 addition & 1 deletion core/engine/version.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Single source of truth for the ACE distribution version."""

VERSION = "0.8.0"
VERSION = "0.8.1"
51 changes: 45 additions & 6 deletions core/ui/canvas/src/app/atrium/ResourceCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ import {
import { Separator } from '@/design/shadcn/ui/separator'

import { compactReference, kindLabel } from './intelligenceModel'
import { payloadNumber, payloadText } from './experienceModel'
import {
intelligenceStoryForRecord,
payloadNumber,
payloadText,
} from './experienceModel'

function availabilityLabel(record: IntelligenceResourceRecord): string {
if (record.availability === 'degraded') return 'Needs context'
Expand All @@ -42,6 +46,8 @@ export function ResourceCard({
readonly compact?: boolean
}) {
const whyItMatters = payloadText(record.payload, 'why_it_matters')
const storySections = intelligenceStoryForRecord(record)
const whatChanged = storySections.find((section) => section.id === 'what_changed')
const confidence = payloadNumber(record.payload, 'confidence')
const confidencePercent = confidence !== null && confidence >= 0 && confidence <= 1
? Math.round(confidence * 100)
Expand Down Expand Up @@ -90,7 +96,7 @@ export function ResourceCard({
>
{record.title}
</h3>
{record.summary !== null && (
{record.summary !== null && storySections.length === 0 && (
<p
className={
featured
Expand All @@ -101,7 +107,27 @@ export function ResourceCard({
{record.summary}
</p>
)}
{featured && whyItMatters !== null && (
{storySections.length > 0 && (
<div className={featured
? 'mt-5 grid gap-px overflow-hidden rounded-lg border bg-border sm:grid-cols-2'
: 'mt-3 grid grid-cols-2 gap-px overflow-hidden rounded-md border bg-border'}>
{storySections.map((section) => (
<div key={section.id} className={featured ? 'bg-card p-4' : 'min-w-0 bg-card p-2.5'}>
<div className={featured
? 'font-mono text-[9px] font-semibold uppercase tracking-[0.16em] text-brand'
: 'font-mono text-[8px] font-semibold uppercase tracking-[0.14em] text-brand'}>
{section.label}
</div>
<p className={featured
? 'mt-1.5 text-xs leading-5 text-foreground/85'
: 'mt-1 line-clamp-2 text-[10px] leading-4 text-foreground/80'}>
{section.body}
</p>
</div>
))}
</div>
)}
{featured && storySections.length === 0 && whyItMatters !== null && (
<div className="mt-5 border-l-2 border-brand/70 pl-3">
<div className="font-mono text-[9px] font-semibold uppercase tracking-[0.16em] text-brand">Why it matters</div>
<p className="mt-1 max-w-3xl text-xs leading-5 text-foreground/85">{whyItMatters}</p>
Expand All @@ -127,13 +153,26 @@ export function ResourceCard({
</Badge>
</div>
<SheetTitle className="text-xl leading-tight">{record.title}</SheetTitle>
<SheetDescription className="leading-relaxed">
{record.summary ?? 'This resource does not include a narrative summary.'}
<SheetDescription className={storySections.length > 0 ? 'sr-only' : 'leading-relaxed'}>
{whatChanged?.body ?? record.summary ?? 'This resource does not include a narrative summary.'}
</SheetDescription>
</SheetHeader>

<div className="space-y-6 p-6">
{whyItMatters !== null && (
{storySections.length > 0 && (
<section className="grid gap-3 sm:grid-cols-2">
{storySections.map((section) => (
<div key={section.id} className="rounded-lg border border-brand/15 bg-brand/[0.035] p-4">
<div className="font-mono text-[10px] font-semibold uppercase tracking-widest text-brand">
{section.label}
</div>
<p className="mt-2 text-sm leading-relaxed text-foreground/90">{section.body}</p>
</div>
))}
</section>
)}

{storySections.length === 0 && whyItMatters !== null && (
<section className="rounded-lg border border-brand/20 bg-brand/5 p-4">
<div className="font-mono text-[10px] font-semibold uppercase tracking-widest text-brand">
Why it matters
Expand Down
70 changes: 69 additions & 1 deletion core/ui/canvas/src/app/atrium/experienceModel.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
import { describe, expect, it } from 'vitest'

import { payloadNumber, payloadText, productDisplayName } from './experienceModel'
import {
intelligenceStoryForRecord,
intelligenceStorySections,
payloadNumber,
payloadText,
productDisplayName,
} from './experienceModel'
import type { IntelligenceResourceRecord } from '@/api/intelligenceResourcesApi'

describe('Atrium experience model', () => {
it('orients the shell from a domain-owned product identity', () => {
Expand All @@ -19,4 +26,65 @@ describe('Atrium experience model', () => {
expect(payloadNumber({ confidence: 0.92 }, 'confidence')).toBe(0.92)
expect(payloadNumber({ confidence: 'high' }, 'confidence')).toBeNull()
})

it('projects the canonical What / Why / How / When intelligence grammar', () => {
const bodyMarkdown = [
'# Brief',
'',
'## What Changed',
'',
'- A directive moved to reported operation\\. (inference supports: case:1; uncertainty: bounded)',
'',
'## Why It Matters',
'',
'- An operating mechanism now exists\\. (inference supports: signal:1; uncertainty: bounded)',
'',
'## How We Know',
'',
'- Two admitted records support the change\\. (cited supports: observation:1, observation:2)',
'',
'## When It Changed',
'',
'- The second report arrived 39 days later\\. (cited supports: observation:1, observation:2)',
].join('\n')

expect(intelligenceStorySections({ value_json: JSON.stringify({ body_markdown: bodyMarkdown }) })).toEqual([
{ id: 'what_changed', label: 'What changed', body: 'A directive moved to reported operation.' },
{ id: 'why_it_matters', label: 'Why it matters', body: 'An operating mechanism now exists.' },
{ id: 'how_we_know', label: 'How we know', body: 'Two admitted records support the change.' },
{ id: 'when_it_changed', label: 'When it changed', body: 'The second report arrived 39 days later.' },
])
})

it('keeps the grammar visible for decision-facing resources without inventing facts', () => {
const signal: IntelligenceResourceRecord = {
contract: 'ace.intelligence.resource-record/v1alpha1',
reference: {
contract: 'ace.intelligence.resource-reference/v1alpha1',
product_id: 'product:test',
resource_kind: 'signal',
resource_id: 'signal:1',
resource_digest: 'sha256:signal',
resource_contract: 'ace.intelligence.signal/v1alpha1',
revision: 1,
as_of: '2026-08-13T12:00:00Z',
available_at: '2026-08-13T12:05:00Z',
},
availability: 'available',
title: 'A new signal arrived',
summary: 'An official report followed an issued directive.',
subject_refs: [],
provenance: [],
supersedes: null,
payload: {},
degraded_reason_refs: [],
}

expect(intelligenceStoryForRecord(signal)).toEqual([
{ id: 'what_changed', label: 'What changed', body: 'An official report followed an issued directive.' },
{ id: 'why_it_matters', label: 'Why it matters', body: 'It met the configured relevance and routing criteria, so it now warrants attention.' },
{ id: 'how_we_know', label: 'How we know', body: 'No upstream evidence link is projected for this record.' },
{ id: 'when_it_changed', label: 'When it changed', body: 'The evidence picture is current as of 2026-08-13T12:00:00Z; a distinct event time was not supplied.' },
])
})
})
Loading