Skip to content

feat(issue-tracker): BOARD.html 리디자인 — agent-harness 대시보드 디자인/레이아웃 채택 - #3

Merged
SSFSKIM merged 4 commits into
mainfrom
claude/github-issue-board-ui-wi5bdx
Jul 7, 2026
Merged

feat(issue-tracker): BOARD.html 리디자인 — agent-harness 대시보드 디자인/레이아웃 채택#3
SSFSKIM merged 4 commits into
mainfrom
claude/github-issue-board-ui-wi5bdx

Conversation

@SSFSKIM

@SSFSKIM SSFSKIM commented Jul 6, 2026

Copy link
Copy Markdown
Owner

가독성이 낮던 라이트 SVG 보드를 agent-harness director 대시보드의 시각
언어로 교체: 다크 테마, div 카드(168×74) + SVG 베지어 엣지, 상태별 CSS
변수 팔레트(테두리/배경/글로우), in-progress 펄스 + 토큰바, ELIGIBLE 블루
글로우, 헤더 바(진행도 done/total·라이브 카운트·팔레트 칩 필터·줌 컨트롤),
드릴 스타일 디테일 패널, 푸터 엣지 범례.

의존성은 이제 좌→우로 흐른다(blocker가 왼쪽): 레이어링·교차 최소화·셸프
팩킹은 추상 (slot, layer) 단위 그대로 두고 최종 pos 방출에서만 전치 —
교차 수는 축 교환에 불변이므로 결과 보존. 트리아지/상태 체계는 그대로:
9개 시각 상태, ELIGIBLE 계산, block/spawned/relates 엣지 종류, 에픽
박스+콜랩스, done 기본 숨김. 활성 블록 엣지는 blocker가 작업 중이면
초록(진행 중인 크리티컬 패스), 아니면 앰버.

빈 보드(티켓 0개) 렌더가 max() 빈 시퀀스로 죽던 것 가드 — Pages 워크플로가
첫 티켓 등록 전에 스케줄 렌더를 돌리는 실제 경로.

검증: mock-gh 데모 보드 13티켓 Playwright 스크린샷(기본/디테일/에픽 콜랩스,
콘솔 에러 0), tests/issue-tracker 90 assertions green.

claude and others added 4 commits July 6, 2026 17:38
가독성이 낮던 라이트 SVG 보드를 agent-harness director 대시보드의 시각
언어로 교체: 다크 테마, div 카드(168×74) + SVG 베지어 엣지, 상태별 CSS
변수 팔레트(테두리/배경/글로우), in-progress 펄스 + 토큰바, ELIGIBLE 블루
글로우, 헤더 바(진행도 done/total·라이브 카운트·팔레트 칩 필터·줌 컨트롤),
드릴 스타일 디테일 패널, 푸터 엣지 범례.

의존성은 이제 좌→우로 흐른다(blocker가 왼쪽): 레이어링·교차 최소화·셸프
팩킹은 추상 (slot, layer) 단위 그대로 두고 최종 pos 방출에서만 전치 —
교차 수는 축 교환에 불변이므로 결과 보존. 트리아지/상태 체계는 그대로:
9개 시각 상태, ELIGIBLE 계산, block/spawned/relates 엣지 종류, 에픽
박스+콜랩스, done 기본 숨김. 활성 블록 엣지는 blocker가 작업 중이면
초록(진행 중인 크리티컬 패스), 아니면 앰버.

빈 보드(티켓 0개) 렌더가 max() 빈 시퀀스로 죽던 것 가드 — Pages 워크플로가
첫 티켓 등록 전에 스케줄 렌더를 돌리는 실제 경로.

검증: mock-gh 데모 보드 13티켓 Playwright 스크린샷(기본/디테일/에픽 콜랩스,
콘솔 에러 0), tests/issue-tracker 90 assertions green.
…s에 상시 배포

agent-harness가 Linear 원격 보드를 다루는 방식(오케스트레이터가 매 틱
폴링 → board.json 원자 스냅샷 → 대시보드가 읽기 전용 렌더)의 GitHub
등가물: 이슈 이벤트 + cron 안전망(서브이슈/의존성 엣지 변경은 issues
웹훅을 안 쏨) + workflow_dispatch로 러너에서 board-map.sh --write를
실행해 BOARD.html을 Pages로 배포하는 복사용 워크플로 템플릿을
references/에 동봉, SKILL.md에 설치법 문서화.

