crowny-terminal6561 — 조회 API 2종(GET /api/sessions·/api/capacity) 신설 + 2a 앱 셸 라이브 배선
개요
21화면 중 라이브가 1a·1e-1 둘뿐이던 crowny-terminald(:9830)에 세션 목록·계통 가동 현황 조회 API 2종을 신설하고, 2a(앱 셸 · 네이티브 · 세션탭바/세션레일/계통바) 화면을 실배선했다.
무엇을 했는지
1. GET /api/sessions?limit=&offset=
- 원천:
데이터/세션.psv(append-only,id|title|space). 데이터/세션.psv를 배열로 통째 로드하지 않는다(1023 상한·계속 자라는 원장) —
wc -l로 총줄수만 얻고 head|tail|tac로 "요청한 페이지 창"만 잘라 임시파일로 만든 뒤
버퍼(BUF_) 찾아서-자르기 패턴으로 파싱(정본: 감사.한선 감사재생행()).
- 최신순(뒤에서부터) + 페이지네이션(offset/limit, 기본 20).
status:live(이 데몬 프로세스 메모리_세션DB에 있음, 신규기계어_세션메모리있나())
idle(원장에만 존재). done/paused 세부 상태는 이분법 밖이라 노출 안 함(날조 금지).2. GET /api/capacity
- 9기수 전부(일기~육천오백육십일기) + 정원(
계통_정원재사용) + 가동
계통_가동조회("전역", 기수) 재사용 — 계통증설요청/승인이 이미 쓰는 전역 집계 관례).
계통.한선은 건드리지 않았다(오케스트레이션 로직과 UI 표시 라벨 분리 — 이름 매핑은
터미널데몬.한선의 _기수한글이름 배열).3. 2a.라이브.html + 2a.라이브.한선
- 2a.html 마크업/스타일 그대로 복사 +
<script>만 추가(1a.라이브 관례). - 살린 것: 세션 탭바(①, 탭클릭=선택·"+"=POST /api/session)·세션 레일(②)·계통 바(③, 메뉴바
?자동= 헤드리스 훅(⑦).
- 정적 유지: 브라우저 뷰 도크(⑤, A7 데몬 라우트 미구현 — 주석 표시), 터미널 로그/입력바
- 동반
2a.라이브.한선: 탭/레일 활성 판정·status(live/idle) 배지 문구·예산 문구·계통칩 조각·
실측 함정 2건 발견·수리 (이번 작업 중)
- 함수 호출을 문자열 연결식에 인라인하면 응답 맨앞에 유령 문자가 섞임 —
"{" + 데몬_세션목록JSON(...) + "}"처럼 버퍼(BUF_)를 쓰는 함수를 인라인 호출하면
TCP로 나가는 실응답 맨앞에 원인불명 문자가 붙는 실측 함정(self-test 직접호출·curl
양쪽 다 재현). 기존 감사재생행() 호출부처럼 반드시 변수에 먼저 담고 나서
문자열 연결해야 안전 — 수리 후 재현 0건. crownycode-learn에 등록.
- POST(세션생성) 직후 곧바로 GET(목록조회)이 레이스 — 데몬 내부에서 append(덧쓰기)가
wc -l/head/tail 서브프로세스가
그 시점 파일뷰를 못 잡는 경우가 실측됐다(헤드리스 캡처로 재현, 단순 curl 순차호출로는
거의 안 잡힘 — 진짜 동시성 타이밍 이슈). 처방: 클라이언트(2a.라이브.html)가 POST 응답을
그대로 들고 있다가, GET 목록에서 못 찾으면 그 자리에서 합성해 목록 맨앞에 끼워넣는다
(세션목록적용()의 낙관적 병합 — 값은 서버가 방금 준 진짜 응답이라 날조 아님).
라이브2a_합성진입여부()로 판정 로직을 순수함수화 + 셀프테스트 4건.검증 결과
- STRICT 컴파일 전부 0경고(계통·감사·기계어·파싱·터미널데몬·1a라이브·2a라이브).
- 셀프테스트(같은 CT_DATA_DIR로 3회 연속 동일, 0 회귀):
- curl 실측:
/api/sessions?limit=55건+total(432+)+최신순 확인,offset=5&limit=5다른 5건,
/api/capacity 9기수 전부 + total_cap:6561(정원 합 1+3+9+27+81+243+729+2187+6561=6561
검산 일치), /ui/2a-live 200 + 파일 크기 일치.
- 메모리 부하(격리 데몬, 별도 포트 9831+CT_DATA_DIR — 터미널데몬.한선의 포트/데이터경로
- 실제 렌더: 크라우니AI검증.sh shot + dump(단일 네비게이션, 더 신뢰도 높음) 둘 다 확인.
- 디자인이식.sh diff: 판정=옴, 신규색=0, 원본훼손=0(유실색 162는 다른 미포팅 화면 몫).
관련 파일
/Users/ef/crowny-terminal6561/한선씨/터미널데몬.한선—데몬_세션목록JSON()·
데몬_계통JSON()·GET /api/sessions·GET /api/capacity 라우트·화이트리스트 2a-live 추가.
/Users/ef/crowny-terminal6561/한선씨/기계어.한선—기계어_세션메모리있나()추가./Users/ef/crowny-terminal6561/화면/2a.라이브.html— 신규./Users/ef/crowny-terminal6561/한선씨/2a.라이브.한선— 신규(동반 판정 로직 + 셀프테스트)./Users/ef/crowny-terminal6561/설계/데몬API계약.md— 이번 라운드 반영 전(다음 세션이
잔여 이슈
- 브라우저 뷰 도크(A7) 데몬 라우트 미구현 — 2a는 여전히 정적.
/api/sessionPOST가 쓰는_세션인덱스경로는 여전히 CT_DATA_DIR 격리를 안 받는
환경변수("CT_DATA_DIR") 참조로 바꾸는 것(다음 세션 몫).
- 세션탭/레일은 최근 4~5건만 노출(폭 제약) — 나머지는 "전체 N개 보기" 텍스트만, 클릭 인터랙션 없음.
- 정적으로 남은 21화면 중 잔여: 1b·1c·1d·1e-2·1e-3·1f·2b(둘 다)·2c·2d·2e·2f·2g·2h·2i·2j(셋 다).