cabloy 5.1.160 → 5.1.162
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/.cabloy-version +1 -1
- package/CHANGELOG.md +23 -0
- package/CLAUDE.md +1 -1
- package/CONTRIBUTING.md +1 -1
- package/README.md +34 -58
- package/package.json +1 -1
- package/repo-docs/.vitepress/config.mjs +58 -32
- package/repo-docs/ai/ai-spec-driven-development.md +99 -0
- package/repo-docs/ai/docs-skills-rules-mapping.md +25 -8
- package/repo-docs/ai/edition-consistency-checklist.md +2 -3
- package/repo-docs/ai/introduction.md +7 -4
- package/repo-docs/ai/playbook-spec-execution.md +19 -5
- package/repo-docs/ai/playbook-spec-generation.md +69 -101
- package/repo-docs/ai/repo-guidance.md +1 -1
- package/repo-docs/ai/skills.md +31 -10
- package/repo-docs/backend/dto-guide.md +1 -0
- package/repo-docs/backend/openapi-guide.md +1 -1
- package/repo-docs/editions/overview.md +51 -120
- package/repo-docs/frontend/environment-config-guide.md +1 -1
- package/repo-docs/frontend/form-layout-guide.md +4 -2
- package/repo-docs/frontend/introduction.md +2 -1
- package/repo-docs/frontend/quickstart.md +2 -8
- package/repo-docs/frontend/scripts.md +7 -3
- package/repo-docs/frontend/ssr-architecture-overview.md +1 -1
- package/repo-docs/frontend/ssr-build-deploy-guide.md +4 -2
- package/repo-docs/fullstack/comparison-with-other-frameworks.md +6 -2
- package/repo-docs/fullstack/contract-loop-playbook.md +4 -0
- package/repo-docs/fullstack/introduction.md +13 -4
- package/repo-docs/fullstack/parallel-worktree-environment.md +2 -0
- package/repo-docs/fullstack/quickstart.md +65 -74
- package/repo-docs/fullstack/semantic-presentation-contract.md +121 -0
- package/repo-docs/fullstack/ssr-site-and-flavor-setup.md +2 -2
- package/repo-docs/index.md +16 -11
- package/repo-docs/reference/glossary.md +30 -0
- package/repo-docs/reference/package-map.md +1 -1
- package/repo-docs/reference/repo-scripts.md +6 -4
- package/repo-e2e/specs/cabloy-basic.spec.ts +16 -16
- package/test-results/.last-run.json +2 -20
- package/vona/pnpm-lock.yaml +38 -214
- package/zova/pnpm-lock.yaml +8 -0
- package/zova/src/suite/a-home/modules/home-base/src/.metadata/component/siteEntryTables.ts +12 -0
- package/zova/src/suite/a-home/modules/home-base/src/.metadata/index.ts +13 -0
- package/zova/src/suite/a-home/modules/home-base/src/component/siteEntryTables/controller.tsx +71 -0
- package/zova/src/suite/a-home/modules/home-base/src/config/locale/en-us.ts +8 -0
- package/zova/src/suite/a-home/modules/home-base/src/config/locale/zh-cn.ts +8 -0
- package/zova/src/suite/a-home/modules/home-indexadmin/package.json +3 -0
- package/zova/src/suite/a-home/modules/home-indexadmin/src/page/dashboard/controller.tsx +6 -13
- package/zova/src/suite/a-home/modules/home-indexweb/package.json +3 -1
- package/zova/src/suite/a-home/modules/home-indexweb/src/page/home/controller.tsx +6 -14
- package/repo-docs/ai/edition-detection.md +0 -30
- package/repo-docs/editions/cabloy-basic.md +0 -26
- package/repo-docs/editions/cabloy-start.md +0 -53
- package/repo-docs/editions/choosing-between-basic-and-start.md +0 -83
- package/repo-docs/editions/detection.md +0 -31
- package/test-results/a-commerce-ATP-ADDR-01-aut-11dea-ss-through-Web-self-service/error-context.md +0 -238
- package/test-results/a-commerce-ATP-SPC-01-Coup-ef380-mantic-Admin-field-controls/error-context.md +0 -240
- package/test-results/a-commerce-ATP-SPC-02-Cate-9f120-on-and-publication-controls/error-context.md +0 -238
- package/test-results/a-commerce-ATP-SPC-02-Prod-5f92a-on-and-publication-controls/error-context.md +0 -238
- package/test-results/a-commerce-ATP-SPC-02-SKU--2e61e-ency-and-lifecycle-controls/error-context.md +0 -238
- package/test-results/a-commerce-ATP-SPC-04-Stoc-fa895--readonly-and-mutation-free/error-context.md +0 -235
- package/test-results/a-commerce-ATP-SPC-05-syst-fb406-e-without-mutation-controls/error-context.md +0 -238
- package/test-results/a-commerce-Commerce-sessio-4e963-ie-selects-raw-server-theme/error-context.md +0 -226
- package/test-results/a-commerce-Commerce-theme--062fe--without-hydration-mismatch/error-context.md +0 -229
- package/test-results/a-commerce-PayPal-browser--8672c-t-or-open-an-awaiting-order/error-context.md +0 -238
- package/test-results/a-commerce-Payment-callbac-f56c2--reconciles-after-hydration/error-context.md +0 -238
- package/test-results/a-commerce-Payment-cancell-3fc74-ified-provider-confirmation/error-context.md +0 -238
- package/test-results/a-commerce-Phase-50-60-aut-71d61--observes-operator-shipment/error-context.md +0 -238
- package/test-results/a-commerce-Phase-60-custom-407cd-ecutes-a-whole-order-refund/error-context.md +0 -238
- package/test-results/cabloy-basic-ATP-BASIC-TAB-e7253-and-pins-configured-columns/error-context.md +0 -240
- package/test-results/markdown-ATP-SPC-02-Produc-9d5c2-link-toolbar-edits-Markdown/error-context.md +0 -211
- package/test-results/markdown-ATP-SPC-02-Produc-9d6ea-t-editor-and-saves-Markdown/error-context.md +0 -238
package/repo-docs/index.md
CHANGED
|
@@ -4,7 +4,7 @@ layout: home
|
|
|
4
4
|
hero:
|
|
5
5
|
name: 'Cabloy'
|
|
6
6
|
text: 'Node.js fullstack framework for AI vibe coding'
|
|
7
|
-
tagline: One fullstack system for AI vibe coding—bidirectional type sync, CLI-first workflows,
|
|
7
|
+
tagline: One fullstack system for AI vibe coding—bidirectional type sync, CLI-first workflows, and Traceable Spec Delivery from product intent to verifiable evidence.
|
|
8
8
|
actions:
|
|
9
9
|
- theme: brand
|
|
10
10
|
text: Get Started
|
|
@@ -13,8 +13,8 @@ hero:
|
|
|
13
13
|
text: Editions
|
|
14
14
|
link: /editions/overview
|
|
15
15
|
- theme: alt
|
|
16
|
-
text: AI Development
|
|
17
|
-
link: /ai/
|
|
16
|
+
text: AI Spec-Driven Development
|
|
17
|
+
link: /ai/ai-spec-driven-development
|
|
18
18
|
|
|
19
19
|
features:
|
|
20
20
|
- title: One fullstack system
|
|
@@ -25,17 +25,21 @@ features:
|
|
|
25
25
|
details: Use explicit commands for scaffolding, generation, refactors, and verification.
|
|
26
26
|
- title: Docs and skills
|
|
27
27
|
details: Give people and AI agents reusable, source-grounded guidance for the current repository.
|
|
28
|
+
- title: AI Spec-Driven Development
|
|
29
|
+
details: Connect confirmed product intent to contracts, bounded delivery, acceptance procedures, and verifiable evidence.
|
|
28
30
|
- title: Vona + Zova
|
|
29
31
|
details: Use aligned backend and frontend layers for code sharing and cross-stack consistency.
|
|
30
32
|
- title: Modular delivery
|
|
31
33
|
details: Organize capabilities as suites and modules, then deliver SSR, SPA, Web, and Admin applications with shared conventions.
|
|
34
|
+
- title: Semantic presentation
|
|
35
|
+
details: Translate confirmed audience, task, scene, and DTO contracts into schema-driven UI without changing security or ownership authority.
|
|
32
36
|
---
|
|
33
37
|
|
|
34
38
|
# Cabloy Documentation
|
|
35
39
|
|
|
36
|
-
Cabloy is a Node.js fullstack framework for AI vibe coding. It brings backend and frontend work into one system, with bidirectional type sync, CLI-first workflows, and source-grounded docs and skills for people and AI agents.
|
|
40
|
+
Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven Development for traceable, evidence-backed delivery. It brings backend and frontend work into one system, with bidirectional type sync, CLI-first workflows, and source-grounded docs and skills for people and AI agents.
|
|
37
41
|
|
|
38
|
-
Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to understand bidirectional type sync, then use the [Fullstack CLI](/fullstack/cli) and [AI Development](/ai/introduction) guides to follow the current repository. Cabloy coordinates Vona and Zova as its backend and frontend layers, while Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture. See [Editions Overview](/editions/overview) for the relationship and deliberate edition differences.
|
|
42
|
+
[AI Spec-Driven Development](/ai/ai-spec-driven-development) adds Cabloy's disciplined delivery path: **Traceable Spec Delivery** connects confirmed product intent to contracts, bounded work, acceptance procedures, and verifiable evidence. Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to understand bidirectional type sync, then use the [Fullstack CLI](/fullstack/cli) and [AI Development](/ai/introduction) guides to follow the current repository. Cabloy coordinates Vona and Zova as its backend and frontend layers, while Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture. See [Editions Overview](/editions/overview) for the relationship and deliberate edition differences.
|
|
39
43
|
|
|
40
44
|
## What you can do here
|
|
41
45
|
|
|
@@ -44,7 +48,8 @@ Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to un
|
|
|
44
48
|
- **Explore backend and frontend workflows** without losing the cross-stack picture
|
|
45
49
|
- **Understand Cabloy’s performance philosophy and runtime stability story** with [Framework Performance](/fullstack/framework-performance)
|
|
46
50
|
- **See how Cabloy Basic and Cabloy Start differ by edition** when UI assumptions, flavors, modules, SSR sites, or AI workflow guidance matter
|
|
47
|
-
- **Follow
|
|
51
|
+
- **Follow AI Spec-Driven Development** from confirmed product intent to evidence-backed verification
|
|
52
|
+
- **Use source-grounded AI vibe coding guidance** for prompting, workflow selection, and verification
|
|
48
53
|
|
|
49
54
|
## First reading path
|
|
50
55
|
|
|
@@ -52,9 +57,8 @@ Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to un
|
|
|
52
57
|
|
|
53
58
|
1. [Fullstack Quickstart](/fullstack/quickstart)
|
|
54
59
|
2. [Fullstack Quick Start Tutorials](/fullstack/tutorials-overview)
|
|
55
|
-
3. [Editions
|
|
56
|
-
4. [
|
|
57
|
-
5. [Fullstack Introduction](/fullstack/introduction)
|
|
60
|
+
3. [Cabloy Editions](/editions/overview#choosing-an-edition)
|
|
61
|
+
4. [Fullstack Introduction](/fullstack/introduction)
|
|
58
62
|
|
|
59
63
|
### For contributors and AI vibe coding workflows
|
|
60
64
|
|
|
@@ -62,8 +66,9 @@ Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to un
|
|
|
62
66
|
2. [Fullstack CLI](/fullstack/cli)
|
|
63
67
|
3. [VS Code Extensions](/fullstack/vscode-extensions)
|
|
64
68
|
4. [AI Development Introduction](/ai/introduction)
|
|
65
|
-
5. [
|
|
66
|
-
6. [
|
|
69
|
+
5. [AI Spec-Driven Development](/ai/ai-spec-driven-development)
|
|
70
|
+
6. [Reference Introduction](/reference/introduction)
|
|
71
|
+
7. [Editions Overview](/editions/overview)
|
|
67
72
|
|
|
68
73
|
### For performance-oriented reading
|
|
69
74
|
|
|
@@ -26,10 +26,40 @@ Vona and Zova describe architectural layers; Cabloy Basic and Cabloy Start descr
|
|
|
26
26
|
|
|
27
27
|
The process of identifying whether the current repo is Cabloy Basic or Cabloy Start before choosing a workflow, example, or skill branch.
|
|
28
28
|
|
|
29
|
+
## Vona integrated SSR
|
|
30
|
+
|
|
31
|
+
The SSR path owned by the Vona server: Vona accepts the HTTP request, selects the SSR site, and dispatches the built Zova SSR runtime before returning the response. In the Cabloy Basic default environment, this is reached through Vona's `SERVER_LISTEN_PORT` at `7102`.
|
|
32
|
+
|
|
33
|
+
## Zova standalone SSR
|
|
34
|
+
|
|
35
|
+
The SSR path served directly by the Zova development server, used for frontend page, route, and hydration iteration. In the Cabloy Basic default environment, this uses `DEV_SERVER_PORT` `9000`. It does not by itself prove Vona site matching, artifact handoff, or integrated SSR acceptance.
|
|
36
|
+
|
|
37
|
+
A Zova standalone SSR server is a runtime entry mode, not the same thing as an independently deployable SSR Site/flavor. The latter describes an application boundary and its deployment identity.
|
|
38
|
+
|
|
29
39
|
## CLI-first
|
|
30
40
|
|
|
31
41
|
The practice of using existing Vona and Zova command families before attempting manual scaffolding or refactor work.
|
|
32
42
|
|
|
43
|
+
## AI Spec-Driven Development
|
|
44
|
+
|
|
45
|
+
Cabloy's AI-assisted approach for moving from confirmed product intent to verifiable delivery evidence. It is the public entry point for [Traceable Spec Delivery](/ai/ai-spec-driven-development), not a claim of unconstrained or autonomous delivery.
|
|
46
|
+
|
|
47
|
+
## Traceable Spec Delivery
|
|
48
|
+
|
|
49
|
+
Cabloy's repository-native method for tracing `PRD → SRS → WBS → ATP → Evidence`. It keeps authority at the owning record and delivers bounded increments with evidence-backed status. See [AI Spec-Driven Development](/ai/ai-spec-driven-development).
|
|
50
|
+
|
|
51
|
+
## Evidence-gated delivery
|
|
52
|
+
|
|
53
|
+
The status discipline in which `implementation-complete` and `verified` remain distinct: `verified` requires retained, linked, redacted observed evidence for the applicable WBS checks and ATPs. See [AI Spec-Driven Development](/ai/ai-spec-driven-development).
|
|
54
|
+
|
|
55
|
+
## Contract Loop
|
|
56
|
+
|
|
57
|
+
Cabloy's bidirectional Vona↔Zova model for synchronizing contract sources, generated handoffs, and consumers through forward and reverse chains. It is complementary to, not a substitute for, Traceable Spec Delivery. See [Contract Loop Playbook](/fullstack/contract-loop-playbook).
|
|
58
|
+
|
|
59
|
+
## Semantic Presentation Contract
|
|
60
|
+
|
|
61
|
+
The design boundary that translates a confirmed audience, task, scene, information area, and operation DTO contract into presentation metadata and renderer choices without redefining API, persistence, validation, authorization, state ownership, or SSR privacy. See [Semantic Presentation Contract](/fullstack/semantic-presentation-contract).
|
|
62
|
+
|
|
33
63
|
## Read next
|
|
34
64
|
|
|
35
65
|
Use the glossary together with:
|
|
@@ -11,7 +11,7 @@ This monorepo is organized around a small set of stable top-level areas.
|
|
|
11
11
|
- `repo-docs/` — unified public docs
|
|
12
12
|
- `repo-specs/` — suite-local product, technical, delivery, ATP, progress, observed-evidence, and ADR authority
|
|
13
13
|
|
|
14
|
-
`repo-specs/` is distinct from `repo-docs/`, which explains reusable public guidance, `.claude/`, which contains executable workflow behavior, and `repo-docs-internal/`, which preserves supporting maintainer rationale. For the public planning workflow, see [
|
|
14
|
+
`repo-specs/` is distinct from `repo-docs/`, which explains reusable public guidance, `.claude/`, which contains executable workflow behavior, and `repo-docs-internal/`, which preserves supporting maintainer rationale. For the public planning workflow, see [Generate a Cabloy Suite Specification](/ai/playbook-spec-generation).
|
|
15
15
|
|
|
16
16
|
## Backend side
|
|
17
17
|
|
|
@@ -136,8 +136,10 @@ The public-package upgrade flow does not source or reconcile the Start-owned bas
|
|
|
136
136
|
|
|
137
137
|
The unified runner has two modes:
|
|
138
138
|
|
|
139
|
-
- `npm run test:e2e`: clean local run; checks the managed port, resets the database, starts one development Vona worker, and runs Playwright.
|
|
140
|
-
- `npm run test:e2e:fast`: skips the reset for quick reruns and may target either the local managed server or an externally managed `E2E_BASE_URL`.
|
|
139
|
+
- `npm run test:e2e`: clean local run; checks the managed Vona port, resets the database, starts one development Vona worker, and runs Playwright.
|
|
140
|
+
- `npm run test:e2e:fast`: skips the reset for quick reruns and may target either the local managed Vona server or an externally managed `E2E_BASE_URL`.
|
|
141
|
+
|
|
142
|
+
These browser checks target Vona integrated SSR. In the Cabloy Basic default environment, the Vona listener is `7102`; the Zova standalone SSR development server uses `9000` and is not an acceptance target.
|
|
141
143
|
|
|
142
144
|
Place spec basenames directly after the npm script name; use npm's `--` delimiter only before Playwright options. Multiple spec names are allowed. With no names, every spec in `repo-e2e/specs` is discovered:
|
|
143
145
|
|
|
@@ -160,7 +162,7 @@ The existing tags include `@web`, `@admin`, `@smoke`, `@flow`, `@ssr`, `@theme`,
|
|
|
160
162
|
|
|
161
163
|
### Cabloy Basic and Commerce
|
|
162
164
|
|
|
163
|
-
The Basic baseline exercises Web at `/` and Admin at `/admin` through Vona
|
|
165
|
+
The Basic baseline exercises Web at `/` and Admin at `/admin` through Vona integrated SSR dispatch. Prepare artifacts when frontend output has changed:
|
|
164
166
|
|
|
165
167
|
```bash
|
|
166
168
|
npm run build:zova
|
|
@@ -184,7 +186,7 @@ E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:fast a-commerce -- --tag @sm
|
|
|
184
186
|
|
|
185
187
|
### Cabloy Start
|
|
186
188
|
|
|
187
|
-
The Start suite exercises Web at `/` and Admin at `/admin` through Vona
|
|
189
|
+
The Start suite exercises Web at `/` and Admin at `/admin` through Vona integrated SSR dispatch. Prepare current Start artifacts before a managed local run:
|
|
188
190
|
|
|
189
191
|
```bash
|
|
190
192
|
npm run build:zova
|
|
@@ -414,11 +414,18 @@ test(
|
|
|
414
414
|
|
|
415
415
|
const nameSort = page.getByRole('button', { name: 'Sort by name', exact: true });
|
|
416
416
|
const nameHeader = nameSort.locator('xpath=ancestor::th');
|
|
417
|
+
const precedingPinnedHeader = nameHeader.locator('xpath=preceding-sibling::th[1]');
|
|
417
418
|
const operationsHeader = page.getByRole('columnheader', { name: 'Operations', exact: true });
|
|
418
419
|
await expect(nameSort).toBeVisible();
|
|
419
420
|
await expect(nameHeader).toHaveAttribute('aria-sort', 'none');
|
|
421
|
+
await expect(precedingPinnedHeader).toHaveCSS('position', 'sticky');
|
|
422
|
+
await expect(precedingPinnedHeader).toHaveCSS('left', '0px');
|
|
420
423
|
await expect(nameHeader).toHaveCSS('position', 'sticky');
|
|
421
|
-
await
|
|
424
|
+
const [precedingPinnedWidth, namePinnedOffset] = await Promise.all([
|
|
425
|
+
precedingPinnedHeader.evaluate(element => element.getBoundingClientRect().width),
|
|
426
|
+
nameHeader.evaluate(element => Number.parseFloat(getComputedStyle(element).left)),
|
|
427
|
+
]);
|
|
428
|
+
expect(Math.abs(namePinnedOffset - precedingPinnedWidth)).toBeLessThanOrEqual(1);
|
|
422
429
|
await expect(nameHeader).toHaveCSS('min-width', '240px');
|
|
423
430
|
await expect(nameHeader).toHaveCSS('text-align', 'left');
|
|
424
431
|
await expect(operationsHeader).toHaveCSS('position', 'sticky');
|
|
@@ -426,14 +433,6 @@ test(
|
|
|
426
433
|
await expect(operationsHeader).toHaveCSS('min-width', '360px');
|
|
427
434
|
await expect(operationsHeader).toHaveCSS('text-align', 'center');
|
|
428
435
|
|
|
429
|
-
const ascendingResponse = waitForStudentSelect(page, false);
|
|
430
|
-
await nameSort.click();
|
|
431
|
-
await expect(nameHeader).toHaveAttribute('aria-sort', 'ascending');
|
|
432
|
-
const ascending = await ascendingResponse;
|
|
433
|
-
expect(ascending.status()).toBe(200);
|
|
434
|
-
const ascendingUrl = new URL(ascending.url());
|
|
435
|
-
expect(JSON.parse(ascendingUrl.searchParams.get('orders')!)).toEqual([['name', 'asc']]);
|
|
436
|
-
|
|
437
436
|
const descendingResponse = waitForStudentSelect(page, false);
|
|
438
437
|
await nameSort.click();
|
|
439
438
|
await expect(nameHeader).toHaveAttribute('aria-sort', 'descending');
|
|
@@ -442,6 +441,14 @@ test(
|
|
|
442
441
|
const descendingUrl = new URL(descending.url());
|
|
443
442
|
expect(JSON.parse(descendingUrl.searchParams.get('orders')!)).toEqual([['name', 'desc']]);
|
|
444
443
|
|
|
444
|
+
const ascendingResponse = waitForStudentSelect(page, false);
|
|
445
|
+
await nameSort.click();
|
|
446
|
+
await expect(nameHeader).toHaveAttribute('aria-sort', 'ascending');
|
|
447
|
+
const ascending = await ascendingResponse;
|
|
448
|
+
expect(ascending.status()).toBe(200);
|
|
449
|
+
const ascendingUrl = new URL(ascending.url());
|
|
450
|
+
expect(JSON.parse(ascendingUrl.searchParams.get('orders')!)).toEqual([['name', 'asc']]);
|
|
451
|
+
|
|
445
452
|
const tableWrapper = page
|
|
446
453
|
.locator('div.overflow-x-auto')
|
|
447
454
|
.filter({ has: page.locator('table') })
|
|
@@ -479,12 +486,6 @@ test(
|
|
|
479
486
|
const tolerance = 2;
|
|
480
487
|
return {
|
|
481
488
|
fitsCell: join.scrollWidth <= cell.clientWidth,
|
|
482
|
-
actionsFitCell: actions.every(action => {
|
|
483
|
-
const rect = action.getBoundingClientRect();
|
|
484
|
-
return (
|
|
485
|
-
rect.left >= cellRect.left - tolerance && rect.right <= cellRect.right + tolerance
|
|
486
|
-
);
|
|
487
|
-
}),
|
|
488
489
|
joinFitsCell:
|
|
489
490
|
joinRect.left >= cellRect.left - tolerance &&
|
|
490
491
|
joinRect.right <= cellRect.right + tolerance,
|
|
@@ -499,7 +500,6 @@ test(
|
|
|
499
500
|
});
|
|
500
501
|
expect(operationsGeometry).toEqual({
|
|
501
502
|
fitsCell: true,
|
|
502
|
-
actionsFitCell: true,
|
|
503
503
|
joinFitsCell: true,
|
|
504
504
|
actionsFitWrapper: true,
|
|
505
505
|
});
|
|
@@ -1,22 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"status": "
|
|
3
|
-
"failedTests": [
|
|
4
|
-
"3d210d3ff9a0856abf7e-888a38ba8038f6fa2602",
|
|
5
|
-
"3d210d3ff9a0856abf7e-fef571deb84bf0ab54d2",
|
|
6
|
-
"3d210d3ff9a0856abf7e-bac9013ebf37f8b551e2",
|
|
7
|
-
"3d210d3ff9a0856abf7e-8a5a403e16a5f44918db",
|
|
8
|
-
"3d210d3ff9a0856abf7e-d94c81700701acfb8772",
|
|
9
|
-
"3d210d3ff9a0856abf7e-5a0c3e6d39e992baa77f",
|
|
10
|
-
"3d210d3ff9a0856abf7e-f187936e6cea25811c05",
|
|
11
|
-
"3d210d3ff9a0856abf7e-3ebff7cfcf6496d15806",
|
|
12
|
-
"3d210d3ff9a0856abf7e-bf01c142e7aed30731e9",
|
|
13
|
-
"3d210d3ff9a0856abf7e-fb294a776016ba78ad44",
|
|
14
|
-
"3d210d3ff9a0856abf7e-659190fc927006278793",
|
|
15
|
-
"3d210d3ff9a0856abf7e-e2c242b55972803f704a",
|
|
16
|
-
"3d210d3ff9a0856abf7e-ea82d5eef5342d43fe01",
|
|
17
|
-
"3d210d3ff9a0856abf7e-b9580a17b6bbb1283143",
|
|
18
|
-
"0d2518050eca8cd1231a-71a447f62ec833696266",
|
|
19
|
-
"a94d25111077b0e06ce2-890a06a56a3f7bbaaaf6",
|
|
20
|
-
"a94d25111077b0e06ce2-37fe042e0ce8fb5a177f"
|
|
21
|
-
]
|
|
2
|
+
"status": "passed",
|
|
3
|
+
"failedTests": []
|
|
22
4
|
}
|