비공개 저장소의 Pages는 Free/Pro에서 공개라는 경고를 템플릿 헤더에 명시;
플러그인 체크아웃은 PLUGIN_REPO/PLUGIN_REF로 핀.
같은 페이로드를 상태 컬럼으로 피벗한 칸반 뷰를 graph ↔ kanban 헤더 토글로
동봉 — 별도 렌더 파일 없이 BOARD.html 하나로 두 뷰 제공(Pages 배포도 동일).
컬럼은 해피패스 순서(ready → in-progress → in-review) + 일시정지/터미널
상태(빈 컬럼은 코어 4개만 유지), ready 컬럼은 ELIGIBLE 카드가 상단으로
떠오르고 헤더에 eligible 카운트 표기. 카드는 그래프와 동일한 상태 팔레트
(in-progress 펄스 포함), 클릭 → 동일 디테일 패널, 상태 칩 필터·ELIGIBLE
only·done 기본 숨김이 두 뷰에 똑같이 적용. 에픽 콜랩스는 그래프 전용.

검증: mock-gh 데모 13티켓 Playwright — 칸반 기본/디테일 스크린샷, graph
라운드트립 후 카드 가시성 확인, 콘솔 에러 0; 테스트 스위트 green.
…ed 가시화

3rd-party 리뷰(Codex)에서 나온 실제 버그 3건을 before/after 렌더로 재현·수정:

1. 붕괴된 에픽으로 리라우트되는 필터-off 엣지 누수 (render 엣지 루프):
   resolve() 전에 원본 양끝을 hiddenBy로 먼저 검사 — done 필터로 숨긴
   자식의 엣지가 붕괴 에픽 카드로 되살아나던 것 차단. (누수 1→0 확인)

2. 붕괴된 in-progress 에픽의 색이 유휴 블로커 자식의 의존성 엣지에 번짐
   (edgeClass): resolve(e.from) 대신 실제 블로커 nodeById[e.from]로 판정 —
   block-live(초록) 오분류를 block-wait(앰버)로 교정. (초록→앰버 확인)

3. 칸반이 8개 상태만 하드코딩해 conflict/untracked 티켓이 증발
   (KB_STATES): GitHub이 SSOT라 머신 밖 상태가 스냅샷에 실림 — 스냅샷에
   존재하는 상태를 컬럼으로 동적 편입. 두 상태에 전용 팔레트(conflict=핑크
   2px 경보, untracked=옐로 대시)·배지·칩 클래스 부여해 그래프에서도
   회색 waiting으로 위장하지 않게. (board-map.sh CLASS 매핑 동반)

부수 개선: 엣지 범례를 kanban 뷰에서 숨김(칸반엔 엣지가 없음).

검증: tests/issue-tracker 그린 · Playwright로 13티켓/빈보드/XSS-타이틀/
conflict·untracked/붕괴 엣지 누수·색상 각각 재현, 콘솔 에러 0.
@SSFSKIM
SSFSKIM merged commit e688b9e into main Jul 7, 2026
@SSFSKIM
SSFSKIM deleted the claude/github-issue-board-ui-wi5bdx branch July 7, 2026 02:50
SSFSKIM added a commit that referenced this pull request Jul 10, 2026
Two-tier trust (review #1, human design call): developer feedback — the
server-resolved role snapshot in TRIAGE_TRUSTED_ROLES (default admin), or
a stripped .env #TRIAGE_DEV_CODE body prefix — is read as instruction
(R1/R4 waived: dev ideas can be born ready-for-agent, labeled
source:dev-feedback); user feedback keeps the conservative gate, residual
risk explicitly accepted in the Decision Log. The dev code is stripped
before the body reaches the prompt or ticket so it never leaks into a
public issue.

The rest of the review, all fixed:
- #2 R2 requires a REAL file citation (path-shaped after :line strip;
  unknown:12 no longer counts)
- #3 R3 scans risk SYMBOLS (assertStudentAccess, supabaseAdmin, RLS,
  generate-plan layout fns, past_exam_problems, SUPABASE_SERVICE_ROLE_KEY)
  in addition to paths
- #4 claim issues a lease token; writeback is lease-conditional (late
  writeback after reclaim throws instead of clobbering); reclaim window
  validated at config load; second idempotency check right before
  registerTicket
- #5 findExisting fails closed on gh search errors
- #6 ticket body temp files: mkdtemp dir, mode 0600, removed in finally
- #7 TRIAGE_ENABLED checked before config parsing
- #8 spec drift fixed (feedback-dispatch.ts references, two-kill-switches)

p86 DDL note gains triage_lease UUID. New src/trust.ts. 91 tests green,
tsc clean.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants