Skip to content

feat: deliver buyer evidence board and source-grounded ontology surface - #258

Open
seonghobae wants to merge 386 commits into
mainfrom
feat/analysis-run-name-evidence-lineage
Open

feat: deliver buyer evidence board and source-grounded ontology surface#258
seonghobae wants to merge 386 commits into
mainfrom
feat/analysis-run-name-evidence-lineage

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR carries the protected-branch-safe Buyer product path from the semantic-lineage development tree into main.

  • Adds the Buyer GNB: Board, Customer master, Calendar, and Ask Agent.
  • Keeps Board as the default product destination and exposes source post bodies, cutoff-known bodies, 5W1H evidence, project evidence, Keyman/source-author context, related posts, VOC, events, and lineage navigation.
  • Grounds Board search and Global Ask in authorized post text plus persisted source identity, PU/business-unit, sales-pool, customer, project, author, role, and Keyman evidence with provenance.
  • Routes LLM, embedding, summary, chat, commitment, Keyman, relationship, and vision work through contextual-orchestrator only.
  • Preserves source identity/state/context provenance, semantic-unit content persistence, bounded source loading, and fail-closed publication/evidence behavior.
  • Keeps advanced analysis/lab controls out of the production Buyer surface and retains synthetic-only repository fixtures.

Current-main reconciliation

PR #74 was squash-merged into protected main independently while the semantic-lineage branch continued to advance. The Buyer branch was reconciled without force-pushing by recording protected main@690f35285717af52c2033960efb8b0177c3b6a88 as ancestry while preserving the later Buyer/runtime tree.

Current exact head: 2012101cb9e2b7fdbd821cb65708915ddf7bd88e.

Release metadata is monotonic at v2.12.6, immediately before stacked #260 v2.13.0. GitHub currently reports the PR mergeable against protected main.

Security hardening at current head

The browser/API OIDC verifier is fail-closed:

  • JWT kid is mandatory; no first-key fallback exists.
  • bearer verification requires the configured LineageWeave resource audience.
  • external Keyverse/OIDC deployments must explicitly provide KEYVERSE_AUDIENCE or OIDC_AUDIENCE; resource audience is not inferred from the browser OAuth client id.
  • local Keycloak emits lineageweave-api in access-token aud.
  • account permissions and affiliations remain database-authoritative rather than trusting token-side corporate/PU attributes.

This matches the OAuth JWT access-token resource-audience model in RFC 9068; CHANGELOG.d/2.12.6-oidc-resource-audience.md records the contract.

Revalidated stale-parent failures

The old #260 merge-ref Python failure came from an obsolete #258 snapshot. Current #258 already contains the parent-level fixes for ADR README hygiene, source-state/context/search migrations in fixtures, non-transactional CREATE INDEX CONCURRENTLY migration replay, and embedding/static-analysis cleanup. These fixes must not be reimplemented in children.

Validation gate

Remembered pre-reconciliation evidence is stale. Exact-head Tests, Security Scan, SAST Semgrep, and PROV-O contract for 2012101cb9e2b7fdbd821cb65708915ddf7bd88e are authoritative. Do not merge while any required run is queued/pending/failed/skipped-required.

All current review threads are resolved. After current-head checks reach terminal success, re-fetch formal reviews and require the live protected-branch independent approval policy. Do not self-approve or force-merge.

Stack

#258 → #260 → #261 → #262 → #263 → #264 → draft #265

#260 must be semantically restacked onto the repaired #258 head rather than carrying its stale parent snapshot. #264 has a valid analysis-run cutoff-navigation finding; its one-shot RED→GREEN repair is already present on the branch and must complete before that PR advances.

seonghobae and others added 30 commits August 17, 2026 16:12
Opening Public post from Demo Corp members now names the first
Keyman after landed evaluation. Home list opens do not add that
copy.
…210)

Opening Public post from Demo Corp members now lands Ada West
related nodes under the first-Keyman next action, ahead of
Affiliate tree. Home list opens still wait for a Keyman click.
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.
Opening Public post from Demo Corp members now lands Priya Nair
related nodes under the first-related next action, ahead of
Affiliate tree. Home list opens still wait for a related click.
)

Open a marked Demo public post from the Demo Corp lineage run and the
January follow-up sits under Body this run knew; the live body names
the later delivery window. GET /api/posts/{id}?as_of= reads
source_post_revision. A missing cover is omitted. Do not invent a
cutoff sentence or a TEPP theta.
)

Opening Public post from landed Demo Corp members now names related
nodes for Priya Nair as current and points at Ask about this lineage.
Home list opens do not add that copy. No TEPP theta. No invented cutoff body.
…223)

Opening Public post from Demo Corp members now focuses the Ask
heading after Priya Nair related nodes are current. Home list
opens do not steal that focus.
Opening Public post from Demo Corp members now lands Ask about
this lineage under the Ask next action, ahead of Affiliate tree.
Home list opens keep Ask after Keyman.
Opening Public post from Demo Corp members now names the first
seeded Ask after landed chat. Home list opens do not add that copy.
Classify organization similarity outcomes as unique, miss, or tie. Keep ties unbound before Keyman name rewriting and after the creation-lock reload so live resolution and inference cannot insert a third AUTO catalog row.

Base branch only: feat/role-responsibility-agent-ontology. #74 remains open and unmerged to main.
…6.0) (#231)

Opening Public post from Demo Corp members now lands the first
seeded Ask answer under the Ask seed next action, ahead of the
input. Home list opens keep that answer after the input.
Opening Public post from Demo Corp members now names Linked post as
the first cited source after the landed first Ask answer. Home list
opens do not add that copy.
Request stays disabled until GET /api/me returns affiliated corps so a
multi-affiliation operator cannot POST before the picker appears.
POST /api/analysis-runs records Pending lineage only. TEPP and
period-report kinds 422 before any snapshot write. Do not invent a
theta.

Co-authored-by: Cursor Agent <[email protected]>
Co-authored-by: Seongho Bae <[email protected]>
Store cataloged_person_id on post_summary_role so a person chip walks
the stored catalog row even when Keyman was not extracted on that post.
Lookup orders by created_at, then person_id. Historical backfill leaves
two same-named mentions unbound (ADR 0027).

Co-authored-by: Cursor Agent <[email protected]>
Co-authored-by: Seongho Bae <[email protected]>
…ion (v2.8.0) (#237)

Opening Public post from Demo Corp members now lands the first
cited evidence under the citation next action, ahead of the
input. Home list opens still wait for a citation click.
Opening Public post from Demo Corp members now names Event Lineage
after Linked post evidence is current. Home list opens do not add
that copy.
…lineage' into feat/analysis-run-name-evidence-lineage
Record current protected main as an explicit parent after #74 was squash-merged independently. Preserve the newer Buyer/Global Ask/runtime tree on this branch, while keeping release metadata monotonic at 2.12.6. Exact-head CI and review evidence must be regenerated on this merge candidate.
…lineage' into feat/analysis-run-name-evidence-lineage
… guidance

Live gap (2026-08-19): two reported symptoms on real image content --
(1) OCR on a table-shaped image flattened its text into an
unstructured list (the same row-grouping loss chunk_by_dom had for
real HTML tables, now fixed there too), and (2) locate_regions's
'distinct meaningful visual regions' framing let the model describe
only the most visually striking part of an image and skip the rest,
instead of covering the whole DOM/image area.

The OCR prompt now asks for one row per line with ' | ' between
columns when the image contains a table (the parser already
preserves multi-line TEXT, verified via a new table-shaped-response
test). The region prompt now explicitly requires full edge-to-edge
image coverage, not just the most striking parts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants