Skip to content
Draft
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
422545f
docs: reconcile product gap baseline
seonghobae Aug 28, 2026
b44de31
docs: refresh exact-head gap evidence
seonghobae Aug 28, 2026
307dc30
docs: correct squash merge terminology
seonghobae Aug 28, 2026
f5f44b1
docs: refresh search performance evidence
seonghobae Aug 28, 2026
64f6914
docs: record current PR queue evidence
seonghobae Aug 28, 2026
c00fa49
docs: reconcile closed duplicate PR lanes
seonghobae Aug 28, 2026
d084c8b
docs: record current performance review head
seonghobae Aug 28, 2026
11ef2e4
docs: record numeric metadata roundtrip fix
seonghobae Aug 28, 2026
0775c42
docs: record empty-state accessibility repair
seonghobae Aug 28, 2026
6e660e0
docs: record trusted proxy boundary repair
seonghobae Aug 28, 2026
587daea
docs: record download link PR evidence
seonghobae Aug 28, 2026
416a4c2
docs: record SSRF blocker and canonical lane
seonghobae Aug 28, 2026
044119f
docs: record modal performance gate status
seonghobae Aug 28, 2026
98fbaa1
docs: refresh exact-head queue evidence
seonghobae Aug 28, 2026
72aab98
docs: record hono security patch validation
seonghobae Aug 28, 2026
f6a888d
docs: record hierarchy review evidence
seonghobae Aug 28, 2026
212b6bc
docs: record PR 531 and 601 gate evidence
seonghobae Aug 28, 2026
c49647d
docs: reconcile baseline review findings
seonghobae Aug 28, 2026
2410f85
docs: record search PR gate evidence
seonghobae Aug 28, 2026
0f83131
docs: record accessibility PR evidence
seonghobae Aug 28, 2026
2080e5d
docs: record metrics PR gate evidence
seonghobae Aug 28, 2026
a8d824f
docs: record render PR gate evidence
seonghobae Aug 28, 2026
6652b83
docs: record schema ledger PR evidence
seonghobae Aug 28, 2026
3966e2f
docs: record workflow registry PR evidence
seonghobae Aug 28, 2026
fcf815d
docs: record editor accessibility evidence
seonghobae Aug 28, 2026
c84c87a
docs: record focus restoration evidence
seonghobae Aug 28, 2026
864365a
docs: record exact-head CI evidence
seonghobae Aug 28, 2026
86da42a
docs: record Clearfolio configuration evidence
seonghobae Aug 28, 2026
763bd4d
docs: record stacked billing evidence
seonghobae Aug 28, 2026
7a26299
docs: record schedule domain evidence
seonghobae Aug 28, 2026
aef3248
docs: record calendar subscription evidence
seonghobae Aug 28, 2026
9f35d6e
docs: record access-grant repair evidence
seonghobae Aug 28, 2026
70a4496
docs: record access-grant domain evidence
seonghobae Aug 28, 2026
916f9ec
docs: record documentation authority evidence
seonghobae Aug 28, 2026
fff07c0
docs: enrich orchestrator evidence
seonghobae Aug 28, 2026
baf4b63
docs: record Stripe boundary reconciliation
seonghobae Aug 28, 2026
cad385f
docs: record current accessibility and PR evidence
seonghobae Aug 28, 2026
de7fb26
docs: align baseline gate status
seonghobae Aug 28, 2026
2b51cb0
docs: classify provider-gated review failures
seonghobae Aug 28, 2026
2ff7e4c
docs: record verified pages deployment
seonghobae Aug 28, 2026
4c3563c
docs: record resolved accessibility review
seonghobae Aug 28, 2026
f65bf54
docs: refresh exact-head queue evidence
seonghobae Aug 28, 2026
bc93898
docs: repair baseline queue references
seonghobae Aug 28, 2026
c881fbb
docs: refresh current queue evidence
seonghobae Aug 28, 2026
9070adb
docs: track sample onboarding fix
seonghobae Aug 28, 2026
24d45a5
docs: refresh stacked PR heads
seonghobae Aug 28, 2026
7f6ab68
docs: record hosted gate outcomes
seonghobae Aug 28, 2026
d17c7a7
docs: record current pr 608 evidence
seonghobae Aug 28, 2026
c01786e
docs: refresh trusted proxy current-head evidence
seonghobae Aug 28, 2026
184ead3
docs: refresh empty-state current-head evidence
seonghobae Aug 28, 2026
2fd8e47
docs: record current PR 490 validation
seonghobae Aug 28, 2026
59a82f5
docs: refresh performance PR evidence
seonghobae Aug 28, 2026
6c4c734
docs: record modal performance validation
seonghobae Aug 28, 2026
15b2cd5
docs: reconcile focus PR gate evidence
seonghobae Aug 28, 2026
01e0ae8
docs: pin baseline queue snapshot
seonghobae Aug 28, 2026
4207578
docs: record release manifest validation
seonghobae Aug 28, 2026
63548a8
docs: reconcile current PR evidence
seonghobae Aug 28, 2026
a31225c
docs: close schema migration gate record
seonghobae Aug 28, 2026
4654627
docs: record schedule reason evidence
seonghobae Aug 28, 2026
28c2f9c
docs: record protected gate outcomes
seonghobae Aug 28, 2026
a4ef0fc
docs: record empty-state hydration guard
seonghobae Aug 28, 2026
c0c2b84
docs: refresh PR 587 gap evidence
seonghobae Aug 28, 2026
099a2f0
docs: refresh exact-head queue evidence
seonghobae Aug 28, 2026
e8c75a5
docs: record invite security verification
seonghobae Aug 28, 2026
8f5cbfd
docs: refresh exact-head queue evidence
seonghobae Aug 28, 2026
a41db2d
docs: record current numeric-zero evidence
seonghobae Aug 28, 2026
bb882f5
docs: refresh webhook and hierarchy evidence
seonghobae Aug 28, 2026
38afb18
docs: record hono upgrade verification
seonghobae Aug 28, 2026
2d013c5
docs: correct calendar persistence review evidence
seonghobae Aug 28, 2026
dd28262
docs: refresh clearfolio readiness evidence
seonghobae Aug 28, 2026
2faa4ed
docs: refresh SQLite backup evidence
seonghobae Aug 28, 2026
b5a849d
docs: record exact-head CI gate evidence
seonghobae Aug 28, 2026
841249a
docs: refresh schedule reason baseline evidence
seonghobae Aug 28, 2026
07d7862
docs: record schedule outcome verification
seonghobae Aug 28, 2026
620c793
docs: record checkout stack reconciliation
seonghobae Aug 28, 2026
30d50c6
docs: record metric accessibility verification
seonghobae Aug 28, 2026
3f1887b
docs: correct metrics benchmark gate evidence
seonghobae Aug 28, 2026
b18bb00
docs: refresh billing checkout gate evidence
seonghobae Aug 28, 2026
58f843b
docs: record Clearfolio readiness gap
seonghobae Aug 28, 2026
9363571
docs: refresh schema migration gate evidence
seonghobae Aug 29, 2026
84b95b6
docs: record workflow registry gate evidence
seonghobae Aug 29, 2026
8135316
docs: record render performance evidence
seonghobae Aug 29, 2026
d748bc7
docs: record Clearfolio configuration evidence
seonghobae Aug 29, 2026
cffeae3
docs: refresh PR 468 evidence
seonghobae Aug 29, 2026
5b3ee2b
docs: refresh PR 629 and 625 evidence
seonghobae Aug 29, 2026
b0fc666
docs: refresh PR 621 verification evidence
seonghobae Aug 29, 2026
aa6aa2d
docs: record PR 608 and 610 verification
seonghobae Aug 29, 2026
afbdeab
docs: record dependency PR verification
seonghobae Aug 29, 2026
1b3cdfa
docs: refresh current PR evidence
seonghobae Aug 29, 2026
f1324e3
docs: refresh security PR baseline head
seonghobae Aug 29, 2026
a564604
docs: record Unicode invite fix
seonghobae Aug 29, 2026
123623e
docs: refresh exact PR queue heads
seonghobae Aug 29, 2026
56d67e0
docs: refresh numeric zero PR evidence
seonghobae Aug 29, 2026
664b501
docs: separate live PR evidence from predecessor
seonghobae Aug 29, 2026
7c4a88f
docs: refresh accessibility PR evidence
seonghobae Aug 29, 2026
28f2c1f
docs: refresh invite identity evidence
seonghobae Aug 29, 2026
a52f73f
docs: record current hosted gate status
seonghobae Aug 29, 2026
b6756a9
docs: link Unicode identity policy evidence
seonghobae Aug 29, 2026
f2a3c2c
docs: record Strix provider failure evidence
seonghobae Aug 29, 2026
25e245c
docs: record invite coverage remediation
seonghobae Aug 29, 2026
377d2a7
docs: distinguish baseline gate predecessors
seonghobae Aug 29, 2026
cd19708
docs: record current Strix gate failure
seonghobae Aug 29, 2026
b4ade9e
docs: reconcile latest guarded limiter evidence
seonghobae Aug 29, 2026
a49a879
docs: record current Strix provider outage
seonghobae Aug 29, 2026
bd83106
docs: record current PR 587 gate evidence
seonghobae Aug 29, 2026
5336ddd
docs(gates): record pending current-head Strix
seonghobae Aug 29, 2026
7a18041
docs(gates): record Strix provider outage
seonghobae Aug 29, 2026
967747b
docs(security): scope UI sink evidence
seonghobae Aug 29, 2026
51707c4
docs(gates): track current performance PR head
seonghobae Aug 29, 2026
8a9f57a
docs(gates): timestamp performance gate evidence
seonghobae Aug 29, 2026
d37ca6c
docs(gates): track benchmark contract fix
seonghobae Aug 29, 2026
4641eec
docs: record current PR 625 gate evidence
seonghobae Aug 29, 2026
dc3a85a
docs: record current PR 495 gate evidence
seonghobae Aug 29, 2026
b23b888
docs: record current PR gate evidence
seonghobae Aug 29, 2026
35fa5f8
docs: record PR 596 security rerun
seonghobae Aug 29, 2026
8566d75
docs: refresh exact-head design acceptance
seonghobae Sep 26, 2026
c6a6c05
docs(design): bind Gantt acceptance to artifact-clean head
seonghobae Sep 26, 2026
3afe7b5
docs: bind repeated #731 artifact regression
seonghobae Sep 26, 2026
57cbed8
docs: bind repeated #731 artifact regression
seonghobae Sep 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions docs/doctoring/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Product/technical gap baseline doctoring record

