Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
ce4663c
feat: name Weekly VOC and focus Event Lineage (v2.13.0)
seonghobae Aug 19, 2026
03a1167
feat: open Calendar commitments onto Event Lineage (v2.14.0)
seonghobae Aug 19, 2026
d25eeda
feat: open Customer master related posts onto Event Lineage (v2.15.0)
seonghobae Aug 19, 2026
0aaf992
feat: open Ask Agent cited posts onto Event Lineage (v2.16.0)
seonghobae Aug 19, 2026
3e5bfca
feat: keep GNB Event Lineage focus on a linked DAG node (v2.17.0)
seonghobae Aug 19, 2026
8966294
ci: repair analysis-run DAG cutoff context
seonghobae Aug 19, 2026
cad7327
feat: focus Keyman after GNB Event Lineage names it next (v2.19.0)
seonghobae Aug 19, 2026
7c28bc1
feat: expose authenticated MCP Global Ask
seonghobae Aug 19, 2026
50c67f3
chore: trigger verified MCP lock refresh
seonghobae Aug 19, 2026
9254d6f
ci: verify MCP lock on pull request
seonghobae Aug 19, 2026
5df719b
fix: fail closed on uncited Global Ask answers
seonghobae Aug 19, 2026
e03bd42
fix: use the MCP v2 Context generic contract
seonghobae Aug 19, 2026
61d8bb2
test: reject uncited MCP Global Ask answers
seonghobae Aug 19, 2026
8bcf538
fix: fail closed on malformed issuer JWKS
seonghobae Aug 19, 2026
e428e46
test: cover malformed issuer JWKS key sets
seonghobae Aug 19, 2026
7211a5e
fix: mark Global Ask as closed-world evidence access
seonghobae Aug 19, 2026
62f7802
test: cover closed-world metadata and Host validation
seonghobae Aug 19, 2026
c6b75ce
ci: run every MCP regression during lock refresh
seonghobae Aug 19, 2026
69b8ee5
fix: use supported conduct mode for evidence chat
seonghobae Aug 19, 2026
a2e6e8f
test: lock supported conduct chat contract
seonghobae Aug 19, 2026
0b7ee33
docs: align MCP operation with conduct verification
seonghobae Aug 19, 2026
0b4bfc5
feat(mcp): add external Global Ask claim verification
seonghobae Aug 19, 2026
6537dd7
ci: verify lock and supported conduct contract once
seonghobae Aug 19, 2026
6615ac3
test(mcp): cover external Global Ask verification
seonghobae Aug 19, 2026
d2dac29
feat(mcp): expose separate external corroboration
seonghobae Aug 19, 2026
2edaf6e
docs: record conduct and citation trust fixes
seonghobae Aug 19, 2026
656d118
test(mcp): expose external verification separately
seonghobae Aug 19, 2026
fd0b146
docs: record supported conduct orchestration decision
seonghobae Aug 19, 2026
6926311
fix(mcp): make external verification explicit and privacy-bounded
seonghobae Aug 19, 2026
5468e5b
fix(mcp): require explicit opt-in for open-web verification
seonghobae Aug 19, 2026
a9cc99b
test(mcp): require explicit web-verification opt-in
seonghobae Aug 19, 2026
3685b5a
fix(mcp): require cited web evidence for verification verdicts
seonghobae Aug 19, 2026
adf591d
test(mcp): lock external verification evidence contract
seonghobae Aug 19, 2026
138d402
docs(mcp): ground external claim verification
seonghobae Aug 19, 2026
da8b857
docs(mcp): remove chat-only citation marker
seonghobae Aug 19, 2026
517949b
docs(mcp): record opt-in external claim verification
seonghobae Aug 19, 2026
0267dee
test(mcp): prove web verification is opt-in
seonghobae Aug 19, 2026
0dd0d95
test(mcp): execute opt-in boundary asynchronously
seonghobae Aug 19, 2026
0bd3012
fix(mcp): accept only whole structured verification responses
seonghobae Aug 19, 2026
d32f241
fix(mcp): harden explicit external verification boundary
seonghobae Aug 19, 2026
e42e74d
ci: implement multimodal MCP Global Ask
seonghobae Aug 20, 2026
8ed5015
feat: name Weekly VOC and focus Event Lineage (v2.13.0)
seonghobae Aug 19, 2026
3990fc9
feat: open Calendar commitments onto Event Lineage (v2.14.0)
seonghobae Aug 19, 2026
f9b86fc
docs: assign Calendar focus ADR a unique number
seonghobae Aug 20, 2026
609b61d
fix: stop auto-drilled Keyman panel from stealing Event Lineage focus
seonghobae Aug 20, 2026
a5831c0
feat: open Customer master related posts onto Event Lineage (v2.15.0)
seonghobae Aug 19, 2026
73887c9
fix: preserve Event Lineage focus after related loads
seonghobae Aug 20, 2026
cbdcc6f
feat: open Ask Agent cited posts onto Event Lineage (v2.16.0)
seonghobae Aug 19, 2026
1eeac6b
feat: keep GNB Event Lineage focus on a linked DAG node (v2.17.0)
seonghobae Aug 19, 2026
b5caf7c
fix(ui): preserve analysis-run cutoff across DAG navigation
seonghobae Aug 20, 2026
36ef783
feat: open Customer master related posts onto Event Lineage (v2.15.0)
seonghobae Aug 19, 2026
29c9732
test: keep customer master router specific
seonghobae Aug 20, 2026
1c37126
test(red): reproduce stale post detail navigation
seonghobae Aug 20, 2026
b39fd35
feat: open Ask Agent cited posts onto Event Lineage (v2.16.0)
seonghobae Aug 19, 2026
48461d0
merge: restack onto feat/ask-agent-open-focus-event-lineage-v2160
seonghobae Aug 20, 2026
bd08c68
merge: restack onto feat/event-lineage-node-keeps-gnb-focus-v2170
seonghobae Aug 20, 2026
c910478
feat: name Weekly VOC and focus Event Lineage (v2.13.0)
seonghobae Aug 19, 2026
85db4e1
fix: reject impossible Weekly VOC dates
seonghobae Aug 20, 2026
8daa419
feat: open Calendar commitments onto Event Lineage (v2.14.0)
seonghobae Aug 19, 2026
156a507
fix: stop auto-drilled Keyman panel from stealing Event Lineage focus
seonghobae Aug 20, 2026
5267614
fix: keep Calendar scroll with Event Lineage
seonghobae Aug 20, 2026
dc00316
feat: open Customer master related posts onto Event Lineage (v2.15.0)
seonghobae Aug 19, 2026
15c82c7
test: keep customer master router specific
seonghobae Aug 20, 2026
8fb0fea
feat: open Ask Agent cited posts onto Event Lineage (v2.16.0)
seonghobae Aug 19, 2026
7f36683
feat: keep GNB Event Lineage focus on a linked DAG node (v2.17.0)
seonghobae Aug 19, 2026
a731551
fix(ui): preserve analysis-run cutoff across DAG navigation
seonghobae Aug 20, 2026
4d6494d
fix: ignore stale post detail responses
seonghobae Aug 20, 2026
a7f3c12
merge: restack onto latest feat/event-lineage-node-keeps-gnb-focus-v2170
seonghobae Aug 20, 2026
3cf8305
test: install the async pytest runtime
seonghobae Aug 20, 2026
a6937b4
fix(mcp): enforce transport security before OAuth
seonghobae Aug 20, 2026
a2f1b57
test(mcp): bind pre-auth transport security
seonghobae Aug 20, 2026
35ccc77
docs: record the pre-auth MCP transport boundary
seonghobae Aug 20, 2026
812be55
build: lock MCP runtime and conduct contract
github-actions[bot] Aug 20, 2026
fd3ed26
fix(ci): remove stale MCP architecture rewrite
seonghobae Aug 20, 2026
178f355
fix(mcp): delegate post context to orchestrator auto mode
seonghobae Aug 20, 2026
362a6fe
build: lock MCP runtime
github-actions[bot] Aug 20, 2026
2df52bd
fix(config): prefer home gateway credentials
seonghobae Aug 20, 2026
d789c30
merge: restack onto latest feat/event-lineage-node-keeps-gnb-focus-v2170
seonghobae Aug 20, 2026
8bbc2ed
chore: restack Keyman focus on current Event Lineage head
seonghobae Aug 20, 2026
5e3e241
chore: reconcile remote Keyman restack with verified tree
seonghobae Aug 20, 2026
251efe1
chore: restack Keyman focus on current Event Lineage head
seonghobae Aug 20, 2026
4506f26
fix: align static SQL contract with safe composition
seonghobae Aug 20, 2026
b333958
chore: restack Keyman focus on current Event Lineage head
seonghobae Aug 20, 2026
7d881db
chore: restack Keyman focus on final Event Lineage
seonghobae Aug 20, 2026
4ff6fa2
chore: restack Keyman focus on final Event Lineage
seonghobae Aug 20, 2026
387427e
chore: restack Keyman focus on final Event Lineage
seonghobae Aug 20, 2026
afe8c2d
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 20, 2026
0229c4b
test: align embedded image accessibility expectation
seonghobae Aug 20, 2026
dc15a23
Merge commit '85013814fd65114c5a75d04297f04e342129b8d1' of https://gi…
seonghobae Aug 20, 2026
86c5f88
fix: avoid keyman ADR number collision
seonghobae Aug 20, 2026
306718f
docs: give authenticated MCP ADR a unique number
seonghobae Aug 20, 2026
55eb838
docs: remove duplicate authenticated MCP ADR number
seonghobae Aug 20, 2026
884fed2
Merge commit '55eb8385de2877ce7ba38b0ba4fbfa798aa21c51' of https://gi…
seonghobae Aug 20, 2026
733c697
fix: isolate gateway tests and reject weak relation hits
seonghobae Aug 20, 2026
95f19d0
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 20, 2026
eb4594d
docs: assign unique ADR number to Valkey events
seonghobae Aug 20, 2026
74c2234
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 20, 2026
e44f1a6
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 20, 2026
a005e7e
Merge current event-lineage base into GNB lineage
seonghobae Aug 20, 2026
284879a
feat: expose lineage timeline and cited images in MCP Ask
seonghobae Aug 20, 2026
60b44c4
merge: propagate current protected Event Lineage base
seonghobae Aug 20, 2026
75cdf43
merge: propagate current Event Lineage branch head
seonghobae Aug 20, 2026
a3fdaa9
merge: propagate current protected main
seonghobae Aug 20, 2026
26a6d9c
merge: propagate current semantic-source Event Lineage base
seonghobae Aug 20, 2026
10aced6
fix: harden authenticated MCP evidence paths
seonghobae Aug 20, 2026
0e311a6
test(mcp): require live media authorization
seonghobae Aug 20, 2026
3e73cae
fix(mcp): reauthorize cited media at read time
seonghobae Aug 20, 2026
210cd25
fix(mcp): pass live account identity to media query
seonghobae Aug 20, 2026
3a24c6b
test(keycloak): require live MCP audience reconciliation
seonghobae Aug 20, 2026
0fbbd42
feat(keycloak): reconcile persistent MCP audience mapper
seonghobae Aug 20, 2026
2c6fb8f
feat(keycloak): gate MCP on audience reconciliation
seonghobae Aug 20, 2026
f08dadd
docs(adr): preserve live Global Ask authorization
seonghobae Aug 20, 2026
bba02ff
docs(mcp): document live media and audience reconciliation
seonghobae Aug 20, 2026
9a2f949
docs(changelog): record live MCP authorization fixes
seonghobae Aug 20, 2026
432d9e9
docs(doctoring): trace Keycloak and live media boundaries
seonghobae Aug 20, 2026
7f7676f
test: align MCP media index with raster filtering
seonghobae Aug 20, 2026
661704b
Merge remote-tracking branch 'origin/agent/authenticated-mcp-global-a…
seonghobae Aug 20, 2026
c58aef8
test(chat): require SQL-level source visibility
seonghobae Aug 20, 2026
98bd90b
ci: repair MCP source visibility boundary
seonghobae Aug 20, 2026
fa68e99
ci: expose source-visibility repair to PR checks
seonghobae Aug 20, 2026
4508a1d
fix(auth): filter chat sources before body load
seonghobae Aug 20, 2026
0d9e863
test(auth): prove bodies load only after ABAC
seonghobae Aug 20, 2026
e8e383a
ci: remove completed source-visibility repair workflow
seonghobae Aug 20, 2026
4a76186
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 20, 2026
b34050d
merge: restack authenticated MCP on buyer navigation
seonghobae Aug 20, 2026
9f87e64
merge: sync authenticated ask branch with main
seonghobae Aug 20, 2026
eb83c9c
merge: preserve concurrent buyer navigation restack
seonghobae Aug 20, 2026
1881a3c
chore: normalize MCP import ordering
seonghobae Aug 20, 2026
bbbe734
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
e14cb9f
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
5a67017
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
e1c31db
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
259b3b0
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
0beb110
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
515bb0b
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
8a6a1b6
Merge remote-tracking branch 'origin/feat/event-lineage-node-keeps-gn…
seonghobae Aug 21, 2026
c8b7445
fix: remove self-modifying repair artifacts
seonghobae Aug 21, 2026
4d74f77
Merge remote-tracking branch 'origin/feat/gnb-event-lineage-focus-key…
seonghobae Aug 21, 2026
79687c9
fix: serialize MCP-boundary provider calls
seonghobae Aug 21, 2026
c0fcdb6
fix: keep malformed timeline dates sortable
seonghobae Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 0 additions & 80 deletions .github/workflows/repair-global-ask-pnpm-v2.yml

This file was deleted.

10 changes: 6 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,12 @@ Opening a Calendar commitment uses the same focus path (ADR 0094). Do not
invent a week, a theta, a cutoff body, or a CalDAV event.
Opening a Customer master related post uses the same focus path (ADR 0095).
Do not invent a week, a theta, a cutoff body, a CalDAV event, or a customer.
Opening an Ask Agent cited post uses the same focus path (ADR 0096). Do not
invent a cited post.
A linked Event Lineage node opened from that focused popup keeps the
originating flags (ADR 0097). Do not invent a cited post.
Opening an Ask Agent cited post uses the same focus path (ADR 0096).
Do not invent a cited post.
A linked Event Lineage node opened from that focused popup keeps the
originating flags (ADR 0097). That open then focuses Keyman as the named
next read (ADR 0100). Do not invent a week, a theta, a cutoff body,
a CalDAV event, a customer, or a cited post.


## Tests
Expand Down
30 changes: 14 additions & 16 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ flowchart LR

subgraph External services, all optional
EMB[Embedding provider<br/>swap in for the text channel]
ORC[contextual-orchestrator<br/>mode=verify, llm channel]
ORC[contextual-orchestrator<br/>mode=auto, llm and vision channels]
TEPP[TEPP<br/>AnalysisRunRequest v1,<br/>calibrated measurement]
end

