Skip to content

[Buyer Gap] Open project evidence as a unified chronological history timeline #279

Description

@seonghobae

Buyer problem

The Buyer surface can already show source_project_code / source_project_name, semantic post_project_mention evidence, Event Lineage, R&R actors, tickets, and post details. However, a project evidence card currently offers only Search related posts. A buyer cannot open one project and inspect the full order-to-current-issue history on one screen.

The required To-Be surface is a project timeline such as:

Order → specification change → delivery → VOC → rebid

with the selected event showing:

  • the related order and prior history,
  • the relevant specification-change history,
  • observed responsibility history,
  • responsibility handoffs or intervals with no observed assignee,
  • exact source records and provenance.

Root cause

Project identity, chronological post facts, reconstruction edges, and R&R evidence are stored in separate read paths. There is no ABAC-safe project-history projection that joins them without changing their truth status. The frontend therefore falls back to a board text search rather than a project-level history view.

Product boundary

This feature must explain stored evidence without inventing project-management facts.

  • PostgreSQL source records remain authoritative.
  • source_project_* fields are explicit source hints.
  • post_project_mention rows are semantic candidates with their existing confidence and provenance.
  • post_lineage_edge is reconstructed/inferred related history, not a causal claim.
  • post_summary_role is observed R&R evidence, not an authoritative HR assignment ledger.
  • The first release uses source_post.created_at as document_time unless an explicit event clock exists; it must not relabel document time as event time.
  • Unauthorized private, draft-excluded, or deletion-excluded posts must not influence the timeline, reverse trace, counts, or handoff analysis.

Functional acceptance criteria

Backend projection

  • Add a versioned GET /api/project-history?project_key=... read contract.
  • Match authorized posts by exact normalized explicit project code/name or exact stored semantic project key/name.
  • Bound the request and response; stable-sort by (occurred_at, post_id) and report truncation.
  • Return a declared time_basis_code; default to document_time for the current schema.
  • Return typed related-prior paths using only visible project posts and persisted lineage edges.
  • Return each path's truth status, source relation, score where applicable, and provenance.
  • Return observed R&R actors per event and adjacent-event responsibility transitions: continuous, handoff, or assignment_gap.
  • Return the distinct observed actor count without treating missing R&R as a negative assignment fact.

Buyer UI

  • Replace the project card's search-only dead end with Open project history while retaining board search as a secondary action.
  • Render an accessible chronological timeline with event date, title, and declared time basis.
  • Selecting an event updates one detail panel with related prior history and observed responsibility history.
  • Handoffs and gaps are communicated by text/icons, not color alone.
  • Provide keyboard operation, visible focus, aria-current, responsive reflow, and an exact-value table/ordered-list representation.
  • Allow opening the selected event's source post without losing the originating Buyer context.
  • Localize the surface for Korean, English, Chinese, Japanese, and Vietnamese.
  • Add a Storybook fixture representing order, specification change, delivery, VOC, and rebid.

Required tests

  • RED→GREEN API contract tests for exact project matching and stable chronology.
  • ABAC regression proving an unauthorized private event cannot affect history, lineage paths, actor counts, or handoff segments.
  • Regression for explicit and semantic project evidence converging on one event without duplication.
  • Unit tests for reverse-path traversal and continuous / handoff / assignment_gap classification.
  • Frontend tests for selection, keyboard navigation, related-history disclosure, responsibility count, and source-post opening.
  • I18n and Storybook build checks.
  • Full PostgreSQL/Python and frontend lint/test/build gates on the exact head.

Standards grounding

Stack and merge boundary

Implement as a new stacked PR on the stabilized head of #264. Do not mix the separate #274 channel-score evidence-table work into this slice. #258 must ultimately land before the descendant Buyer-surface stack is merged.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions