From 713f389601c2917eda7f784fe5843cbf17db6f4c Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 17 Aug 2026 16:09:25 +0900 Subject: [PATCH] feat: name the first Keyman after landed evaluation (v1.7.0) Opening Public post from Demo Corp members now names the first Keyman after landed evaluation. Home list opens do not add that copy. --- CHANGELOG.d/1.7.0-name-first-keyman-after-eval.md | 4 ++++ CHANGELOG.md | 9 +++++++++ CLAUDE.md | 7 ++++--- frontend/package.json | 2 +- frontend/src/App.test.tsx | 11 ++++++++++- frontend/src/App.tsx | 9 +++++++++ lineageweave/__init__.py | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 9 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 CHANGELOG.d/1.7.0-name-first-keyman-after-eval.md diff --git a/CHANGELOG.d/1.7.0-name-first-keyman-after-eval.md b/CHANGELOG.d/1.7.0-name-first-keyman-after-eval.md new file mode 100644 index 000000000..a6683348e --- /dev/null +++ b/CHANGELOG.d/1.7.0-name-first-keyman-after-eval.md @@ -0,0 +1,4 @@ +# 1.7.0 Name the first Keyman after landed evaluation + +Open Public post from the landed Demo Corp members and the popup names +the first Keyman after landed evaluation. diff --git a/CHANGELOG.md b/CHANGELOG.md index 33f8e1dee..ce0f9137b 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.7.0] - 2026-08-17 + +### Added + +- Opening Public post from the landed Demo Corp members now names the + first Keyman after landed evaluation: Ada West, 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.6.0] - 2026-08-17 ### Added diff --git a/CLAUDE.md b/CLAUDE.md index 92725c1ae..14b58dda7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,6 +51,7 @@ members land immediately under that next action, ahead of Other Corp 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. Changing the week -first still focuses the report period field. Mean θ stays on the -period-report panel. +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. diff --git a/frontend/package.json b/frontend/package.json index 7d93d7543..47582abbb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "1.6.0", + "version": "1.7.0", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index a4139577c..74e006b8a 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -1474,6 +1474,7 @@ describe("App, authenticated", () => { expect( screen.queryByRole("status", { name: "Event Lineage next action" }), ).not.toBeInTheDocument(); + expect(screen.queryByRole("status", { name: "Keyman next action" })).not.toBeInTheDocument(); const popup = document.querySelector(".popup-panel"); expect(popup).not.toBeNull(); const evaluation = within(popup as HTMLElement).getByRole("heading", { @@ -2311,8 +2312,13 @@ describe("App, authenticated", () => { 0, ); expect(keyman.compareDocumentPosition(evaluation) & Node.DOCUMENT_POSITION_FOLLOWING).not.toBe(0); + const keymanNext = await screen.findByRole("status", { name: "Keyman next action" }); + expect(keymanNext).toHaveTextContent("Ada West is the first Keyman. Read that person next."); expect( - evaluation.compareDocumentPosition(affiliate) & Node.DOCUMENT_POSITION_FOLLOWING, + evaluation.compareDocumentPosition(keymanNext) & Node.DOCUMENT_POSITION_FOLLOWING, + ).not.toBe(0); + expect( + keymanNext.compareDocumentPosition(affiliate) & Node.DOCUMENT_POSITION_FOLLOWING, ).not.toBe(0); } finally { HTMLElement.prototype.scrollIntoView = originalScrollIntoView; @@ -2581,6 +2587,9 @@ describe("App, authenticated", () => { expect(screen.getByRole("status", { name: "Event Lineage next action" })).toHaveTextContent( "Public post is current in Event Lineage. Read Keyman and evaluation next.", ); + expect(await screen.findByRole("status", { name: "Keyman next action" })).toHaveTextContent( + "Ada West is the first Keyman. 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 57f3a2038..1c0c36ac9 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -275,6 +275,10 @@ function eventLineageCurrentNextAction(postTitle: string): string { return `${postTitle} is current in Event Lineage. Read Keyman and evaluation next.`; } +function firstKeymanNextAction(personName: string): string { + return `${personName} is the first Keyman. Read that person next.`; +} + function EventLineageSection({ lineage, graph, @@ -1430,6 +1434,11 @@ function PostDetailPopup({ canExtract={canExtract} onEvaluated={(rows) => setEvaluation(rows)} /> + {keymen?.[0] ? ( +

+ {firstKeymanNextAction(keymen[0].person_name)} +

+ ) : null} )} diff --git a/lineageweave/__init__.py b/lineageweave/__init__.py index 0d4e0f989..fa84379c8 100644 --- a/lineageweave/__init__.py +++ b/lineageweave/__init__.py @@ -55,4 +55,4 @@ "sentence_excerpts", ] -__version__ = "1.6.0" +__version__ = "1.7.0" diff --git a/pyproject.toml b/pyproject.toml index 587115950..b256d6676 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lineageweave" -version = "1.6.0" +version = "1.7.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 b1250c094..6c879e6e3 100644 --- a/uv.lock +++ b/uv.lock @@ -454,7 +454,7 @@ wheels = [ [[package]] name = "lineageweave" -version = "1.6.0" +version = "1.7.0" source = { virtual = "." } dependencies = [ { name = "certifi" },