diff --git a/CHANGELOG.d/1.9.0-name-first-related-after-ada.md b/CHANGELOG.d/1.9.0-name-first-related-after-ada.md new file mode 100644 index 00000000..2f36620a --- /dev/null +++ b/CHANGELOG.d/1.9.0-name-first-related-after-ada.md @@ -0,0 +1,4 @@ +# 1.9.0 Name the first related node after Ada West related + +Open Public post from the landed Demo Corp members and the popup names +the first related node after landed Ada West related. diff --git a/CHANGELOG.md b/CHANGELOG.md index 1735022b..51c3a60b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.9.0] - 2026-08-17 + +### Added + +- Opening Public post from the landed Demo Corp members now names the + first related node after landed Ada West related: Priya Nair, then + read that person. Home list opens do not add that copy. No TEPP + theta is invented. No cutoff body is invented (ADR 0016). + ## [1.8.0] - 2026-08-17 ### Added diff --git a/CLAUDE.md b/CLAUDE.md index 14b58dda..7b5ca8ca 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -52,6 +52,7 @@ and the week strip. Opening Public post names the next action: read Event Lineage, Keyman, and evaluation on that post. The popup Event Lineage DAG marks that post current. After that current node, the popup names Keyman and evaluation as the next read. After landed -evaluation, the popup names the first Keyman as the next read. -Changing the week first still focuses the report period field. Mean θ -stays on the period-report panel. +evaluation, the popup names the first Keyman as the next read. After +landed Ada West related, the popup names the first related node as +the next read. Changing the week first still focuses the report +period field. Mean θ stays on the period-report panel. diff --git a/frontend/package.json b/frontend/package.json index 037134f3..72127cf5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "1.8.0", + "version": "1.9.0", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index 4907de06..c2640786 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -1475,6 +1475,7 @@ describe("App, authenticated", () => { screen.queryByRole("status", { name: "Event Lineage next action" }), ).not.toBeInTheDocument(); expect(screen.queryByRole("status", { name: "Keyman next action" })).not.toBeInTheDocument(); + expect(screen.queryByRole("status", { name: "Related next action" })).not.toBeInTheDocument(); expect(screen.queryByText("Related to Ada West")).not.toBeInTheDocument(); const popup = document.querySelector(".popup-panel"); expect(popup).not.toBeNull(); @@ -2328,7 +2329,14 @@ describe("App, authenticated", () => { expect(keymanNext.compareDocumentPosition(related) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe( 0, ); - expect(related.compareDocumentPosition(affiliate) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe( + const relatedNext = await screen.findByRole("status", { name: "Related next action" }); + expect(relatedNext).toHaveTextContent( + "Priya Nair is the first related node. Read that person next.", + ); + expect(related.compareDocumentPosition(relatedNext) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe( + 0, + ); + expect(relatedNext.compareDocumentPosition(affiliate) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe( 0, ); } finally { @@ -2602,6 +2610,9 @@ describe("App, authenticated", () => { "Ada West is the first Keyman. Read that person next.", ); expect(await screen.findByRole("heading", { name: "Related to Ada West" })).toBeInTheDocument(); + expect(await screen.findByRole("status", { name: "Related next action" })).toHaveTextContent( + "Priya Nair is the first related node. Read that person next.", + ); }); it("lets post_admin rebuild the period report", async () => { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index fc727d1b..047f5b63 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -279,6 +279,10 @@ function firstKeymanNextAction(personName: string): string { return `${personName} is the first Keyman. Read that person next.`; } +function firstRelatedNextAction(nodeLabel: string): string { + return `${nodeLabel} is the first related node. Read that person next.`; +} + function EventLineageSection({ lineage, graph, @@ -847,6 +851,11 @@ function KeymanPanel({ {afterList} {afterList && relatedBlock} + {afterList && related?.[0] ? ( +
+ {firstRelatedNextAction(related[0].label ?? related[0].node_id)} +
+ ) : null} > ); } diff --git a/lineageweave/__init__.py b/lineageweave/__init__.py index 502ca14c..13ada4e3 100644 --- a/lineageweave/__init__.py +++ b/lineageweave/__init__.py @@ -55,4 +55,4 @@ "sentence_excerpts", ] -__version__ = "1.8.0" +__version__ = "1.9.0" diff --git a/pyproject.toml b/pyproject.toml index 52d04d72..8469b1f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lineageweave" -version = "1.8.0" +version = "1.9.0" description = "Reconstructs git-branch-style lineage DAGs from scattered short records using multi-channel score fusion and LLM adjudication." readme = "README.md" license = { text = "MIT" } diff --git a/uv.lock b/uv.lock index f6526a6a..39c46d58 100644 --- a/uv.lock +++ b/uv.lock @@ -454,7 +454,7 @@ wheels = [ [[package]] name = "lineageweave" -version = "1.8.0" +version = "1.9.0" source = { virtual = "." } dependencies = [ { name = "certifi" },