## 2026-08-28

- Reconciled the baseline to protected `develop@2c328875e00e86537df3e965170be80532571cad`.
- Distinguished shipped behavior from open PR submissions so #621/#624 features are
not reported as already available on `develop`.
- Recorded the exact #624 squash merge into the #621 feature branch and the subsequent
#621 exact head `4c8d09d17024202a1f5236ef62b31a8b5d9480c1`, including the CSV search
reset, sample-onboarding persistence fixes, and debounced search rerender.
- Recorded #610 OpenCode/Strix gate failures as non-authorizing external evidence,
including the missing current-head verdict and provider HTTP 500 report absence.
- Added exact-head evidence for #515, stacked draft #623, and draft security PR #552;
preserved their review/approval and provider-gate limits instead of treating green
local or partial hosted results as merge authority.
- Research mapping remains anchored to ISO 21502, ISO 21511, ISO 21508, WCAG 2.2,
NIST SSDF 1.1, and the preserved PM-analysis sources listed in the baseline.
- Reconciled newly observed PRs: retained #588 as the single outbound-webhook
SSRF lane, recorded #628's accessibility result and pre-existing modulepreload
E2E gap, and closed duplicate #626/#627 lanes.
175 changes: 175 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# ScopeWeave 제품·기술 Gap Baseline

> 기준일: 2026-08-28 | 보호 기준 브랜치: `develop` | 보호 기준 HEAD: `2c328875e00e86537df3e965170be80532571cad`

이 문서는 저장소의 PRD 역할을 하는 설계 문서와 README, 기술 계약,
구현·테스트·운영 게이트를 현재 파일과 실행 증거에 연결하는 기준선이다.
별도 `PRD.md`는 없으며, 제품 요구의 원문은
[`docs/plans/2026-04-20-scopeweave-design.md`](plans/2026-04-20-scopeweave-design.md)와
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
Resolved
[`README.md`](../README.md)이다. 아래의 “완료”는 보호된 `develop`에 실제로
존재하는 것만 뜻한다. 열린 PR의 구현은 별도 제출 상태로 기록한다.

## 1. 제품 목표와 구매자

주 구매자는 일정·공정 데이터를 WBS로 관리하고 계획 대비 실적과 지연
원인을 설명해야 하는 PM과 PMO다. 제품의 핵심 가치는 다음과 같다.

1. `단계 > Activity > Task` 구조를 빠르게 편집한다.
2. 날짜·진척·선행작업에서 일정 통제 신호를 재현 가능하게 계산한다.
3. CSV와 브라우저 저장으로 별도 플랫폼에서도 계획을 회수한다.

현재 제품은 정적 브라우저 클라이언트와 선택적 Node SaaS 계층으로 나뉜다.
정적 호스팅에서 서버 파일을 덮어쓰지 않는 제약은 유지한다.

## 2. PRD/TRD 추적성

| 요구 | 보호된 `develop` 구현 증거 | 상태 |
| --- | --- | --- |
| 3단계 WBS 편집·계층 보존 | `app.js`의 단일 `state.tasks`, `renderAll()`, expand/collapse·subtree 이동 | 완료 |
| 계획/실적 진척 및 일정 통제 | `analytics.js`의 EVM, S-curve, CPM, workload | 완료 |
| 작업 검색과 계층 맥락 유지 | 현재 `develop`에는 미포함. #621의 `4c8d09d` 제출본에 구현됨 | 제출됨, 병합 대기 |
| CSV 왕복 | `exportCsv()`, CSV parser/validation, E2E·fuzz 계약 | 완료 |
| JSON seed·localStorage·선택적 파일 sync | `loadSeedTasks()`, `localStorage`, `exportJsonArray()`, File System Access API | 완료 |
| 명시적 JSON 다운로드 | 현재 `develop` UI에는 없음. #621의 `4c8d09d` 제출본에 구현됨 | 제출됨, 병합 대기 |
| 첫 방문 샘플 안내와 빈 계획 전환 | 현재 `develop`에는 미포함. #624가 #621에 병합되어 제출됨 | 제출됨, 병합 대기 |
| 정적 배포 | `pages.yml`, 상대 경로 자산, `404.html` | 구현 완료, 실제 출판 증거 필요 |
| Cloud 인증·멀티테넌시·협업 | `server/`, `cloud-sync.js`, API smoke/E2E | 코드·테스트 존재, 운영 환경 검증 필요 |

## 3. UML 및 데이터 흐름

```mermaid
classDiagram
class ScopeWeaveState {
+string projectName
+string baseDate
+Task[] tasks
+string taskQuery
}
class Task {
+string id
+string parentId
+number depth
+string phase
+string activity
+string task
+string plannedStartDate
+string plannedEndDate
}
class AppController {
+bootstrap()
+renderAll()
+persistState()
}
class AnalyticsBridge {
+render(input)
+computeCpm(tasks)
+computeEvm(input)
}
class BrowserStorage {
+load()
+save(state)
}
ScopeWeaveState "1" *-- "0..*" Task
AppController --> ScopeWeaveState
AppController --> AnalyticsBridge
AppController --> BrowserStorage
```

