Skip to content

Commit 6cef236

Browse files
committed
release: prepare v4.0.3 with tray startup, limiter brickwall, and docs
1 parent c6bb91d commit 6cef236

38 files changed

+882
-390
lines changed

.github/workflows/build.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,24 @@ env:
1616
BUILD_TYPE: Release
1717

1818
jobs:
19+
text-integrity:
20+
runs-on: ubuntu-latest
21+
timeout-minutes: 5
22+
23+
steps:
24+
- uses: actions/checkout@v4
25+
26+
- uses: actions/setup-python@v5
27+
with:
28+
python-version: "3.x"
29+
30+
- name: Check UTF-8 text integrity
31+
run: python tools/check_text_integrity.py --repo-root .
1932
# ═══════════════════════════════════════════
2033
# Windows — DirectPipe.exe + Receiver VST2/VST3
2134
# ═══════════════════════════════════════════
2235
build-windows:
36+
needs: [text-integrity]
2337
runs-on: windows-latest
2438
timeout-minutes: 45
2539

@@ -100,6 +114,7 @@ jobs:
100114
# macOS — DirectPipe.app + Receiver VST2/VST3/AU (Universal Binary)
101115
# ═══════════════════════════════════════════
102116
build-macos:
117+
needs: [text-integrity]
103118
runs-on: macos-14
104119
timeout-minutes: 45
105120

@@ -174,6 +189,7 @@ jobs:
174189
# Linux — DirectPipe + Receiver VST2/VST3
175190
# ═══════════════════════════════════════════
176191
build-linux:
192+
needs: [text-integrity]
177193
runs-on: ubuntu-24.04
178194
timeout-minutes: 45
179195

@@ -248,6 +264,7 @@ jobs:
248264
# Stream Deck Plugin — cross-platform Node.js package
249265
# ═══════════════════════════════════════════
250266
build-streamdeck:
267+
needs: [text-integrity]
251268
runs-on: ubuntu-latest
252269
timeout-minutes: 15
253270

CHANGELOG.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
# Changelog
22

3-
All notable changes to DirectPipe will be documented in this file.
3+
Major notable changes to DirectPipe (maintained in this repository era, including v3.4.0+) are documented in this file.
44

55
---
66

77
## [Unreleased]
88

9+
---
10+
11+
## [4.0.3] - 2026-03-22
12+
13+
### Added
14+
- **Startup behavior option (tray launch)**: Added `Start Minimized to Tray` toggle to both Settings > Application and tray right-click menu, backed by `settings.dppreset` persistence so both entry points stay in sync.
15+
916
### Changed
1017
- **Auto-start label (cross-platform UI consistency)**: Unified tray menu and Settings toggle to use a single platform label source via `Platform::getAutoStartLabel()` (`Open at Login` on macOS, `Start with System` on others), removing Windows-specific hardcoded wording from the Settings toggle path.
1118

19+
### Fixed
20+
- **Safety Limiter brickwall behavior (v4)**: Reworked limiter to look-ahead brickwall style (2ms look-ahead, instant attack, release smoothing) and added a hard per-sample ceiling clamp so output does not exceed configured ceiling on fast transients.
21+
- **ASIO channel selection reset on driver/device switch**: Preserved per-driver input/output channel masks in `DriverTypeSnapshot` and restored them during driver type changes. ASIO device reselection now keeps existing channel routing instead of always resetting to channels 1-2.
22+
1223
---
1324

1425
## [4.0.2] - 2026-03-19

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.22)
2-
project(DirectPipe VERSION 4.0.2 LANGUAGES C CXX)
2+
project(DirectPipe VERSION 4.0.3 LANGUAGES C CXX)
33

44
set(CMAKE_CXX_STANDARD 17)
55
set(CMAKE_CXX_STANDARD_REQUIRED ON)

