duaer-spec 0.21.0 → 0.23.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/.claude/rules/duaer-spec.md +5 -2
- package/.cursor/rules/duaer-spec.mdc +5 -2
- package/.cursor/skills/duaer-do/SKILL.md +7 -1
- package/.cursor/skills/duaer-tasks/SKILL.md +8 -0
- package/.duaer/active-job.json +2 -3
- package/.duaer/memory/constitution.md +13 -0
- package/.duaer/specs/202-release-021/delivery.json +18 -0
- package/.duaer/specs/202-release-021/tasks.md +2 -2
- package/.duaer/specs/203-atomic-monitorable-tasks/delivery.json +13 -0
- package/.duaer/specs/203-atomic-monitorable-tasks/spec.md +44 -0
- package/.duaer/specs/203-atomic-monitorable-tasks/tasks.md +8 -0
- package/.duaer/specs/204-live-i18n-ja/delivery.json +14 -0
- package/.duaer/specs/204-live-i18n-ja/spec.md +34 -0
- package/.duaer/specs/204-live-i18n-ja/tasks.md +7 -0
- package/.duaer/specs/205-release-022/delivery.json +10 -0
- package/.duaer/specs/205-release-022/spec.md +12 -0
- package/.duaer/specs/205-release-022/tasks.md +6 -0
- package/.duaer/specs/206-employee-directory/delivery.json +13 -0
- package/.duaer/specs/206-employee-directory/spec.md +32 -0
- package/.duaer/specs/206-employee-directory/tasks.md +6 -0
- package/.duaer/specs/207-fix-projects-root-pick/delivery.json +10 -0
- package/.duaer/specs/207-fix-projects-root-pick/spec.md +20 -0
- package/.duaer/specs/207-fix-projects-root-pick/tasks.md +5 -0
- package/.duaer/specs/208-arch-click-fullscreen/delivery.json +10 -0
- package/.duaer/specs/208-arch-click-fullscreen/spec.md +24 -0
- package/.duaer/specs/208-arch-click-fullscreen/tasks.md +6 -0
- package/.duaer/specs/209-orch-wave-deadlock/delivery.json +10 -0
- package/.duaer/specs/209-orch-wave-deadlock/spec.md +27 -0
- package/.duaer/specs/209-orch-wave-deadlock/tasks.md +5 -0
- package/.duaer/specs/210-release-023/spec.md +12 -0
- package/.duaer/specs/210-release-023/tasks.md +6 -0
- package/.duaer/templates/tasks-template.md +4 -0
- package/CHANGELOG.md +38 -0
- package/bin/duaer-live.mjs +121 -54
- package/bin/live-deliverables.mjs +116 -36
- package/bin/live-modules.mjs +68 -10
- package/bin/live-orchestrate.mjs +2 -11
- package/bin/live-progress.mjs +7 -38
- package/docs/agent/e2e-test-plan.md +14 -8
- package/docs/agent/live-desk.md +11 -2
- package/package.json +1 -1
- package/web/live-dev/acceptance-lines.mjs +42 -0
- package/web/live-dev/app.js +131 -13
- package/web/live-dev/architecture-mount.mjs +16 -55
- package/web/live-dev/employee-catalog.mjs +54 -0
- package/web/live-dev/i18n-ja.js +494 -0
- package/web/live-dev/i18n.js +30 -5
- package/web/live-dev/index.html +27 -0
- package/web/live-dev/styles.css +41 -0
- package/web/live-dev/task-graph.mjs +28 -7
|
@@ -28,9 +28,12 @@ For new behavior, fixes, refactors that change product behavior, or architecture
|
|
|
28
28
|
3. Do **not** wait for `/duaer-do` or any other skill invocation.
|
|
29
29
|
4. Do **not** say “please run `/duaer-specify`” — you do it.
|
|
30
30
|
5. Do **not** dump a methodology tutorial unless they ask how Duaer works.
|
|
31
|
-
6.
|
|
31
|
+
6. **Break down to atomic, monitorable tasks:** each `tasks.md` item is one
|
|
32
|
+
independently verifiable atom with a `- [ ]` / `- [x]` checkbox; mark done
|
|
33
|
+
as you go so progress is visible. Do not leave only coarse mega-tasks.
|
|
34
|
+
7. Merge to **`develop`** when done (hotfix: **`main`**, then back-merge
|
|
32
35
|
**`develop`**). Promote to **`main`** only if the user asks to go online.
|
|
33
|
-
|
|
36
|
+
8. **Handoff (mandatory):** stop processes bound to `.worktree/<id>/`, remove
|
|
34
37
|
the worktree, then restart services from the primary checkout on `develop`
|
|
35
38
|
using `.duaer/handoff.json` / `duaer handoff [--run]`. Never leave the user
|
|
36
39
|
on a dead worktree server.
|
|
@@ -32,9 +32,12 @@ For new behavior, fixes, refactors that change product behavior, or architecture
|
|
|
32
32
|
3. Do **not** wait for `/duaer-do` or any other skill invocation.
|
|
33
33
|
4. Do **not** say “please run `/duaer-specify`” — you do it.
|
|
34
34
|
5. Do **not** dump a methodology tutorial unless they ask how Duaer works.
|
|
35
|
-
6.
|
|
35
|
+
6. **Break down to atomic, monitorable tasks:** each `tasks.md` item is one
|
|
36
|
+
independently verifiable atom with a `- [ ]` / `- [x]` checkbox; mark done
|
|
37
|
+
as you go so progress is visible. Do not leave only coarse mega-tasks.
|
|
38
|
+
7. Merge to **`develop`** when done (hotfix: **`main`**, then back-merge
|
|
36
39
|
**`develop`**). Promote to **`main`** only if the user asks to go online.
|
|
37
|
-
|
|
40
|
+
8. **Handoff (mandatory):** stop processes bound to `.worktree/<id>/`, remove
|
|
38
41
|
the worktree, then restart services from the primary checkout on `develop`
|
|
39
42
|
using `.duaer/handoff.json` / `duaer handoff [--run]`. Never leave the user
|
|
40
43
|
on a dead worktree server.
|
|
@@ -54,7 +54,13 @@ Do **not** lecture about methodology. Do **not** ask them to run commands.
|
|
|
54
54
|
- Deep ambiguity after a full Spec still uses `duaer-clarify` (up to 5
|
|
55
55
|
questions). Understand is the **lightweight front door** on every ask.
|
|
56
56
|
|
|
57
|
-
3. **Break down** — If `tasks.md` missing, write a
|
|
57
|
+
3. **Break down** — If `tasks.md` missing, write a checklist from the Spec.
|
|
58
|
+
**Atomic + monitorable (mandatory):**
|
|
59
|
+
- Split until each item is **one** independently verifiable acceptance /
|
|
60
|
+
deliverable atom (not a mega-phase).
|
|
61
|
+
- Every item is a markdown checkbox (`- [ ]` / `- [x]`) so progress can be
|
|
62
|
+
polled; check off immediately when that atom is done.
|
|
63
|
+
- Prefer one checkbox per Acceptance line; no artificial upper count.
|
|
58
64
|
Skip a heavy plan unless architecture or contracts change.
|
|
59
65
|
|
|
60
66
|
4. **Work** — Implement open tasks; mark `[x]` as you go. No scope beyond Spec.
|
|
@@ -139,6 +139,14 @@ The tasks.md should be immediately executable - each task must be specific enoug
|
|
|
139
139
|
|
|
140
140
|
**CRITICAL**: Tasks MUST be organized by user story to enable independent implementation and testing.
|
|
141
141
|
|
|
142
|
+
**Atomic + monitorable (NON-NEGOTIABLE)**:
|
|
143
|
+
- Every task is **one** independently verifiable atom (one acceptance point,
|
|
144
|
+
one file-scoped change, or one verification slice) — not a bundled mega-task.
|
|
145
|
+
- Every task is a markdown checkbox (`- [ ]` / `- [x]`) so progress is
|
|
146
|
+
monitorable; agents mark `[x]` as each atom completes.
|
|
147
|
+
- Prefer one task per Acceptance / independent-test criterion. No artificial
|
|
148
|
+
upper count; refine if still too coarse.
|
|
149
|
+
|
|
142
150
|
**Verification is DEFAULT**: For each user story, generate verification tasks
|
|
143
151
|
from `.duaer/memory/testing.md` (L0–L3 as the risk table requires). Do **not**
|
|
144
152
|
omit tests just because the Spec did not say “TDD”. Only skip a level when the
|
package/.duaer/active-job.json
CHANGED
|
@@ -41,3 +41,16 @@ cannot cover the path.
|
|
|
41
41
|
**Job handoff (not a git lock):** the agent reports accept/open itself.
|
|
42
42
|
Default policy `coach` — do not claim "done" while the active job is unfinished.
|
|
43
43
|
Do not send the human to run `duaer status` for routine work.
|
|
44
|
+
|
|
45
|
+
### V. Atomic verifiable tasks; progress must be monitorable (NON-NEGOTIABLE)
|
|
46
|
+
|
|
47
|
+
When breaking down work (`tasks.md`, kickoff task pool, or mid-job re-split):
|
|
48
|
+
|
|
49
|
+
1. **Atomic + verifiable:** each task covers **one** independently checkable
|
|
50
|
+
acceptance point or deliverable slice. Do not bundle unrelated acceptance
|
|
51
|
+
into a mega-task.
|
|
52
|
+
2. **Monitorable progress:** every task is a markdown checkbox
|
|
53
|
+
(`- [ ]` / `- [x]`). Mark `[x]` as soon as that atom is done so FDE / humans
|
|
54
|
+
can see progress. Do not replace checkboxes with prose-only status.
|
|
55
|
+
3. Prefer splitting Acceptance lines (and Goal slices) over inventing coarse
|
|
56
|
+
phases. There is **no** artificial upper count; refine if still too coarse.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T04:20:00.000Z",
|
|
4
|
+
"summary": "0.21.0 shipped: develop+main pushed, tag v0.21.0, GitHub Release, npm publish success.",
|
|
5
|
+
"verification": {
|
|
6
|
+
"commands": [
|
|
7
|
+
"git push origin develop main v0.21.0",
|
|
8
|
+
"gh release create v0.21.0",
|
|
9
|
+
"gh run watch 35420973848 → success",
|
|
10
|
+
"npm view duaer-spec version → 0.21.0"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"preview": {
|
|
14
|
+
"url": "https://www.npmjs.com/package/duaer-spec/v/0.21.0",
|
|
15
|
+
"label": "npm 0.21.0"
|
|
16
|
+
},
|
|
17
|
+
"release": "https://github.com/fujiezee/duaer-spec/releases/tag/v0.21.0"
|
|
18
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T04:50:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1"],
|
|
6
|
+
"commands": [
|
|
7
|
+
"node --check bin/live-modules.mjs bin/live-progress.mjs web/live-dev/task-graph.mjs web/live-dev/acceptance-lines.mjs",
|
|
8
|
+
"npm test (165 pass; atomic pool + preview split covered)"
|
|
9
|
+
],
|
|
10
|
+
"result": "pass"
|
|
11
|
+
},
|
|
12
|
+
"summary": "Atomic verifiable tasks with checkbox-monitorable progress: constitution, skills, kickoff pool + preview graph split acceptance lines."
|
|
13
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Feature Specification: Atomic verifiable tasks with monitorable progress
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/atomic-tasks`
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
When decomposing work (Break down / kickoff task pool / `tasks.md`), every
|
|
8
|
+
task MUST be an **atomic, independently verifiable** unit, and every task's
|
|
9
|
+
progress MUST be **monitorable** via a markdown checkbox that the FDE desk
|
|
10
|
+
(and agents) can poll.
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
Coarse mega-tasks hide progress and block wave orchestration. Acceptance
|
|
15
|
+
bundled into one line cannot be checked off piecemeal.
|
|
16
|
+
|
|
17
|
+
## In scope
|
|
18
|
+
|
|
19
|
+
- Constitution + duaer-do / duaer-tasks / template wording for the rule
|
|
20
|
+
- Kickoff `buildTaskPoolFromModules` splits module acceptance into one
|
|
21
|
+
checkbox task per acceptance line (plus impl / verify / shared steps)
|
|
22
|
+
- Preview task graph uses the same atomic split so path matches pool
|
|
23
|
+
- `tasks.md` footer / dispatch prompt reinforce: checkbox = progress signal
|
|
24
|
+
- Tests + E2E catalog row
|
|
25
|
+
|
|
26
|
+
## Out of scope
|
|
27
|
+
|
|
28
|
+
- Changing orchestration wave algorithm beyond richer ready sets
|
|
29
|
+
- Dedicated cloud / npm release
|
|
30
|
+
|
|
31
|
+
## Acceptance
|
|
32
|
+
|
|
33
|
+
1. Constitution (or equivalent always-on rule) states: decompose to atomic
|
|
34
|
+
verifiable tasks; each task progress monitorable via `- [ ]` / `- [x]`
|
|
35
|
+
2. Module with multi-line acceptance yields one task per acceptance line in
|
|
36
|
+
the task pool / `tasks.md`
|
|
37
|
+
3. Preview pool for the same modules has matching atomic acceptance tasks
|
|
38
|
+
4. Unit tests cover the split; E2E catalog mentions the rule
|
|
39
|
+
5. Agents following duaer-do Break down must not leave only coarse mega-tasks
|
|
40
|
+
|
|
41
|
+
## Assumptions
|
|
42
|
+
|
|
43
|
+
- Prefer splitting on acceptance lines / `;` / `;` (existing
|
|
44
|
+
`splitAcceptanceLines`) rather than LLM rephrasing at kickoff
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
- [x] T001 Add constitution + duaer-do / duaer-tasks / template rule
|
|
4
|
+
- [x] T002 Split acceptance into atomic tasks in live-modules pool
|
|
5
|
+
- [x] T003 Mirror atomic split in task-graph preview pool
|
|
6
|
+
- [x] T004 Strengthen tasks.md footer + dispatch prompt wording
|
|
7
|
+
- [x] T005 Unit tests + E2E catalog
|
|
8
|
+
- [x] T006 Stamp delivery accepted
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T07:40:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1", "L3"],
|
|
6
|
+
"commands": [
|
|
7
|
+
"node --check web/live-dev/i18n.js web/live-dev/i18n-ja.js web/live-dev/app.js bin/live-deliverables.mjs",
|
|
8
|
+
"npm test (168 pass incl. live-i18n-ja)",
|
|
9
|
+
"npm run test:live"
|
|
10
|
+
],
|
|
11
|
+
"result": "pass"
|
|
12
|
+
},
|
|
13
|
+
"summary": "Added Japanese (ja) live desk locale with full catalog parity, language select, and deliverables lang=ja."
|
|
14
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Feature Specification: Live desk Japanese locale (ja)
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-i18n-ja`
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Add **Japanese (`ja`)** as a third FDE live-desk language beside zh-CN and en.
|
|
8
|
+
Users can switch to 日本語; reload keeps the choice; desk copy updates.
|
|
9
|
+
|
|
10
|
+
## In scope
|
|
11
|
+
|
|
12
|
+
- `LOCALES` includes `ja`; full catalog for all i18n keys
|
|
13
|
+
- Language `<select>` option; `detectLocale` for `ja*` navigator
|
|
14
|
+
- Deliverables `lang=ja` + date/`html lang` handling
|
|
15
|
+
- app.js list join / toLocaleString for ja
|
|
16
|
+
- task-graph Archify locale passthrough
|
|
17
|
+
- E2E catalog + unit/smoke markers; CHANGELOG
|
|
18
|
+
|
|
19
|
+
## Out of scope
|
|
20
|
+
|
|
21
|
+
- Translating README / intro site / worker-models.md into Japanese
|
|
22
|
+
- Other locales beyond `ja`
|
|
23
|
+
|
|
24
|
+
## Acceptance
|
|
25
|
+
|
|
26
|
+
1. Language select shows 日本語 (`ja`); switching updates visible desk copy
|
|
27
|
+
2. Reload keeps `ja` via localStorage
|
|
28
|
+
3. Every key present in `en` exists in `ja` (no missing-key gaps in catalog parity test)
|
|
29
|
+
4. Deliverables HTML accepts `lang=ja`
|
|
30
|
+
5. `npm test` / required live smoke still pass
|
|
31
|
+
|
|
32
|
+
## Assumptions
|
|
33
|
+
|
|
34
|
+
- Default remains zh-CN when unset; `ja` browser language can auto-detect to ja
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
- [x] T001 Add ja catalog + LOCALES/detectLocale/setLocale wiring
|
|
4
|
+
- [x] T002 Language select option in index.html
|
|
5
|
+
- [x] T003 app.js / deliverables / task-graph ja handling
|
|
6
|
+
- [x] T004 Tests + E2E + docs + CHANGELOG
|
|
7
|
+
- [x] T005 Stamp delivery accepted
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T07:37:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L1"],
|
|
6
|
+
"commands": ["npm test (168 pass)", "gh release v0.22.0", "npm view duaer-spec version → 0.22.0"],
|
|
7
|
+
"result": "pass"
|
|
8
|
+
},
|
|
9
|
+
"summary": "Released 0.22.0 to GitHub and npm (ja locale + atomic tasks)."
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 205 — Release 0.22.0
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Ship 0.22.0: bump version + CHANGELOG, promote develop → main, push,
|
|
6
|
+
GitHub Release `v0.22.0`, trigger npm Trusted Publishing.
|
|
7
|
+
|
|
8
|
+
## Acceptance
|
|
9
|
+
|
|
10
|
+
1. `package.json` is `0.22.0`; CHANGELOG has `0.22.0` section (Unreleased cleared).
|
|
11
|
+
2. `develop` and `main` pushed with release commits.
|
|
12
|
+
3. GitHub Release `v0.22.0` published; npm shows `duaer-spec@0.22.0`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T12:45:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1", "L3"],
|
|
6
|
+
"commands": [
|
|
7
|
+
"npm test (173 pass)",
|
|
8
|
+
"npm run test:live"
|
|
9
|
+
],
|
|
10
|
+
"result": "pass"
|
|
11
|
+
},
|
|
12
|
+
"summary": "Top employee directory with Implementer + Functional regression; task roles and verify-l3 lane assignment."
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Feature Specification: Digital employee directory + role specialization
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/employee-directory`
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Add a top-bar **数字员工** directory listing specialized employees. Seed at
|
|
8
|
+
least: **Implementer** and **Functional regression** (Acceptance → Playwright /
|
|
9
|
+
testing.md L3). Kickoff tasks carry a `role`; multi-worker dispatch prefers
|
|
10
|
+
verify-l3 tasks on a dedicated lane.
|
|
11
|
+
|
|
12
|
+
## In scope
|
|
13
|
+
|
|
14
|
+
- Top button + drawer (same pattern as Projects)
|
|
15
|
+
- Catalog: implementer + regression (capabilities copy via i18n zh/en/ja)
|
|
16
|
+
- Task pool `role: implement | verify-l3`; markdown shows role
|
|
17
|
+
- When workerCount ≥ 2, assign verify-l3 tasks to the last worker lane
|
|
18
|
+
- Kickoff prompts include role blurb for owned roles
|
|
19
|
+
- Docs / E2E / tests
|
|
20
|
+
|
|
21
|
+
## Out of scope
|
|
22
|
+
|
|
23
|
+
- New CLI runtimes (still Cursor / Claude)
|
|
24
|
+
- jev-ultrafast / browser-use agent
|
|
25
|
+
- User-editable custom employees
|
|
26
|
+
|
|
27
|
+
## Acceptance
|
|
28
|
+
|
|
29
|
+
1. Top bar has 数字员工; drawer lists implementer + regression with capability text
|
|
30
|
+
2. Kickoff task-pool.json tasks include `role`
|
|
31
|
+
3. workerCount≥2 puts verify-l3 tasks on last worker
|
|
32
|
+
4. Unit tests + E2E catalog row; live smoke markers if needed
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T12:55:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1"],
|
|
6
|
+
"commands": ["node --check bin/duaer-live.mjs", "npm test (173 pass)"],
|
|
7
|
+
"result": "pass"
|
|
8
|
+
},
|
|
9
|
+
"summary": "Parent folder picker activates Finder (frontmost) and path field click opens pick; async so HTTP stays responsive."
|
|
10
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Fix: projects parent folder picker unusable
|
|
2
|
+
|
|
3
|
+
## Symptom
|
|
4
|
+
|
|
5
|
+
Clicking 产品父目录 / 选择… does not yield a usable folder choice (dialog
|
|
6
|
+
behind other windows, or readonly field ignores clicks).
|
|
7
|
+
|
|
8
|
+
## Cause
|
|
9
|
+
|
|
10
|
+
`pickFolderNative` uses `osascript choose folder` without activating a UI
|
|
11
|
+
app, so the dialog often stays behind the browser. The path field is
|
|
12
|
+
readonly with no click handler.
|
|
13
|
+
|
|
14
|
+
## Acceptance
|
|
15
|
+
|
|
16
|
+
1. Clicking **选择…** or the readonly parent path opens a frontmost macOS
|
|
17
|
+
folder dialog (Finder-activated).
|
|
18
|
+
2. Pick is async (HTTP event loop not blocked by spawnSync).
|
|
19
|
+
3. Cancel leaves previous `projectsRoot` unchanged.
|
|
20
|
+
4. Unit markers + L0 check.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T13:10:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1"],
|
|
6
|
+
"commands": ["node --test test/arch-fullscreen.test.mjs test/live-archify.test.mjs", "npm test"],
|
|
7
|
+
"result": "pass"
|
|
8
|
+
},
|
|
9
|
+
"summary": "Architecture mount click opens present fullscreen only; embed node zoom disabled."
|
|
10
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Spec: Architecture click opens fullscreen only
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
On the live desk system-architecture (and same-style) mounts, a click opens the
|
|
6
|
+
fullscreen present view. Node zoom / enlarge-on-click in the embed is removed.
|
|
7
|
+
|
|
8
|
+
## In scope
|
|
9
|
+
|
|
10
|
+
- Host click (capture) opens `present=1` fullscreen and stops Archify node zoom
|
|
11
|
+
- Disable desk embed `installDesktopReveal` zoom path
|
|
12
|
+
- Update E2E catalog lines that still require embed node zoom
|
|
13
|
+
|
|
14
|
+
## Out of scope
|
|
15
|
+
|
|
16
|
+
- Changing fullscreen present page itself
|
|
17
|
+
- Removing the explicit「全屏查看」button
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
|
|
21
|
+
- [ ] Clicking the architecture diagram opens fullscreen present (new tab)
|
|
22
|
+
- [ ] Clicking a node does not zoom / enlarge that node in the desk embed
|
|
23
|
+
- [ ] Task-path / revise mounts keep the same click → fullscreen behavior
|
|
24
|
+
- [ ] Tests and E2E catalog match the new behavior
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-19T13:20:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1"],
|
|
6
|
+
"commands": ["npm test (173 pass)"],
|
|
7
|
+
"result": "pass"
|
|
8
|
+
},
|
|
9
|
+
"summary": "Wave continue enqueues while lane busy; agents exit after wave instead of silent hang deadlock."
|
|
10
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Spec: Fix orchestration wave deadlock after silent wait
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
After a wave finishes and `tasks.md` is checked, the orchestrator must release
|
|
6
|
+
the next ready wave. Agents must not sit in a live Terminal session waiting —
|
|
7
|
+
that keeps `lane_busy` and blocks continue forever.
|
|
8
|
+
|
|
9
|
+
## In scope
|
|
10
|
+
|
|
11
|
+
- Prompt: after a wave, exit the CLI session so the runner becomes idle /
|
|
12
|
+
can drain a queued `--continue`
|
|
13
|
+
- `pendingWaveReleases`: enqueue next wave even when the lane is busy
|
|
14
|
+
(FIFO serialize); do not stall on `lane_busy`
|
|
15
|
+
- Accept-nudge: same enqueue-when-busy behavior
|
|
16
|
+
- Docs / tests / E2E note
|
|
17
|
+
|
|
18
|
+
## Out of scope
|
|
19
|
+
|
|
20
|
+
- Changing dependsOn / atomic task splitting
|
|
21
|
+
- Fixing polluted startCommand content from other projects (separate)
|
|
22
|
+
|
|
23
|
+
## Acceptance
|
|
24
|
+
|
|
25
|
+
- [ ] Status with T001 done + next wave ready enqueues/releases while lane busy
|
|
26
|
+
- [ ] Prompts no longer tell the agent to 静默停等 with the session held open
|
|
27
|
+
- [ ] Unit tests updated; npm test passes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 210 — Release 0.23.0
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Ship 0.23.0: bump version + CHANGELOG, promote develop → main, push,
|
|
6
|
+
GitHub Release `v0.23.0`, trigger npm Trusted Publishing.
|
|
7
|
+
|
|
8
|
+
## Acceptance
|
|
9
|
+
|
|
10
|
+
1. `package.json` is `0.23.0`; CHANGELOG has `0.23.0` section (Unreleased cleared).
|
|
11
|
+
2. `develop` and `main` both contain the release; tag `v0.23.0` pushed.
|
|
12
|
+
3. GitHub Release `v0.23.0` published; npm shows `duaer-spec@0.23.0`.
|
|
@@ -15,6 +15,10 @@ TDD-style tests-before-code remain encouraged when useful.
|
|
|
15
15
|
|
|
16
16
|
**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story.
|
|
17
17
|
|
|
18
|
+
**Atomic + monitorable**: Each checkbox is one independently verifiable atom.
|
|
19
|
+
Progress is only via `- [ ]` / `- [x]` — no prose-only status. Split Acceptance
|
|
20
|
+
into one task per criterion; no artificial upper count.
|
|
21
|
+
|
|
18
22
|
## Format: `[ID] [P?] [Story] Description`
|
|
19
23
|
|
|
20
24
|
- **[P]**: Can run in parallel (different files, no dependencies)
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.23.0 — 2026-09-19
|
|
6
|
+
|
|
7
|
+
### Fix: orchestration wave release no longer deadlocks on silent wait
|
|
8
|
+
|
|
9
|
+
- Next ready wave is FIFO-enqueued even when the Terminal lane is busy
|
|
10
|
+
- After a wave, agents exit the CLI session (no hang waiting for continue)
|
|
11
|
+
|
|
12
|
+
### Fix: architecture embed click opens fullscreen only
|
|
13
|
+
|
|
14
|
+
- Desk diagram click (capture) opens present fullscreen and does not zoom nodes
|
|
15
|
+
- Embed `reveal` zoom path disabled; focus-chip hidden on the mount
|
|
16
|
+
|
|
17
|
+
### Fix: projects parent folder picker frontmost + clickable path
|
|
18
|
+
|
|
19
|
+
- macOS folder dialog activates Finder so it is not buried behind the browser
|
|
20
|
+
- Pick is async (no spawnSync on the HTTP thread)
|
|
21
|
+
- Clicking the readonly parent path also opens the picker
|
|
22
|
+
|
|
23
|
+
### Feat: digital employee directory + role specialization
|
|
24
|
+
|
|
25
|
+
- Top bar **数字员工** drawer lists Implementer and Functional regression
|
|
26
|
+
- Kickoff tasks carry `role: implement | verify-l3`; multi-worker puts
|
|
27
|
+
verify-l3 on the last lane; prompts include role blurbs
|
|
28
|
+
|
|
29
|
+
## 0.22.0 — 2026-09-19
|
|
30
|
+
|
|
31
|
+
### Feat: Japanese (ja) live desk locale
|
|
32
|
+
|
|
33
|
+
- Language select adds 日本語; catalog covers all en keys
|
|
34
|
+
- Deliverables API accepts `lang=ja`; dates / HTML `lang` use ja-JP
|
|
35
|
+
|
|
36
|
+
### Feat: atomic verifiable tasks with monitorable progress
|
|
37
|
+
|
|
38
|
+
- Constitution + duaer-do / duaer-tasks: decompose to one independently
|
|
39
|
+
verifiable atom per checkbox; progress only via `- [ ]` / `- [x]`
|
|
40
|
+
- Kickoff task pool and preview graph split multi-line acceptance into
|
|
41
|
+
one task per criterion so FDE can monitor and release waves
|
|
42
|
+
|
|
5
43
|
## 0.21.0 — 2026-09-19
|
|
6
44
|
|
|
7
45
|
### Feat: click architecture diagram for fullscreen present view
|