diff --git a/CHANGELOG.d/1.9.0-ask-after-related-nodes.md b/CHANGELOG.d/1.9.0-ask-after-related-nodes.md new file mode 100644 index 000000000..10c58a345 --- /dev/null +++ b/CHANGELOG.d/1.9.0-ask-after-related-nodes.md @@ -0,0 +1,5 @@ +# 1.9.0 Ask after current related nodes + +Opening Public post from the landed Demo Corp members now names +related nodes as current and offers **Ask about this lineage** next. +Home list opens do not add that copy. diff --git a/CHANGELOG.md b/CHANGELOG.md index 1735022bc..a5ce8e880 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 + next action after Ada West related nodes are current: **Ask about + this lineage**. 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..18f2098d4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -53,5 +53,7 @@ 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. +After that person's related nodes land, the popup names Ask about +this lineage 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..9b1cc315b 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-nodes 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 = screen.getByRole("status", { name: "Related-nodes next action" }); + expect(relatedNext).toHaveTextContent( + "Related nodes for Ada West are current. Ask about this lineage 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(screen.getByRole("status", { name: "Related-nodes next action" })).toHaveTextContent( + "Related nodes for Ada West are current. Ask about this lineage next.", + ); }); it("lets post_admin rebuild the period report", async () => { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index fc727d1b3..1644216a8 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -202,7 +202,9 @@ function ChatPanel({ postId, accessToken }: { postId: string; accessToken: strin return (
-

Ask about this lineage

+

+ Ask about this lineage +

{!seededOnly && (
{afterList} {afterList && relatedBlock} + {afterList && landFirstKeyman && selectedName && related !== null ? ( +

+ {relatedNodesCurrentNextAction(selectedName)} +

+ ) : 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" }