Expand Down Expand Up @@ -82,19 +82,15 @@ flowchart LR
| `period_report.py` | Fit GRM/GPCM on persisted IRT rows, FIPC-select, EAP-score a period (ADR 0003 slice 3; Bock & Mislevy, 1982) |
| `fixtures.py` | Synthetic demo dataset -- no real data ships in this repo |
| `server.py` | Legacy stdlib HTTP server for the library-level synthetic fixture demo; production uses FastAPI/PostgreSQL |
| `backend/app/mcp_server.py` | OAuth-protected Streamable HTTP MCP resource server exposing read-only, evidence-grounded Global Ask |
| `web/index.html` | Legacy self-contained SVG DAG viewer; production UI is the React/Vite frontend |

> **Known local-test-environment limitation:** `adjudication_client.py`'s
> `mode="verify"` call depends on contextual-orchestrator's
> `TaskOrchestrator.route_and_verify`, which as of this writing is still
> an open, unmerged upstream PR
> (`ContextualWisdomLab/contextual-orchestrator#149`). Until it merges,
> the four adjudication/chat tests that exercise `mode="verify"` against
> a real orchestrator fail with `invalid_mode` (the deployed `main` only
> accepts `auto`/`route`/`conduct`) -- confirmed by reproducing the same
> `400` directly against the orchestrator's own `/v1/chat/completions`,
> not caused by anything in this repo. `mode="route"` (every other
> pluggable client) is unaffected.
> **Contextual-orchestrator contract:** Post Ask and MCP Global Ask use
> `mode="auto"` and `reasoning_effort="auto"`; the gateway owns model
> discovery, provider protocol, and multi-agent reasoning. Requests carry a
> stable post-scoped session id and non-secret evidence metadata. Structured
> responses use `json_schema`. LineageWeave never calls a provider directly
> or falls back to the rejected legacy `verify` mode.

## Design decisions worth naming

Expand Down Expand Up @@ -281,12 +277,14 @@ HTML. `src/api.ts` calls the FastAPI backend directly with the token
Keycloak issued; `src/App.tsx` renders a git-branch SVG of
`GET /api/lineage` (click a node to open that post; `post_admin` can
rebuild), the post list with a named Weekly VOC ISO-8601 week filter
(ADR 0092; opening that filtered post focuses Event Lineage, ADR 0093),
Calendar commitments use the same Event Lineage focus path (ADR 0094),
(ADR 0092; opening that filtered post focuses Event Lineage, ADR 0093).
Calendar commitments use the same Event Lineage focus path (ADR 0094).
Customer master related posts use the same Event Lineage focus path
(ADR 0095). Ask Agent cited posts use the same Event Lineage focus path
(ADR 0096). A linked Event Lineage node opened from a focused popup keeps
those flags (ADR 0097), and the full detail popup includes Korean
(ADR 0096). A linked Event Lineage node opened from a focused popup
keeps those flags (ADR 0097) and then focuses Keyman as the named next
read (ADR 0100).
The full detail popup includes Korean
summary/key-events/R&R, VOC evidence excerpts, an Event Lineage panel
(direct vs. indirect links; a link opens that post), the Keyman
affiliate tree (resolved ancestors plus unresolved org roots), Keyman +
Expand Down
67 changes: 67 additions & 0 deletions CHANGELOG.d/2.18.2-authenticated-mcp-global-ask.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# 2.18.2 — Authenticated MCP Global Ask

## Added

- Dedicated Streamable HTTP MCP resource server for Codex and other MCP clients.
- Read-only, idempotent `global_ask` tool over authorized source-post and
Event-Lineage evidence, with bounded retrieval and citation identities.
- Explicit `verify_external=true` open-web verification lane: Searxng retrieves
bounded public evidence and contextual-orchestrator classifies the internal
answer as `supported`, `refuted`, or `insufficient_evidence` using only those
retrieved passages.
- External verification returns separately cited public evidence URLs; those
URLs never become LineageWeave posts or internal source authority.
- Codex bearer-token configuration and production OAuth deployment guidance.
- A bounded, idempotent Keycloak Admin REST reconciliation job for the demo
client's `lineageweave-mcp-audience` mapper. It updates a persistent realm
after `MCP_PORT` or the exact resource audience changes without replacing the
realm.

## Changed

- Post Ask and MCP Global Ask use contextual-orchestrator's `mode="auto"` and
`reasoning_effort="auto"`; the gateway selects models and provider protocol
instead of receiving a caller-selected model or a direct-provider fallback.
- Structured reason-and-cite calls use `json_schema`, `system` instructions,
and a stable post-scoped session id with non-secret post/author/PU/corp
metadata.
- `global_ask` advertises `open_world_hint=true` because callers can explicitly
opt into Searxng web verification; the default remains `verify_external=false`.
- The evidence-chat timeout is 300 seconds so orchestrated reasoning is finite
but not cut off by the previous 60-second default.
- Local Compose now starts MCP only after the one-shot Keycloak mapper
reconciliation succeeds. Startup realm import remains a fresh-environment
bootstrap and is no longer treated as an update mechanism for persisted
identity state.

## Security

- Exact MCP audience, issuer, expiry, and mandatory JWKS `kid` validation with
one bounded JWKS refresh for issuer key rotation.
- Malformed issuer JWKS key collections fail closed as service-unavailable
instead of escaping as an untyped error.
- Existing database-backed `post_read`, affiliation, and public-or-corporate
ABAC checks apply to every retrieved internal source.
- MCP Host, Origin, and POST content-type validation now executes at the outer
ASGI boundary before OAuth authentication, so a hostile DNS-rebinding request
is rejected without a bearer challenge or token-verifier invocation.
- Inbound tokens are never forwarded to contextual-orchestrator or Searxng.
- An internal answer with no citation inside the authorized source bundle is
rejected instead of returning unsupported prose.
- Open-web verification never runs without explicit caller opt-in, and the
private internal answer body is never used as the Searxng search query.
- External snippets are treated as untrusted data. `supported` and `refuted`
require at least one valid cited HTTP(S) evidence URL; otherwise the verdict
is downgraded to `insufficient_evidence`.
- Global Ask returns an authorized source timeline ordered by `created_at`, with
`anchor`, `direct_lineage`, or `indirect_knowledge_graph` relation labels.
- MCP Global Ask returns up to three bounded raster images from cited posts as
`ImageContent`; SVG, remote images, and oversized payloads are excluded.
- Citation IDs no longer act as media authorization leases. Immediately before
returning inline image bytes, LineageWeave re-checks the requesting account's
live `post_read` grant and current database affiliations; revoked access
removes the affected media.
- Keycloak audience reconciliation owns only the named OIDC audience mapper,
rejects duplicate or conflicting mapper contracts, validates credential-free
HTTP(S) audience URLs, uses bounded startup retries, and never overwrites the
realm for a one-field change.
5 changes: 5 additions & 0 deletions CHANGELOG.d/2.19.0-gnb-event-lineage-focus-keyman.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2.19.0 GNB Event Lineage focuses Keyman as the next read

