@ihyeon/flow-qa 0.1.0-alpha.1 → 0.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ko.md CHANGED
@@ -8,14 +8,13 @@
8
8
 
9
9
  ![로컬 데모 화면](https://raw.githubusercontent.com/hyeonse-swing/flow-qa/main/docs/media/flow-qa-demo.png)
10
10
 
11
- [1분 데모 영상](https://github.com/hyeonse-swing/flow-qa/releases/download/v0.1.0-alpha.1/flow-qa-demo.mp4) · 로컬 할 일 앱에서 예제 불러오기 → 케이스 검토 → 실제 Chromium 실행 → 리포트 확인. 영상은 모델 없이 고정된 세 케이스를 실행합니다.
12
11
 
13
12
  ## 로컬 데모 시작
14
13
 
15
- Node.js 24 이상이 필요합니다. 패키지는 `@ihyeon/flow-qa@0.1.0-alpha.1`입니다. 브라우저는 첫 실행 전에 설치합니다.
14
+ Node.js 24 이상이 필요합니다. 패키지는 `@ihyeon/flow-qa@0.1.0-alpha.3`입니다. 브라우저는 첫 실행 전에 설치합니다.
16
15
 
17
16
  ```sh
18
- npm install -g @ihyeon/flow-qa@0.1.0-alpha.1
17
+ npm install -g @ihyeon/flow-qa@0.1.0-alpha.3
19
18
  flow-qa browser install
20
19
  flow-qa ui --demo
21
20
  ```
@@ -67,6 +66,8 @@ flow-qa plan flows/my-flow.md --workspace my-qa
67
66
 
68
67
  리포트와 원본 증거에는 테스트 앱의 데이터가 포함될 수 있습니다. `.flowqa/`는 Git에서 제외되지만 외부 공유 전에는 내용을 확인하세요. 마스킹이 모든 개인정보를 탐지한다고 보장하지 않습니다. 세션 준비, 모바일 기기, 예약 CI 실행, 팀 권한과 공유 서버는 이 알파의 지원 범위 밖입니다.
69
68
 
69
+ ![실제 세 케이스 실행 결과](https://raw.githubusercontent.com/hyeonse-swing/flow-qa/main/docs/media/flow-qa-report.png)
70
+
70
71
  ## 구현과 출처
71
72
 
72
73
  Flow QA가 구현한 부분은 플로우·케이스 스키마, 설계 모델 연결, 컴파일, 실행 조율, 결과 해석과 로컬 UI입니다. 실제 브라우저 테스트 엔진은 [tester-army/e2e](https://github.com/tester-army/e2e)와 관련 패키지를 의존성으로 사용합니다. UI는 [Hyeonse Design System](https://github.com/hyeonse-swing/hyeonse-design-system)의 스타일 토큰과 선호 설정 유틸을 사용하며 화면 구성은 이 프로젝트에서 작성했습니다. [제3자 고지](https://github.com/hyeonse-swing/flow-qa/blob/main/THIRD_PARTY_NOTICES.md)와 [아키텍처](https://github.com/hyeonse-swing/flow-qa/blob/main/docs/architecture.md)에 경계를 자세히 적었습니다.
package/README.md CHANGED
@@ -8,14 +8,13 @@ Flow QA turns a user flow into reviewable test cases, runs them in a real browse
8
8
 
9
9
  ![Flow QA local demo](https://raw.githubusercontent.com/hyeonse-swing/flow-qa/main/docs/media/flow-qa-demo.png)
10
10
 
11
- [Watch the one-minute demo](https://github.com/hyeonse-swing/flow-qa/releases/download/v0.1.0-alpha.1/flow-qa-demo.mp4) · Load a local to-do app example, review its cases, run them in Chromium, and inspect the report. The 67-second recording uses the English UI, runs three fixed cases without a model, and demonstrates switching to Korean.
12
11
 
13
12
  ## Try the local demo
14
13
 
15
14
  Requires Node.js 24 or later. Install Chromium before the first run:
16
15
 
17
16
  ```sh
18
- npm install -g @ihyeon/flow-qa@0.1.0-alpha.1
17
+ npm install -g @ihyeon/flow-qa@0.1.0-alpha.3
19
18
  flow-qa browser install
20
19
  flow-qa ui --demo
21
20
  ```
@@ -67,6 +66,8 @@ For authenticated models, add `--key-env FLOW_QA_API_KEY` to the model command a
67
66
 
68
67
  Reports and raw evidence can contain data from the tested app. `.flowqa/` is Git-ignored, but inspect files before sharing them. Redaction cannot be assumed to catch every personal detail. Session setup, mobile devices, scheduled CI runs, team permissions, and a shared server are outside this alpha's scope.
69
68
 
69
+ ![QA report from three real passing cases](https://raw.githubusercontent.com/hyeonse-swing/flow-qa/main/docs/media/flow-qa-report.png)
70
+
70
71
  ## Implementation and credits
71
72
 
72
73
  Flow QA owns the flow and case schema, planner integration, compilation, run orchestration, result interpretation, and local UI. [tester-army/e2e](https://github.com/tester-army/e2e) and related packages provide the browser test engine. The UI uses style tokens and preference utilities from [Hyeonse Design System](https://github.com/hyeonse-swing/hyeonse-design-system); this project's workflow screens are its own implementation. See the [third-party notices](https://github.com/hyeonse-swing/flow-qa/blob/main/THIRD_PARTY_NOTICES.md) and [architecture](https://github.com/hyeonse-swing/flow-qa/blob/main/docs/architecture.md) for those boundaries.
@@ -166,11 +166,18 @@ export function normalizeReport1(raw, context) {
166
166
  const attempts = array(result.attempts, 'result.attempts').map((attempt) => normalizeAttempt(attempt, context.rawDir));
167
167
  if (status !== 'skipped' && attempts.length === 0)
168
168
  throw new Error(`Test result has no attempts: ${id}`);
169
- if (status === 'passed' && attempts.at(-1)?.status !== 'passed')
169
+ const finalAttemptStatus = attempts.at(-1)?.status;
170
+ if (status === 'passed' && (attempts.length !== 1 || attempts[0]?.index !== 0 || finalAttemptStatus !== 'passed')) {
170
171
  throw new Error(`Passed status and attempts disagree: ${id}`);
171
- if (status === 'flaky' && (attempts.at(-1)?.status !== 'passed' || !attempts.slice(0, -1).some((attempt) => attempt.status !== 'passed'))) {
172
+ }
173
+ if (status === 'flaky' && (attempts.length < 2 || finalAttemptStatus !== 'passed'
174
+ || attempts.some((attempt, index) => attempt.index !== index
175
+ || (index < attempts.length - 1 && attempt.status !== 'failed' && attempt.status !== 'timed-out')))) {
172
176
  throw new Error(`Flaky status and attempts disagree: ${id}`);
173
177
  }
178
+ if ((status === 'failed' || status === 'timed-out') && finalAttemptStatus === 'passed') {
179
+ throw new Error(`Failed or timed-out status and attempts disagree: ${id}`);
180
+ }
174
181
  if (context.blockedReasons.has(id) && status !== 'skipped')
175
182
  throw new Error(`A blocked case was recorded as executed: ${id}`);
176
183
  const skip = result.skip === undefined ? undefined : object(result.skip, 'result.skip');
@@ -753,6 +753,8 @@ export async function startUIServer(options) {
753
753
  closing = true;
754
754
  controller?.abort();
755
755
  closeTask = (async () => {
756
+ const stopped = new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
757
+ server.closeIdleConnections();
756
758
  if (requestTasks.size) {
757
759
  let requestTimeout;
758
760
  try {
@@ -765,8 +767,7 @@ export async function startUIServer(options) {
765
767
  clearTimeout(requestTimeout);
766
768
  }
767
769
  }
768
- const stopped = new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
769
- server.closeIdleConnections();
770
+ server.closeAllConnections();
770
771
  await stopped;
771
772
  const pending = runTask;
772
773
  if (pending) {
package/docs/releases.md CHANGED
@@ -1,11 +1,44 @@
1
1
  # Alpha release and verification
2
2
 
3
- ## 0.1.0-alpha.1
3
+ ## 0.1.0-alpha.3
4
4
 
5
- The first public alpha provides a local CLI and UI, structured case validation, browser-run orchestration, and QA reports linked to evidence. Its bundled to-do app demo runs without a model.
5
+ This maintenance release keeps the existing CLI, UI, and case schema. It tightens result validation, bounds UI shutdown, and checks the command that npm installs for consumers.
6
6
 
7
- - Package: [`@ihyeon/flow-qa@0.1.0-alpha.1`](https://www.npmjs.com/package/@ihyeon/flow-qa/v/0.1.0-alpha.1), with the `alpha` dist-tag
8
- - Source and recording: [GitHub alpha release](https://github.com/hyeonse-swing/flow-qa/releases/tag/v0.1.0-alpha.1)
7
+ - A result marked `passed` must contain a single first attempt that passed. A passing retry must have a consistent `flaky` history. Contradictory histories are rejected instead of producing a misleading success report.
8
+ - UI shutdown stops accepting connections immediately, allows existing requests up to one second to finish, and then closes remaining HTTP connections. An incomplete JSON request can no longer hold shutdown open. Planner cancellation responses and run cancellation are preserved.
9
+ - Consumer smoke checks verify npm's installed `flow-qa` command and invoke it offline for help, workspace initialization, validation, and runtime diagnostics. The installed UI still runs three real Chromium cases.
10
+
11
+ Both runtime fixes have regression tests that failed before the changes and passed afterward. Verification uses local test data and no model calls; it does not establish external authentication or model quality.
12
+
13
+ Checked on macOS with Node.js 24.14.1 on 2026-10-12: all 47 tests, type checking, UI syntax, and the design-system audit passed. Real Chromium checks preserved normal pass, intentional assertion failure, and unreachable-app classifications. The bilingual UI smoke passed, including report downloads and a 390px viewport. The runtime dependency audit reported zero known vulnerabilities at that time.
14
+
15
+ - Package: [`@ihyeon/flow-qa@0.1.0-alpha.3`](https://www.npmjs.com/package/@ihyeon/flow-qa/v/0.1.0-alpha.3)
16
+ - Source and package: [GitHub alpha release](https://github.com/hyeonse-swing/flow-qa/releases/tag/v0.1.0-alpha.3)
17
+ - Public checks: [GitHub Actions](https://github.com/hyeonse-swing/flow-qa/actions/workflows/ci.yml)
18
+
19
+ To reproduce this release's checks from its source:
20
+
21
+ ```sh
22
+ npm ci
23
+ npm run check
24
+ npm run qa -- browser install
25
+ npm run demo:smoke
26
+ npm run smoke:ui
27
+ npm run check:package
28
+ npm run smoke:package
29
+ FLOWQA_PACKAGE_SPEC=@ihyeon/flow-qa@0.1.0-alpha.3 npm run smoke:package
30
+ ```
31
+
32
+ ## 0.1.0-alpha.2
33
+
34
+ This update replaces the introductory video link with two UI screenshots. Runtime behavior is unchanged from alpha.1. Media files are not included in the npm tarball.
35
+
36
+ The verification record and reproduction commands below describe alpha.2. Use its matching source tag when reproducing that historical release.
37
+
38
+ This public alpha provides a local CLI and UI, structured case validation, browser-run orchestration, and QA reports linked to evidence. Its bundled to-do app demo runs without a model.
39
+
40
+ - Package: [`@ihyeon/flow-qa@0.1.0-alpha.2`](https://www.npmjs.com/package/@ihyeon/flow-qa/v/0.1.0-alpha.2), with the `alpha` dist-tag
41
+ - Source and package: [GitHub alpha release](https://github.com/hyeonse-swing/flow-qa/releases/tag/v0.1.0-alpha.2)
9
42
  - Public checks: [GitHub Actions](https://github.com/hyeonse-swing/flow-qa/actions/workflows/ci.yml)
10
43
 
11
44
  ### Local evidence
@@ -18,7 +51,6 @@ Checked on macOS with Node.js 24.14.1 on 2026-10-08. The English-default and Kor
18
51
  | Real Chromium | Three normal cases passed; an intentional assertion failure and an unreachable app were classified separately |
19
52
  | Package contents | Compiled CLI, UI, demo, and bundled design system included; workspace data, run results, and secret files excluded |
20
53
  | Tarball in a fresh consumer workspace | Installed with Git execution disabled; CLI, UI, fonts, and the three actual cases passed |
21
- | Demo recording | 67.04-second H.264 video of the English UI with a Korean language-switch demonstration; both UI and stored JSON reported three passing cases, and full-video decoding passed |
22
54
  | Language behavior in Chromium | English first visit, Korean switching, persisted preference, cross-tab sync, preserved edits and review, live run completion, localized Markdown downloads, and 390px viewport passed |
23
55
  | Runtime dependency audit | `npm audit --omit=dev` found no known vulnerabilities at the time of the check |
24
56
 
@@ -41,7 +73,7 @@ npm run smoke:package
41
73
  Check the published registry version separately. The script requires the installed package name and version to match the current `package.json` exactly.
42
74
 
43
75
  ```sh
44
- FLOWQA_PACKAGE_SPEC=@ihyeon/flow-qa@0.1.0-alpha.1 npm run smoke:package
76
+ FLOWQA_PACKAGE_SPEC=@ihyeon/flow-qa@0.1.0-alpha.2 npm run smoke:package
45
77
  ```
46
78
 
47
79
  Registry results are written to `output/package/registry-smoke.json`. GitHub CI checks types and tests, Chromium pass/fail/blocked cases, and tarball installation on Linux; its artifacts contain the check results. Confirm publication and CI independently on the package page and the workflow run for the relevant commit.
package/docs/ui.md CHANGED
@@ -7,7 +7,7 @@ Use the target app's URL and a user flow to review cases, run them, and inspect
7
7
  Node.js 24 or later is required. Install the alpha and start the local demo:
8
8
 
9
9
  ```sh
10
- npm install -g @ihyeon/flow-qa@0.1.0-alpha.1
10
+ npm install -g @ihyeon/flow-qa@0.1.0-alpha.2
11
11
  flow-qa browser install
12
12
  flow-qa ui --demo
13
13
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ihyeon/flow-qa",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.3",
4
4
  "license": "MIT",
5
5
  "author": "Hyeonse Im",
6
6
  "repository": {