Repository navigation
[Project history] 프로젝트 전 주기 이력 통합 조회와 담당 인수인계 구간 #280
Description
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), node308:2; - responsive mobile/vertical timeline:
LineageWeave · Project History Timeline (Mobile To-Be), node309:2; - empty, hidden-evidence, truncated, and single-assignment states:
LineageWeave · Project History Timeline (Evidence States), node309: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_torelations 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.
Activity
seonghobae commentedon Aug 20, 2026
Standards currency note (2026-08-20)
The doctoring for #283 must distinguish current published standards from work in progress:
Zand defines optional additional time-zone information. This endpoint does not need to emit RFC 9557 bracketed zone annotations, but must not documentZwith the superseded semantics.Add these as APA 7th references and keep the API grammar bounded to the exact timestamp forms accepted by production validation.
seonghobae commentedon Aug 20, 2026
Canonical implementation update: PR #285 exact head
cfc125cb65f26ed7e834976dbff12b6b9790b59cnow owns the shared outcome from #278/#279/#280 on the actual #264 parent. ADR 0111 records the minimal authority boundary: reuse the existing normalizedsource_post,post_project_mention,post_summary_role, andpost_lineage_edgerecords through one bounded ABAC/cutoff projection instead of introducing duplicateproject_history_*persistence. The GNB and post-detail entry point share the same API/component, and Figma fileSBpgot7uTvMxEaxUwvoc0Splus Storybook cover the responsive/evidence states. Keep this issue open until protected merge; #284 remains the separate authoritative external-source ingestion/reconciliation follow-up.[-][Buyer Gap] 프로젝트 전 주기 이력 통합 조회와 담당 인수인계 구간[/-][+][Project history] 프로젝트 전 주기 이력 통합 조회와 담당 인수인계 구간[/+]