@ihyeon/flow-qa 0.1.0-alpha.2 → 0.1.1
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 +4 -4
- package/README.md +3 -3
- package/dist/src/report.js +9 -2
- package/dist/src/ui/server.js +3 -2
- package/docs/architecture.md +1 -1
- package/docs/releases.md +49 -2
- package/docs/ui.md +2 -2
- package/package.json +2 -2
package/README.ko.md
CHANGED
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
사용자 플로우를 검토 가능한 테스트 케이스로 바꾸고, 실제 브라우저 실행 결과를 증거가 연결된 QA 리포트로 남기는 로컬 도구입니다. 플로우의 기대 결과가 모호하면 추측해 통과시키지 않고 질문과 차단 상태로 남깁니다.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
CLI와 `127.0.0.1` 전용 웹 UI를 제공합니다. UI는 영어로 시작하며 상단 언어 전환에서 한국어를 선택할 수 있습니다. 선택은 이 브라우저에 저장됩니다. 테스트 대상의 URL과 화면 계약을 사용하며 앱 소스 또는 데이터베이스 접근은 필수가 아닙니다. 설치 없이 구조를 보려면 [아키텍처](https://github.com/hyeonse-swing/flow-qa/blob/main/docs/architecture.md)와 [UI 안내](https://github.com/hyeonse-swing/flow-qa/blob/main/docs/ui.md)를 참고하세요.
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
## 로컬 데모 시작
|
|
13
13
|
|
|
14
|
-
Node.js 24 이상이 필요합니다.
|
|
14
|
+
Node.js 24 이상이 필요합니다. 브라우저는 첫 실행 전에 설치합니다.
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
|
-
npm install -g @ihyeon/flow-qa@0.1.
|
|
17
|
+
npm install -g @ihyeon/flow-qa@0.1.1
|
|
18
18
|
flow-qa browser install
|
|
19
19
|
flow-qa ui --demo
|
|
20
20
|
```
|
|
@@ -64,7 +64,7 @@ flow-qa plan flows/my-flow.md --workspace my-qa
|
|
|
64
64
|
- 실행마다 `.flowqa/runs/<run-id>/`에 새 리포트와 엔진 결과를 만듭니다. `qa-report.json`과 `qa-report.md`는 통과, 실패, 재시도 후 통과, 차단, 오류, 미실행을 구분합니다. assertion 실패는 관찰 결과이며 제품 버그 확정은 아닙니다.
|
|
65
65
|
- 취소한 실행은 중단으로 기록합니다. UI의 생성 취소는 늦게 도착한 응답을 반영하지 않지만 모델 제공자의 처리나 과금 취소를 보장하지 않습니다. 엔진의 토큰·추정 비용만 표시하며 전체 비용 상한은 없습니다.
|
|
66
66
|
|
|
67
|
-
리포트와 원본 증거에는 테스트 앱의 데이터가 포함될 수 있습니다. `.flowqa/`는 Git에서 제외되지만 외부 공유 전에는 내용을 확인하세요. 마스킹이 모든 개인정보를 탐지한다고 보장하지 않습니다. 세션 준비, 모바일 기기, 예약 CI 실행, 팀 권한과 공유 서버는
|
|
67
|
+
리포트와 원본 증거에는 테스트 앱의 데이터가 포함될 수 있습니다. `.flowqa/`는 Git에서 제외되지만 외부 공유 전에는 내용을 확인하세요. 마스킹이 모든 개인정보를 탐지한다고 보장하지 않습니다. 세션 준비, 모바일 기기, 예약 CI 실행, 팀 권한과 공유 서버는 현재 지원 범위에 포함되지 않습니다.
|
|
68
68
|
|
|
69
69
|

|
|
70
70
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Flow QA turns a user flow into reviewable test cases, runs them in a real browser, and ties the results to evidence in a QA report. When an expected outcome is unclear, it keeps the question visible and blocks that case instead of guessing.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Flow QA is available as a CLI and a web UI bound to `127.0.0.1`. Provide a target URL and describe the screen behavior; access to the application's source code or database is optional. The UI starts in English. Use the language switch in the top bar for Korean; the choice is saved in this browser. See the [architecture](https://github.com/hyeonse-swing/flow-qa/blob/main/docs/architecture.md) and [UI guide](https://github.com/hyeonse-swing/flow-qa/blob/main/docs/ui.md) for the details.
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ Flow QA turns a user flow into reviewable test cases, runs them in a real browse
|
|
|
14
14
|
Requires Node.js 24 or later. Install Chromium before the first run:
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
|
-
npm install -g @ihyeon/flow-qa@0.1.
|
|
17
|
+
npm install -g @ihyeon/flow-qa@0.1.1
|
|
18
18
|
flow-qa browser install
|
|
19
19
|
flow-qa ui --demo
|
|
20
20
|
```
|
|
@@ -64,7 +64,7 @@ For authenticated models, add `--key-env FLOW_QA_API_KEY` to the model command a
|
|
|
64
64
|
- Each run gets a fresh `.flowqa/runs/<run-id>/` directory with engine output and `qa-report.json`/`qa-report.md`. Reports distinguish passed, failed, passed after retry, blocked, error, and skipped cases. A failed assertion is an observation, not proof of a product defect.
|
|
65
65
|
- Cancellation records an interrupted run. Canceling generation prevents a late response from changing the draft, but does not guarantee cancellation of a provider's processing or charges. The UI shows token use and estimated cost only when the engine supplies them; there is no overall cost cap.
|
|
66
66
|
|
|
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
|
|
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 the current scope.
|
|
68
68
|
|
|
69
69
|

|
|
70
70
|
|
package/dist/src/report.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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');
|
package/dist/src/ui/server.js
CHANGED
|
@@ -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
|
-
|
|
769
|
-
server.closeIdleConnections();
|
|
770
|
+
server.closeAllConnections();
|
|
770
771
|
await stopped;
|
|
771
772
|
const pending = runTask;
|
|
772
773
|
if (pending) {
|
package/docs/architecture.md
CHANGED
|
@@ -35,4 +35,4 @@ flowchart LR
|
|
|
35
35
|
| Results | A fresh report per run, status interpretation, evidence links | Raw runs and evidence from the engine |
|
|
36
36
|
| UI | Local workflow screens and English/Korean language switch | [Hyeonse Design System](https://github.com/hyeonse-swing/hyeonse-design-system) tokens and preference utilities |
|
|
37
37
|
|
|
38
|
-
The UI binds only to `127.0.0.1` and serves approved report evidence, not arbitrary raw logs or HTML/SVG. Local reports may still contain data from the tested app and should be reviewed before sharing. This
|
|
38
|
+
The UI binds only to `127.0.0.1` and serves approved report evidence, not arbitrary raw logs or HTML/SVG. Local reports may still contain data from the tested app and should be reviewed before sharing. This release does not manage login sessions, cap model spending, schedule CI runs, or support mobile devices.
|
package/docs/releases.md
CHANGED
|
@@ -1,9 +1,56 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Releases and verification
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The alpha entries below are historical release records. They document earlier package versions and checks.
|
|
4
|
+
|
|
5
|
+
## 0.1.1
|
|
6
|
+
|
|
7
|
+
This release uses plain semver and the npm `latest` dist-tag. It includes the runtime fixes documented in the historical entry below, with no additional runtime changes. The existing runtime passed 47 tests and the browser checks recorded there. Version 0.1.1 metadata, package contents, and a fresh consumer installation were also verified: the installed `flow-qa` command worked and all three Chromium demo cases passed without model calls.
|
|
8
|
+
|
|
9
|
+
- Package target: [`@ihyeon/flow-qa@0.1.1`](https://www.npmjs.com/package/@ihyeon/flow-qa/v/0.1.1), npm `latest` dist-tag
|
|
10
|
+
- Source and package: [GitHub release](https://github.com/hyeonse-swing/flow-qa/releases/tag/v0.1.1)
|
|
11
|
+
- Public checks: [GitHub Actions](https://github.com/hyeonse-swing/flow-qa/actions/workflows/ci.yml)
|
|
12
|
+
|
|
13
|
+
Use this version when checking the published package:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
FLOWQA_PACKAGE_SPEC=@ihyeon/flow-qa@0.1.1 npm run smoke:package
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Historical: 0.1.0-alpha.3
|
|
20
|
+
|
|
21
|
+
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.
|
|
22
|
+
|
|
23
|
+
- 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.
|
|
24
|
+
- 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.
|
|
25
|
+
- 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.
|
|
26
|
+
|
|
27
|
+
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.
|
|
28
|
+
|
|
29
|
+
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.
|
|
30
|
+
|
|
31
|
+
- Package: [`@ihyeon/flow-qa@0.1.0-alpha.3`](https://www.npmjs.com/package/@ihyeon/flow-qa/v/0.1.0-alpha.3)
|
|
32
|
+
- Source and package: [GitHub alpha release](https://github.com/hyeonse-swing/flow-qa/releases/tag/v0.1.0-alpha.3)
|
|
33
|
+
- Public checks: [GitHub Actions](https://github.com/hyeonse-swing/flow-qa/actions/workflows/ci.yml)
|
|
34
|
+
|
|
35
|
+
To reproduce this release's checks from its source:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
npm ci
|
|
39
|
+
npm run check
|
|
40
|
+
npm run qa -- browser install
|
|
41
|
+
npm run demo:smoke
|
|
42
|
+
npm run smoke:ui
|
|
43
|
+
npm run check:package
|
|
44
|
+
npm run smoke:package
|
|
45
|
+
FLOWQA_PACKAGE_SPEC=@ihyeon/flow-qa@0.1.0-alpha.3 npm run smoke:package
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Historical: 0.1.0-alpha.2
|
|
4
49
|
|
|
5
50
|
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.
|
|
6
51
|
|
|
52
|
+
The verification record and reproduction commands below describe alpha.2. Use its matching source tag when reproducing that historical release.
|
|
53
|
+
|
|
7
54
|
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.
|
|
8
55
|
|
|
9
56
|
- 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
|
package/docs/ui.md
CHANGED
|
@@ -4,10 +4,10 @@ Use the target app's URL and a user flow to review cases, run them, and inspect
|
|
|
4
4
|
|
|
5
5
|
## Start
|
|
6
6
|
|
|
7
|
-
Node.js 24 or later is required. Install
|
|
7
|
+
Node.js 24 or later is required. Install Flow QA and start the local demo:
|
|
8
8
|
|
|
9
9
|
```sh
|
|
10
|
-
npm install -g @ihyeon/flow-qa@0.1.
|
|
10
|
+
npm install -g @ihyeon/flow-qa@0.1.1
|
|
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.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Hyeonse Im",
|
|
6
6
|
"repository": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"publishConfig": {
|
|
23
23
|
"access": "public",
|
|
24
|
-
"tag": "
|
|
24
|
+
"tag": "latest",
|
|
25
25
|
"registry": "https://registry.npmjs.org/"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|