From 955ef89b52877e7d81487e3528a960142c36ae25 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 17 Aug 2026 17:24:40 +0900 Subject: [PATCH] feat: name the first related node after landed Ada West related (v1.9.0) Opening Public post from Demo Corp members now names the first related node after landed Ada West related. Home list opens do not add that copy. --- CHANGELOG.d/1.9.0-name-first-related-after-ada.md | 4 ++++ CHANGELOG.md | 9 +++++++++ CLAUDE.md | 7 ++++--- frontend/package.json | 2 +- frontend/src/App.test.tsx | 13 ++++++++++++- frontend/src/App.tsx | 9 +++++++++ lineageweave/__init__.py | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 9 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 CHANGELOG.d/1.9.0-name-first-related-after-ada.md 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 000000000..2f36620a5 --- /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 1735022bc..51c3a60b3 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 14b58dda7..7b5ca8ca3 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 037134f3e..72127cf5b 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 4907de06a..c2640786c 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 fc727d1b3..047f5b636 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 502ca14c2..13ada4e3c 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 52d04d724..8469b1f77 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 f6526a6a9..39c46d587 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" },