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.
Files changed (50) hide show
  1. package/.claude/rules/duaer-spec.md +5 -2
  2. package/.cursor/rules/duaer-spec.mdc +5 -2
  3. package/.cursor/skills/duaer-do/SKILL.md +7 -1
  4. package/.cursor/skills/duaer-tasks/SKILL.md +8 -0
  5. package/.duaer/active-job.json +2 -3
  6. package/.duaer/memory/constitution.md +13 -0
  7. package/.duaer/specs/202-release-021/delivery.json +18 -0
  8. package/.duaer/specs/202-release-021/tasks.md +2 -2
  9. package/.duaer/specs/203-atomic-monitorable-tasks/delivery.json +13 -0
  10. package/.duaer/specs/203-atomic-monitorable-tasks/spec.md +44 -0
  11. package/.duaer/specs/203-atomic-monitorable-tasks/tasks.md +8 -0
  12. package/.duaer/specs/204-live-i18n-ja/delivery.json +14 -0
  13. package/.duaer/specs/204-live-i18n-ja/spec.md +34 -0
  14. package/.duaer/specs/204-live-i18n-ja/tasks.md +7 -0
  15. package/.duaer/specs/205-release-022/delivery.json +10 -0
  16. package/.duaer/specs/205-release-022/spec.md +12 -0
  17. package/.duaer/specs/205-release-022/tasks.md +6 -0
  18. package/.duaer/specs/206-employee-directory/delivery.json +13 -0
  19. package/.duaer/specs/206-employee-directory/spec.md +32 -0
  20. package/.duaer/specs/206-employee-directory/tasks.md +6 -0
  21. package/.duaer/specs/207-fix-projects-root-pick/delivery.json +10 -0
  22. package/.duaer/specs/207-fix-projects-root-pick/spec.md +20 -0
  23. package/.duaer/specs/207-fix-projects-root-pick/tasks.md +5 -0
  24. package/.duaer/specs/208-arch-click-fullscreen/delivery.json +10 -0
  25. package/.duaer/specs/208-arch-click-fullscreen/spec.md +24 -0
  26. package/.duaer/specs/208-arch-click-fullscreen/tasks.md +6 -0
  27. package/.duaer/specs/209-orch-wave-deadlock/delivery.json +10 -0
  28. package/.duaer/specs/209-orch-wave-deadlock/spec.md +27 -0
  29. package/.duaer/specs/209-orch-wave-deadlock/tasks.md +5 -0
  30. package/.duaer/specs/210-release-023/spec.md +12 -0
  31. package/.duaer/specs/210-release-023/tasks.md +6 -0
  32. package/.duaer/templates/tasks-template.md +4 -0
  33. package/CHANGELOG.md +38 -0
  34. package/bin/duaer-live.mjs +121 -54
  35. package/bin/live-deliverables.mjs +116 -36
  36. package/bin/live-modules.mjs +68 -10
  37. package/bin/live-orchestrate.mjs +2 -11
  38. package/bin/live-progress.mjs +7 -38
  39. package/docs/agent/e2e-test-plan.md +14 -8
  40. package/docs/agent/live-desk.md +11 -2
  41. package/package.json +1 -1
  42. package/web/live-dev/acceptance-lines.mjs +42 -0
  43. package/web/live-dev/app.js +131 -13
  44. package/web/live-dev/architecture-mount.mjs +16 -55
  45. package/web/live-dev/employee-catalog.mjs +54 -0
  46. package/web/live-dev/i18n-ja.js +494 -0
  47. package/web/live-dev/i18n.js +30 -5
  48. package/web/live-dev/index.html +27 -0
  49. package/web/live-dev/styles.css +41 -0
  50. 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. Merge to **`develop`** when done (hotfix: **`main`**, then back-merge
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
- 7. **Handoff (mandatory):** stop processes bound to `.worktree/<id>/`, remove
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. Merge to **`develop`** when done (hotfix: **`main`**, then back-merge
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
- 7. **Handoff (mandatory):** stop processes bound to `.worktree/<id>/`, remove
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 short checklist from the Spec.
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
@@ -1,5 +1,4 @@
1
1
  {
2
- "featureDir": ".duaer/specs/202-release-021",
3
- "slug": "202-release-021",
4
- "branch": "chore/release-021"
2
+ "feature": "210-release-023",
3
+ "specDir": ".duaer/specs/210-release-023"
5
4
  }
@@ -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
+ }
@@ -1,5 +1,5 @@
1
1
  # Tasks — 202-release-021
2
2
 
3
3
  - [x] Brief
4
- - [ ] Bump 0.21.0 + CHANGELOG
5
- - [ ] Promote / push / release / npm
4
+ - [x] Bump 0.21.0 + CHANGELOG
5
+ - [x] Promote / push / release / npm
@@ -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,6 @@
1
+ # Tasks
2
+
3
+ - [x] T001 Bump package.json to 0.22.0 and move CHANGELOG Unreleased
4
+ - [x] T002 Merge release branch to develop
5
+ - [x] T003 Promote develop → main, push, tag, gh release, npm
6
+ - [x] T004 Stamp delivery accepted
@@ -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,6 @@
1
+ # Tasks
2
+
3
+ - [x] T001 Employee catalog module + task role on pool
4
+ - [x] T002 Top directory drawer UI + i18n
5
+ - [x] T003 Assign verify-l3 to last lane; kickoff role prompts
6
+ - [x] T004 Docs tests CHANGELOG stamp
@@ -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,5 @@
1
+ # Tasks
2
+
3
+ - [x] T001 Async Finder-activated pickFolderNative
4
+ - [x] T002 Path field click opens pick; tests/docs
5
+ - [x] T003 Stamp accepted
@@ -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,6 @@
1
+ # Tasks
2
+
3
+ - [x] T001 Capture-phase click opens present; stop Archify node handlers
4
+ - [x] T002 Disable embed node zoom in architecture-mount
5
+ - [x] T003 Update E2E / CHANGELOG / unit tests
6
+ - [x] T004 Verify and stamp accepted
@@ -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,5 @@
1
+ # Tasks
2
+
3
+ - [x] T001 Enqueue next wave even when lane busy
4
+ - [x] T002 Prompt: exit session after wave (no silent hang)
5
+ - [x] T003 Tests, CHANGELOG, E2E; stamp accepted
@@ -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`.
@@ -0,0 +1,6 @@
1
+ # Tasks
2
+
3
+ - [ ] T001 Bump package.json to 0.23.0 and move CHANGELOG Unreleased
4
+ - [ ] T002 Merge release branch to develop
5
+ - [ ] T003 Promote develop → main, push, tag, gh release, npm
6
+ - [ ] T004 Stamp delivery accepted
@@ -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