Buyer problem
현재 Buyer surface는 개별 글의 Event Lineage와 프로젝트 근거를 보여주지만, 동일 프로젝트의 수주 → 사양 변경 → 납품 → VOC → 재입찰을 하나의 시간축에서 조회하고 현재 이슈에서 과거 근거로 역추적하는 프로젝트 단위 read model이 없습니다.
필요한 화면은 기존 LineageWeave 상세 팝업 안에서 동작해야 하며 새 GNB/별도 제품 화면을 만들지 않습니다. Figma의 기존 원칙인 **“신규 화면 0 — 기존 화면의 법인·PU 자리를 채우고 위젯·연계만 추가”**를 유지합니다.
Required buyer outcomes
- 전 주기 시계열 조회 — 수주부터 현재 이슈까지 권한 범위에서 확인된 프로젝트 이벤트를 시간순으로 연결한다.
- 연관 이력 역추적 — 선택한 VOC/이슈에서 이전 수주·사양 변경·납품 이벤트의 명시적 관계와 원문 근거를 연다.
- 담당 변경 구간 표시 — 담당 유효기간과 교체 시점을 동일 시간축에 표시하고, 증거가 없는 인수인계 공백을 계산해 구분한다.
Authority boundary
- PostgreSQL이 source of truth이다. RDF/OWL은 projection이다.
- 프로젝트 이벤트는 권한 있는
source_post, issue_ticket 또는 명시적 외부 source reference 중 하나에 근거해야 한다.
related_to와 follows는 원인으로 표시하지 않는다. 원인 관계는 별도의 명시적 근거가 없으면 생성하지 않는다.
- 숨겨진 근거를 가진 이벤트·관계·담당자는 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.
Buyer problem
현재 Buyer surface는 개별 글의 Event Lineage와 프로젝트 근거를 보여주지만, 동일 프로젝트의 수주 → 사양 변경 → 납품 → VOC → 재입찰을 하나의 시간축에서 조회하고 현재 이슈에서 과거 근거로 역추적하는 프로젝트 단위 read model이 없습니다.
필요한 화면은 기존 LineageWeave 상세 팝업 안에서 동작해야 하며 새 GNB/별도 제품 화면을 만들지 않습니다. Figma의 기존 원칙인 **“신규 화면 0 — 기존 화면의 법인·PU 자리를 채우고 위젯·연계만 추가”**를 유지합니다.
Required buyer outcomes
Authority boundary
source_post,issue_ticket또는 명시적 외부 source reference 중 하나에 근거해야 한다.related_to와follows는 원인으로 표시하지 않는다. 원인 관계는 별도의 명시적 근거가 없으면 생성하지 않는다.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}/historyReturns a bounded deterministic payload containing:
Every post-backed row must pass the existing RBAC/ABAC and source-eligibility gate before publication.
Buyer surface
Add an accessible
ProjectHistoryTimelinecomponent to the existing post detail popup when the post exposes at least one project key/evidence row.Editable Figma specifications
File
SBpgot7uTvMxEaxUwvoc0S:LineageWeave · Project History Timeline (To-Be), node308:2;LineageWeave · Project History Timeline (Mobile To-Be), node309:2;LineageWeave · Project History Timeline (Evidence States), node309:50.RED → GREEN acceptance tests
follows/related_torelations back to order/specification events without causal wording;Standards and research basis
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.