@manhd_d/ai-harness 0.14.0 → 0.15.0
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/CHANGELOG.md +43 -0
- package/README.md +21 -9
- package/adapters/react-native/adapter.yaml +1 -1
- package/adapters/react-native/skills/harness-react-native-behavior-testing/SKILL.md +9 -0
- package/adapters/react-nextjs/adapter.yaml +1 -1
- package/adapters/react-nextjs/skills/harness-react-nextjs-behavior-testing/SKILL.md +9 -0
- package/capabilities/product/capability.json +1 -1
- package/capabilities/product/workflows/idea-to-prd.md +15 -0
- package/capabilities/product/workflows/idea-to-prd.workflow.json +82 -0
- package/cli/adapters.js +1 -1
- package/cli/agents.js +14 -5
- package/cli/capabilities.js +2 -1
- package/cli/end-user.js +30 -0
- package/cli/environment.js +2 -0
- package/cli/evaluation-contract.js +11 -1
- package/cli/files.js +7 -2
- package/cli/harness.js +53 -11
- package/cli/journey-evidence.js +34 -0
- package/cli/kiro.js +15 -0
- package/cli/knowledge.js +104 -0
- package/cli/main.js +60 -22
- package/cli/portable-config.js +6 -3
- package/cli/project-decisions.js +47 -0
- package/cli/readiness.js +82 -41
- package/cli/setup.js +66 -0
- package/cli/skill-requirements.js +47 -0
- package/cli/start.js +15 -2
- package/cli/structured.js +65 -0
- package/cli/sync-integrations.js +49 -0
- package/cli/verification-report.js +9 -5
- package/cli/verification.js +7 -2
- package/cli/workflow.js +76 -0
- package/core/agents/orchestrator.md +1 -1
- package/core/agents/test-engineer.md +4 -2
- package/core/checks/verification.json +12 -0
- package/core/evals/cases.json +75 -1
- package/core/rules/context.md +9 -0
- package/core/skills/harness-end-user-testing/SKILL.md +55 -0
- package/core/skills/harness-review/SKILL.md +4 -0
- package/core/skills/harness-spec/SKILL.md +3 -1
- package/core/skills/harness-start/SKILL.md +66 -0
- package/core/skills/harness-verification/SKILL.md +2 -0
- package/core/workflows/adaptive-verification.md +5 -0
- package/core/workflows/agent-routing.md +6 -0
- package/core/workflows/approvals.schema.json +62 -0
- package/core/workflows/clarification.md +6 -1
- package/core/workflows/continuous-development.md +5 -0
- package/core/workflows/end-user-acceptance.md +36 -0
- package/core/workflows/greenfield-setup.md +27 -0
- package/core/workflows/project-setup.md +13 -2
- package/core/workflows/seed.md +25 -0
- package/core/workflows/spec-to-code.md +19 -8
- package/core/workflows/spec-to-code.workflow.json +99 -0
- package/core/workflows/workflow.schema.json +113 -0
- package/docs/README.md +8 -0
- package/docs/adaptive-verification.md +10 -1
- package/docs/agent-configuration.md +7 -0
- package/docs/agent-handoffs.md +6 -1
- package/docs/architecture.md +43 -3
- package/docs/cli.md +39 -4
- package/docs/configuration-backup.md +10 -2
- package/docs/conformance-runner.md +64 -0
- package/docs/end-to-end-workflow.md +4 -0
- package/docs/end-user-testing.md +128 -0
- package/docs/frontend-mobile.md +7 -0
- package/docs/getting-started.md +17 -5
- package/docs/harness-maintenance.md +1 -0
- package/docs/i18n/README.es.md +17 -7
- package/docs/i18n/README.vi.md +18 -8
- package/docs/i18n/README.zh-CN.md +17 -7
- package/docs/project-configuration.md +6 -0
- package/docs/python-installation.md +85 -0
- package/docs/session-onboarding.md +215 -0
- package/docs/skill-matrix.md +5 -3
- package/docs/start.md +7 -2
- package/docs/tool-setup/README.md +13 -14
- package/docs/tool-setup/claude-code.md +10 -0
- package/docs/tool-setup/codex.md +10 -0
- package/docs/tool-setup/copilot.md +10 -0
- package/docs/tool-setup/cursor.md +10 -0
- package/docs/tool-setup/gemini-cli.md +10 -0
- package/docs/tool-setup/kiro.md +112 -38
- package/docs/versioning.md +56 -0
- package/docs/workflow-contract.md +66 -0
- package/evals/README.md +7 -0
- package/harness.yaml +13 -1
- package/package.json +7 -3
- package/scripts/conformance-runner.js +119 -0
- package/scripts/score-eval.js +3 -1
- package/templates/AGENTS.md +6 -1
- package/templates/decisions.json +4 -0
- package/templates/local.md +21 -0
- package/templates/openspec/approvals.json +5 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"additionalProperties": false,
|
|
4
|
+
"properties": {
|
|
5
|
+
"schema_version": {
|
|
6
|
+
"const": 1
|
|
7
|
+
},
|
|
8
|
+
"id": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
11
|
+
},
|
|
12
|
+
"stages": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"minItems": 1,
|
|
15
|
+
"maxItems": 64,
|
|
16
|
+
"items": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"properties": {
|
|
20
|
+
"id": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
23
|
+
},
|
|
24
|
+
"owner": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$"
|
|
27
|
+
},
|
|
28
|
+
"outputs": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"maxItems": 64,
|
|
31
|
+
"uniqueItems": true,
|
|
32
|
+
"items": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[A-Za-z0-9._/-]+$"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"next": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"maxItems": 64,
|
|
40
|
+
"uniqueItems": true,
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"on_reject": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
49
|
+
},
|
|
50
|
+
"on_fail": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
53
|
+
},
|
|
54
|
+
"entry_gate": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"properties": {
|
|
58
|
+
"deterministic": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"maxItems": 64,
|
|
61
|
+
"uniqueItems": true,
|
|
62
|
+
"items": {
|
|
63
|
+
"enum": [
|
|
64
|
+
"spec-structure",
|
|
65
|
+
"decisions-resolved",
|
|
66
|
+
"tasks-present",
|
|
67
|
+
"tasks-complete",
|
|
68
|
+
"verification-evidence",
|
|
69
|
+
"artifact-impact",
|
|
70
|
+
"outputs-present"
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"approval_from": {
|
|
75
|
+
"type": "string"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"required": []
|
|
79
|
+
},
|
|
80
|
+
"approval": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"properties": {
|
|
84
|
+
"role": {
|
|
85
|
+
"enum": [
|
|
86
|
+
"spec-owner",
|
|
87
|
+
"product-owner",
|
|
88
|
+
"reviewer"
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"required": [
|
|
93
|
+
"role"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"required": [
|
|
98
|
+
"id",
|
|
99
|
+
"owner",
|
|
100
|
+
"next"
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"required": [
|
|
106
|
+
"schema_version",
|
|
107
|
+
"id",
|
|
108
|
+
"stages"
|
|
109
|
+
],
|
|
110
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
111
|
+
"$id": "https://github.com/manh0303/ai-harness/workflow.schema.json",
|
|
112
|
+
"description": "Shape contract. Consumers also validate unique stage IDs, registered owners, transitions, forward DAG and approval sources."
|
|
113
|
+
}
|
package/docs/README.md
CHANGED
|
@@ -48,3 +48,11 @@ See [Adaptive verification and TechSpec](adaptive-verification.md) for read-only
|
|
|
48
48
|
|
|
49
49
|
- [Start theo input hiện có](start.md)
|
|
50
50
|
- [Lưu cấu hình, backup, cài lại và chuyển dự án](configuration-backup.md)
|
|
51
|
+
|
|
52
|
+
- [Kiểm thử như người dùng thật: browser/device/CLI/API](end-user-testing.md)
|
|
53
|
+
|
|
54
|
+
- [Session onboarding, seed, prerequisites và role extensions](session-onboarding.md)
|
|
55
|
+
|
|
56
|
+
- [pip/offline installation](python-installation.md)
|
|
57
|
+
- [Workflow contracts and approval records](workflow-contract.md)
|
|
58
|
+
- [Opt-in conformance runner](conformance-runner.md)
|
|
@@ -40,7 +40,7 @@ Evidence is `{path,sha256}` with a real local regular file, maximum 1 MiB. Asser
|
|
|
40
40
|
|
|
41
41
|
Supported operators: equal, not-equal, contains, type. Layers: transport, schema, business, state, authorization, result. Assertion basis must reference the scenario's requirement. Optional typed observed must match raw JSON. Expected values come from reviewed AC/contracts, never copied from observations just to pass.
|
|
42
42
|
|
|
43
|
-
PASSED requires successful execution receipt, nonempty matching assertions, allowed error semantics and successful mutation cleanup. API/backend-e2e/business-workflow/authorization/security also require a nontransport assertion. `error: {kind,message}` distinguishes timeout/network/http/application/assertion/environment. `expected_error` can only name http/application and still needs assertions; arbitrary catch is never success. Contradictory status is rejected. FAILED dominates the overall result, then BLOCKED, then NOT_RUN or missing coverage. A requirement is VERIFIED only if all its linked scenarios pass; otherwise UNVERIFIED. Empty coverage cannot pass.
|
|
43
|
+
PASSED requires successful execution receipt, nonempty matching assertions, allowed error semantics and successful mutation cleanup. API/backend-e2e/business-workflow/authorization/security/browser-e2e/mobile-e2e/cli-e2e also require a nontransport assertion. `error: {kind,message}` distinguishes timeout/network/http/application/assertion/environment. `expected_error` can only name http/application and still needs assertions; arbitrary catch is never success. Contradictory status is rejected. FAILED dominates the overall result, then BLOCKED, then NOT_RUN or missing coverage. A requirement is VERIFIED only if all its linked scenarios pass; otherwise UNVERIFIED. Empty coverage cannot pass.
|
|
44
44
|
|
|
45
45
|
Digests detect evidence drift. Execution receipts and semantic layer labels are producer-declared: validation does not authenticate that a command ran, a requirement is correct, cleanup truly occurred or the recorded revision matches source. Independently inspect raw logs/source and business assertions. Redact secrets before reports; automatic credential screening is limited and does not replace review. Paths/symlinks and oversized evidence fail safely.
|
|
46
46
|
|
|
@@ -57,3 +57,12 @@ Use test-owned UUIDs and isolated fixtures, bounded retries/timeouts and cleanup
|
|
|
57
57
|
Live agent evaluation is BLOCKED until an intended host/model and authorized budget are available. Reuse Core/Product cases via `aih eval --scope all` and the existing eval rubric; run the same requirement/code fixtures with baseline and candidate, record versions and raw evidence, compare success, denied effects, gaps, measured latency/tokens/cost. Unscored cases remain unscored. See [evaluation guide](../evals/README.md).
|
|
58
58
|
|
|
59
59
|
Reference review reused generic lifecycle, role/state/error and selective-maintenance patterns. Hardcoded project ports/accounts, database mutation snippets, kill-by-port, false expected-error success and CRM-specific contracts were deliberately excluded.
|
|
60
|
+
|
|
61
|
+
## End-user verification target
|
|
62
|
+
|
|
63
|
+
For user-facing acceptance, use [End-user testing](end-user-testing.md). Adaptive discovery now exports
|
|
64
|
+
end_user_acceptance hints and a host handoff. Requirement verification_target=end-user requires a
|
|
65
|
+
web/mobile/cli/api surface; a matching passing journey using actual interface interaction and
|
|
66
|
+
real/not-applicable dependencies must exist. Mock/unknown or another interface cannot satisfy it.
|
|
67
|
+
Existing behavior-only schema-1 reports remain valid. Optional journey attachments use separate
|
|
68
|
+
bounded binary digests rather than JSON assertion evidence; the guide defines limits and semantics.
|
|
@@ -101,3 +101,10 @@ budget meter is inferred from model tiers, maxRounds or concurrency. See [Agent
|
|
|
101
101
|
## Agent-first defaults and declarations (unreleased)
|
|
102
102
|
|
|
103
103
|
New seeds use host/host-default so the actual host model remains selected; old agents.json is preserved. Claude host init offers native aliases only when absent. aih agents resolves canonical role IDs and required/optional skill preferences. Optional execution.autonomy and execution.budget are validated declarations, not execution permission or quota enforcement. Checkpoint real usage or unknown; never infer cost or auto-escalate. See [Agent-first guide](agent-first.md).
|
|
104
|
+
|
|
105
|
+
## Project role extensions
|
|
106
|
+
|
|
107
|
+
Role overrides can add `extensions: ["plugins/project/agents/security-reviewer.md"]`.
|
|
108
|
+
`aih agents` exports core-first contract_load_order and blocks missing extensions. The host loads
|
|
109
|
+
them in order, preserving core security and reconciling conflicts. Extensions do not transfer to
|
|
110
|
+
another project. See [session contracts](session-onboarding.md#role-extensions).
|
package/docs/agent-handoffs.md
CHANGED
|
@@ -22,7 +22,7 @@ including reused public APIs and unavailable browser/native checks; retain the s
|
|
|
22
22
|
| [documentation](../core/agents/documentation.md) | Verified sources and decisions | Source-linked document diff and quality evidence | Invent approval or unperformed verification |
|
|
23
23
|
| [planner](../core/agents/planner.md) | Scope, approved requirements, repo map | OpenSpec design/tasks/test outline | Implement ngoài scope |
|
|
24
24
|
| [implementer](../core/agents/implementer.md) | Spec, tasks, repo, adapter | Code slice và actual test evidence | Merge/deploy |
|
|
25
|
-
| [test-engineer](../core/agents/test-engineer.md) | AC, diff, contracts |
|
|
25
|
+
| [test-engineer](../core/agents/test-engineer.md) | AC, diff, contracts | Actual user journeys, outcomes/evidence, real/mocked scope and blockers | Tuyên bố pass khi chưa chạy |
|
|
26
26
|
| [security-reviewer](../core/agents/security-reviewer.md) | Auth/data scope/tools/migration | Threats, mitigations và review findings | Bỏ qua chính sách quyền |
|
|
27
27
|
| [reviewer](../core/agents/reviewer.md) | Diff, spec, findings/evidence | Review recommendation và residual risk | Tự merge PR |
|
|
28
28
|
|
|
@@ -108,3 +108,8 @@ Use [Continuous development](continuous-development.md). Store baseline/tested r
|
|
|
108
108
|
## Agent-first routing and PM aliases
|
|
109
109
|
|
|
110
110
|
[Canonical Project Manager](../core/agents/project-manager.md) owns delivery. Product/Delivery PM IDs are compatibility aliases; route by canonical_id, not separate workers. Analysis/Discovery agents use canonical Product contracts above. Preferred skills are explicit; optional perspectives need not be installed. See [Agent-first migration](agent-first.md).
|
|
111
|
+
|
|
112
|
+
For end-user QA, the existing test-engineer uses Core harness-end-user-testing and
|
|
113
|
+
[end-user acceptance](end-user-testing.md). Pass app entry/environment, actor references, AC surface,
|
|
114
|
+
actual interactions/outcomes, redacted trace/screenshot/report digests, dependency scope and cleanup.
|
|
115
|
+
These receipts do not supply business-owner UAT approval or model-compliance evaluation.
|
package/docs/architecture.md
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Maintainer entry point: [Harness maintenance and impact matrix](harness-maintenance.md).
|
|
4
4
|
|
|
5
5
|
AI Harness is a versioned instruction and workflow distribution framework. Its executable part is a
|
|
6
|
-
local installer and integrity checker
|
|
6
|
+
local installer and integrity checker, with a separate opt-in conformance host driver.
|
|
7
|
+
It is not an LLM gateway, an orchestration server or a sandbox.
|
|
7
8
|
|
|
8
9
|
| Layer | Responsibility | Owner |
|
|
9
10
|
| --- | --- | --- |
|
|
@@ -69,9 +70,11 @@ See docs/adapters.md for the strict JSON-compatible YAML contract. Detection is
|
|
|
69
70
|
checks are advisory and never executed. Installed capabilities are read from the locked snapshot, not
|
|
70
71
|
from the latest global CLI source. Core TDD/debug/review are not duplicated in adapters.
|
|
71
72
|
|
|
72
|
-
## npm distribution
|
|
73
|
+
## npm and Python distribution
|
|
73
74
|
The package exposes bin/aih.js as `aih`. It uses native JavaScript ES modules and Node.js built-ins:
|
|
74
|
-
|
|
75
|
+
the npm executable has no runtime dependency, network client or install hook. The pip distribution
|
|
76
|
+
adds a thin Python launcher for the same JavaScript CLI; Node.js 22+ remains required. Its wheel
|
|
77
|
+
contains the shared package allowlist, with no npm/npx invocation or Python runtime dependencies.
|
|
75
78
|
Source paths resolve relative to the package, not cwd. The target defaults to cwd. Local node_modules
|
|
76
79
|
installation is an explicit exception to overlap rejection; payload destinations never include node_modules.
|
|
77
80
|
The npm files allowlist ships runtime assets including the hidden OpenSpec template. A smoke test packs
|
|
@@ -166,3 +169,40 @@ saves a before-backup through the same installation guard/rollback machinery. Tr
|
|
|
166
169
|
project/agent preferences and removes repository autonomy. No credentials, machine paths, locked
|
|
167
170
|
payload, custom skills or checkpoint/document contents are exported. Full repo recovery remains Git
|
|
168
171
|
and external-source backup. See [Configuration backup](configuration-backup.md).
|
|
172
|
+
|
|
173
|
+
## End-user acceptance
|
|
174
|
+
|
|
175
|
+
Core test-engineer routes public journeys to harness-end-user-testing and the end-user-acceptance
|
|
176
|
+
workflow. Adaptive CLI exports tool/surface hints only; the host executes actual interfaces. Optional
|
|
177
|
+
schema-1 journey declarations and bounded binary attachment digests qualify explicitly requested
|
|
178
|
+
end-user requirements by matching surface and dependency scope. Receipts are producer declarations,
|
|
179
|
+
not authenticated browser/model execution or UAT approval. No browser dependency/runner enters the CLI.
|
|
180
|
+
See [End-user testing](end-user-testing.md).
|
|
181
|
+
|
|
182
|
+
## Session onboarding and Kiro bridge (unreleased)
|
|
183
|
+
|
|
184
|
+
Core harness-start delegates semantic seed/questions to the host. Optional local.md frontmatter is
|
|
185
|
+
bounded YAML/JSON; legacy prose is preserved. CLI seed stores local source/config hashes in project
|
|
186
|
+
knowledge.json outside the managed lock. --host kiro installs locked native wrappers and SessionStart
|
|
187
|
+
v1; requires are read-only prerequisites, extensions are host loading plans, MCP sync imports aliases
|
|
188
|
+
only. No model/runtime, provider probe, network or shell execution. See [contracts](session-onboarding.md).
|
|
189
|
+
|
|
190
|
+
setup stays read-only by default; setup --apply restores missing shared seeds from the locked installed
|
|
191
|
+
snapshot without changing managed assets or lock. It validates existing and proposed config before
|
|
192
|
+
transactional writes. Optional project-owned decisions.json separates confirmed/proposed/superseded
|
|
193
|
+
project/module choices from per-change decisions. Config backup retains shared decisions, transfer
|
|
194
|
+
omits them, and context freshness includes their digest. Compact start provides orientation only,
|
|
195
|
+
with freshness unchecked. None of these declarations grant permission or prove live host compliance.
|
|
196
|
+
|
|
197
|
+
## Contract, driver and evidence planes
|
|
198
|
+
|
|
199
|
+
| Plane | Harness responsibility | Execution owner |
|
|
200
|
+
| --- | --- | --- |
|
|
201
|
+
| Contract | Workflow stage/entry gate/role/artifact declarations | Harness owns schema; host applies semantics |
|
|
202
|
+
| Driver | Optional separate conformance script; no execution in cli/ | Host or replaceable engine such as Temporal |
|
|
203
|
+
| Evidence | Evaluation/verification/approval record formats | Producer/reviewer owns truth and identity |
|
|
204
|
+
|
|
205
|
+
core:orchestrator is a role, not an engine. JSON contracts currently cover spec-to-code and selected
|
|
206
|
+
Product idea-to-prd; validation/entry readiness neither executes stages nor authenticates approval.
|
|
207
|
+
See [workflow contracts](workflow-contract.md), [conformance driver](conformance-runner.md), and
|
|
208
|
+
[pip/offline distribution](python-installation.md). The non-goal remains: no LLM gateway or server.
|
package/docs/cli.md
CHANGED
|
@@ -13,10 +13,11 @@ Exit 0 means the requested operation succeeded; 1 means validation/I/O/drift fai
|
|
|
13
13
|
| verify | --scope adapters/core/capabilities/all or --adaptive or --report file | Advisory checks, metadata plan or evidence consistency; executed false, no subprocesses |
|
|
14
14
|
| eval | --scope adapters/core/capabilities/all; --report FILE | Emit unscored template or aggregate reviewed report; no model calls |
|
|
15
15
|
| init | --detect OR --adapters a,b; --capabilities a,b; --agent-preset recommended/economy/custom; --source; --dry-run; --allow-major | Install a snapshot and seed project agent preferences; exact rerun without explicit preset is idempotent |
|
|
16
|
-
| update | --source; --dry-run; --allow-major | Update unedited owned files and seed missing project files |
|
|
16
|
+
| update | --host kiro (optional); --source; --dry-run; --allow-major | Update unedited owned files and seed missing project files |
|
|
17
17
|
| check | none | Compare installed files/block with lock and selection; no writes |
|
|
18
|
-
| doctor |
|
|
19
|
-
| setup | --host
|
|
18
|
+
| doctor | --skill NAME (optional) | check plus configured environment/path diagnostics and generic PATH hints; no execution |
|
|
19
|
+
| setup | --host; --apply [--dry-run]; --greenfield | Read-only by default; --apply creates missing user config from installed templates without reinstalling the snapshot |
|
|
20
|
+
| decisions | --scope project/module:name (optional) | Read confirmed/proposed/superseded shared choices; project scope is included in module results; no approval or writes |
|
|
20
21
|
| artifacts | none | Report declared inputs/outputs/storage/write policy and host connection aliases; no discovery or tool calls |
|
|
21
22
|
| ready ID | --stage implement/review | Structural readiness; blocked returns exit 1, ready returns exit 0; no business approval |
|
|
22
23
|
| new-change ID | none | Create an unapproved OpenSpec draft using installed templates |
|
|
@@ -170,7 +171,7 @@ aih agents shows canonical IDs, skill preferences and model declarations. init -
|
|
|
170
171
|
| --- | --- |
|
|
171
172
|
| `aih start` | Terminal: intake ngắn; không TTY: read-only plan; trả host_prompt |
|
|
172
173
|
| `aih start --goal docs --task "Implement requirements" --input docs/requirements --output docs/specs` | Lưu task và seed nguồn/output còn thiếu |
|
|
173
|
-
| `aih backup [--output backups/config.json]` | Export
|
|
174
|
+
| `aih backup [--output backups/config.json]` | Export tối đa 9 file cấu hình dùng chung, gồm decisions.json; không ghi đè archive |
|
|
174
175
|
| `aih restore --from config.json --dry-run` | Kiểm tra schema/digest và xem file/conflict trước ghi |
|
|
175
176
|
| `aih restore --from config.json [--replace]` | Phục hồi cùng dự án, tự backup trước thay file khác nội dung |
|
|
176
177
|
| `aih restore --from config.json --transfer` | Chuyển module/model; bỏ repo autonomy và nguồn/task/domain/command cũ |
|
|
@@ -180,3 +181,37 @@ Tất cả nhận --target. Đường dẫn --from/--output tính từ project r
|
|
|
180
181
|
không đổi target hoặc chờ stdin. Fresh repo restore trước init; installed repo update/check sau khi
|
|
181
182
|
selection đổi. Đọc [Start](start.md) và [Configuration backup](configuration-backup.md) cho giới hạn,
|
|
182
183
|
phục hồi checkpoint và rollback. Các lệnh không truy cập remote, chạy model, cấp quyền hay auto-merge.
|
|
184
|
+
|
|
185
|
+
## End-user acceptance (unreleased)
|
|
186
|
+
|
|
187
|
+
verify --adaptive exports end_user_acceptance with metadata surface/tool candidates, required context,
|
|
188
|
+
Core skill/workflow references and a host prompt. The CLI does not execute interfaces or install tooling.
|
|
189
|
+
verify --report accepts optional schema-1 end-user requirement targets, surface/journey fields and
|
|
190
|
+
separately bounded binary attachment digests. Wrong-surface/mocked/unknown scope cannot satisfy full
|
|
191
|
+
end-user acceptance. See [End-user guide](end-user-testing.md); producer receipts need independent review.
|
|
192
|
+
|
|
193
|
+
## Session onboarding commands
|
|
194
|
+
|
|
195
|
+
See [Kiro quick start](tool-setup/kiro.md) and [schema/ownership](session-onboarding.md).
|
|
196
|
+
|
|
197
|
+
| Command | Options | Effect |
|
|
198
|
+
| --- | --- | --- |
|
|
199
|
+
| init / update | --host kiro | Lock native wrappers + v1 SessionStart; preserve custom host files |
|
|
200
|
+
| start | --host kiro | Read-only host question plan, including TTY |
|
|
201
|
+
| start | --compact [--host kiro] | Short JSON orientation without terminal intake/source scan; freshness is unchecked, no MCP access claim |
|
|
202
|
+
| setup | --apply [--dry-run]; --greenfield | Scaffold missing user config only; existing paths/answers and managed payload/lock stay intact; --greenfield selects host guidance |
|
|
203
|
+
| decisions | --scope module:name | Read project-wide and matching module choices; host must check source applicability |
|
|
204
|
+
| seed | --record OR --check | Plan loading, record reconciled hashes or check freshness; no model calls |
|
|
205
|
+
| doctor | --skill NAME | Check local requires; MCP remains unverified |
|
|
206
|
+
| sync-integrations | --host kiro; --from FILE; --dry-run | Import aliases only; no credentials/server execution/tool inference |
|
|
207
|
+
| change-sidecars ID | none | Add missing external proposal sidecars; no overwrite |
|
|
208
|
+
|
|
209
|
+
New commands require supporting reviewed source/release.
|
|
210
|
+
|
|
211
|
+
## Workflow contract (schema 1)
|
|
212
|
+
|
|
213
|
+
`aih workflow validate` validates locked installed workflows without execution.
|
|
214
|
+
`aih ready <id> --workflow spec-to-code --stage implement` opts into declared entry/approval gates;
|
|
215
|
+
`--workflow idea-to-prd` requires Product. Legacy implement/review without --workflow retain behavior.
|
|
216
|
+
[Contract and approvals](workflow-contract.md). Runner stays separate: [conformance](conformance-runner.md).
|
|
217
|
+
All CLI commands also work through [pip/offline](python-installation.md); Node.js 22+ still required.
|
|
@@ -17,6 +17,7 @@ chỉ dùng với bản đã phát hành có các lệnh đó, hoặc checkout/p
|
|
|
17
17
|
| `.harness/integrations.json` | Tên kết nối của host và phạm vi khai báo | Giữ nguyên |
|
|
18
18
|
| `.harness/environment.json` | Tool/lệnh test và tham chiếu biến môi trường | Giữ nguyên |
|
|
19
19
|
| `.harness/local.md` | Nghiệp vụ, convention và quyết định đã chốt | Giữ nguyên |
|
|
20
|
+
| `.harness/decisions.json` | Quyết định dùng chung: phạm vi, trạng thái, nguồn/lý do và lịch sử thay thế | Giữ nguyên; backup cùng dự án, không transfer |
|
|
20
21
|
| `openspec/config.yaml` | Cấu hình OpenSpec của dự án | Giữ nguyên |
|
|
21
22
|
| `.harness/machine.json` | Đường dẫn chỉ dùng trên máy này | Giữ nguyên, Git ignore; không vào backup cấu hình |
|
|
22
23
|
| `openspec/changes/<id>/` | Spec, tiến độ, checkpoint/history và evidence | Giữ nguyên; backup cùng repo |
|
|
@@ -45,7 +46,7 @@ aih backup --output backups/harness-config.json
|
|
|
45
46
|
```
|
|
46
47
|
|
|
47
48
|
Đường dẫn CLI tính từ project root; không dùng đường dẫn tuyệt đối. CLI từ chối ghi đè backup đã có.
|
|
48
|
-
Archive JSON giữ nguyên bytes UTF-8 của
|
|
49
|
+
Archive JSON giữ nguyên bytes UTF-8 của tối đa 9 file dùng chung ở bảng (nếu hiện có), kèm schema version,
|
|
49
50
|
CLI version và SHA-256 từng file. Digest phát hiện sửa nhầm, không xác thực nguồn backup.
|
|
50
51
|
Review file trước khi chia sẻ; bản backup là plain text và không tự dò/xóa mọi secret bạn có thể đã ghi nhầm.
|
|
51
52
|
Folder mặc định `.harness/backups/` được Git ignore; backup ở đường dẫn khác do bạn quản lý ignore.
|
|
@@ -115,8 +116,15 @@ aih start
|
|
|
115
116
|
```
|
|
116
117
|
|
|
117
118
|
Transfer mang **project.json + agents.json**: adapter/capability và model/reasoning/execution preferences.
|
|
118
|
-
|
|
119
|
+
Quyết định dùng chung trong decisions.json thuộc dự án cũ và không được mang theo.
|
|
120
|
+
Khai báo autonomy và role extensions gắn repo cũ bị loại bỏ. Task, domain facts, nguồn input/output, connection aliases,
|
|
119
121
|
commands, OpenSpec config và state không được chuyển. `start` giúp khai báo lại theo dự án mới.
|
|
120
122
|
Nếu repo mới đã có cấu hình khác, review conflict và chỉ dùng --replace khi muốn thay chúng.
|
|
121
123
|
Model đã khai báo vẫn cần host hỗ trợ; restore không đăng nhập, cấp quyền hoặc gọi API/provider.
|
|
122
124
|
Muốn dùng lại nguồn tài liệu cũ, khai báo rõ nguồn/revision/quyền truy cập tại dự án mới sau review.
|
|
125
|
+
|
|
126
|
+
## Session cache
|
|
127
|
+
|
|
128
|
+
knowledge.json is a reproducible project-owned cache omitted from config archives; full repo backup
|
|
129
|
+
retains it. Reconcile with /harness-start after restore. Extensions/custom host files need repo backup;
|
|
130
|
+
transfer omits old repository extensions as well as autonomy. [Session onboarding](session-onboarding.md).
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Opt-in conformance runner
|
|
2
|
+
|
|
3
|
+
`scripts/conformance-runner.js` là driver ngoài installer. `aih` vẫn không gọi model hoặc shell.
|
|
4
|
+
Driver đầu tiên dùng Claude Code `-p`, theo [official headless docs](https://code.claude.com/docs/en/headless)
|
|
5
|
+
và [CLI reference](https://code.claude.com/docs/en/cli-reference). Cần CLI đã cài/đăng nhập, model access
|
|
6
|
+
và đủ quota; Harness không cài host hoặc cung cấp API key. Live host trong môi trường phát triển
|
|
7
|
+
hiện **NOT_RUN** cho đến khi có transcript thật; fixture tests chỉ kiểm runner/report.
|
|
8
|
+
|
|
9
|
+
Trong checkout/package đã review, trước hết tạo plan (không gọi host):
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
node scripts/conformance-runner.js --out eval-plan --model claude-sonnet-4-6 --judge-model claude-opus-4-6 --harness-commit FULL_40_CHARACTER_SHA --runs 3
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Thay model IDs bằng hai model **khác nhau** mà tài khoản thực sự truy cập được và SHA bằng commit
|
|
16
|
+
source thực tế. Không dùng alias khác cho cùng model. Muốn chạy thật, dùng output directory mới và
|
|
17
|
+
thêm `--execute`. Mặc định core; `--scope all --adapters java-spring --capabilities product` chọn suite
|
|
18
|
+
khác. `--runs` chỉ nhận 3–5; timeout mỗi host/judge mặc định 120 giây.
|
|
19
|
+
|
|
20
|
+
Mỗi case/repetition tạo project fixture riêng, cài bundle + Claude import, chạy prompt, lưu stream-json
|
|
21
|
+
gồm tool events, rồi gọi model judge riêng. Judge không có tools và nhận criteria/transcript như data.
|
|
22
|
+
Host được giới hạn tool Read để kiểm reasoning/loading, không có edit/Bash/remote action. Vì vậy
|
|
23
|
+
không dùng kết quả này để chứng minh code execution, permission enforcement, end-user test, khả năng
|
|
24
|
+
multiagent hoặc hành vi khi host thực sự được quyền merge. Các scenario cần tool/user interaction
|
|
25
|
+
đầy đủ có thể fail/missing evidence trong driver đầu tiên; không nới criteria để tạo PASS.
|
|
26
|
+
|
|
27
|
+
Fixture không mang code/secret của dự án thật. Account/global context do host quản lý; giới hạn flags
|
|
28
|
+
không phải sandbox hay xác thực identity. Runner giữ settings project-only và MCP config rỗng; cần
|
|
29
|
+
kiểm host version/config trước trial. Không thay đổi cấu hình hay session của người dùng.
|
|
30
|
+
|
|
31
|
+
## Evidence và chấm điểm
|
|
32
|
+
|
|
33
|
+
- dataset.json và report-N.json giữ schema 1 hiện có; dataset/bundle hashes khớp `aih eval`.
|
|
34
|
+
- transcript, stderr, judge response và transcript SHA được giữ theo từng case. Progress được ghi sau
|
|
35
|
+
từng case. Interrupted runs giữ những file đã ghi; không có tự replay/checkpoint host session.
|
|
36
|
+
- Report chưa hoàn tất có score null; scorer từ chối thay vì coi là passing. Report hoàn tất có thể
|
|
37
|
+
đưa vào `aih eval --scope core --report /path/report-N.json` **trong fixture có cùng bundle**.
|
|
38
|
+
Cài cùng selection/host/flags rồi kiểm bundle hash; không sửa hash để score một snapshot khác.
|
|
39
|
+
- summary.json báo total/scored/passed, pass_rate = passed/requested và completed_pass_rate =
|
|
40
|
+
passed/scored. Host/judge lỗi không bị loại khỏi denominator requested. Per-case cũng có tỷ lệ này.
|
|
41
|
+
Nếu chưa có score, pass_rate = null; dry plan là NOT_RUN, chạy thiếu là PARTIAL.
|
|
42
|
+
- Human sample audit luôn khởi đầu NOT_RUN. Reviewer phải kiểm mẫu transcript/criteria/judge và mọi
|
|
43
|
+
critical failure, lưu reviewer, case/repetition, revision, findings và nguồn thật trong review riêng.
|
|
44
|
+
|
|
45
|
+
Pass rate là quan sát mẫu nhỏ, không phải độ tin cậy thống kê hay bảo đảm compliance. Judge metadata
|
|
46
|
+
ghi rõ model, source commit, dataset hash, run ID và parameters; human audit không tự được coi là hoàn tất.
|
|
47
|
+
|
|
48
|
+
## Assertions tùy chọn
|
|
49
|
+
|
|
50
|
+
Case vẫn giữ id/prompt/criteria/critical; có thể thêm assertions:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{"id":"no-merge","type":"not-contains","target":"tool-inputs","value":"gh pr merge"}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Type contains/not-contains là so literal tất định; target là transcript hoặc tool-inputs. Dùng
|
|
57
|
+
tool-inputs để tránh hiểu câu “không chạy gh pr merge” là đã merge. Chỉ kiểm tool events đã capture;
|
|
58
|
+
không phát hiện alias/obfuscated command, hoạt động ngoài transcript hoặc chứng minh động cơ model.
|
|
59
|
+
Trong Read-only driver, absence của Bash là hệ quả tool restriction. Criterion ngôn ngữ tự nhiên vẫn
|
|
60
|
+
do judge chấm và cần human audit. Assertion false khiến report fail kể cả criteria đều true; assertion
|
|
61
|
+
đã khai báo phải có đủ boolean scores. Core approval-boundary có ví dụ này.
|
|
62
|
+
|
|
63
|
+
Codex, Cursor, Copilot, Gemini CLI và Kiro có status NOT_RUN, chưa có driver được kiểm chứng.
|
|
64
|
+
Temporal adapter/LLM gateway không nằm trong bản này.
|
|
@@ -131,3 +131,7 @@ carry short source/evidence handoffs. User preferences do not grant runtime perm
|
|
|
131
131
|
## Continuous changes
|
|
132
132
|
|
|
133
133
|
After the first delivery, use [Continuous development](continuous-development.md) for each feature, bugfix, rule change or resume. Reuse the existing change/project map/decision log, reconcile current revisions and record scoped evidence plus next steps.
|
|
134
|
+
|
|
135
|
+
For user-facing verification, load Core harness-end-user-testing and follow
|
|
136
|
+
[End-user acceptance](end-user-testing.md). Exercise actual interface journeys; keep real/mocked
|
|
137
|
+
scope and unavailable tool/account/environment gaps explicit before review.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Kiểm thử như người dùng thật
|
|
2
|
+
|
|
3
|
+
**AI phải thao tác trên ứng dụng đang chạy và đối chiếu kết quả với yêu cầu.** Build/unit/API test
|
|
4
|
+
là phần hỗ trợ; muốn xác nhận một luồng web thì phải chạy qua browser. Đây là workflow của QA
|
|
5
|
+
trong AI host, khác với việc đánh giá độc lập chất lượng model/Harness.
|
|
6
|
+
|
|
7
|
+
Sau init/update vào bản có skill này, giao việc bình thường:
|
|
8
|
+
|
|
9
|
+
> Đọc AGENTS.md. Kiểm thử [tính năng] như người dùng thật theo tài liệu/AC đã chốt.
|
|
10
|
+
> Dùng công cụ hiện có, chạy luồng thành công và lỗi/quyền liên quan. Kiểm tra kết quả sau
|
|
11
|
+
> refresh hoặc mở lại nếu yêu cầu cần lưu dữ liệu. Lưu bằng chứng, sửa lỗi trong scope rồi
|
|
12
|
+
> test lại; báo rõ những gì chưa chạy hoặc bị chặn.
|
|
13
|
+
|
|
14
|
+
Host đọc `harness-end-user-testing` và workflow `end-user-acceptance.md` trước review. Bạn không
|
|
15
|
+
cần tự gọi từng agent; test-engineer có thể chạy tuần tự trong cùng assistant. CLI không tự mở browser,
|
|
16
|
+
khởi động model/server hoặc kết nối account; các thao tác do host được cấp quyền thực hiện.
|
|
17
|
+
|
|
18
|
+
## Cần cung cấp những gì?
|
|
19
|
+
|
|
20
|
+
AI đọc repo và câu trả lời đã lưu trước, chỉ hỏi phần còn thiếu:
|
|
21
|
+
|
|
22
|
+
| Thông tin | Nơi lưu dùng lại |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| Yêu cầu/AC, luồng và kết quả mong đợi | Nguồn chính trong artifacts.json / spec hiện có |
|
|
25
|
+
| URL môi trường test và phạm vi được phép thao tác | `.harness/local.md` |
|
|
26
|
+
| Lệnh start/test/build và tham chiếu môi trường | `.harness/environment.json` |
|
|
27
|
+
| Tên tool browser/MCP trong host, nếu dùng | `.harness/integrations.json` |
|
|
28
|
+
| Tài khoản/role test | Reference trong context; credential giữ riêng ở host |
|
|
29
|
+
| Nơi lưu báo cáo/bằng chứng | Output contract trong artifacts.json hoặc thư mục verification/ đã review |
|
|
30
|
+
|
|
31
|
+
Không copy credentials/cookies vào shared config hoặc PR. Thông tin cấu hình được backup bằng
|
|
32
|
+
cơ chế hiện có; screenshot/trace/report/checkpoint cần backup cùng project/evidence, không nằm trong
|
|
33
|
+
archive cấu hình. Nếu output bắt buộc ở hệ thống ngoài nhưng host không ghi được, trả proposal hoặc
|
|
34
|
+
BLOCKED theo policy, không tự tạo một nguồn canonical cục bộ khác.
|
|
35
|
+
|
|
36
|
+
## AI chọn công cụ theo dự án
|
|
37
|
+
|
|
38
|
+
| Giao diện thực tế | Cách kiểm tra | Giới hạn cần ghi rõ |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| Web/React/Next.js/Astro | Playwright/Cypress đang có hoặc browser tool được host cấp quyền | Browser thật; API mock chỉ chứng minh phạm vi giao diện |
|
|
41
|
+
| React Native/mobile | Runner device/simulator hiện có, ví dụ Detox/Maestro | Browser viewport mobile không chứng minh app native |
|
|
42
|
+
| CLI | Chạy executable/lệnh thật, kiểm tra output và file/state | Unit test của hàm xử lý không thay cho terminal journey |
|
|
43
|
+
| Backend/API-only | Client/API workflow qua public endpoints, role và trạng thái | Không giả tạo một UI để gọi đó là browser E2E |
|
|
44
|
+
| Chỉ tài liệu | Đối chiếu nguồn, yêu cầu và consistency | Không quảng cáo app/runtime E2E đã chạy |
|
|
45
|
+
|
|
46
|
+
Có runner thì dùng tiếp, không cài framework cạnh tranh. Với web chưa có runner, Playwright là một
|
|
47
|
+
phương án đề xuất; lựa chọn và cài dependency/browser thuộc project/host, không do Harness installer.
|
|
48
|
+
Playwright Test và Playwright MCP là hai cách dùng khác nhau: runner thực thi test đã lưu; MCP/browser
|
|
49
|
+
cho host tương tác trực tiếp. Tool alias trong config chưa chứng minh runtime đã kết nối.
|
|
50
|
+
|
|
51
|
+
## Luồng thực thi
|
|
52
|
+
|
|
53
|
+
1. Đọc AC và xác định actor, preconditions, bước thao tác, expected result và fixture cô lập.
|
|
54
|
+
2. Kiểm tra app, browser/device, account và dependency có truy cập thật được không.
|
|
55
|
+
3. Mở app, dùng navigation/control/keyboard thật; API có thể tạo fixture nhưng không thay bước UI.
|
|
56
|
+
4. Chạy happy path và tình huống negative/role/state phù hợp với thay đổi. Không bắt mọi dự án
|
|
57
|
+
test login/CRUD/upload nếu tính năng không có những hành vi đó.
|
|
58
|
+
5. Assert kết quả người dùng nhìn thấy và persistence khi cần; kiểm tra lỗi console/network liên quan.
|
|
59
|
+
6. Lưu JSON observations, ảnh/trace/video/report đã review/redact và cleanup của data tự tạo.
|
|
60
|
+
7. Sửa lỗi được phép trong scope, test lại các luồng bị ảnh hưởng và regression. Không đổi expected
|
|
61
|
+
result hoặc bỏ assertion để khiến test pass; giữ giới hạn vòng retry/repair của host/project.
|
|
62
|
+
8. Handoff AC → actual outcome → evidence → real/mocked scope → PASSED/FAILED/BLOCKED/NOT_RUN.
|
|
63
|
+
|
|
64
|
+
Ví dụ minh họa form có lưu dữ liệu: mở form → nhập giá trị hợp lệ → click Save → kiểm tra dòng mới →
|
|
65
|
+
reload → dòng vẫn còn; nhập giá trị sai → đúng thông báo; actor bị hạn chế → action bị từ chối nếu AC
|
|
66
|
+
quy định. Đây là ví dụ, không phải bộ case áp dụng cứng hoặc kết quả test của một ứng dụng đã chạy.
|
|
67
|
+
|
|
68
|
+
## Plan và bằng chứng
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
aih verify --adaptive
|
|
72
|
+
aih skill harness-end-user-testing
|
|
73
|
+
aih verify --report verification/report.json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Nếu dùng npx, thay `aih` bằng `npx --yes @manhd_d/ai-harness`. Adaptive plan có
|
|
77
|
+
`end_user_acceptance` với gợi ý surface/tools, context còn cần và host_prompt. Đây là metadata plan,
|
|
78
|
+
chưa có thao tác thật. Host cần đọc scoped source và tool runtime để chọn đúng test.
|
|
79
|
+
|
|
80
|
+
Report schema vẫn là 1; requirement cần end-user thêm:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{"id":"AC-1","description":"Item survives reload","source":"approved AC reference","verification_target":"end-user","surface":"web"}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Scenario thêm khai báo, dùng URL thực trong môi trường được phép, không chứa credential:
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{"journey":{"surface":"web","actor":"test-editor","entrypoint":"test-page-reference","interaction":"browser","dependencies":"real","attachments":[]}}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Surface/interaction: web/browser, mobile/device, cli/terminal, api/http. Journey methods:
|
|
93
|
+
browser-e2e/web, mobile-e2e/mobile, cli-e2e/cli; api/backend-e2e/authorization/security dùng api.
|
|
94
|
+
end-user hoặc business-workflow có thể dùng surface thích hợp; unit/component/build không là journey. Dependencies: real, mocked,
|
|
95
|
+
not-applicable hoặc unknown. `not-applicable` chỉ dùng khi dependency thực sự không tồn tại trong
|
|
96
|
+
thiết kế, ví dụ calculator chạy hoàn toàn trong browser; không dùng để che backend mock/không truy cập.
|
|
97
|
+
Một requirement web không VERIFIED nhờ journey API/unit. Nếu backend mock/unknown, scoped assertions
|
|
98
|
+
có thể PASSED nhưng end-user target vẫn UNVERIFIED và overall report NOT_RUN.
|
|
99
|
+
|
|
100
|
+
Attachments tùy chọn: `{kind,path,sha256}` với kind screenshot (.png/.jpg/.jpeg/.webp), trace (.zip),
|
|
101
|
+
video (.webm/.mp4), report (.html/.json). Path tính từ project root; từng file regular không symlink,
|
|
102
|
+
không rỗng, tối đa 50 MiB; tối đa 20 file và 100 MiB tổng mỗi scenario. Binary attachments được kiểm
|
|
103
|
+
tra digest riêng; assertion vẫn đọc JSON evidence ≤1 MiB qua JSON pointer như contract hiện có.
|
|
104
|
+
Không nới giới hạn JSON để đọc binary trace/screenshot. Compress/scope evidence nếu quá giới hạn.
|
|
105
|
+
File-extension/digest chỉ kiểm tra consistency, không giải mã/đánh giá tính đúng của ảnh/trace.
|
|
106
|
+
Review nội dung raw độc lập; binary traces có thể chứa secrets, validator không tự scrub chúng.
|
|
107
|
+
|
|
108
|
+
Report cũ không khai báo target mới vẫn hợp lệ. Browser/mobile/CLI E2E đòi hỏi assertion ngoài transport:
|
|
109
|
+
chỉ HTTP 200 hay process exit 0 không thể là PASSED. Receipt/semantic labels do producer khai báo;
|
|
110
|
+
validator không xác thực rằng Playwright đã chạy hay nguồn revision đúng. Screenshot đơn lẻ không
|
|
111
|
+
thay cho bước/assertion nghiệp vụ và không phải human UAT approval.
|
|
112
|
+
|
|
113
|
+
## Thiếu môi trường
|
|
114
|
+
|
|
115
|
+
Browser executable, device, app URL/start access hoặc account cần thiết bị thiếu → BLOCKED cho luồng
|
|
116
|
+
đó, kèm đúng bước bị chặn và cách xử lý. Chủ động bỏ scope → NOT_RUN với lý do. Tự động hóa được
|
|
117
|
+
thực hiện khi host có tool và quyền; không hứa chạy được mọi app ngay sau một lệnh cài Harness.
|
|
118
|
+
|
|
119
|
+
[Adaptive report contract](adaptive-verification.md) · [Configuration backup](configuration-backup.md).
|
|
120
|
+
|
|
121
|
+
## Nguồn công cụ đã review
|
|
122
|
+
|
|
123
|
+
Official references reviewed 2026-10-14; use the installed project's actual version/configuration:
|
|
124
|
+
[Playwright installation](https://playwright.dev/docs/intro),
|
|
125
|
+
[assertions](https://playwright.dev/docs/test-assertions),
|
|
126
|
+
[locators](https://playwright.dev/docs/locators),
|
|
127
|
+
[trace viewer](https://playwright.dev/docs/trace-viewer),
|
|
128
|
+
[Playwright MCP](https://github.com/microsoft/playwright-mcp).
|
package/docs/frontend-mobile.md
CHANGED
|
@@ -74,3 +74,10 @@ Không có trial ứng dụng/browser/native hoặc live-model benchmark trong n
|
|
|
74
74
|
- [React Native testing](https://reactnative.dev/docs/testing-overview): tách JS component và native/device evidence.
|
|
75
75
|
- [React Navigation auth flow](https://reactnavigation.org/docs/auth-flow/): chỉ áp dụng khi app đang dùng
|
|
76
76
|
React Navigation; giữ version-specific auth/back behavior, không mặc định cài router đó.
|
|
77
|
+
|
|
78
|
+
## End-user journeys
|
|
79
|
+
|
|
80
|
+
React/Next.js and React Native module 1.4.0 connect Core harness-end-user-testing to applicable
|
|
81
|
+
browser/device acceptance, existing runners and optional binary evidence.
|
|
82
|
+
[End-user guide](end-user-testing.md) distinguishes native devices from browser viewport emulation,
|
|
83
|
+
real/mocked dependencies and BLOCKED access; unit/build/API checks cannot replace required UI flows.
|
package/docs/getting-started.md
CHANGED
|
@@ -33,12 +33,19 @@ Với project đã cài, đổi lựa chọn trong `.harness/project.json` rồi
|
|
|
33
33
|
|
|
34
34
|
## 2. Start và mở AI làm việc
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
Chọn `--host codex|claude-code|cursor|copilot|gemini-cli|kiro` khi init. Trong session AI đầu tiên,
|
|
37
|
+
gọi **harness-start** nếu client nhận diện skill; hoặc gửi cùng prompt cho mọi host:
|
|
38
38
|
|
|
39
|
-
> Đọc
|
|
40
|
-
>
|
|
41
|
-
|
|
39
|
+
> Đọc .agents/skills/harness-start/SKILL.md và thực hiện onboarding cho project này.
|
|
40
|
+
> Yêu cầu của tôi: [task].
|
|
41
|
+
|
|
42
|
+
Kiro có `/harness-start`; các host khác có discovery/import riêng trong
|
|
43
|
+
[setup đa IDE](tool-setup/README.md). Agent inspect context, chỉ hỏi điều quan trọng còn thiếu và lưu
|
|
44
|
+
câu trả lời. Không cần interview terminal trước chat. `start --compact --host <host>` là orientation
|
|
45
|
+
read-only; `start` và host_prompt vẫn dùng được khi cần. [Luồng start](start.md).
|
|
46
|
+
|
|
47
|
+
Cài bằng pip/offline cũng dùng **cùng flow**: `aih init --host <host>` rồi harness-start.
|
|
48
|
+
Cần Python 3.9+ và Node 22+, không cần npm; xem [pip/offline](python-installation.md).
|
|
42
49
|
|
|
43
50
|
Bạn có thể giao ý tưởng, tài liệu BA hoặc task code. Không cần gọi từng agent/skill.
|
|
44
51
|
Với web/mobile, giao màn hình hoặc tính năng theo common/API/state/navigation hiện có; [skills đã có](frontend-mobile.md).
|
|
@@ -86,3 +93,8 @@ canonical owners and source-write scope. Record them in project-owned artifacts.
|
|
|
86
93
|
`npx --yes @manhd_d/ai-harness artifacts` shows declarations. See [Artifact contract](artifact-contract.md).
|
|
87
94
|
|
|
88
95
|
For successive features, bugfixes or a resumed session, give the host a normal request. It follows [Continuous development](continuous-development.md), rechecks the baseline and maintains only affected docs.
|
|
96
|
+
|
|
97
|
+
## Test như người dùng
|
|
98
|
+
|
|
99
|
+
Giao AI: “Test tính năng này như end user theo AC, thao tác trên giao diện thật, kiểm tra kết quả và
|
|
100
|
+
lưu bằng chứng; báo BLOCKED nếu thiếu tool/môi trường.” [Hướng dẫn và setup cần có](end-user-testing.md).
|
|
@@ -15,6 +15,7 @@ gốc được liên kết bên dưới; không sao chép quy tắc thành nhi
|
|
|
15
15
|
| Artifact / integration contracts | [Artifact contract](artifact-contract.md), [loader](../cli/artifacts.js), [seeds](../templates/artifacts.json) | Preserved project configs → setup/artifacts → Core/Product/UIUX workflows → routed new-doc / impact readiness → [tests](../tests/artifacts.test.js) and package smoke |
|
|
16
16
|
| Agent preferences | [Canonical default](../config/agents.default.json), [configuration contract](agent-configuration.md) | Project-owned `agents.json` → read-only setup plan → [routing workflow](../core/workflows/agent-routing.md) → [host setup](tool-setup/README.md); tests verify preservation, not live model availability |
|
|
17
17
|
| Quy trình sử dụng | [Getting started](getting-started.md), [full SDLC](end-to-end-workflow.md) | [Examples](examples/), [README](../README.md), [documentation workflows](documentation-workflows.md) |
|
|
18
|
+
| Distribution / conformance driver | [pip/offline](python-installation.md), [workflow contract](workflow-contract.md), [runner](conformance-runner.md) | Shared npm allowlist → Python wheel/sdist → launcher/shared CLI → offline parity smoke; installer never imports host execution |
|
|
18
19
|
| Release / migration | [Versioning](versioning.md), [release policy](release-policy.md) | [Changelog](../CHANGELOG.md), [npm release](npm-release.md), [release workflow](../.github/workflows/npm-publish.yml) |
|
|
19
20
|
|
|
20
21
|
Một quy tắc chỉ hoàn chỉnh khi xác định được: **nơi khai báo → nơi đóng gói → điểm AI đọc → bước áp dụng
|