CONTRIBUTING.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@ DirectPipe에 기여해 주셔서 감사합니다! / Thank you for contributing
2121
2. 커밋 메시지: `type: description` 형식 (예: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`) / Commit message format: `type: description`
2222
3. 테스트 통과 확인 / Verify tests pass:
2323
```bash
24+
cmake -B build -DCMAKE_BUILD_TYPE=Release
2425
cmake --build build --config Release
2526
ctest --test-dir build -C Release --output-on-failure
2627
```
27-
4. 새 Action 추가 시 테스트/문서 동기화 체크리스트를 함께 갱신하세요 (`TESTING.md`, `docs/ReleaseNote.md`) / When adding new Actions, update test/doc sync checklists (`TESTING.md`, `docs/ReleaseNote.md`)
28-
5. 문서 업데이트도 포함해 주세요 (해당 시) / Include documentation updates when applicable
28+
4. Action/API/상태 모델 변경 시 동기화 문서를 함께 갱신하세요 (`README.md`, `docs/USER_GUIDE.md`, `docs/PRODUCT_SPEC.md`, `docs/CONTROL_API.md`, `docs/ReleaseNote.md`, `TESTING.md`) / When changing Action/API/state model behavior, update sync docs (`README.md`, `docs/USER_GUIDE.md`, `docs/PRODUCT_SPEC.md`, `docs/CONTROL_API.md`, `docs/ReleaseNote.md`, `TESTING.md`)
29+
5. 유지보수 기준 문서인 `docs/MAINTENANCE_RULES.md`의 Behavior Sync Checklist를 기준으로 검토하세요 / Use `docs/MAINTENANCE_RULES.md` Behavior Sync Checklist as source of truth
30+
6. 문서 업데이트도 포함해 주세요 (해당 시) / Include documentation updates when applicable
2931

3032
## 테스트 / Testing
3133

3234
- Google Test 기반 295 테스트 / 295 tests
33-
- `tools/pre-release-test.sh` — 빌드 + 단위 테스트 + API 테스트 / Build + unit tests + API tests
35+
- `tools/pre-release-test.sh` — 빌드 + 단위 테스트 + API 테스트 / Build + unit tests + API tests (Windows Git Bash 환경 기준)
3436
- `tools/pre-release-dashboard.html` — 수동 테스트 대시보드 / Manual test dashboard
3537

3638
## 버그 리포트 / Bug Reports

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<p align="center">
66
<img src="https://img.shields.io/badge/platform-Windows%20|%20macOS%20|%20Linux-0078d4?style=flat-square" alt="Platform">
7-
<img src="https://img.shields.io/badge/latest-v4.0.2-4fc3f7?style=flat-square" alt="Latest">
7+
<img src="https://img.shields.io/badge/latest-v4.0.3-4fc3f7?style=flat-square" alt="Latest">
88
<img src="https://img.shields.io/badge/C%2B%2B17-JUCE%207-00599C?style=flat-square&logo=cplusplus" alt="C++17">
99
<img src="https://img.shields.io/badge/license-GPL--3.0-green?style=flat-square" alt="License">
1010
<img src="https://img.shields.io/badge/VST2%20%2B%20VST3%20%2B%20AU-supported-ff6f00?style=flat-square" alt="VST">
@@ -21,7 +21,7 @@
2121

2222
## 다운로드 / Download
2323

24-
- **Latest (최신)**: [v4.0.2 다운로드](https://github.com/LiveTrack-X/DirectPipe/releases/latest) — 크로스 플랫폼 / Cross-platform (Windows stable, macOS beta, Linux experimental)
24+
- **Latest (최신)**: [v4.0.3 다운로드](https://github.com/LiveTrack-X/DirectPipe/releases/latest) — 크로스 플랫폼 / Cross-platform (Windows stable, macOS beta, Linux experimental)
2525

2626
> **참고**: Windows는 안정(Stable), macOS는 베타, Linux는 실험적입니다. macOS/Linux 빌드는 실기기 테스트가 제한적입니다.
2727
> **Note**: Windows is stable, macOS is beta, Linux is experimental. macOS/Linux builds have limited real-hardware testing.

SECURITY.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,18 @@ All network services bind to **localhost (127.0.0.1) only**. No remote access is
3939

4040
| 서비스 / Service | 포트 / Port | 프로토콜 / Protocol | 용도 / Purpose |
4141
|---|---|---|---|
42-
| WebSocket | 8765 | TCP | 실시간 상태 브로드캐스트 + 명령 수신 / Real-time state broadcast + command input |
43-
| HTTP REST API | 8766 | TCP | GET-only REST API (상태 조회, 명령 실행) / Status query, command execution |
42+
| WebSocket | 기본 8765 (설정값 실패 시 +1..+5 포트 자동 시도) / default 8765 (auto-tries +1..+5 on bind failure) | TCP | 실시간 상태 브로드캐스트 + 명령 수신 / Real-time state broadcast + command input |
43+
| HTTP REST API | 기본 8766 (설정값 실패 시 +1..+5 포트 자동 시도) / default 8766 (auto-tries +1..+5 on bind failure) | TCP | GET-only REST API (상태 조회, 명령 실행) / Status query, command execution |
4444
| UDP Discovery | 8767 | UDP | Stream Deck 플러그인 자동 감지 / Stream Deck plugin auto-discovery |
4545

4646
**인증 없음 (No Authentication)**: localhost 전용이므로 인증을 요구하지 않습니다. 같은 PC의 모든 프로세스가 접근 가능합니다.
4747

4848
**No authentication**: Since services are localhost-only, no auth is required. Any process on the same machine can access them.
4949

50+
**알려진 제한사항 (WebSocket)**: 핸드셰이크에서 Origin 검증이나 토큰 인증을 수행하지 않습니다. localhost에서 접속 가능한 로컬 프로세스는 모두 명령 전송이 가능합니다.
51+
52+
**Known limitation (WebSocket)**: The handshake does not enforce Origin validation or token auth. Any local process that can connect to localhost can send commands.
53+
5054
**연결 제한 / Connection Limits**:
5155
- WebSocket: 최대 32개 동시 연결 (초과 시 거부) / Max 32 concurrent connections (excess rejected)
5256
- HTTP: 최대 64개 동시 핸들러 (초과 시 거부) / Max 64 concurrent handlers (excess rejected). HTTP는 Connection: close 방식이므로 각 요청이 수 ms 내에 완료됨 / HTTP uses Connection: close, each request completes in milliseconds
@@ -124,8 +128,16 @@ The auto-updater checks the GitHub Releases API for new versions and downloads b
124128

125129
### 설정 백업 보안 / Settings Backup Security
126130

127-
- **크로스 OS 보호**: 백업 파일에 플랫폼 정보가 포함되어 있으며, 다른 OS에서 복원 시 차단됩니다
131+
- **크로스 OS 보호**: `platform` 필드가 포함된 백업은 다른 OS에서 복원 시 차단됩니다. 단, **레거시 백업(플랫폼 필드 없음)은 호환성 때문에 허용될 수 있습니다**
128132
- **파일 무결성**: 모든 설정/프리셋 저장은 `atomicWriteFile()` 패턴 (.tmp → .bak → rename)을 사용하여 전원 중단 시에도 파일이 손상되지 않습니다
129133

130-
- **Cross-OS protection**: Backup files include platform info; restore is blocked on different OS
134+
- **Cross-OS protection**: Backups with a `platform` field are blocked on different OS. **Legacy backups without a platform field may still be accepted for backward compatibility**
131135
- **File integrity**: All settings/preset saves use `atomicWriteFile()` pattern (.tmp → .bak → rename) for crash-safe writes
136+
137+
### 로그 보안 주의 / Logging Security Note
138+
139+
- Audit Mode를 켜면 HTTP 응답 일부, WebSocket payload, 장치/플러그인 상세 상태가 로그에 더 많이 기록됩니다.
140+
- 공유 PC/공개 스트리밍 환경에서는 로그 파일 공유 전에 민감 정보를 검토/마스킹하세요.
141+
142+
- With Audit Mode enabled, logs may include extra HTTP response excerpts, WebSocket payloads, and detailed device/plugin state.
143+
- In shared PCs or public support channels, review/mask sensitive parts before sharing logs.

TESTING.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ bash tools/pre-release-test.sh
1818
- API integration tests (앱 실행 중일 때)
1919
- Git status check
2020

21-
옵션: `--skip-build`, `--skip-api`, `--version-only`
21+
옵션: `--skip-build`, `--skip-api`, `--api-only`, `--version-only`
2222

2323
### Step 2: GUI 대시보드 + AI 코드 리뷰
2424

2525
**GUI 대시보드** — 브라우저에서 `tools/pre-release-dashboard.html` 열기:
26-
- API 자동 테스트 25개 (pre-release-dashboard.html 기준; test_api.js는 114개 체크 포함) / 25 auto API tests (from pre-release-dashboard.html; test_api.js contains 114 checks)
27-
- 수동 테스트 체크리스트 29개 (대시보드 체크박스; 전체 수동 테스트 목록은 하단 참조)
26+
- API 자동 테스트와 수동 체크리스트를 실행/기록 (개수는 대시보드 버전 및 테스트 스크립트 업데이트에 따라 달라질 수 있음) / Run and track API auto tests + manual checklist (counts may change with dashboard/script updates)
27+
- 현재 기준 개수는 대시보드 상단/섹션별 카운터를 우선 확인 / For current counts, trust dashboard counters first
2828
- 결과 JSON 내보내기 (Export Report → Claude에 전달 가능)
2929
- localStorage에 체크 상태 저장
3030

@@ -67,7 +67,7 @@ node test_api.js
6767

6868
### 동작 방식
6969
1. 시작 시 현재 상태(볼륨, 슬롯, 뮤트, IPC, 바이패스 등) 스냅샷 저장
70-
2. 33개 섹션, 114개 체크 항목 순차 실행
70+
2. 섹션별 체크 항목을 순차 실행 (현재 `test_api.js` 기준 약 33개 섹션, 114개 체크)
7171
3. 테스트 완료 또는 에러 시 자동으로 원래 상태 복원 (`try/finally`)
7272

7373
### 테스트 섹션 (33개)
@@ -107,6 +107,10 @@ node test_api.js
107107
| 32 | Volume Precision | 2 |
108108
| 33 | Panic During Operations | 3 |
109109

110+
> 참고: 위 숫자는 문서 작성 시점 기준입니다. 실제 실행에서는 환경(플러그인 유무, 장치 상태, SKIP 조건, 반복 실행 횟수)에 따라 PASS/SKIP 수치가 달라질 수 있습니다.
111+
>
112+
> Note: The numbers above reflect the document snapshot. Actual PASS/SKIP counts may vary by environment (plugin availability, device state, skip conditions, rerun loops).
113+
110114
### 주의사항
111115
- 플러그인이 로드된 상태(슬롯 A에 플러그인 있음)에서 실행해야 모든 항목이 PASS
112116
- 플러그인 없으면 관련 항목 SKIP 처리

THIRD_PARTY.md

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,55 @@
1-
# Third-Party Licenses
1+
# Third-Party Licenses / 서드파티 라이선스
22

3-
## RNNoise — Noise Suppression
3+
DirectPipe에서 사용하는 주요 서드파티 구성요소와 라이선스 정보입니다.
4+
This document lists major third-party components used by DirectPipe and their licenses.
5+
6+
## 1) Core/Host Build Dependencies
7+
8+
### JUCE
9+
- **License**: GPL-3.0-or-later (DirectPipe is GPL-3.0)
10+
- **Source**: <https://github.com/juce-framework/JUCE>
11+
- **Version**: `7.0.12` (fetched by CMake FetchContent)
12+
- **Usage**: Host app UI/audio framework, plugin hosting, receiver plugin framework
13+
14+
### GoogleTest
415
- **License**: BSD-3-Clause
5-
- **Source**: https://github.com/xiph/rnnoise
6-
- **Usage**: Built-in noise removal processor (BuiltinNoiseRemoval)
16+
- **Source**: <https://github.com/google/googletest>
17+
- **Version**: `v1.14.0` (fetched by CMake FetchContent)
18+
- **Usage**: Unit/integration test framework
19+
20+
### RNNoise
21+
- **License**: BSD-3-Clause
22+
- **Source**: <https://github.com/xiph/rnnoise>
23+
- **Usage**: Built-in Noise Removal processor (`BuiltinNoiseRemoval`)
724
- **Files**: `thirdparty/rnnoise/`
25+
- **License text**: `thirdparty/rnnoise/COPYING`
26+
27+
## 2) Optional SDKs (User-Provided)
28+
29+
### Steinberg VST2 SDK (optional)
30+
- **License**: Steinberg VST2 license terms
31+
- **Source**: User-provided in `thirdparty/VST2_SDK/`
32+
- **Usage**: VST2 hosting + Receiver VST2 format build
33+
- **Note**: Not redistributed in this repository due licensing restrictions
34+
35+
### Steinberg ASIO SDK (optional, Windows)
36+
- **License**: Steinberg ASIO SDK license terms
37+
- **Source**: User-provided in `thirdparty/asiosdk/`
38+
- **Usage**: ASIO driver support in host app
39+
- **Note**: Not redistributed in this repository
40+
41+
## 3) Stream Deck Plugin (Node.js)
42+
43+
Path: `com.directpipe.directpipe.sdPlugin/`
44+
45+
### Runtime dependencies
46+
- `@elgato/streamdeck` (`^2.0.1`) — Elgato Stream Deck SDK bindings
47+
- `ws` (`^8.16.0`) — WebSocket client library
48+
49+
### Dev/build dependencies
50+
- `rollup`, `@rollup/plugin-commonjs`, `@rollup/plugin-node-resolve` — bundling
51+
- `sharp` — icon generation (SVG -> PNG)
52+
- `eslint` — linting
853

9-
See `thirdparty/rnnoise/COPYING` for the full license text.
54+
각 npm 패키지의 상세 라이선스는 해당 패키지 레지스트리/저장소를 따릅니다.
55+
Each npm package follows its own upstream license in its registry/repository.

com.directpipe.directpipe.sdPlugin/manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"Name": "DirectPipe",
99
"Icon": "images/directpipe",
1010
"URL": "https://github.com/LiveTrack-X/DirectPipe",
11-
"Version": "4.0.2.0",
11+
"Version": "4.0.3.0",
1212
"OS": [
1313
{
1414
"Platform": "windows",
@@ -279,4 +279,4 @@
279279
}
280280
}
281281
]
282-
}
282+
}

com.directpipe.directpipe.sdPlugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "directpipe-streamdeck",
3-
"version": "4.0.2",
3+
"version": "4.0.3",
44
"description": "Stream Deck plugin for DirectPipe — Control VST bypass, volume, presets, and panic mute via WebSocket.",
55
"main": "src/plugin.js",
66
"scripts": {

0 commit comments

Comments
 (0)