duaer-spec 0.26.0 → 0.27.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/.duaer/active-job.json +3 -3
- package/.duaer/specs/260-release-026/delivery.json +10 -9
- package/.duaer/specs/260-release-026/tasks.md +1 -3
- package/.duaer/specs/261-fde-baseline-sign/delivery.json +10 -0
- package/.duaer/specs/261-fde-baseline-sign/spec.md +37 -0
- package/.duaer/specs/261-fde-baseline-sign/tasks.md +8 -0
- package/.duaer/specs/262-fde01-readme-docs/delivery.json +9 -0
- package/.duaer/specs/262-fde01-readme-docs/spec.md +23 -0
- package/.duaer/specs/262-fde01-readme-docs/tasks.md +5 -0
- package/.duaer/specs/263-arch-edge-via/delivery.json +9 -0
- package/.duaer/specs/263-arch-edge-via/spec.md +25 -0
- package/.duaer/specs/263-arch-edge-via/tasks.md +5 -0
- package/.duaer/specs/264-baseline-field-guide/delivery.json +10 -0
- package/.duaer/specs/264-baseline-field-guide/spec.md +23 -0
- package/.duaer/specs/264-baseline-field-guide/tasks.md +5 -0
- package/.duaer/specs/265-baseline-chat-passthrough/delivery.json +9 -0
- package/.duaer/specs/265-baseline-chat-passthrough/spec.md +22 -0
- package/.duaer/specs/265-baseline-chat-passthrough/tasks.md +4 -0
- package/.duaer/specs/266-fde02-api-contract/delivery.json +10 -0
- package/.duaer/specs/266-fde02-api-contract/spec.md +28 -0
- package/.duaer/specs/266-fde02-api-contract/tasks.md +7 -0
- package/.duaer/specs/267-baseline-restore/delivery.json +9 -0
- package/.duaer/specs/267-baseline-restore/spec.md +24 -0
- package/.duaer/specs/267-baseline-restore/tasks.md +5 -0
- package/.duaer/specs/268-fde07-uat/delivery.json +9 -0
- package/.duaer/specs/268-fde07-uat/spec.md +30 -0
- package/.duaer/specs/268-fde07-uat/tasks.md +5 -0
- package/.duaer/specs/269-release-027/spec.md +12 -0
- package/.duaer/specs/269-release-027/tasks.md +4 -0
- package/CHANGELOG.md +46 -0
- package/README.md +22 -14
- package/README.zh-CN.md +6 -5
- package/bin/duaer-live.mjs +161 -77
- package/bin/live-archify.mjs +85 -0
- package/bin/live-deliverables.mjs +53 -0
- package/bin/live-modules.mjs +63 -2
- package/bin/live-project-chat.mjs +18 -1
- package/docs/agent/e2e-test-plan.md +14 -0
- package/docs/agent/live-desk.md +18 -1
- package/package.json +1 -1
- package/web/live-dev/api-contract.mjs +50 -0
- package/web/live-dev/app.js +278 -21
- package/web/live-dev/baseline.mjs +71 -0
- package/web/live-dev/confirm-card.mjs +19 -0
- package/web/live-dev/i18n-de.js +28 -0
- package/web/live-dev/i18n-es.js +28 -0
- package/web/live-dev/i18n-fr.js +28 -0
- package/web/live-dev/i18n-ja.js +28 -0
- package/web/live-dev/i18n-ko.js +28 -0
- package/web/live-dev/i18n-pt-BR.js +28 -0
- package/web/live-dev/i18n-ru.js +28 -0
- package/web/live-dev/i18n-vi.js +28 -0
- package/web/live-dev/i18n-zh-TW.js +28 -0
- package/web/live-dev/i18n.js +59 -2
- package/web/live-dev/index.html +42 -1
- package/web/live-dev/styles.css +4 -0
- package/web/live-dev/uat-pack.mjs +21 -0
package/.duaer/active-job.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"status": "accepted",
|
|
3
|
-
"acceptedAt": "2026-09-
|
|
3
|
+
"acceptedAt": "2026-09-20T14:14:57.110Z",
|
|
4
4
|
"verification": {
|
|
5
|
-
"levels": [
|
|
5
|
+
"levels": [
|
|
6
|
+
"docs"
|
|
7
|
+
],
|
|
6
8
|
"commands": [
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"gh run view 35513791762"
|
|
9
|
+
"gh workflow run npm-publish.yml --ref main",
|
|
10
|
+
"npm view duaer-spec version"
|
|
10
11
|
],
|
|
11
|
-
"result": "
|
|
12
|
-
"notes": "
|
|
12
|
+
"result": "pass",
|
|
13
|
+
"notes": "npm duaer-spec@0.26.0 published via Trusted Publishing after Duaer repo URL fix"
|
|
13
14
|
},
|
|
14
15
|
"preview": {
|
|
15
|
-
"url": "https://
|
|
16
|
-
"label": "
|
|
16
|
+
"url": "https://www.npmjs.com/package/duaer-spec/v/0.26.0",
|
|
17
|
+
"label": "npm duaer-spec@0.26.0"
|
|
17
18
|
}
|
|
18
19
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# Tasks: Release 0.26.0
|
|
2
|
-
|
|
3
1
|
- [x] T001 Bump package.json to 0.26.0 and fold CHANGELOG
|
|
4
2
|
- [x] T002 Merge develop, promote main, push, GitHub release
|
|
5
|
-
- [x] T003
|
|
3
|
+
- [x] T003 npm 0.26.0 published (Trusted Publishing + Duaer provenance URL)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-21T00:20:00.000Z",
|
|
4
|
+
"summary": "FDE-01: confirm card baseline fields, signed fingerprint gate before kickoff, change order + deliverables.",
|
|
5
|
+
"verification": {
|
|
6
|
+
"L0": "node --check bin/duaer-live.mjs web/live-dev/app.js web/live-dev/baseline.mjs bin/live-modules.mjs — pass",
|
|
7
|
+
"L1": "npm test — 225 pass (incl. baseline-sign)",
|
|
8
|
+
"L3": "npm run test:live — pass"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Feature Specification: FDE-01 scope + acceptance baseline sign gate
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Enforce a signed scope/acceptance baseline before kickoff (联调), per WeCom
|
|
6
|
+
FDE pain FDE-01: no unsigned baseline may enter dispatch; post-sign scope
|
|
7
|
+
changes require an explicit change order and re-sign.
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- Confirm card fields: device matrix, critical paths, exception cases (feature)
|
|
12
|
+
- Project baseline sign (signer + time + fingerprint of confirmed modules)
|
|
13
|
+
- Kickoff / dispatch hard-blocked until baseline signed and fingerprint matches
|
|
14
|
+
- Change order: reason → unlock modules for re-confirm → clear sign → re-sign
|
|
15
|
+
- Deliverables page shows baseline + change history
|
|
16
|
+
- Docs / E2E / tests
|
|
17
|
+
|
|
18
|
+
## Out of scope
|
|
19
|
+
|
|
20
|
+
- Real e-sign / PKI
|
|
21
|
+
- Automatic schedule recalculation
|
|
22
|
+
- Cloud browser matrix execution
|
|
23
|
+
- Full RACI (FDE-10)
|
|
24
|
+
|
|
25
|
+
## Acceptance
|
|
26
|
+
|
|
27
|
+
1. Feature confirm without device matrix / critical paths / exception cases fails local validate
|
|
28
|
+
2. Unsigned baseline: 「写入 Brief 并启动」disabled or blocked with clear copy
|
|
29
|
+
3. After sign, kickoff allowed when fingerprint matches confirmed modules
|
|
30
|
+
4. Opening a change order with a reason clears the sign and returns modules to re-confirm
|
|
31
|
+
5. Deliverables HTML shows signer, signed time, and change reasons when present
|
|
32
|
+
6. `npm test` and `npm run test:live` pass
|
|
33
|
+
|
|
34
|
+
## Assumptions
|
|
35
|
+
|
|
36
|
+
- Bug desk skips the three new field requirements but still needs baseline sign before dispatch
|
|
37
|
+
- Worktree: `.worktree/feat-fde-baseline-sign` · Brief: `.duaer/specs/261-fde-baseline-sign/`
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Tasks: FDE-01 baseline sign
|
|
2
|
+
|
|
3
|
+
- [x] T001 Clip card + session baseline helpers (`baseline.mjs` / modules / chat)
|
|
4
|
+
- [x] T002 Confirm card UI fields + i18n (device / paths / exceptions)
|
|
5
|
+
- [x] T003 Baseline sign + change-order UI in dispatch; gate doDispatch
|
|
6
|
+
- [x] T004 Server validate + dispatch reject unsigned / stale fingerprint
|
|
7
|
+
- [x] T005 Deliverables page + live-desk / E2E / CHANGELOG
|
|
8
|
+
- [x] T006 L0/L1/L3 verify; stamp delivery
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Feature Specification: Document FDE-01 in README
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Update user-facing README (zh-CN + en) so FDE-01 baseline fields and sign
|
|
6
|
+
gate match the live console.
|
|
7
|
+
|
|
8
|
+
## In scope
|
|
9
|
+
|
|
10
|
+
- `README.zh-CN.md` and `README.md` capability bullets + FDE flow steps
|
|
11
|
+
- Brief / delivery stamp
|
|
12
|
+
|
|
13
|
+
## Out of scope
|
|
14
|
+
|
|
15
|
+
- Product code / i18n / ADR
|
|
16
|
+
- Push / release
|
|
17
|
+
|
|
18
|
+
## Acceptance
|
|
19
|
+
|
|
20
|
+
1. zh-CN README mentions device matrix / critical paths / exception cases on feature confirm
|
|
21
|
+
2. Both READMEs mention signed baseline before kickoff and change-order re-sign
|
|
22
|
+
3. English README has no CJK
|
|
23
|
+
4. Docs-only waiver in delivery verification
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-21T00:35:00.000Z",
|
|
4
|
+
"summary": "Auto-detour architecture edges that would fail Archify clean-flow/edge-through-node.",
|
|
5
|
+
"verification": {
|
|
6
|
+
"L0": "node --check bin/live-archify.mjs — pass",
|
|
7
|
+
"L1": "node --test test/live-archify.test.mjs — 14 pass"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Feature Specification: Auto-route architecture edges that cross nodes
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
When Archify rejects architecture IR with `clean-flow/edge-through-node`
|
|
6
|
+
(long same-row reverse edges from LLM layout), duaer-live auto-detours those
|
|
7
|
+
edges with `fromSide`/`toSide`/`via` so render succeeds.
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- `routeCrossingEdges` in `bin/live-archify.mjs` (called from layout)
|
|
12
|
+
- Unit test using the failing PPT IR (state→gen)
|
|
13
|
+
- CHANGELOG / brief note in live-desk if needed
|
|
14
|
+
|
|
15
|
+
## Out of scope
|
|
16
|
+
|
|
17
|
+
- Changing Archify itself
|
|
18
|
+
- Relayouting all LLM positions from scratch
|
|
19
|
+
- Showcase quality profile
|
|
20
|
+
|
|
21
|
+
## Acceptance
|
|
22
|
+
|
|
23
|
+
1. Saved IR `state`→`gen` (crosses user/ui/check/doc) renders via Archify without error
|
|
24
|
+
2. Neighbor edges without intermediates keep no forced via
|
|
25
|
+
3. `npm test` live-archify tests pass
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-21T00:40:00.000Z",
|
|
4
|
+
"summary": "Guide chat and placeholders to fill FDE-01 baseline confirm fields.",
|
|
5
|
+
"verification": {
|
|
6
|
+
"L0": "node --check bin/duaer-live.mjs web/live-dev/app.js — pass",
|
|
7
|
+
"L1": "node --test test/live-i18n-common.test.mjs — pass",
|
|
8
|
+
"L3": "npm run test:live — pass"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Feature Specification: Guide filling FDE-01 baseline fields
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Chat and confirm UX must guide (and preferably fill) device matrix, critical
|
|
6
|
+
paths, and exception cases — not leave them as empty「待确认」forever.
|
|
7
|
+
|
|
8
|
+
## In scope
|
|
9
|
+
|
|
10
|
+
- Feature SYSTEM / ACCEPT / FIX / REVISE prompts include the three fields
|
|
11
|
+
- Field-specific placeholders (examples) in UI + i18n
|
|
12
|
+
- Smoke assert prompts mention the fields
|
|
13
|
+
|
|
14
|
+
## Out of scope
|
|
15
|
+
|
|
16
|
+
- Bug desk (still skips the three fields)
|
|
17
|
+
- Changing validate rules
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
|
|
21
|
+
1. `SYSTEM_PROMPT` / accept / fix prompts list `deviceMatrix` / `criticalPaths` / `exceptionCases`
|
|
22
|
+
2. Feature confirm textareas use example placeholders (not bare「待确认」)
|
|
23
|
+
3. `npm test` + `npm run test:live` pass
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-21T00:45:00.000Z",
|
|
4
|
+
"summary": "Pass deviceMatrix/criticalPaths/exceptionCases through chat parse and SSE done.",
|
|
5
|
+
"verification": {
|
|
6
|
+
"L0": "node --check bin/duaer-live.mjs — pass",
|
|
7
|
+
"L3": "npm run test:live — pass"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Feature Specification: Pass baseline fields through chat parse/SSE
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
When the model returns deviceMatrix / criticalPaths / exceptionCases in chat
|
|
6
|
+
JSON, they must reach the middle confirm card (not be stripped by
|
|
7
|
+
parseChatResult / chatDoneSsePayload).
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- parseChatResult + chatDoneSsePayload passthrough (top-level + modules[])
|
|
12
|
+
- Unit / smoke coverage
|
|
13
|
+
|
|
14
|
+
## Out of scope
|
|
15
|
+
|
|
16
|
+
- Prompt wording (already done in 264)
|
|
17
|
+
|
|
18
|
+
## Acceptance
|
|
19
|
+
|
|
20
|
+
1. Parsed chat JSON with baseline fields retains them in the done payload shape
|
|
21
|
+
2. Middle card merge path receives the three keys from SSE done
|
|
22
|
+
3. `npm run test:live` + targeted unit pass
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-21T00:55:00.000Z",
|
|
4
|
+
"summary": "FDE-02: apiContract confirm field, validate gate, kickoff contract tasks, deliverables.",
|
|
5
|
+
"verification": {
|
|
6
|
+
"L0": "node --check — pass",
|
|
7
|
+
"L1": "npm test — pass",
|
|
8
|
+
"L3": "npm run test:live — pass"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Feature Specification: FDE-02 API contract gate
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Enforce an API contract declaration on feature confirm cards (OpenAPI/types
|
|
6
|
+
path, or explicit「本模块无 HTTP API」). When HTTP APIs are in scope, kickoff
|
|
7
|
+
injects contract sync / Mock / CI contract-test tasks so联调不再追字段.
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- Confirm card field `apiContract` + validate / chat prompts / SSE passthrough
|
|
12
|
+
- Fingerprint includes the field
|
|
13
|
+
- Task pool injects FDE-02 shared tasks when any module declares a contract path
|
|
14
|
+
- Deliverables show the field
|
|
15
|
+
- Docs / E2E / tests
|
|
16
|
+
|
|
17
|
+
## Out of scope
|
|
18
|
+
|
|
19
|
+
- Built-in OpenAPI editor, codegen, or running customer CI
|
|
20
|
+
- Bug desk (skips field like other FDE-01 extras)
|
|
21
|
+
|
|
22
|
+
## Acceptance
|
|
23
|
+
|
|
24
|
+
1. Feature confirm without apiContract fails local validate
|
|
25
|
+
2. 「本模块无 HTTP API」passes without injecting contract tasks
|
|
26
|
+
3. A path like `openapi/openapi.yaml` injects three shared pool tasks
|
|
27
|
+
4. Chat SSE / clip / deliverables carry the field
|
|
28
|
+
5. `npm test` + `npm run test:live` pass
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Tasks: FDE-02 API contract gate
|
|
2
|
+
|
|
3
|
+
- [x] T001 `api-contract.mjs` + clipCard / fingerprint / localAccept
|
|
4
|
+
- [x] T002 Chat prompts + parseChatResult / SSE passthrough
|
|
5
|
+
- [x] T003 UI + i18n placeholders; app.js merge/apply
|
|
6
|
+
- [x] T004 Task pool inject + deliverables
|
|
7
|
+
- [x] T005 Tests / docs / CHANGELOG; stamp delivery
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"summary": "Desk refresh restores device matrix, critical paths, exception cases, and API contract onto the confirm card.",
|
|
4
|
+
"verification": {
|
|
5
|
+
"L0": "node --check web/live-dev/app.js web/live-dev/confirm-card.mjs — pass",
|
|
6
|
+
"L1": "npm test — 234 pass",
|
|
7
|
+
"L3": "npm run test:live — pass"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Feature Specification: Keep baseline fields after desk refresh
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Refreshing the Duaer console must keep the four feature confirm fields
|
|
6
|
+
(device matrix, critical paths, exception cases, API contract) that were
|
|
7
|
+
already on the card.
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- Session restore copies those four fields onto each module card before the
|
|
12
|
+
form is filled
|
|
13
|
+
- Confirm fingerprint includes `apiContract` so a later edit re-validates
|
|
14
|
+
|
|
15
|
+
## Out of scope
|
|
16
|
+
|
|
17
|
+
- Bug desk (those fields stay hidden)
|
|
18
|
+
- Changing validate rules
|
|
19
|
+
|
|
20
|
+
## Acceptance
|
|
21
|
+
|
|
22
|
+
1. Restoring a saved module card keeps deviceMatrix, criticalPaths,
|
|
23
|
+
exceptionCases, and apiContract
|
|
24
|
+
2. `npm test` and `npm run test:live` pass
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"summary": "Feature confirm requires a UAT pack (empty, failure, permission, timeout, retry) and kickoff schedules those checks.",
|
|
4
|
+
"verification": {
|
|
5
|
+
"L0": "node --check bin/duaer-live.mjs bin/live-modules.mjs web/live-dev/app.js — pass",
|
|
6
|
+
"L1": "npm test — 237 pass",
|
|
7
|
+
"L3": "npm run test:live — pass"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Feature Specification: FDE-07 UAT pack on confirm
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Feature confirm must not treat a single happy-path note as acceptance.
|
|
6
|
+
Exception cases have to cover the UAT pack, and kickoff must schedule
|
|
7
|
+
those checks.
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- Local validate requires empty, failure, permission, timeout, and retry
|
|
12
|
+
- When the module declares an API contract path, exception text must name
|
|
13
|
+
an error code or HTTP status
|
|
14
|
+
- Kickoff adds a UAT task per confirmed module, plus a contract error-code
|
|
15
|
+
task when a path is declared
|
|
16
|
+
- Confirm hints, placeholders, and chat/accept prompts match the pack
|
|
17
|
+
|
|
18
|
+
## Out of scope
|
|
19
|
+
|
|
20
|
+
- Bug desk
|
|
21
|
+
- Running the UAT cases against a customer environment
|
|
22
|
+
|
|
23
|
+
## Acceptance
|
|
24
|
+
|
|
25
|
+
1. A feature card that only mentions one exception class fails local validate
|
|
26
|
+
2. A card covering the five classes passes that check; a contract path also
|
|
27
|
+
needs an error code or status
|
|
28
|
+
3. Confirmed modules get an FDE-07 UAT task; no-HTTP modules skip the
|
|
29
|
+
error-code task
|
|
30
|
+
4. `npm test` and `npm run test:live` pass
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Feature Specification: Release 0.27.0
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Ship 0.27.0: FDE-01 signed baseline, FDE-02 API contract gate, FDE-07 UAT
|
|
6
|
+
pack, baseline field restore, architecture edge detour. Promote develop to
|
|
7
|
+
main, publish a GitHub Release, and let npm Trusted Publishing run.
|
|
8
|
+
|
|
9
|
+
## Acceptance
|
|
10
|
+
|
|
11
|
+
1. `package.json` is `0.27.0`; CHANGELOG has `0.27.0` and an empty Unreleased section.
|
|
12
|
+
2. Tag `v0.27.0` is on `main`; GitHub Release is published.
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,52 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.27.0 — 2026-09-21
|
|
6
|
+
|
|
7
|
+
### Feat: FDE-07 UAT pack on confirm
|
|
8
|
+
|
|
9
|
+
- Feature exception cases must cover empty, failure, permission, timeout, and retry
|
|
10
|
+
- A declared API contract also requires an error code or HTTP status in that text
|
|
11
|
+
- Kickoff adds a UAT task per confirmed module
|
|
12
|
+
|
|
13
|
+
### Fix: keep baseline confirm fields after desk refresh
|
|
14
|
+
|
|
15
|
+
- Restoring a project session copies device matrix, critical paths, exception
|
|
16
|
+
cases, and API contract back onto the confirm card
|
|
17
|
+
|
|
18
|
+
### Feat: FDE-02 API contract gate on confirm + kickoff tasks
|
|
19
|
+
|
|
20
|
+
- Feature confirm requires `apiContract` (OpenAPI/types path or「本模块无 HTTP API」)
|
|
21
|
+
- Kickoff injects contract sync / Mock / CI contract-test tasks when a path is declared
|
|
22
|
+
- Deliverables and baseline fingerprint include the field
|
|
23
|
+
|
|
24
|
+
### Fix: pass FDE-01 baseline fields through chat SSE
|
|
25
|
+
|
|
26
|
+
- `parseChatResult` / `chatDoneSsePayload` keep deviceMatrix, criticalPaths,
|
|
27
|
+
exceptionCases so the middle confirm card fills from chat JSON
|
|
28
|
+
|
|
29
|
+
### Fix: guide filling FDE-01 baseline confirm fields
|
|
30
|
+
|
|
31
|
+
- Feature chat / accept / fix / revise prompts include device matrix, critical
|
|
32
|
+
paths, and exception cases (fill defaults or offer options — do not leave empty)
|
|
33
|
+
- Confirm card placeholders show examples instead of bare「待确认」
|
|
34
|
+
|
|
35
|
+
### Fix: auto-route architecture edges that cross unrelated nodes
|
|
36
|
+
|
|
37
|
+
- Before Archify deliver, long same-row edges that would pass through other
|
|
38
|
+
components get a bottom `via` detour (`clean-flow/edge-through-node`)
|
|
39
|
+
|
|
40
|
+
### Docs: README covers FDE-01 baseline sign
|
|
41
|
+
|
|
42
|
+
- zh-CN / en README: feature confirm fields, signed baseline before kickoff,
|
|
43
|
+
change order, deliverables baseline history
|
|
44
|
+
|
|
45
|
+
### Feat: FDE-01 signed scope + acceptance baseline before kickoff
|
|
46
|
+
|
|
47
|
+
- Confirm card requires device matrix, critical paths, and exception cases (feature)
|
|
48
|
+
- Dispatch requires a signed baseline (signer + fingerprint); change order clears sign and reopens confirm
|
|
49
|
+
- Deliverables page shows baseline sign-off and change history
|
|
50
|
+
|
|
5
51
|
## 0.26.0 — 2026-09-20
|
|
6
52
|
|
|
7
53
|
### Fix: npm provenance repository URL after GitHub move
|
package/README.md
CHANGED
|
@@ -65,15 +65,17 @@ After install, these are the capabilities you actually use:
|
|
|
65
65
|
A local web console (`duaer live`) for “chat → confirm → dispatch → watch → open result”:
|
|
66
66
|
|
|
67
67
|
- **Projects.** Create and switch projects; each keeps its own chat and progress.
|
|
68
|
-
- **Chat until the ask is clear.** Left chat; center confirm cards (goal / out of scope / checkable acceptance). Vague acceptance cannot be confirmed. Beside **Send**, tap **Record** to capture speech; with a **speech recognition (STT) model** in Settings (OpenAI-compatible `/audio/transcriptions`, e.g. whisper-1), the clip is decoded into the composer—edit, then send.
|
|
68
|
+
- **Chat until the ask is clear.** Left chat; center confirm cards (goal / out of scope / checkable acceptance). Feature cards also need **device matrix, critical paths, and exception cases**. Vague acceptance cannot be confirmed. Beside **Send**, tap **Record** to capture speech; with a **speech recognition (STT) model** in Settings (OpenAI-compatible `/audio/transcriptions`, e.g. whisper-1), the clip is decoded into the composer—edit, then send.
|
|
69
69
|
- **Split big work into modules.** Confirm module by module; nothing starts until you kick off after the ones you care about are confirmed.
|
|
70
70
|
- **Architecture diagram.** After requirements, review the system diagram; click it for fullscreen; kickoff waits until architecture is confirmed. If chat claims the diagram is ready but the middle panel is empty, the same bubble offers Regenerate — it does not leave a false “ready” line.
|
|
71
|
+
- **Sign the scope + acceptance baseline before kickoff.** After architecture confirm, an operator must **sign** (signer + time; fingerprint of confirmed module cards). Unsigned or stale fingerprints block **Write Brief and start**. An **open change** (with reason) clears the sign, returns modules for re-confirm, then architecture and re-sign.
|
|
71
72
|
- **Dispatch digital employees to code.** Pick a product folder and Cursor Agent or Claude Code; work happens in an isolated worktree, not directly on your long-lived branches.
|
|
72
73
|
- **Visible task progress.** Work is a checklist; each finished item is checked off and the console refreshes; dependent tasks release in waves so agents don’t pile on blocked work.
|
|
73
74
|
- **Employee roles.** Top-bar **digital employee** directory (Implementer / Functional regression / Deployer). Optional parallel workers on the same CLI. See the next section.
|
|
74
75
|
- **Locales.** Console UI: zh-CN, zh-TW, en, ja, ko, es, pt-BR, fr, de, ru, vi.
|
|
75
76
|
- **Deliverables and results.** Open a deliverables page (requirements timeline,
|
|
76
|
-
|
|
77
|
+
confirmation, baseline sign-off and change history, architecture, tasks,
|
|
78
|
+
delivery); when done, open the page or the project folder.
|
|
77
79
|
- **Revise when it’s not right.** Continue in left chat → re-confirm → relaunch on
|
|
78
80
|
the same job without starting from scratch. After deploy, **Revise again** and
|
|
79
81
|
**Fix a bug** stay on the result bar.
|
|
@@ -163,15 +165,21 @@ mock LLM — no paid API).
|
|
|
163
165
|
content. Messy multi-topic talk is fine: the console evolves **`modules[]`**
|
|
164
166
|
(tabs). Chat bubbles render **Markdown** (`**bold**`, code, links).
|
|
165
167
|
2. Per module: fill the confirm card (goal / out-of-scope / **checkable**
|
|
166
|
-
acceptance / assumptions
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
acceptance / assumptions; feature cards also need **device matrix /
|
|
169
|
+
critical paths / exception cases**). Vague acceptance or missing baseline
|
|
170
|
+
fields fails the gate; validate must pass before **Confirm**. Confirming a
|
|
171
|
+
module **locks that card only** — it does **not** write a Brief or start
|
|
172
|
+
workers yet. Jump between modules freely.
|
|
169
173
|
3. When **all** modules you care about are confirmed → review / confirm
|
|
170
|
-
**architecture** (Archify) → **
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
**
|
|
174
|
+
**architecture** (Archify) → **sign the scope + acceptance baseline**
|
|
175
|
+
(signer) → **kickoff**. Kickoff stays blocked while unsigned or when the
|
|
176
|
+
fingerprint no longer matches confirmed cards. Kickoff writes the Brief,
|
|
177
|
+
builds a **dependency-aware task pool** (`dependsOn`), and assigns work.
|
|
178
|
+
Default is **1** worker; optionally **N** parallel workers on the **same
|
|
179
|
+
CLI**. Shared tasks go to worker 1; module tasks round-robin. Each worker
|
|
180
|
+
gets its own **Terminal queue lane** (`live-terminal` /
|
|
181
|
+
`live-terminal/w2`…). To change scope: **open change** (reason) → clear
|
|
182
|
+
sign and re-confirm modules → architecture again → re-sign.
|
|
175
183
|
4. Pick a product repo (browse / scan / recent), or paste a path / project name.
|
|
176
184
|
Missing paths are created; set **Projects parent folder** so short names
|
|
177
185
|
resolve under it. Non-git folders get `git init -b develop`; missing
|
|
@@ -184,10 +192,10 @@ mock LLM — no paid API).
|
|
|
184
192
|
`.worktree/feat-*` and opens **Terminal** for each worker lane.
|
|
185
193
|
7. Progress shows a **next-action** stage strip, then `tasks.md` polling.
|
|
186
194
|
**View deliverables** (above progress) opens a generated HTML page of stage
|
|
187
|
-
artifacts (requirements doc timeline, confirmation,
|
|
188
|
-
delivery). On delivery, workers
|
|
189
|
-
`delivery.json` is `accepted`. Then open
|
|
190
|
-
page exists, otherwise **Open
|
|
195
|
+
artifacts (requirements doc timeline, confirmation, baseline sign-off and
|
|
196
|
+
change history, architecture, task pool, delivery). On delivery, workers
|
|
197
|
+
update the product **README** before `delivery.json` is `accepted`. Then open
|
|
198
|
+
**Results** (**View result** when a page exists, otherwise **Open
|
|
191
199
|
project folder**).
|
|
192
200
|
8. If the result is not right: **Continue improving (left chat)** → confirm the
|
|
193
201
|
revise card (same validate gate) → re-confirm architecture (keep or redesign)
|
package/README.zh-CN.md
CHANGED
|
@@ -28,14 +28,15 @@
|
|
|
28
28
|
本机开一个网页控制台(`duaer live`),专门管「从聊需求到派工、看进度、看结果」:
|
|
29
29
|
|
|
30
30
|
- **项目管理。** 建项目、切换项目;每个项目自己的对话和进度,互不搅在一起。
|
|
31
|
-
- **聊着把需求聊清楚。**
|
|
31
|
+
- **聊着把需求聊清楚。** 左边聊天;中间把目标、边界、验收写成确认卡;功能卡还要填 **浏览器/设备矩阵、关键路径、异常态**。空话验收过不了,得能检查才给确认。发送旁可点 **录音**;在设置里配置 **语音识别模型**(兼容 OpenAI `/audio/transcriptions`,如 whisper-1)后,录完会解码成文字填入输入框,改完再发送。
|
|
32
32
|
- **大需求可拆成多个模块。** 一块一块确认,确认完一块不会立刻开工,全部谈妥再一起派。
|
|
33
33
|
- **系统架构图。** 确认需求后一起看架构;点图可全屏查看;架构确认后才能派工。若对话称已生成但中间栏没有图,同一条气泡会改成提示并提供「重新生成架构图」,不会留下假的「已生成」。
|
|
34
|
+
- **签署范围与验收基线再开工。** 架构确认后须签署(签字人 + 时间;指纹对上已确认模块卡);未签或卡面改过不得「写入 Brief 并启动」。开 **变更单**(写原因)会清签、退回重确认,再架构、再签。
|
|
34
35
|
- **一键派数字员工写代码。** 选产品目录、选 Cursor Agent 或 Claude Code,点开工;它在隔离目录里改代码,不直接乱动你的主分支。
|
|
35
36
|
- **任务进度看得见。** 任务拆成一条条可勾选项;做完勾一项,控制台实时刷新;有依赖的任务会排队放行,不会一窝蜂乱做。
|
|
36
37
|
- **数字员工分工。** 顶部有「数字员工」目录(实现 / 功能回归 / 部署);可开多个并行(同一套 CLI)。详见下一节。
|
|
37
38
|
- **中 / 繁中 / 英 / 日 / 韩 / 西 / 葡 / 法 / 德 / 俄 / 越界面。** 控制台文案可切换语种。
|
|
38
|
-
- **看交付物和结果。**
|
|
39
|
+
- **看交付物和结果。** 可打开交付物页(需求时间线、确认书、基线签署与变更记录、架构、任务、交付);做完了可打开页面或项目文件夹。
|
|
39
40
|
- **不满意就继续改。** 左侧继续聊改进 → 再确认 → 同一次任务上续派,不用从头建仓。部署后结果栏仍可「再改一版」和「修 bug」。
|
|
40
41
|
- **修 bug。** 走缺陷卡(不拆多模块),默认跳过架构,短任务池,开 `fix/` 分支(可选从 `main` 出紧急修复)。交付过的地址/启动信息会自动带入;缺陷和迭代排在同一条项目时间线上。
|
|
41
42
|
- **快速导航。** 对话栏右缘「导航」可跳到:对话底部 · 确认卡 · 结果 · 进度。
|
|
@@ -145,15 +146,15 @@ duaer live config --base-url https://api.openai.com/v1 --api-key sk-... --model
|
|
|
145
146
|
**流程**
|
|
146
147
|
|
|
147
148
|
1. 打开或新建**项目**,再聊天。右上角「项目」列表会显示每个项目的**交付状态**;有内容时可直接打开**交付物**。话题可以乱跳:控制台会演进 **`modules[]`**(模块页签)。气泡支持 **Markdown**(加粗、代码、链接)。
|
|
148
|
-
2. **按模块**填确认卡(目标 / 不做 / **可检查验收** /
|
|
149
|
-
3. 关心的模块都确认完 → 审 / 确认**架构**(Archify)→ **开工(kickoff
|
|
149
|
+
2. **按模块**填确认卡(目标 / 不做 / **可检查验收** / 假设;功能卡另填 **设备矩阵 / 关键路径 / 异常态**)。空泛验收或缺基线字段过不了门禁;须校验通过才能点确认。确认只**锁住该模块卡**,**不会**立刻写 Brief 或开工。模块之间可随时切换。
|
|
150
|
+
3. 关心的模块都确认完 → 审 / 确认**架构**(Archify)→ **签署范围与验收基线**(签字人)→ **开工(kickoff)**。未签或指纹与已确认卡不一致时开工按钮不可用。开工才写 Brief,建带 **`dependsOn` 的任务池**,并分派。默认 **1** 个数字员工;可选 **N** 个同 CLI 并行。共享任务给 1 号;模块任务轮询。每个 worker 独占一条 **Terminal 队列泳道**(`live-terminal` / `live-terminal/w2`…)。范围要改:开 **变更单**(写原因)→ 清签并退回模块重确认 → 再架构、再签。
|
|
150
151
|
4. 浏览 / 扫描 / 点选产品仓,或粘贴路径 / 项目名。路径不存在会自动创建;可先设**产品父目录**,再填短名在其下新建。非 git 目录会 `git init -b develop`;没有 develop/main/master 会建本地 `develop`。
|
|
151
152
|
5. 只选 **CLI 数字员工**:**Cursor Agent** 或 **Claude Code**
|
|
152
153
|
- Cursor:`curl https://cursor.com/install -fsS | bash`
|
|
153
154
|
- Claude Code:`npm install -g @anthropic-ai/claude-code`(或 `curl -fsSL https://claude.ai/install.sh | bash`)
|
|
154
155
|
- 要用 **DeepSeek 等其它模型**写代码:把 Claude Code 接到对应 API,见 [`docs/agent/worker-models.zh-CN.md`](docs/agent/worker-models.zh-CN.md)。FDE「配置模型」页下方也有同样说明。
|
|
155
156
|
6. 编辑「启动命令」(须以 `Duaer` 开头)→ 开工建 `.worktree/feat-*`,并为每条 worker 泳道打开 **Terminal**。
|
|
156
|
-
7. 右侧进度列先提示**下一步**(阶段条),并轮询 `tasks.md`。进度上方 **查看交付物** 会打开生成的 HTML
|
|
157
|
+
7. 右侧进度列先提示**下一步**(阶段条),并轮询 `tasks.md`。进度上方 **查看交付物** 会打开生成的 HTML 页(需求文档时间线、确认书、基线签署与变更、架构、任务池、交付等)。交付时数字员工先更新产品仓 **README**,再把 `delivery.json` 标为 `accepted`。然后出现 **结果**(有页面时 **查看结果**;否则 **打开项目目录**)。
|
|
157
158
|
8. 成品不满意:点 **继续改进(左侧对话)** → 确认改进卡(同样须校验)→ 再确认架构(保留或重画)→ 同 worktree 续派(先清残留 Agent 再入队)。进度跟本轮 `R{n}-*`。启动失败会回滚本轮 Brief Revision;状态行按泳道显示 Terminal 忙闲/队列。
|
|
158
159
|
9. 若需要上线 / 公网:在控制台选 **计划托管平台**(Cloudflare / 阿里云 / AWS / GitHub Pages),说明见 [`docs/agent/deploy-targets.md`](docs/agent/deploy-targets.md)。未指定时默认 **GitHub CLI(`gh`)+ Actions**([`docs/agent/deploy-github.md`](docs/agent/deploy-github.md))
|
|
159
160
|
|