2026-09-07
요약 (AI 작성)
에이전트 활동 뷰가 열린 날입니다. 인덱스가 도구 호출도 담고(AV1-a), 그 명령이 어떻게 끝났는지 보이며(AV2), 줄을 누르면 그때 받은 전문이 열립니다(AV3). 원격 파일을 열어도 트리가 원격에 남고(RF7), session-host 는 candidate pair 를 한 stage 로 attest 하고 live action checkpoints 를 잇고 live release workflow 를 배선했으며, upgrade-B 증거 leaf 순서·protected upgrade profile·endorsed predecessor 권위·durable preparation·stage3 preparation 을 쌓았습니다. 바뀐 키 정책은 §9.1·입력 설정·계획 문서에 반영했습니다.
hwpjs 는 59커밋으로 파일 포맷 층을 넓혔습니다 — XML 의 bounded UTF 입력과 문자 검증, zlib 스트림과 window 한도, PNG 의 international text·suggested palette·IDAT 픽셀과 Adam7 스캔라인·gamma·chromaticity·sRGB intent, ICC 의 sampled curve 보간(정확한 분수)·localized string·XYZ 배열·parametric curve, hwp5 의 form controls 조립·DocHistory 스트림·revision source 경계·XML payload. ICC 필수 태그 검증의 빈틈은 문서에 남겼습니다.
커밋
ohah/hwpjs
- feat(xml): add bounded UTF input and XML character validation
- feat(xml): parse bounded names and character references
- feat(image): reconstruct PNG scanline filters with bounded contracts
- feat(compression): validate bounded zlib streams and window limits
- feat(xml): validate namespace scopes and expanded attributes
- feat(image): validate PNG modification timestamp metadata
- feat(image): validate PNG international text and aggregate limits
- feat(text): validate BCP47 registration against pinned IANA data
- feat(image): validate PNG compressed text with aggregate output limits
- feat(image): validate PNG suggested palettes and unique names
- feat(text): inspect pinned ISO 639 alpha2 membership
- feat(hwp5): integrate form diagnostics into document validation
- docs(docs): keep README focused on usage
- feat(hwp5): diagnose form context and tristate semantics
- docs(docs): simplify README usage instructions
- feat(hwp5): assemble observed form controls with shared budgets
- feat(hwp5): link observed forms to paragraph control tokens
- feat(hwp5): parse scoped UTF16 form properties
- feat(image): interpolate sampled ICC curves with exact fractions
- feat(image): inspect ICC header identifiers and numeric fields
- feat(image): inspect ICC v4 required tag presence
- feat(image): parse ICC localized string structures
- feat(image): validate PNG uncompressed text and shared keywords
- feat(text): validate BCP47 syntax and duplicate subtags
- feat(image): validate PNG IDAT pixels and Adam7 scanline layout
- feat(image): validate PNG transparency metadata and ordering
- feat(image): validate PNG background and histogram metadata
- feat(image): validate edition-specific ICC TRC tag types
- feat(image): invert sampled ICC curves with exact fractions
- feat(image): parse ICC identity gamma and sampled curves
- feat(image): parse ICC parametric curve functions and parameters
- feat(image): unify ICC TRC forward evaluation
- feat(image): evaluate ICC gamma and parametric curves
- feat(image): parse ICC XYZ arrays and validate v2 values
- feat(image): validate ICC XYZ tag cardinality and display white point
- feat(image): add snapshot-backed ICC registry lookup
- docs(image): record ICC required-tag validation gaps
- feat(text): validate ICC strings with shared Unicode decoding
- feat(image): select ICC localized strings by ordered preferences
- feat(hwp5): connect explicitly selected DocHistory streams
- feat(hwp5): inspect observed history dates without timezone assumptions
- feat(hwp5): preserve and inspect form MaxLength values
- feat(image): validate PNG gamma and chromaticity wire fields
- feat(hwp5): validate observed HistoryLastDoc records
- feat(hwp5): validate selected XMLTemplate container streams
- feat(image): validate PNG sRGB intent and companion consistency
- feat(image): validate PNG physical dimensions and significant bits
- feat(image): add bounded ICC structure and profile envelope APIs
- feat(hwp5): validate selected XML payloads with shared budgets
- feat(xml): parse tags and normalize attribute value tokens
- test(hwp5): verify line cache presence and coordinate hypotheses
- feat(hwp5): map observed revision source boundaries
- feat(hwp5): read observed form object envelopes
- feat(image): validate PNG chunk structure and checksums
- docs(hwp5): record unresolved bibliography storage evidence
- feat(hwp5): validate observed form property paths and references
- test(hwp5): inspect history XML with bounded external evidence
- feat(xml): parse declarations and reconcile input encodings
- feat(xml): validate bounded whole-document structure
ohah/maru
- feat(agent-activity): 줄을 누르면 그때 받은 전문이 열린다 — 활동 뷰 AV3
- docs(agent-activity-view): 펼침이 무엇을 하고 무엇을 안 하는지 적는다 — AV3
- feat(session-host): execute protected signed upgrade profile
- test(session-host): require protected profile upgrade execution
- docs(session-host): connect profile authority to signed execution
- feat(session-host): reopen profile preparation by schema
- test(session-host): require upgrade preparation reopen
- feat(session-host): preserve upgrade durable preparation
- test(session-host): require upgrade durable preparation
- docs(session-host): generalize durable preparation profiles
- feat(session-host): bind endorsed predecessor authority
- test(session-host): specify predecessor profile binding
- docs(session-host): bind endorsed predecessor identity
- fix(session-host): preflight profile authority reads
- feat(session-host): bind protected upgrade profile
- test(session-host): specify release profile endorsement
- docs(session-host): define upgrade profile endorsement
- docs(status-bar): 상한 검사가 등가임을 기록한다
- test(status-bar): 언어 항목의 제품 조립을 빠른 스위트에서 잰다
- feat(status-bar): 상태바에 언어 항목을 더한다 (Grammar 기준)
- docs(status-bar): 언어 값의 출처가 Grammar 임을 세 문서에 맞춘다 (11~14회차)
- docs(status-bar): 언어 항목은 표시 전용이고 비교 뷰에서도 선다 (7~10회차)
- docs(status-bar): 언어 항목의 프레이밍·한계·보관 자리 (3~6회차)
- docs(status-bar): 상태바 언어 항목을 정한다 (Grammar 기준)
- feat(session-host): authenticate endorsed predecessor manifest
- test(session-host): specify profile manifest bootstrap
- docs(session-host): bootstrap endorsed predecessor manifest
- fix(agent-activity): 칩 줄은 안 그릴 때 자리도 돌려준다 — 펼침이 클릭을 잃지 않게
- docs(agent-activity): 필터 UI 자리를 남은 결정에서 뺀다 — AV4 가 정했다
- feat(agent-activity): 종류를 눌러서 고른다 — 활동 뷰 AV4
- feat(session-host): authenticate endorsed predecessor authority
- test(session-host): require authenticated predecessor authority
- feat(session-host): make profile manifest authority nominal
- test(session-host): require nominal profile manifest authority
- docs(session-host): authenticate endorsed predecessor assets
- fix(agent): 적대적 검증 — 거르는 자리가 틀렸고, 판별기가 가장 흔한 모양을 놓쳤다
- fix(agent): pane nonce 를 굳히지 않는다 — 한쪽이 움직이면 영영 어긋났다
- test(session-host): aggregate upgrade runner gate
- fix(session-host): retain upgrade cleanup retry
- test(session-host): exhaust upgrade copy faults
- feat(session-host): compose upgrade production runner
- test(session-host): specify upgrade production runner
- feat(session-host): expose held predecessor asset fd
- test(session-host): specify held predecessor asset fd
- docs(session-host): define upgrade production runner
- fix(session-host): keep only predecessor execution copy
- fix(session-host): use executable current candidate directly
- docs(session-host): define upgrade production runner
- feat(session-host): order upgrade execution copies
- test(session-host): specify upgrade copy ordering
- docs(session-host): order upgrade execution copies
- feat(session-host): materialize both upgrade executables
- test(session-host): specify both execution source modes
- feat(session-host): reserve current execution copy
- test(session-host): specify current execution copy
- docs(session-host): require both upgrade execution copies
- feat(session-host): bound signed upgrade children
- test(session-host): specify signed upgrade child
- feat(session-host): isolate signed upgrade harness
- test(session-host): specify signed harness isolation
- feat(session-host): materialize predecessor executable
- test(session-host): specify predecessor execution copy
- feat(session-host): isolate upgrade evidence workspace
- test(session-host): specify upgrade workspace isolation
- docs(session-host): define upgrade child authority
- feat(remote-watch): exit 3 이 왜 났는지 남긴다 — 한 코드가 실패 아홉을 뭉갰다
- feat(session-host): wire live release workflow
- test(session-host): specify live release workflow
- docs(session-host): define live release workflow
- docs(agent-activity-view): 리베이스가 바꾼 것을 문서에 맞춘다 — AV2·AV2b
- feat(agent-activity): 줄 오른쪽 넷째 칸에 시각이 뜬다 — 활동 뷰 AV2b
- feat(agent-activity): 그 명령이 어떻게 끝났는지 보인다 — 활동 뷰 AV2
- docs(agent-activity-view): 결과 요약 칸이 무엇을 말하는지 정한다 — AV2
- feat(session-host): bridge action checkpoints
- test(session-host): specify action checkpoint bridge
- docs(session-host): define action checkpoint bridge
- feat(session-host): attest candidate pair as one stage
- test(session-host): specify candidate pair attestation
- docs(session-host): define candidate pair attestation
- docs(key-input): 고친 뒤의 뜻과 안 바뀌는 자리를 적는다 (D~F회차)
- docs(key-input): contains 수정이 터미널을 안 바꾼다 — 층만 바뀐다
- fix(build): 전역 sed 가 망가뜨린 expect-tests 값을 되돌린다
- test(input): 게이트 질의가 활성 탭 축도 보는지 잰다
- test(input): 게이트가 활성 pane 을 보고 Page 키만 먹는지 잰다
- test(input): 선-가로채기 게이트의 ABI 배선과 fail-open 방향을 잰다
- fix(input): 터미널 전용 선-가로채기를 Term 종류로 게이트한다
- docs(key-input): 무조건성·설정 대조군·판정 계획 (16~20회차)
- docs(key-input): 층이 넷이고 피해는 여섯이다 (4~15회차)
- docs(key-input): 게이트의 비교 뷰·누수·단일 출처를 적는다 (1~3회차)
- docs(key-input): 터미널 전용 선-가로채기의 게이트를 정한다
- docs(key-input): 충돌 전수 대조 — 가로채는 층이 셋이고 남은 충돌은 넷이다
- fix(file-tree): 원격 파일을 열어도 트리가 원격에 남는다 — RF7
- docs(file-tree): RF7 — 「모른다」와 「로컬이다」를 가른다
- feat(session-host): bootstrap workflow checkpoints
- test(session-host): specify workflow checkpoint bootstrap
- docs(session-host): define workflow checkpoint bootstrap
- feat(session-host): pin live candidate inputs
- test(session-host): specify candidate input pinning
- docs(session-host): define candidate input pinning
- feat(session-host): order upgrade evidence leaves
- test(session-host): specify upgrade leaf transaction
- docs(session-host): define upgrade leaf transaction
- test(input): 접기 chord 캡처 훅을 더한다
- test(input): 팔레트 판정자가 접기 chord 를 고정하도록 뒤집는다
- feat(input): 접기 다섯에 ⌥⌘0·J·1~3 을 준다
- docs(configuration-input): 접기 chord 의 설정 왕복과 발견성 경로 (11~15회차)
- docs(configuration-input): 접기 chord 의 거절 경로와 사용자 설정 파급 (5~10회차)
- docs(configuration-input): 접기 다섯의 chord 를 정한다 (⌥⌘0·J·1~3)
- fix(agent-activity): 상한에 걸리면 최신을 버리고 있었다 — 적대적 검증 O
- docs(agent-activity): 재지 않은 것을 마저 쟀다 — 적대적 검증 M·N
- fix(test): 워커 재우기를 아홉 판정자 전부에 넣는다 — 「절반만 고치기」 네 번째
- fix(agent-activity): 「한 곳으로 모았다」고 적고 절반만 옮겼다 — 적대적 검증 I·J·K
- fix(agent-activity): 첫 Tab 이 거의 항상 빈 화면이었다 — 적대적 검증 H1~H5
- docs(agent-activity): 「전체」가 계약보다 앞서 나갔다 — 적대적 검증 G1~G3
- fix(agent-activity): 「좁아서」가 틀린 원인이었다 — 적대적 검증 F1·F2
- fix(test): 내 판정자가 워커를 재우지 않아 남의 판정자가 죽었다
- docs(agent-activity): 계약이 보안 판단을 틀리게 만들고 있었다 — 적대적 검증 E1~E3
- docs(agent-activity): Tab 이 터미널 자동완성을 뺏는 것은 고른 트레이드오프다
- fix(agent-activity): 실측에 «의존»하고 있었다 — 적대적 검증 D1~D4
- fix(agent-activity): 목록이 통째로 비어도 「개수」만 적고 있었다 — 적대적 검증 C1~C3
- fix(agent-activity): 줄 목록이 격자의 클릭·호버·스크롤을 물려받고 있었다 — 적대적 검증 B2·B3
- fix(agent-activity): 명령을 「장」으로 세고 있었다 — 캡처가 잡은 단위 오류
- feat(session-host): 보낼 것을 든 채 끊긴 연결을 남긴다 — 진단이 필요한 자리에서 스스로 침묵했다
- feat(session-host): run live validator commands
- test(session-host): specify live command bridge
- docs(session-host): define live command bridge
- docs(plans): copy_editor_selection 의 이유가 어느 문서 것인지 바로잡는다
- docs(key-input): 바뀐 정책을 §9.1·입력 설정·계획 문서에 반영한다