`tasks`가 유일한 원천이며 사용자 입력·파일 seed·Cloud snapshot은 이 상태로
정규화된다. 화면 갱신은 `renderAll()` 하나를 통과하고 분석은
`window.ScopeWeaveAnalytics` 경계를 통해 호출된다.

## 4. 현재 PR 및 Gap 조치 상태

이 표는 2026-08-28의 GitHub exact-head snapshot이다. Checks와 리뷰는
HEAD가 바뀌면 다시 확인해야 한다.

| ID | Gap / 고객 영향 | 현재 제출 상태 | 조치 |
| --- | --- | --- | --- |
| G-01 | 큰 WBS에서 작업 위치를 찾는 비용 | #621 `4c8d09d`, `develop` 병합 대기 | 작업·담당자·산출물 등 필드 검색과 상위 계층 표시 |
| G-02 | 정적 사용자가 JSON을 회수하려면 파일 API에 의존 | #621 `4c8d09d`, `develop` 병합 대기 | 브라우저 JSON 다운로드와 계획 필드 보존 |
| G-03 | 첫 방문자가 seed와 실제 계획을 혼동 | #624 `69eff955`가 #621에 병합됨, `develop` 병합 대기 | 샘플 안내, 숨김, 확인 가능한 빈 계획 전환 |
| G-04 | 핵심 상태의 시각 회귀 증거 부족 | 미해결 | 실제 브라우저 screenshot과 WCAG 2.2 점검을 릴리스 증거에 포함 |
| G-05 | PR 큐가 provider 실패와 승인 부재로 정지 | #621/#625 OpenCode current verdict 부재; #588 Strix provider 실패; #628 OpenCode current verdict 부재; qualifying approval 없음 | 게이트를 약화하지 않고 로그·artifact·exact HEAD 재검증 |

### Exact-head queue evidence

- #621: `develop@2c328875` 대상
`4c8d09d17024202a1f5236ef62b31a8b5d9480c1`. CSV 성공 import 시 stale 검색어를
초기화하고, 첫 방문 seed 탐색 중 progress/order 변경이 sample을 영속화하지 않으며,
빠른 검색 입력의 전체 재렌더를 디바운스하는 현재 제출본이다.
- #610: `40f26217609dd5836a91ab535c01ead266143078`. 일반 보안·테스트·cloud
E2E는 통과했지만 OpenCode는 해당 HEAD verdict 부재로 실패했고, Strix는
provider HTTP 500과 구조화 vulnerability report 부재로 fail-closed 되었다.
- #601: `98f4354733c68c9f361e516f86ba2d95e97af20e`. 날짜 formatter benchmark는
protected base 대비 46.79% 개선과 checksum `118184592`를 기록했으나 Strix
provider/backend 실패와 승인 부재로 병합하지 않았다.
- #515: `develop@2c328875` 대상 `36c11dd0bf907569184d7d73172b675d21bd0ff1`.
Phase → Activity → Task → Duty 도메인 검증과 투영은 로컬·hosted 전체 적용
테스트를 통과했지만 `REVIEW_REQUIRED`라 병합하지 않았다.
- #623: stacked base `refactor/schema-migration-ledger-433@9f2e6818` 대상
`81072df8f4dd2e2df269710eb7cc852312ff7543`, draft 상태. canonical SQLite
rename의 31개 schema/migration 테스트는 통과했지만 독립 병합 근거가 없다.
- #552: `develop@2c328875` 대상 `92487d1f9e5215cd4b7302275c23393596799ba3`,
draft 상태. 일반 hosted 게이트는 통과하고 Strix는 취약점 0건을 출력한 뒤
provider 장애와 authoritative report 부재로 fail-closed 되었다.
- #588: `develop@2c328875` 대상 `bc60476829ec98f37d83977a9432b79ba0b3c0d6`.
outbound webhook SSRF 단일 수정 경로로서 encoded IP, IPv4/IPv6 special-use
주소, DNS rebinding, pinned connection, legacy destination migration을 다룬다.
일반 hosted 게이트는 통과했지만 Strix provider 실패와 qualifying approval
부재로 병합하지 않았다.
- #628: `develop@2c328875` 대상 `7d27ff23a3eac6548b904f91f2282f0efcc5c5a5`.
비상호작용 tooltip의 keyboard focus, semantic role, focus-visible 표시를
추가했고 단독 E2E 75개가 통과했다. 현재 base의 modulepreload 누락으로
기존 static E2E 1개가 실패하며, OpenCode current-head verdict 부재와
qualifying approval 없음으로 병합하지 않았다.
- #495: `develop@2c328875` 대상 `dcdc8da7f8f07dfda42f6ad0f189d4d842d94736`.
정적 shell의 `cloud-sync.js`·`analytics.js` modulepreload를 제공하는
제출본이다. #628에서 확인한 기존 E2E 실패의 별도 소유 경로이며, OpenCode/
Strix 게이트와 qualifying approval을 재확인해야 한다.
- #626: `d0141077d3bb790786520efa3d115d4dd2ce70bf`는 #508의
`computeTaskMetrics` 최적화와 중복되어 종료했다. #627:
`c91715a4ad4f8865e7e6a90ffc51fdb8b16fd360`은 문자열 필터만으로는
encoded IP·DNS rebinding을 막지 못해 종료하고, 보안 수정은 #588에
단일화했다.
- #624: `69eff955bc16295a6d82b72174b25d8ec94345c1`은 base
`feat/wbs-search-context`에 normal squash merge되어 단일 squash commit
`5f8a3d7759aef628f4bcf06f3780c53737ca2a53`가 되었다.

## 5. 품질·보안 기준선

- 런타임 의존성은 브라우저 native API와 현재 서버의 최소 의존성만 사용한다.
- `app.js`는 `new Function` 테스트 계약 때문에 top-level ESM import/export를
사용하지 않는다.
- 입력은 신뢰 경계에서 길이·날짜·CSV 수식·JSON prototype pollution을 검증하고,
동적 HTML 삽입 대신 `textContent`를 사용한다.
Comment thread
github-actions[bot] marked this conversation as resolved.
Resolved
- 접근성은 레이블, landmark, keyboard focus, live status, disabled 상태,
reduced motion을 최소 기준으로 삼는다.
- 검증 명령은 `npm run test:unit`, `npm run test:api`, `npm run test:e2e`,
`python3 -m pytest tests/config`, `npm run fuzz`다.
- 현재 exact-head 제출본의 로컬 증거는 PR별로 분리하며, predecessor·synthetic
merge·pending·skipped·provider-failed evidence는 통과로 승격하지 않는다.

## 6. 표준·연구 근거 (APA 7th)

국제표준화기구. (2020). *ISO 21502:2020: Project, programme and portfolio
management—Guidance on project management*. https://www.iso.org/standard/74947.html

국제표준화기구. (2018). *ISO 21511:2018: Work breakdown structures for
project and programme management*. https://www.iso.org/standard/69702.html

국제표준화기구. (2026). *ISO 21508:2026: Project, programme and portfolio
management—Earned value management*. https://www.iso.org/standard/87899.html

World Wide Web Consortium. (2024). *Web Content Accessibility Guidelines
(WCAG) 2.2*. https://www.w3.org/TR/WCAG22/

Souppaya, M., Scarfone, K., & Dodson, D. (2022). *Secure software development
framework (SSDF) version 1.1: Recommendations for mitigating the risk of
software vulnerabilities* (NIST Special Publication 800-218). National Institute
of Standards and Technology. https://doi.org/10.6028/NIST.SP.800-218

상세한 PM 분석 연구·표준 매핑은
[`docs/research/pm-analysis/README.md`](research/pm-analysis/README.md), 설계 결정은
[`docs/plans/2026-04-20-scopeweave-design.md`](plans/2026-04-20-scopeweave-design.md)에
Comment thread
seonghobae marked this conversation as resolved.
Resolved
보존한다.
Loading