Opening a GNB-focused post keeps Event Lineage current and moves focus
to Keyman so the named next action is landable. A home-list open does
not. No TEPP theta is invented.
8 changes: 8 additions & 0 deletions CHANGELOG.d/2.19.0-remove-source-fix-artifacts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# 2.19.0 — Remove one-shot repair artifacts

## Fixed

- Removed the self-modifying pnpm repair workflow and unreferenced root-level
source-rewrite scripts after their one-time repairs were completed. Product
behavior now lives in reviewed source and normal CI rather than a workflow
that edits and pushes its own branch.
6 changes: 6 additions & 0 deletions CHANGELOG.d/2.19.1-mcp-boundary-hardening.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# 2.19.1 — MCP boundary hardening

## Fixed

- Require JWT expiration during signature validation and serialize one post's
image and region analysis so a single request cannot multiply provider calls.
16 changes: 14 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ 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).

## [2.19.0] - 2026-08-20

### Added

- Opening a Board Weekly VOC post, Calendar commitment, Customer master
related post, or Ask Agent cited post now keeps Event Lineage current
and focuses Keyman as the named next read. A linked Event Lineage DAG
walk from that popup keeps the same Keyman focus. A home-list open
does not add that focus or copy. No TEPP theta is invented. No cited
post, customer, week, or cutoff body is invented (ADR 0100 / ADR 0097
/ ADR 0016).

## [2.17.0] - 2026-08-19

### Added
Expand All @@ -22,7 +34,7 @@ All notable changes to this project are documented here. Format follows
and evaluation as the next read. After an authorized answer, Ask Agent
names cited posts as current before that open. Home-list opens do not add
that focus or copy. No TEPP theta is invented. No cited post is invented
(ADR 0096 / ADR 0039 / ADR 0016).
(ADR 0096 / ADR 0039 / ADR 0016).

## [2.15.0] - 2026-08-19

Expand All @@ -32,7 +44,7 @@ All notable changes to this project are documented here. Format follows
Keyman and evaluation as the next read. Customer master names authorized
customer entities as current before that open. Home-list opens do not add
that focus or copy. No TEPP theta is invented. No customer is invented
(ADR 0095 / ADR 0037 / ADR 0016).
(ADR 0095 / ADR 0037 / ADR 0016).

## [2.14.0] - 2026-08-19

Expand Down
9 changes: 9 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,12 @@ cited post.
From a GNB-focused popup, open a linked Event Lineage node: Event Lineage
stays focused and names the new post as current (ADR 0097). A home-list
DAG walk does not. Do not invent a theta.

## GNB Event Lineage focuses Keyman (v2.19.0)

A GNB-origin popup (Weekly VOC, Calendar, Customer master, Ask Agent, or a
linked Event Lineage DAG walk from one of those) keeps Event Lineage
current and moves focus to the Keyman heading once Keyman rows have
settled (ADR 0100). The report-member auto-land chain to related nodes
and Ask is not used for GNB origins. A home-list open does not gain that
focus. Do not invent a theta.
48 changes: 0 additions & 48 deletions add_translations.py

This file was deleted.

4 changes: 2 additions & 2 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@ RUN uv sync --frozen --no-dev --extra backend --no-editable \
&& chown -R appuser:appuser /app

USER appuser
EXPOSE 8000
CMD ["uvicorn", "backend.app.main:app", "--host", "0.0.0.0", "--port", "8000"]
EXPOSE 8000 8001
CMD ["uvicorn", "backend.app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Loading