duaer-spec 0.1.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/.cursor/rules/agents-workflow.mdc +50 -0
- package/.cursor/rules/ai-ui-copy.mdc +12 -0
- package/.cursor/rules/duaer-spec.mdc +33 -0
- package/.cursor/skills/duaer-analyze/SKILL.md +259 -0
- package/.cursor/skills/duaer-checklist/SKILL.md +383 -0
- package/.cursor/skills/duaer-clarify/SKILL.md +291 -0
- package/.cursor/skills/duaer-constitution/SKILL.md +177 -0
- package/.cursor/skills/duaer-converge/SKILL.md +277 -0
- package/.cursor/skills/duaer-git-commit/SKILL.md +68 -0
- package/.cursor/skills/duaer-git-feature/SKILL.md +94 -0
- package/.cursor/skills/duaer-git-initialize/SKILL.md +54 -0
- package/.cursor/skills/duaer-git-remote/SKILL.md +50 -0
- package/.cursor/skills/duaer-git-validate/SKILL.md +54 -0
- package/.cursor/skills/duaer-implement/SKILL.md +226 -0
- package/.cursor/skills/duaer-plan/SKILL.md +166 -0
- package/.cursor/skills/duaer-specify/SKILL.md +345 -0
- package/.cursor/skills/duaer-tasks/SKILL.md +214 -0
- package/.cursor/skills/duaer-taskstoissues/SKILL.md +109 -0
- package/.duaer/extensions/.registry +23 -0
- package/.duaer/extensions/git/README.md +119 -0
- package/.duaer/extensions/git/commands/duaer.git.commit.md +63 -0
- package/.duaer/extensions/git/commands/duaer.git.feature.md +82 -0
- package/.duaer/extensions/git/commands/duaer.git.initialize.md +49 -0
- package/.duaer/extensions/git/commands/duaer.git.remote.md +45 -0
- package/.duaer/extensions/git/commands/duaer.git.validate.md +49 -0
- package/.duaer/extensions/git/config-template.yml +79 -0
- package/.duaer/extensions/git/extension.yml +142 -0
- package/.duaer/extensions/git/git-config.yml +79 -0
- package/.duaer/extensions/git/scripts/bash/auto-commit.sh +211 -0
- package/.duaer/extensions/git/scripts/bash/create-new-feature-branch.sh +626 -0
- package/.duaer/extensions/git/scripts/bash/git-common.sh +56 -0
- package/.duaer/extensions/git/scripts/bash/initialize-repo.sh +54 -0
- package/.duaer/extensions/git/scripts/powershell/auto-commit.ps1 +230 -0
- package/.duaer/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +592 -0
- package/.duaer/extensions/git/scripts/powershell/git-common.ps1 +52 -0
- package/.duaer/extensions/git/scripts/powershell/initialize-repo.ps1 +69 -0
- package/.duaer/extensions/git/scripts/python/auto_commit.py +195 -0
- package/.duaer/extensions/git/scripts/python/create_new_feature_branch.py +634 -0
- package/.duaer/extensions/git/scripts/python/git_common.py +81 -0
- package/.duaer/extensions/git/scripts/python/initialize_repo.py +89 -0
- package/.duaer/extensions.yml +167 -0
- package/.duaer/init-options.json +9 -0
- package/.duaer/integration.json +15 -0
- package/.duaer/integrations/cursor-agent.manifest.json +17 -0
- package/.duaer/integrations/duaer.manifest.json +19 -0
- package/.duaer/memory/.constitution-template.json +4 -0
- package/.duaer/memory/constitution.md +37 -0
- package/.duaer/memory/project-context.md +24 -0
- package/.duaer/memory/testing.md +14 -0
- package/.duaer/scripts/bash/check-prerequisites.sh +243 -0
- package/.duaer/scripts/bash/common.sh +926 -0
- package/.duaer/scripts/bash/create-new-feature.sh +407 -0
- package/.duaer/scripts/bash/resolve-template.sh +57 -0
- package/.duaer/scripts/bash/setup-plan.sh +85 -0
- package/.duaer/scripts/bash/setup-tasks.sh +94 -0
- package/.duaer/templates/checklist-template.md +45 -0
- package/.duaer/templates/constitution-template.md +50 -0
- package/.duaer/templates/plan-template.md +113 -0
- package/.duaer/templates/spec-template.md +131 -0
- package/.duaer/templates/tasks-template.md +252 -0
- package/.duaer/workflows/duaer/workflow.yml +78 -0
- package/.duaer/workflows/workflow-registry.json +13 -0
- package/ADOPT.md +75 -0
- package/AGENTS.md +290 -0
- package/CHANGELOG.md +28 -0
- package/DUADER.md +57 -0
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/bin/duaer.mjs +298 -0
- package/docs/agent/README.md +12 -0
- package/docs/agent/change-checklist.md +130 -0
- package/docs/agent/e2e-test-plan.md +33 -0
- package/docs/agent/workflow.md +127 -0
- package/docs/baseline.md +10 -0
- package/package.json +49 -0
package/ADOPT.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Adopt duaer-spec
|
|
2
|
+
|
|
3
|
+
Install the **Duaer** methodology and agent-ops contract into another
|
|
4
|
+
repository.
|
|
5
|
+
|
|
6
|
+
## Recommended: CLI
|
|
7
|
+
|
|
8
|
+
From the target project (Node 18+):
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# GitHub pin
|
|
12
|
+
npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
|
|
13
|
+
|
|
14
|
+
# npm (after publish)
|
|
15
|
+
npx duaer-spec init --here
|
|
16
|
+
|
|
17
|
+
# method only / ops only / other integration branch
|
|
18
|
+
npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here --method
|
|
19
|
+
npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here --ops --branch develop
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
From a clone of this repo:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node bin/duaer.mjs init /path/to/project --all
|
|
26
|
+
node bin/duaer.mjs check /path/to/project
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`--force` overwrites managed files.
|
|
30
|
+
|
|
31
|
+
Then:
|
|
32
|
+
|
|
33
|
+
1. Edit `.duaer/memory/constitution.md` and `project-context.md` for the product
|
|
34
|
+
2. Confirm `docs/baseline.md` (integration branch)
|
|
35
|
+
3. Use `/duaer-specify` → `/duaer-plan` → `/duaer-tasks` → `/duaer-implement` → `/duaer-converge`
|
|
36
|
+
|
|
37
|
+
## Manual copy (optional)
|
|
38
|
+
|
|
39
|
+
### Agent ops
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cp AGENTS.md /path/to/project/
|
|
43
|
+
mkdir -p /path/to/project/.cursor/rules /path/to/project/docs/agent
|
|
44
|
+
cp .cursor/rules/agents-workflow.mdc /path/to/project/.cursor/rules/
|
|
45
|
+
cp .cursor/rules/ai-ui-copy.mdc /path/to/project/.cursor/rules/
|
|
46
|
+
cp docs/agent/workflow.md docs/agent/change-checklist.md docs/agent/e2e-test-plan.md \
|
|
47
|
+
/path/to/project/docs/agent/
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Duaer method
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
rsync -a .duaer/ /path/to/project/.duaer/
|
|
54
|
+
mkdir -p /path/to/project/.cursor/skills /path/to/project/.cursor/rules
|
|
55
|
+
rsync -a .cursor/skills/ /path/to/project/.cursor/skills/
|
|
56
|
+
cp .cursor/rules/duaer-spec.mdc /path/to/project/.cursor/rules/
|
|
57
|
+
cp DUADER.md /path/to/project/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Precedence
|
|
61
|
+
|
|
62
|
+
1. `AGENTS.md` / agent-ops — how agents operate
|
|
63
|
+
2. `DUADER.md` / `.duaer/` — what to build
|
|
64
|
+
3. Product overlays (do not copy `examples/` blindly)
|
|
65
|
+
|
|
66
|
+
## Updates
|
|
67
|
+
|
|
68
|
+
Re-run `duaer init --force` (review the diff) or pin to a commit/tag. Adopters
|
|
69
|
+
are not auto-updated.
|
|
70
|
+
|
|
71
|
+
## Do not copy
|
|
72
|
+
|
|
73
|
+
- `examples/` — samples only
|
|
74
|
+
- `SOURCE.md` — provenance for maintainers
|
|
75
|
+
- `bin/` / `package.json` — only needed if you vendor the CLI itself
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Mandatory rules for AI coding agents working in **duaer-spec**, and for any
|
|
4
|
+
repository that adopts this file as its agent-ops contract.
|
|
5
|
+
|
|
6
|
+
This file is authoritative for *how* agents operate. If Duaer (`.duaer/`,
|
|
7
|
+
`DUADER.md`), `examples/`, or other overlays conflict with this file,
|
|
8
|
+
**follow this file**.
|
|
9
|
+
|
|
10
|
+
See also: [workflow](docs/agent/workflow.md) · [change checklist](docs/agent/change-checklist.md) · [ADOPT](ADOPT.md)
|
|
11
|
+
|
|
12
|
+
## Language
|
|
13
|
+
|
|
14
|
+
Use English for code, identifiers, comments, commits, specifications, and
|
|
15
|
+
documentation unless the adopting project explicitly overrides.
|
|
16
|
+
|
|
17
|
+
Follow the project's [baseline](docs/baseline.md) (or its local equivalent).
|
|
18
|
+
|
|
19
|
+
## GitHub Issue Handling
|
|
20
|
+
|
|
21
|
+
When the user provides a GitHub issue URL (or an unambiguous issue number for
|
|
22
|
+
this repository), treat it as an intake gate. Do not start implementation
|
|
23
|
+
until the reported problem has been independently verified.
|
|
24
|
+
|
|
25
|
+
1. Fetch the issue (title, body, labels, comments, and state).
|
|
26
|
+
2. Decide whether the claim is real in the current codebase:
|
|
27
|
+
- Bug: reproduce it, or show concrete code/spec evidence that it exists.
|
|
28
|
+
- Feature or improvement: confirm the requested behavior is actually missing
|
|
29
|
+
or incomplete, and in scope.
|
|
30
|
+
3. If the problem does **not** exist (already fixed, invalid, or a
|
|
31
|
+
misunderstanding): comment on the issue with the verification evidence, and
|
|
32
|
+
close the issue when the conclusion is clear. If verification is
|
|
33
|
+
inconclusive, comment with what was tried and leave the issue open.
|
|
34
|
+
4. If the problem **does** exist: follow the isolated development workflow,
|
|
35
|
+
implement the smallest coherent fix, merge into local `main`, then comment
|
|
36
|
+
on the issue and close it.
|
|
37
|
+
5. Write the issue comment in the issue's language (the language of the
|
|
38
|
+
original title and body). Repository docs, code, and commits stay English
|
|
39
|
+
unless the project overrides.
|
|
40
|
+
6. An issue link authorizes commenting on and closing **that** issue. It does
|
|
41
|
+
not authorize a git push. Remote publishing remains opt-in.
|
|
42
|
+
|
|
43
|
+
Do not comment on or close unrelated issues. Do not reopen a closed issue
|
|
44
|
+
unless the user explicitly asks.
|
|
45
|
+
|
|
46
|
+
See [R5](docs/agent/workflow.md#r5--verify-linked-github-issues-before-work-then-reply-and-close).
|
|
47
|
+
|
|
48
|
+
## GitHub Pull Request Handling
|
|
49
|
+
|
|
50
|
+
When the user provides a GitHub pull request URL (or an unambiguous pull
|
|
51
|
+
request number for this repository), treat it as an intake gate. Review the
|
|
52
|
+
principle first. Do not rewrite the pull request as a replacement for the
|
|
53
|
+
contributor's work. Do not create a replacement request branch or worktree
|
|
54
|
+
until that decision is made. If merging, start follow-up only after the pull
|
|
55
|
+
request is in `main`.
|
|
56
|
+
|
|
57
|
+
1. Fetch the pull request (title, body, files, commits, comments, checks,
|
|
58
|
+
draft state, base/head, and linked issues).
|
|
59
|
+
2. Decide whether the **principle** is sound in the current codebase:
|
|
60
|
+
- The change addresses a real, in-scope problem.
|
|
61
|
+
- The approach is compatible with the baseline, security boundaries, and
|
|
62
|
+
architecture (or is a justified spec-backed amendment).
|
|
63
|
+
- Judge the direction, not whether the pull request already satisfies
|
|
64
|
+
spec-sync, tests, style, or other completeness rules.
|
|
65
|
+
3. If the principle is sound: merge **that** pull request first, preserving
|
|
66
|
+
the contributor's commits. If the head branch lives in a fork (third-party
|
|
67
|
+
contributor), run the project's relevant local automated suites against the
|
|
68
|
+
head first when the project has them; a failing required suite is a landing
|
|
69
|
+
blocker, not a follow-up. Completeness gaps (specs, tests, i18n, e2e docs,
|
|
70
|
+
style, naming, commit-message nits) are follow-up work after merge, not
|
|
71
|
+
merge blockers. Landing blockers that would break `main` may receive the
|
|
72
|
+
smallest commits on top of the author's work so the pull request can land.
|
|
73
|
+
Then follow the isolated development workflow for any follow-up.
|
|
74
|
+
4. If the principle is not sound, or a harm blocker exists (secrets, sandbox
|
|
75
|
+
or privilege bypass, malicious or clearly destructive changes, out-of-scope
|
|
76
|
+
reversal of a frozen decision): do not merge. Comment with the evidence.
|
|
77
|
+
Do not silently reimplement the same idea as if the pull request never
|
|
78
|
+
existed.
|
|
79
|
+
5. Do not merge a draft pull request the author has not marked ready, unless
|
|
80
|
+
the user explicitly asks to merge the draft.
|
|
81
|
+
6. Write the pull request comment in the pull request's language. Repository
|
|
82
|
+
docs, code, and commits stay English unless the project overrides.
|
|
83
|
+
7. A pull request link authorizes reviewing, commenting on, and merging
|
|
84
|
+
**that** pull request. It does not authorize a force-push of the
|
|
85
|
+
contributor's branch or publishing unrelated branches. Follow-up remote
|
|
86
|
+
publishing remains opt-in.
|
|
87
|
+
|
|
88
|
+
Do not comment on or merge unrelated pull requests.
|
|
89
|
+
|
|
90
|
+
See [R6](docs/agent/workflow.md#r6--merge-a-linked-pull-request-whose-principle-is-sound-then-follow-up).
|
|
91
|
+
|
|
92
|
+
## AI-Generated Page Content
|
|
93
|
+
|
|
94
|
+
AI-generated pages must not contain redundant explanatory text. Keep visible
|
|
95
|
+
copy limited to the information and actions users need to complete the task:
|
|
96
|
+
|
|
97
|
+
* Do not add filler introductions, repeated summaries, implementation notes,
|
|
98
|
+
or prose that merely explains an obvious control or layout.
|
|
99
|
+
* Prefer concise labels, headings, helper text, and empty states.
|
|
100
|
+
* Put rationale and implementation detail in documentation or code comments,
|
|
101
|
+
not in the page UI, unless the user explicitly requests explanatory content.
|
|
102
|
+
|
|
103
|
+
## Mandatory Isolated Development
|
|
104
|
+
|
|
105
|
+
Every request must use its own dedicated branch and worktree.
|
|
106
|
+
|
|
107
|
+
A linked GitHub pull request is reviewed and, when the principle is sound,
|
|
108
|
+
merged before any replacement implementation worktree is created (R6).
|
|
109
|
+
Landing-blocker commits, if needed, go on top of the author's branch.
|
|
110
|
+
|
|
111
|
+
Before modifying any file, the agent must:
|
|
112
|
+
|
|
113
|
+
1. Update the primary checkout's local `main`
|
|
114
|
+
2. Create a unique branch from the updated `main`
|
|
115
|
+
3. Create a dedicated worktree for that branch
|
|
116
|
+
4. Enter the new worktree
|
|
117
|
+
5. Only then begin development
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
git switch main
|
|
123
|
+
git pull --ff-only
|
|
124
|
+
git worktree add ../worktrees/<request-id> -b <type>/<request-id> main
|
|
125
|
+
cd ../worktrees/<request-id>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Branch and worktree names must be unique and clearly associated with the request.
|
|
129
|
+
|
|
130
|
+
**This repository's default integration branch is `main`.** Adopting projects
|
|
131
|
+
may substitute another long-lived branch (for example `develop`); document that
|
|
132
|
+
override in the project baseline. Do not inherit git policy from `examples/`.
|
|
133
|
+
|
|
134
|
+
## Multi-Agent Isolation
|
|
135
|
+
|
|
136
|
+
* Each agent must use its own branch and worktree
|
|
137
|
+
* Never develop directly in the primary checkout
|
|
138
|
+
* Never develop directly on `main` (or the project's integration branch)
|
|
139
|
+
* Never reuse another agent's branch or worktree
|
|
140
|
+
* Never modify files inside another request's worktree
|
|
141
|
+
* Never switch another agent's branch
|
|
142
|
+
* Never delete another agent's branch or worktree
|
|
143
|
+
* Never include unrelated changes from another request
|
|
144
|
+
* Do not commit local environment files, caches, databases, or secrets
|
|
145
|
+
|
|
146
|
+
The primary checkout is reserved for synchronizing and merging the integration
|
|
147
|
+
branch. Shared toolchains and caches may be reused when that cannot modify
|
|
148
|
+
tracked files or interfere with another worktree.
|
|
149
|
+
|
|
150
|
+
## Immutable Rules
|
|
151
|
+
|
|
152
|
+
### 1. Keep Specs Synchronized
|
|
153
|
+
|
|
154
|
+
Every behavior change must update the relevant project specification
|
|
155
|
+
(commonly under `docs/spec/`, Duaer feature specs, or this repo's
|
|
156
|
+
`docs/agent/` when changing duaer-spec itself).
|
|
157
|
+
|
|
158
|
+
Add an ADR under `docs/adr/` when changing architecture, public interfaces,
|
|
159
|
+
data ownership, security boundaries, or frozen decisions.
|
|
160
|
+
|
|
161
|
+
### 2. Commit Every Logical Change
|
|
162
|
+
|
|
163
|
+
* One logical change per commit
|
|
164
|
+
* No large uncommitted diffs
|
|
165
|
+
* No unrelated cleanup
|
|
166
|
+
* Leave the request worktree clean
|
|
167
|
+
|
|
168
|
+
### 3. Keep E2E Documentation Synchronized
|
|
169
|
+
|
|
170
|
+
Every user-visible or protocol-visible behavior change must add or update a
|
|
171
|
+
scenario in the project's E2E catalog (template:
|
|
172
|
+
[e2e-test-plan](docs/agent/e2e-test-plan.md)).
|
|
173
|
+
|
|
174
|
+
Do not run local E2E commands or manually trigger remote E2E jobs unless
|
|
175
|
+
explicitly requested by the user, **except** for forked third-party pull
|
|
176
|
+
request heads when the project requires local suites before merge. Record the
|
|
177
|
+
result in the pull request comment.
|
|
178
|
+
|
|
179
|
+
### 4. Merge Back into Local `main`
|
|
180
|
+
|
|
181
|
+
After development:
|
|
182
|
+
|
|
183
|
+
1. Complete targeted validation
|
|
184
|
+
2. Review the complete diff
|
|
185
|
+
3. Commit all logical changes
|
|
186
|
+
4. Update the request branch with the latest local `main`
|
|
187
|
+
5. Resolve conflicts inside the request worktree
|
|
188
|
+
6. Return to the primary checkout
|
|
189
|
+
7. Merge the request branch into local `main`
|
|
190
|
+
8. Verify the expected commits are present
|
|
191
|
+
9. Remove the request worktree
|
|
192
|
+
10. Delete the merged request branch
|
|
193
|
+
11. Push only when the user explicitly requested remote publishing for the
|
|
194
|
+
current request
|
|
195
|
+
|
|
196
|
+
If another agent has updated `main`, refresh the request branch before merging
|
|
197
|
+
(`git fetch` then `git rebase main`, or merge if project policy requires it).
|
|
198
|
+
|
|
199
|
+
Do not overwrite, reset, or discard changes already merged by another agent.
|
|
200
|
+
|
|
201
|
+
Remote publishing is opt-in. Never infer a push from ordinary development,
|
|
202
|
+
commit, merge, or completion requests. Never force-push unless the user
|
|
203
|
+
explicitly requests that exact operation.
|
|
204
|
+
|
|
205
|
+
### 5. Clean Up the Request Worktree
|
|
206
|
+
|
|
207
|
+
Once the request branch is merged into local `main`, remove its worktree and
|
|
208
|
+
delete the merged branch. Never leave a merged worktree on disk.
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
git worktree remove ../worktrees/<request-id>
|
|
212
|
+
git branch -d <type>/<request-id>
|
|
213
|
+
git worktree prune
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
* Remove only after verifying merge commits are present in local `main`
|
|
217
|
+
* The worktree must be clean first
|
|
218
|
+
* Use `git branch -d` (not `-D`)
|
|
219
|
+
* Delete only your own worktree and branch
|
|
220
|
+
|
|
221
|
+
## Development Workflow
|
|
222
|
+
|
|
223
|
+
1. Update local `main`
|
|
224
|
+
2. Create a unique request branch
|
|
225
|
+
3. Create and enter a dedicated worktree
|
|
226
|
+
4. Read the baseline and relevant specs (and Duaer memory when present)
|
|
227
|
+
5. Identify affected specs, ADRs, E2E scenarios, and validation
|
|
228
|
+
6. Implement the smallest coherent change
|
|
229
|
+
7. Update documentation as required
|
|
230
|
+
8. Run targeted, risk-based checks
|
|
231
|
+
9. Review the complete diff
|
|
232
|
+
10. Commit each logical change
|
|
233
|
+
11. Refresh the branch against the latest local `main`
|
|
234
|
+
12. Merge into local `main`
|
|
235
|
+
13. Remove the request worktree and delete the merged branch
|
|
236
|
+
14. Push only when explicitly requested for the current request
|
|
237
|
+
|
|
238
|
+
Development must not begin before steps 1–3 are complete.
|
|
239
|
+
|
|
240
|
+
For feature work that uses Duaer, prefer
|
|
241
|
+
`specify → plan → tasks → implement → converge` (or the hotfix short path).
|
|
242
|
+
Agent ops in this file still govern isolation, commits, and merge.
|
|
243
|
+
|
|
244
|
+
## Commit Format
|
|
245
|
+
|
|
246
|
+
```text
|
|
247
|
+
type(scope): description
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Allowed types: `feat fix docs test chore refactor perf build ci`
|
|
251
|
+
|
|
252
|
+
* English only
|
|
253
|
+
* Concise, imperative description
|
|
254
|
+
* One logical change per commit
|
|
255
|
+
|
|
256
|
+
## Completion Checklist
|
|
257
|
+
|
|
258
|
+
* [ ] Local `main` was updated before development
|
|
259
|
+
* [ ] A unique request branch was created
|
|
260
|
+
* [ ] A dedicated worktree was created
|
|
261
|
+
* [ ] All development occurred inside that worktree
|
|
262
|
+
* [ ] No other agent's branch or worktree was modified
|
|
263
|
+
* [ ] Relevant specs and E2E scenarios were updated
|
|
264
|
+
* [ ] Targeted validation passed or was documented as unnecessary
|
|
265
|
+
* [ ] No secrets, local data, or unrelated changes are included
|
|
266
|
+
* [ ] All logical changes were committed
|
|
267
|
+
* [ ] The branch was refreshed against the latest local `main`
|
|
268
|
+
* [ ] Changes were merged into local `main`
|
|
269
|
+
* [ ] The request worktree was removed after the merge
|
|
270
|
+
* [ ] The merged request branch was deleted
|
|
271
|
+
* [ ] Remote publishing was skipped unless explicitly requested
|
|
272
|
+
* [ ] If pushed, the remote, branch, commit set, and Git identity were verified
|
|
273
|
+
* [ ] If a GitHub issue was linked: verified before work; commented in its
|
|
274
|
+
language; closed when conclusive
|
|
275
|
+
* [ ] If a GitHub pull request was linked: principle reviewed; merged first
|
|
276
|
+
when sound; follow-up after merge; contributor work not discarded
|
|
277
|
+
|
|
278
|
+
## Final Report
|
|
279
|
+
|
|
280
|
+
Report:
|
|
281
|
+
|
|
282
|
+
* Branch and worktree used
|
|
283
|
+
* What changed
|
|
284
|
+
* Documentation updated
|
|
285
|
+
* Validation performed or skipped
|
|
286
|
+
* Commit hashes and messages
|
|
287
|
+
* Merge result
|
|
288
|
+
* Worktree and branch cleanup result
|
|
289
|
+
* Push target and result, or confirmation that nothing was pushed
|
|
290
|
+
* Linked GitHub issue / PR outcomes (or N/A)
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0 — 2026-09-15
|
|
4
|
+
|
|
5
|
+
First public methodology release.
|
|
6
|
+
|
|
7
|
+
### Method
|
|
8
|
+
|
|
9
|
+
- Own **Duaer** Spec-Driven loop: specify → plan → tasks → implement → converge
|
|
10
|
+
- Home directory: `.duaer/` (not an embedded third-party kit)
|
|
11
|
+
- Cursor skills: `/duaer-specify`, `/duaer-plan`, `/duaer-tasks`, `/duaer-implement`, `/duaer-converge`, …
|
|
12
|
+
- Agent ops (`AGENTS.md`) remain authoritative over the method when they conflict
|
|
13
|
+
|
|
14
|
+
### CLI
|
|
15
|
+
|
|
16
|
+
- `duaer init [dir] --all|--method|--ops [--force] [--branch <name>]`
|
|
17
|
+
- `duaer check [dir]`
|
|
18
|
+
- `duaer version`
|
|
19
|
+
|
|
20
|
+
### Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# From GitHub (works now)
|
|
24
|
+
npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
|
|
25
|
+
|
|
26
|
+
# From npm (after publish)
|
|
27
|
+
npx duaer-spec init --here
|
|
28
|
+
```
|
package/DUADER.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Duaer methodology
|
|
2
|
+
|
|
3
|
+
**duaer-spec** owns this method. Artifacts live under `.duaer/`; Cursor skills
|
|
4
|
+
are `duaer-*` at `.cursor/skills/`.
|
|
5
|
+
|
|
6
|
+
**Precedence:** root [`AGENTS.md`](AGENTS.md) / [`docs/agent/`](docs/agent/) win
|
|
7
|
+
over anything here for isolation, commits, and Issue/PR gates.
|
|
8
|
+
|
|
9
|
+
## Read before work
|
|
10
|
+
|
|
11
|
+
1. `.duaer/memory/constitution.md` — process principles
|
|
12
|
+
2. `.duaer/memory/project-context.md` — as-is implementation truth
|
|
13
|
+
3. `.duaer/memory/testing.md` — verification expectations
|
|
14
|
+
4. Active feature under `.duaer/specs/<nnn-slug>/` when one exists
|
|
15
|
+
|
|
16
|
+
## Standard path
|
|
17
|
+
|
|
18
|
+
**Full (recommended):**
|
|
19
|
+
|
|
20
|
+
1. `/duaer-constitution` — only when principles change
|
|
21
|
+
2. `/duaer-specify` — what / why / acceptance (not stack trivia)
|
|
22
|
+
3. `/duaer-clarify` — optional
|
|
23
|
+
4. `/duaer-plan` — technical plan aligned with project-context
|
|
24
|
+
5. `/duaer-checklist` — optional quality checklist
|
|
25
|
+
6. `/duaer-tasks` — checkbox task breakdown
|
|
26
|
+
7. `/duaer-analyze` — optional consistency check
|
|
27
|
+
8. `/duaer-implement` — implement tasks only
|
|
28
|
+
9. `/duaer-converge` — compare result to spec; append remaining tasks if gaps
|
|
29
|
+
|
|
30
|
+
**Small feature:** specify → plan → tasks → implement → converge
|
|
31
|
+
|
|
32
|
+
**Hotfix:** specify (mark hotfix) → tasks → implement → converge
|
|
33
|
+
Never skip specify or converge.
|
|
34
|
+
|
|
35
|
+
## Install
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx github:fujiezee/duaer-spec duaer init --here
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Or see [`ADOPT.md`](ADOPT.md). No third-party Spec CLI is required — `duaer`
|
|
42
|
+
installs this repository's method files into the target project.
|
|
43
|
+
|
|
44
|
+
## Feature directory shape
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
.duaer/specs/<nnn-slug>/
|
|
48
|
+
spec.md
|
|
49
|
+
plan.md # after /duaer-plan
|
|
50
|
+
tasks.md # after /duaer-tasks
|
|
51
|
+
… # research / contracts as needed
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Related
|
|
55
|
+
|
|
56
|
+
- Agent ops: [`AGENTS.md`](AGENTS.md)
|
|
57
|
+
- Maintainer notes: [`docs/maintaining.md`](docs/maintaining.md)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 duaer-spec contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# duaer-spec
|
|
2
|
+
|
|
3
|
+
**Duaer** is a Spec-Driven Development methodology for AI coding agents
|
|
4
|
+
(Cursor first), plus enforceable **agent ops** for isolation, commits, and
|
|
5
|
+
Issue/PR gates.
|
|
6
|
+
|
|
7
|
+
Not a wrapper around another toolkit. The method, directories, skills, and rules
|
|
8
|
+
in this repository **are** duaer-spec.
|
|
9
|
+
|
|
10
|
+
## Install into a project
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# GitHub (available now)
|
|
14
|
+
npx github:fujiezee/duaer-spec@v0.1.0 duaer init --here
|
|
15
|
+
|
|
16
|
+
# npm (after the package is published)
|
|
17
|
+
npx duaer-spec init --here
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# method only / ops only / other integration branch
|
|
22
|
+
npx github:fujiezee/duaer-spec duaer init --here --method
|
|
23
|
+
npx github:fujiezee/duaer-spec duaer init --here --ops --branch develop
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Verify: `npx github:fujiezee/duaer-spec duaer check .`
|
|
27
|
+
Details: [`ADOPT.md`](ADOPT.md)
|
|
28
|
+
|
|
29
|
+
## Two layers
|
|
30
|
+
|
|
31
|
+
| Layer | Role | Where |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| **Agent ops** | How agents operate | [`AGENTS.md`](AGENTS.md), [`docs/agent/`](docs/agent/) |
|
|
34
|
+
| **Duaer method** | What to build (Spec → Plan → Tasks → Implement → Converge) | [`DUADER.md`](DUADER.md), [`.duaer/`](.duaer/), [`.cursor/skills/`](.cursor/skills/) |
|
|
35
|
+
|
|
36
|
+
When they conflict, **agent ops win**.
|
|
37
|
+
|
|
38
|
+
## Default loop
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
constitution → specify → plan → tasks → implement → converge
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Small change: `specify → plan → tasks → implement → converge`
|
|
45
|
+
Hotfix: `specify (hotfix) → tasks → implement → converge`
|
|
46
|
+
|
|
47
|
+
Slash skills: `/duaer-specify`, `/duaer-plan`, `/duaer-tasks`, `/duaer-implement`,
|
|
48
|
+
`/duaer-converge`, …
|
|
49
|
+
|
|
50
|
+
## Layout
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
bin/duaer.mjs CLI (duaer init | check | version)
|
|
54
|
+
package.json npm package metadata
|
|
55
|
+
AGENTS.md Agent-ops contract
|
|
56
|
+
DUADER.md Methodology conventions
|
|
57
|
+
ADOPT.md Install guide
|
|
58
|
+
.duaer/ Memory, templates, workflows, scripts
|
|
59
|
+
.cursor/rules/ Agent-ops + Duaer rules
|
|
60
|
+
.cursor/skills/ duaer-* skills
|
|
61
|
+
docs/agent/ Workflow detail + checklists
|
|
62
|
+
docs/maintaining.md How maintainers evolve the method
|
|
63
|
+
examples/ Optional product overlays (not defaults)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Defaults (this repo)
|
|
67
|
+
|
|
68
|
+
- Integration branch: **`main`**
|
|
69
|
+
- One request → one branch + one worktree → merge → delete worktree
|
|
70
|
+
- Push only when explicitly requested
|
|
71
|
+
|
|
72
|
+
## Learn more
|
|
73
|
+
|
|
74
|
+
Method: [`DUADER.md`](DUADER.md) · Agent ops: [`AGENTS.md`](AGENTS.md)
|