Skip to content

[Project history] 프로젝트 전 주기 이력 통합 조회와 담당 인수인계 구간 #280

Description

@seonghobae

Buyer problem

현재 Buyer surface는 개별 글의 Event Lineage와 프로젝트 근거를 보여주지만, 동일 프로젝트의 수주 → 사양 변경 → 납품 → VOC → 재입찰을 하나의 시간축에서 조회하고 현재 이슈에서 과거 근거로 역추적하는 프로젝트 단위 read model이 없습니다.

필요한 화면은 기존 LineageWeave 상세 팝업 안에서 동작해야 하며 새 GNB/별도 제품 화면을 만들지 않습니다. Figma의 기존 원칙인 **“신규 화면 0 — 기존 화면의 법인·PU 자리를 채우고 위젯·연계만 추가”**를 유지합니다.

Required buyer outcomes

  1. 전 주기 시계열 조회 — 수주부터 현재 이슈까지 권한 범위에서 확인된 프로젝트 이벤트를 시간순으로 연결한다.
  2. 연관 이력 역추적 — 선택한 VOC/이슈에서 이전 수주·사양 변경·납품 이벤트의 명시적 관계와 원문 근거를 연다.
  3. 담당 변경 구간 표시 — 담당 유효기간과 교체 시점을 동일 시간축에 표시하고, 증거가 없는 인수인계 공백을 계산해 구분한다.

Authority boundary

  • PostgreSQL이 source of truth이다. RDF/OWL은 projection이다.
  • 프로젝트 이벤트는 권한 있는 source_post, issue_ticket 또는 명시적 외부 source reference 중 하나에 근거해야 한다.
  • related_tofollows는 원인으로 표시하지 않는다. 원인 관계는 별도의 명시적 근거가 없으면 생성하지 않는다.
  • 숨겨진 근거를 가진 이벤트·관계·담당자는 API와 UI에서 모두 제외한다.
  • 근거가 없는 이벤트·담당·공백은 발명하지 않는다.

Normalized persistence

Add a migration with 3NF tables and two-or-more-word snake_case names:

  • project_history_project — canonical project identity and display name;
  • project_history_event — event facts and their evidence post;
  • project_event_relation — explicit non-causal event-to-event relation and evidence;
  • project_responsibility_assignment — person, role, evidence, and validity interval.

Event and assignment rows reference project_history_project; they do not repeat a mutable project display name. Controlled lookup values distinguish event type, relation type, responsibility role, and evidence/source type. Timestamps use offset-aware RFC 3339 serialization; ontology projection aligns temporal entities with OWL-Time and provenance with PROV-O.

API contract

GET /api/projects/{project_key}/history

Returns a bounded deterministic payload containing:

  • project identity and display name;
  • ordered visible events and selected-source references;
  • explicit event relations and evidence IDs;
  • responsibility intervals;
  • computed handover gaps between consecutive assignments;
  • truncation and evidence-boundary metadata.

Every post-backed row must pass the existing RBAC/ABAC and source-eligibility gate before publication.

Buyer surface

Add an accessible ProjectHistoryTimeline component to the existing post detail popup when the post exposes at least one project key/evidence row.

  • horizontal lifecycle rail on desktop, vertical rail on narrow viewports;
  • keyboard-selectable event nodes with selected state;
  • event detail, source link, relation trail and evidence count;
  • responsibility spans plus explicitly labelled handover gaps;
  • Storybook states: complete lifecycle, no assignments, one assignment, hidden evidence removed, truncated, empty;
  • print/export preserves the same visible evidence.

Editable Figma specifications

File SBpgot7uTvMxEaxUwvoc0S:

  • desktop To-Be: LineageWeave · Project History Timeline (To-Be), node 308:2;
  • responsive mobile/vertical timeline: LineageWeave · Project History Timeline (Mobile To-Be), node 309:2;
  • empty, hidden-evidence, truncated, and single-assignment states: LineageWeave · Project History Timeline (Evidence States), node 309:50.

RED → GREEN acceptance tests

  • clean-install and upgrade migrations preserve 3NF and FK/cascade contracts;
  • RFC 3339 timestamps are offset-aware and ordered deterministically;
  • a VOC event can trace explicit follows / related_to relations back to order/specification events without causal wording;
  • ABAC removes an event if its supporting post is invisible and removes relations whose endpoint is no longer visible;
  • responsibility gaps are computed only between visible adjacent assignments and never use negative intervals;
  • the UI selects events by keyboard and exposes exact event/date/evidence text to assistive technology;
  • narrow viewport uses the vertical timeline without horizontal overflow;
  • frontend tests, lint, production build and Storybook build pass;
  • Python public production symbols retain docstrings and changed production statement/branch coverage remains 100%.

Standards and research basis

  • W3C OWL-Time for instants, intervals and temporal ordering;
  • W3C PROV-O for evidence/provenance projection;
  • RFC 3339 for unambiguous API timestamps;
  • Allen interval relations as the conceptual basis for assignment-overlap and gap tests.

References must be recorded in APA 7th format under docs/doctoring/ and the design decision in a collision-free ADR.

Stack boundary

Implement as draft PR #283, a child of #264. Do not modify #264’s existing scope, do not depend on MCP/Global Ask PRs, and do not mix Event Lineage channel-score persistence tracked by #274. Authoritative external-source ingestion/reconciliation remains the separate follow-up #284.

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