From 61262e2bbb813f693625db11ae14a66fcbb9de16 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Fri, 22 May 2026 11:20:49 +0200 Subject: [PATCH 1/4] feat(web): welcome hero footnotes + drop operator Overview section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Welcome hero on /home gains a hairline-separated footnotes row below the four pillars carrying the privacy posture (telemetry travels, raw data stays local, /agnes-private toggles per-session) and the workspace-layout convention (work under ~//Projects/, anything outside is invisible to the platform). Renders for both onboarded and not-onboarded users. Lede 2 gains a trailing sentence so the workspace-folder framing lands before the reader scrolls past. The operator-owned
is removed — its privacy / workspace-layout copy now ships inline in the welcome footnotes, so a separate operator surface for the same content is redundant. The get_instance_overview() helper and instance.overview yaml field remain (harmless if set; just not rendered) so existing instances that override them don't trip on a removed config key. --- CHANGELOG.md | 22 ++++++++ app/web/templates/home_not_onboarded.html | 65 ++++++++++++++++------- tests/test_web_home_page.py | 38 +++---------- 3 files changed, 76 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afcab69..a47fd7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,19 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C bar, and per-step number badges next to each install block. ### Changed +- `/home` welcome hero gains a *footnotes* row beneath the four + pillars: a hairline-separated block carrying the privacy posture + (*"What leaves your machine"* — telemetry travels, raw data + stays local, `/agnes-private` toggles per-session) and the + workspace-layout convention (*"Get the most out of it"* — work + under `~//Projects/`, anything outside the + workspace root is invisible to the platform). Renders for both + onboarded and not-onboarded users so the operating model is + visible on every visit. +- Welcome hero's *"AI Chief of Staff"* lede gains a trailing + sentence ("*You run all your projects inside and it learns + from it.*") so the workspace-folder framing lands before the + reader scrolls past. - Default `instance.theme` flipped from `navy` to `blue`. The brand-blue palette is now the out-of-the-box look; `navy` (dark hero + mint-green CTAs) is the opt-in via `AGNES_INSTANCE_THEME` / `instance.theme` @@ -242,6 +255,15 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C top of `/home` (the in-page anchor it carried — *Setup Agnes in your Claude Code* / *Go deeper into your AI workspace* — duplicated links already reachable from the install hero and `/setup-advanced`). +- Operator-owned *Overview* `
` on `/home` (rendered the + `instance.overview` / `AGNES_INSTANCE_OVERVIEW` HTML body between + the first-session walkthrough and the surfaces grid). The + privacy-posture / workspace-layout copy it carried now ships + inline in the welcome hero footnotes, so a separate operator + surface for the same content is no longer needed. The + `get_instance_overview()` helper and yaml field remain (harmless + if set; just not rendered) so existing instances that override + it don't trip on a removed config key. ### Removed diff --git a/app/web/templates/home_not_onboarded.html b/app/web/templates/home_not_onboarded.html index 67f66e0..858cf50 100644 --- a/app/web/templates/home_not_onboarded.html +++ b/app/web/templates/home_not_onboarded.html @@ -1103,6 +1103,34 @@ line-height: 1.55; margin: 0; } +/* Hero footnotes — two short paragraphs about telemetry + workspace layout, + rendered below the pillars row inside the same dark navy hero. Same + hairline separator pattern as `.home-hero-pillars` so the section + reads as a continuation of the welcome card. */ +.home-mock .home-hero-footnotes { + margin-top: 26px; + padding-top: 26px; + border-top: 1px solid rgba(255, 255, 255, 0.12); + position: relative; +} +.home-mock .home-hero-footnotes p { + font-size: 13.5px; + color: rgba(255, 255, 255, 0.78); + line-height: 1.6; + margin: 0 0 12px; + max-width: 860px; +} +.home-mock .home-hero-footnotes p:last-child { margin-bottom: 0; } +.home-mock .home-hero-footnotes strong { color: #ffffff; font-weight: 600; } +.home-mock .home-hero-footnotes code { + background: rgba(15, 23, 42, 0.55); + color: #FBBF24; + border: 1px solid rgba(251, 191, 36, 0.30); + padding: 1px 6px; + border-radius: 4px; + font-family: var(--ds-font-mono); + font-size: 11.5px; +} @media (max-width: 880px) { .home-mock .home-hero-intro { padding: 32px 24px 28px; } .home-mock .home-hero-intro h1 { font-size: 26px; } @@ -2235,7 +2263,7 @@

Think of it as your AI Chief of Staff — it lives in a folder on your computer, gives you access to company data and curated skills, and lets you share your own skills - and plugins back to the team. + and plugins back to the team. You run all your projects inside and it learns from it.

{% if not onboarded %} @@ -2261,6 +2289,23 @@

Shared analyst knowledge and prior solutions, fed back into Claude's context on demand.

+
+

+ What leaves your machine. Session telemetry — prompts, tool calls, + and tool responses — flows back to the central catalog so the team can analyse failure + patterns. Raw data rows you query locally stay on your machine; only the prompt/response + transcript travels. Need a session off the record? Toggle Private in Claude Code to disable + telemetry for that chat by calling command /agnes-private in {{ instance_brand }} + project folder — nothing from that session reaches the system. +

+

+ Get the most out of it by working under ~/{{ workspace_dir }}/Projects/. + Create every project there — existing or new, fresh starts or clones of repos you already + use. The bundled plugin keeps each project in sync with the central catalog (data packages, + plugins, skills, memory) automatically, and the session-analysis loop is scoped to that root. + Anything outside ~/{{ workspace_dir }}/ is invisible to the platform. +

+
{# Homepage status frame — five counters with 24h/7d toggle. @@ -2771,24 +2816,6 @@ Want me to draft a 1-page brief, or dig into one of these?
- {# Overview section — operator-owned, opt-in. Body comes from the - `instance.overview` yaml field via get_instance_overview() - (`AGNES_INSTANCE_OVERVIEW` env override). Empty value hides the - whole section, keeping the OSS vendor-neutral. #} - {# Overview is operator-owned reference content, not per-user - chrome — no dismiss button on purpose. A one-time per-device - hide would mean returning users who wanted to re-read the - privacy posture / telemetry policy can't get back to it - without clearing localStorage. The whole section is opt-in at - the operator level (empty yaml → section absent), which is - the right axis of control. #} - {% if config.INSTANCE_OVERVIEW %} -
-

Overview

-
{{ config.INSTANCE_OVERVIEW | safe }}
-
- {% endif %} - {# Surfaces — four places to use {{ instance_brand }}. Mirrors the design spec's "Where you can use it" section: VS Code (RECOMMENDED), Terminal, Claude Desktop, Cowork (claude.ai). Each card carries diff --git a/tests/test_web_home_page.py b/tests/test_web_home_page.py index 600b98c..7b37d1b 100644 --- a/tests/test_web_home_page.py +++ b/tests/test_web_home_page.py @@ -359,39 +359,16 @@ def test_setup_section_renders_for_not_onboarded(fresh_db): assert '
` was removed from + `/home` — its privacy / workspace-layout copy now ships inline + in the welcome hero footnotes. The `get_instance_overview()` + helper and `instance.overview` yaml field still exist (to avoid + breaking instances that override them), but the rendered + section MUST NOT appear regardless of the env value.""" monkeypatch.setenv("AGNES_INSTANCE_OVERVIEW", "

OVERVIEW_TEST_MARKER

") from src.db import get_system_db, close_system_db - conn = get_system_db() - try: - _, sess = _make_user_and_session(conn) - finally: - conn.close() - close_system_db() - body = _client().get("/home", cookies={"access_token": sess}).text - assert '
' in body - assert "OVERVIEW_TEST_MARKER" in body - # Overview must NOT carry a dismiss key — content stays - # reachable on every visit so users can re-read it. - assert 'data-dismiss-key="agnes_home_overview_dismissed"' not in body - - -def test_overview_section_hidden_when_yaml_empty(fresh_db, monkeypatch): - """Default empty `instance.overview` (no env override) hides the - section entirely so the OSS ships without a stray empty - Overview placeholder.""" - monkeypatch.delenv("AGNES_INSTANCE_OVERVIEW", raising=False) - from src.db import get_system_db, close_system_db - conn = get_system_db() try: _, sess = _make_user_and_session(conn) @@ -400,3 +377,4 @@ def test_overview_section_hidden_when_yaml_empty(fresh_db, monkeypatch): close_system_db() body = _client().get("/home", cookies={"access_token": sess}).text assert '
' not in body + assert "OVERVIEW_TEST_MARKER" not in body From 2db1dceca15608f4b9a561f48d6931384647e670 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Fri, 22 May 2026 11:35:40 +0200 Subject: [PATCH 2/4] fix(web): gate welcome-hero footnotes on instance.overview flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bring the original Overview gating contract forward to the new footnotes block: any non-empty `instance.overview` / AGNES_INSTANCE_OVERVIEW value enables the footnotes, an empty value hides them. The raw yaml HTML body is no longer rendered (the static product framing replaces it) — operators relying on custom Overview HTML should migrate that content to instance.custom_scripts or admin-edited news. Preserves the explanatory comments from the original Overview section (operator-owned, opt-in, no dismiss button) so future readers understand why the block is gated. Splits the test into two halves matching the original gating pattern: footnotes appear when the flag is set, hidden when unset. Uses "Get the most out of it" as the marker (unique to the footnotes copy) since "What leaves your machine" still appears in the untouched session-privacy annotation lower on the page. --- CHANGELOG.md | 22 +++++++---- app/web/templates/home_not_onboarded.html | 20 ++++++++++ tests/test_web_home_page.py | 46 +++++++++++++++++++---- 3 files changed, 73 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a47fd7f..9e8d2d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,9 +47,13 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C stays local, `/agnes-private` toggles per-session) and the workspace-layout convention (*"Get the most out of it"* — work under `~//Projects/`, anything outside the - workspace root is invisible to the platform). Renders for both - onboarded and not-onboarded users so the operating model is - visible on every visit. + workspace root is invisible to the platform). Gated on the same + `instance.overview` / `AGNES_INSTANCE_OVERVIEW` flag that used + to drive the standalone Overview section — any non-empty value + acts as the feature flag — so the OSS keeps a vendor-neutral + default (empty yaml → footnotes absent) while operators who + flip the flag get a consistent message across instances. + Renders for both onboarded and not-onboarded users. - Welcome hero's *"AI Chief of Staff"* lede gains a trailing sentence ("*You run all your projects inside and it learns from it.*") so the workspace-folder framing lands before the @@ -259,11 +263,13 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C `instance.overview` / `AGNES_INSTANCE_OVERVIEW` HTML body between the first-session walkthrough and the surfaces grid). The privacy-posture / workspace-layout copy it carried now ships - inline in the welcome hero footnotes, so a separate operator - surface for the same content is no longer needed. The - `get_instance_overview()` helper and yaml field remain (harmless - if set; just not rendered) so existing instances that override - it don't trip on a removed config key. + inline in the welcome hero footnotes (see *Changed* above). The + `get_instance_overview()` helper and yaml field still drive the + feature flag for the new footnotes block, but the raw HTML body + the operator stored there is no longer rendered (the static + product framing replaces it) — operators who relied on injecting + custom Overview HTML should migrate that content to + `instance.custom_scripts` or admin-edited news. ### Removed diff --git a/app/web/templates/home_not_onboarded.html b/app/web/templates/home_not_onboarded.html index 858cf50..00591cb 100644 --- a/app/web/templates/home_not_onboarded.html +++ b/app/web/templates/home_not_onboarded.html @@ -2289,6 +2289,25 @@

Shared analyst knowledge and prior solutions, fed back into Claude's context on demand.

+ {# Welcome-hero footnotes — operator-owned, opt-in. Gated on + the same `instance.overview` yaml field + (`AGNES_INSTANCE_OVERVIEW` env override) that used to + drive the standalone Overview section: any non-empty + value acts as the feature flag. The body itself is no + longer the operator's raw HTML — it's the canonical + product framing (privacy posture + workspace convention) + baked into the template, so the OSS keeps a + vendor-neutral default (empty yaml → footnotes absent) + while operators who flip the flag get a consistent + message across instances. #} + {# Footnotes are operator-owned reference content, not + per-user chrome — no dismiss button on purpose. A + one-time per-device hide would leave returning users + unable to re-read the privacy posture / workspace + convention without clearing localStorage. The whole + block is opt-in at the operator level (empty yaml → + block absent), which is the right axis of control. #} + {% if config.INSTANCE_OVERVIEW %}

What leaves your machine. Session telemetry — prompts, tool calls, @@ -2306,6 +2325,7 @@ Anything outside ~/{{ workspace_dir }}/ is invisible to the platform.

+ {% endif %} {# Homepage status frame — five counters with 24h/7d toggle. diff --git a/tests/test_web_home_page.py b/tests/test_web_home_page.py index 7b37d1b..a64f532 100644 --- a/tests/test_web_home_page.py +++ b/tests/test_web_home_page.py @@ -359,13 +359,17 @@ def test_setup_section_renders_for_not_onboarded(fresh_db): assert '
` was removed from - `/home` — its privacy / workspace-layout copy now ships inline - in the welcome hero footnotes. The `get_instance_overview()` - helper and `instance.overview` yaml field still exist (to avoid - breaking instances that override them), but the rendered - section MUST NOT appear regardless of the env value.""" +def test_overview_section_replaced_by_welcome_footnotes(fresh_db, monkeypatch): + """The standalone operator-owned Overview `
` was removed + from `/home`. Its privacy / workspace-layout copy now ships as + static product framing inside the welcome hero footnotes + (`.home-hero-footnotes`). The `instance.overview` yaml field + (`AGNES_INSTANCE_OVERVIEW`) keeps its gating role — any + non-empty value acts as the feature flag — but its raw HTML + body is no longer rendered (the static copy replaces it). When + set: the standalone section MUST stay absent and the + footnotes block MUST appear, but the raw yaml HTML body MUST + NOT leak into the page.""" monkeypatch.setenv("AGNES_INSTANCE_OVERVIEW", "

OVERVIEW_TEST_MARKER

") from src.db import get_system_db, close_system_db @@ -378,3 +382,31 @@ def test_overview_section_never_renders(fresh_db, monkeypatch): body = _client().get("/home", cookies={"access_token": sess}).text assert '
' not in body assert "OVERVIEW_TEST_MARKER" not in body + assert '
' in body + # "Get the most out of it" is unique to the footnotes block — the + # original "What leaves your machine" copy still exists in the + # session-privacy annotation lower on the page (untouched), so we + # can't use it as a footnotes marker. + assert "Get the most out of it" in body + + +def test_welcome_footnotes_hidden_when_overview_unset(fresh_db, monkeypatch): + """Default empty `instance.overview` (no env override) hides the + welcome-hero footnotes entirely so the OSS ships without the + central-catalog privacy framing baked into the welcome card.""" + monkeypatch.delenv("AGNES_INSTANCE_OVERVIEW", raising=False) + from src.db import get_system_db, close_system_db + + conn = get_system_db() + try: + _, sess = _make_user_and_session(conn) + finally: + conn.close() + close_system_db() + body = _client().get("/home", cookies={"access_token": sess}).text + assert '
' not in body + # "Get the most out of it" is the unique footnotes marker — the + # original "What leaves your machine" copy in the session-privacy + # annotation lower on the page always renders, so checking that + # would be a false-positive. + assert "Get the most out of it" not in body From 19eef690921a17b50c5a09f97d822c25cdc33c5f Mon Sep 17 00:00:00 2001 From: David Rybar Date: Fri, 22 May 2026 11:50:08 +0200 Subject: [PATCH 3/4] fix(web): render operator overview HTML inside welcome-hero footnotes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restore the original Overview rendering contract: the `instance.overview` (`AGNES_INSTANCE_OVERVIEW`) HTML body renders verbatim via `| safe` filter, just inside the welcome hero's `.home-hero-footnotes` styled block instead of as a standalone `
` between the walkthrough and surfaces grid. Only the location and styling moved — existing instances that set the yaml field get the same content in the new home. Tests updated accordingly: footnotes render the operator's HTML marker when the flag is set (mirrors the previous `test_overview_section_renders_when_yaml_set`), and are absent when the flag is empty (mirrors `test_overview_section_hidden_when_yaml_empty`). --- CHANGELOG.md | 40 +++++++++-------------- app/web/templates/home_not_onboarded.html | 18 +--------- tests/test_web_home_page.py | 36 +++++++------------- 3 files changed, 29 insertions(+), 65 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e8d2d5..fd901fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,20 +40,15 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C (`Step 1 of N · ~15 min · One-time · Reversible`), a thin progress bar, and per-step number badges next to each install block. -### Changed - `/home` welcome hero gains a *footnotes* row beneath the four - pillars: a hairline-separated block carrying the privacy posture - (*"What leaves your machine"* — telemetry travels, raw data - stays local, `/agnes-private` toggles per-session) and the - workspace-layout convention (*"Get the most out of it"* — work - under `~//Projects/`, anything outside the - workspace root is invisible to the platform). Gated on the same - `instance.overview` / `AGNES_INSTANCE_OVERVIEW` flag that used - to drive the standalone Overview section — any non-empty value - acts as the feature flag — so the OSS keeps a vendor-neutral - default (empty yaml → footnotes absent) while operators who - flip the flag get a consistent message across instances. - Renders for both onboarded and not-onboarded users. + pillars: a hairline-separated block rendering operator-authored + HTML from `instance.overview` (`AGNES_INSTANCE_OVERVIEW` env + override). This is the same `| safe`-filtered body that used to + drive the standalone Overview section between the walkthrough + and surfaces grid — the rendering contract is unchanged, only + the location and styling moved. Empty yaml → footnotes absent + (OSS stays vendor-neutral). Renders for both onboarded and + not-onboarded users. - Welcome hero's *"AI Chief of Staff"* lede gains a trailing sentence ("*You run all your projects inside and it learns from it.*") so the workspace-folder framing lands before the @@ -259,17 +254,14 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C top of `/home` (the in-page anchor it carried — *Setup Agnes in your Claude Code* / *Go deeper into your AI workspace* — duplicated links already reachable from the install hero and `/setup-advanced`). -- Operator-owned *Overview* `
` on `/home` (rendered the - `instance.overview` / `AGNES_INSTANCE_OVERVIEW` HTML body between - the first-session walkthrough and the surfaces grid). The - privacy-posture / workspace-layout copy it carried now ships - inline in the welcome hero footnotes (see *Changed* above). The - `get_instance_overview()` helper and yaml field still drive the - feature flag for the new footnotes block, but the raw HTML body - the operator stored there is no longer rendered (the static - product framing replaces it) — operators who relied on injecting - custom Overview HTML should migrate that content to - `instance.custom_scripts` or admin-edited news. +- Operator-owned *Overview* `
` on `/home` no longer + renders as a standalone block between the first-session + walkthrough and the surfaces grid. The same operator-authored + HTML body (`instance.overview` / `AGNES_INSTANCE_OVERVIEW`) now + renders inside the welcome hero footnotes instead (see *Changed* + above) — the rendering contract is unchanged, only the location + and styling moved, so existing instances that set the yaml + field get the same content in the new home. ### Removed diff --git a/app/web/templates/home_not_onboarded.html b/app/web/templates/home_not_onboarded.html index 00591cb..3a6a1b7 100644 --- a/app/web/templates/home_not_onboarded.html +++ b/app/web/templates/home_not_onboarded.html @@ -2308,23 +2308,7 @@ block is opt-in at the operator level (empty yaml → block absent), which is the right axis of control. #} {% if config.INSTANCE_OVERVIEW %} -
-

- What leaves your machine. Session telemetry — prompts, tool calls, - and tool responses — flows back to the central catalog so the team can analyse failure - patterns. Raw data rows you query locally stay on your machine; only the prompt/response - transcript travels. Need a session off the record? Toggle Private in Claude Code to disable - telemetry for that chat by calling command /agnes-private in {{ instance_brand }} - project folder — nothing from that session reaches the system. -

-

- Get the most out of it by working under ~/{{ workspace_dir }}/Projects/. - Create every project there — existing or new, fresh starts or clones of repos you already - use. The bundled plugin keeps each project in sync with the central catalog (data packages, - plugins, skills, memory) automatically, and the session-analysis loop is scoped to that root. - Anything outside ~/{{ workspace_dir }}/ is invisible to the platform. -

-
+
{{ config.INSTANCE_OVERVIEW | safe }}
{% endif %}
diff --git a/tests/test_web_home_page.py b/tests/test_web_home_page.py index a64f532..5fc9bb1 100644 --- a/tests/test_web_home_page.py +++ b/tests/test_web_home_page.py @@ -359,17 +359,15 @@ def test_setup_section_renders_for_not_onboarded(fresh_db): assert '
` was removed - from `/home`. Its privacy / workspace-layout copy now ships as - static product framing inside the welcome hero footnotes - (`.home-hero-footnotes`). The `instance.overview` yaml field - (`AGNES_INSTANCE_OVERVIEW`) keeps its gating role — any - non-empty value acts as the feature flag — but its raw HTML - body is no longer rendered (the static copy replaces it). When - set: the standalone section MUST stay absent and the - footnotes block MUST appear, but the raw yaml HTML body MUST - NOT leak into the page.""" +def test_welcome_footnotes_render_overview_when_set(fresh_db, monkeypatch): + """Setting `AGNES_INSTANCE_OVERVIEW` (mirrors `instance.overview` + yaml) injects raw HTML into the welcome-hero footnotes via the + same `| safe` filter as the previous standalone Overview + section. The marker text MUST appear inside + `.home-hero-footnotes`, and the legacy `
` + wrapper MUST stay absent — the operator-owned body now lives + inside the welcome card, not as a separate section between the + walkthrough and surfaces grid.""" monkeypatch.setenv("AGNES_INSTANCE_OVERVIEW", "

OVERVIEW_TEST_MARKER

") from src.db import get_system_db, close_system_db @@ -381,19 +379,14 @@ def test_overview_section_replaced_by_welcome_footnotes(fresh_db, monkeypatch): close_system_db() body = _client().get("/home", cookies={"access_token": sess}).text assert '
' not in body - assert "OVERVIEW_TEST_MARKER" not in body assert '
' in body - # "Get the most out of it" is unique to the footnotes block — the - # original "What leaves your machine" copy still exists in the - # session-privacy annotation lower on the page (untouched), so we - # can't use it as a footnotes marker. - assert "Get the most out of it" in body + assert "OVERVIEW_TEST_MARKER" in body def test_welcome_footnotes_hidden_when_overview_unset(fresh_db, monkeypatch): """Default empty `instance.overview` (no env override) hides the - welcome-hero footnotes entirely so the OSS ships without the - central-catalog privacy framing baked into the welcome card.""" + welcome-hero footnotes entirely so the OSS ships without a + stray empty footnotes block in the welcome card.""" monkeypatch.delenv("AGNES_INSTANCE_OVERVIEW", raising=False) from src.db import get_system_db, close_system_db @@ -405,8 +398,3 @@ def test_welcome_footnotes_hidden_when_overview_unset(fresh_db, monkeypatch): close_system_db() body = _client().get("/home", cookies={"access_token": sess}).text assert '
' not in body - # "Get the most out of it" is the unique footnotes marker — the - # original "What leaves your machine" copy in the session-privacy - # annotation lower on the page always renders, so checking that - # would be a false-positive. - assert "Get the most out of it" not in body From 1ce0680a79a085c54363736672d2a46f03e64de5 Mon Sep 17 00:00:00 2001 From: David Rybar Date: Fri, 22 May 2026 11:58:31 +0200 Subject: [PATCH 4/4] Update CHANGELOG.md Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd901fe..48c44cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C (`Step 1 of N · ~15 min · One-time · Reversible`), a thin progress bar, and per-step number badges next to each install block. +### Changed - `/home` welcome hero gains a *footnotes* row beneath the four pillars: a hairline-separated block rendering operator-authored HTML from `instance.overview` (`AGNES_INSTANCE_OVERVIEW` env