From 766ba9e8b24e1c4bb94fc26af1d7841fc46e22f0 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 17 Aug 2026 15:30:31 +0900 Subject: [PATCH] feat: land Keyman and evaluation under the Event Lineage next action (v1.6.0) Opening Public post from Demo Corp members now puts Keyman and evaluation immediately under the Event Lineage next action, ahead of Affiliate tree. Home list opens keep the earlier order. --- ....6.0-land-keyman-eval-under-next-action.md | 5 ++ CHANGELOG.md | 10 +++ frontend/package.json | 2 +- frontend/src/App.test.tsx | 25 +++++++- frontend/src/App.tsx | 63 +++++++++++++------ lineageweave/__init__.py | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 8 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 CHANGELOG.d/1.6.0-land-keyman-eval-under-next-action.md diff --git a/CHANGELOG.d/1.6.0-land-keyman-eval-under-next-action.md b/CHANGELOG.d/1.6.0-land-keyman-eval-under-next-action.md new file mode 100644 index 000000000..e7115e36e --- /dev/null +++ b/CHANGELOG.d/1.6.0-land-keyman-eval-under-next-action.md @@ -0,0 +1,5 @@ +# 1.6.0 Land Keyman and evaluation under the Event Lineage next action + +Open Public post from the landed Demo Corp members and Keyman plus +evaluation sit under the Event Lineage next action, ahead of Affiliate +tree. Home list opens keep the earlier order. diff --git a/CHANGELOG.md b/CHANGELOG.md index 8860a5b58..33f8e1dee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ 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.6.0] - 2026-08-17 + +### Added + +- Opening Public post from the landed Demo Corp members now puts + Keyman and evaluation immediately under the Event Lineage next + action, ahead of Affiliate tree. Home list opens keep evaluation + above Event Lineage. No TEPP theta is invented. No cutoff body is + invented (ADR 0016). + ## [1.5.0] - 2026-08-17 ### Added diff --git a/frontend/package.json b/frontend/package.json index 8bc2c48e2..7d93d7543 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "1.5.0", + "version": "1.6.0", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index 3aa56e4d3..a4139577c 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -1474,6 +1474,18 @@ describe("App, authenticated", () => { expect( screen.queryByRole("status", { name: "Event Lineage next action" }), ).not.toBeInTheDocument(); + const popup = document.querySelector(".popup-panel"); + expect(popup).not.toBeNull(); + const evaluation = within(popup as HTMLElement).getByRole("heading", { + name: "Post quality (IRT)", + }); + const eventLineage = within(popup as HTMLElement).getByRole("heading", { name: "Event Lineage" }); + const affiliate = within(popup as HTMLElement).getByRole("heading", { name: "Affiliate tree" }); + const keyman = within(popup as HTMLElement).getByRole("heading", { name: "Keyman" }); + expect(evaluation.compareDocumentPosition(eventLineage) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe( + 0, + ); + expect(affiliate.compareDocumentPosition(keyman) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe(0); }); it("shows a seeded Ask exchange without an orchestrator round-trip", async () => { @@ -2290,10 +2302,17 @@ describe("App, authenticated", () => { expect( currentNode.compareDocumentPosition(lineageNext) & Node.DOCUMENT_POSITION_FOLLOWING, ).not.toBe(0); + const keyman = within(popup as HTMLElement).getByRole("heading", { name: "Keyman" }); + const evaluation = within(popup as HTMLElement).getByRole("heading", { + name: "Post quality (IRT)", + }); + const affiliate = within(popup as HTMLElement).getByRole("heading", { name: "Affiliate tree" }); + expect(lineageNext.compareDocumentPosition(keyman) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe( + 0, + ); + expect(keyman.compareDocumentPosition(evaluation) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe(0); expect( - lineageNext.compareDocumentPosition( - within(popup as HTMLElement).getByRole("heading", { name: "Keyman" }), - ) & Node.DOCUMENT_POSITION_FOLLOWING, + evaluation.compareDocumentPosition(affiliate) & Node.DOCUMENT_POSITION_FOLLOWING, ).not.toBe(0); } finally { HTMLElement.prototype.scrollIntoView = originalScrollIntoView; diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index d0de5ce18..57f3a2038 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1375,13 +1375,15 @@ function PostDetailPopup({ )} - setEvaluation(rows)} - /> + {!focusEventLineage && ( + setEvaluation(rows)} + /> + )} + {focusEventLineage && ( + <> + + setEvaluation(rows)} + /> + + )} +

Affiliate tree

{affiliateTrees === null ? ( @@ -1436,17 +1461,19 @@ function PostDetailPopup({ )}
- + {!focusEventLineage && ( + + )} {counterparties && counterparties.length > 0 && (