@dezkareid/osddt 1.3.0 → 1.3.2

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/AGENTS.md CHANGED
@@ -138,7 +138,7 @@ All commands available via `npx @dezkareid/osddt <command>`:
138
138
  | `@dezkareid/osddt setup` | Generate agent command files for Claude and Gemini |
139
139
  | `@dezkareid/osddt setup --agents <list> --repo-type <type>` | Non-interactive setup (for CI/scripted environments) |
140
140
  | `@dezkareid/osddt meta-info` | Output current branch and date as JSON |
141
- | `@dezkareid/osddt done <feature-name>` | Move `working-on/<feature>` to `done/<feature>` |
141
+ | `@dezkareid/osddt done <feature-name> --dir <project-path>` | Move `working-on/<feature>` to `done/<feature>` |
142
142
 
143
143
  #### `osddt setup` options
144
144
 
@@ -163,7 +163,7 @@ Templates are generated by `npx @dezkareid/osddt setup` and placed in each agent
163
163
  | `osddt.plan` | Create a technical implementation plan from a specification |
164
164
  | `osddt.tasks` | Generate actionable tasks from an implementation plan |
165
165
  | `osddt.implement` | Execute tasks from the task list one by one |
166
- | `osddt.done` | Mark a feature as done and move it from working-on to done |
166
+ | `osddt.done` | Resolve project path, verify tasks, and move the feature to done |
167
167
 
168
168
  #### Template Workflow
169
169
 
@@ -214,6 +214,17 @@ osddt.start ──┘
214
214
  2. Checks for an existing `working-on/<feature-name>/` folder — offers **Resume** or **Abort** if found, otherwise creates it.
215
215
  3. Researches the topic (codebase exploration, external references) and writes `osddt.research.md`.
216
216
 
217
+ #### osddt.done behaviour
218
+
219
+ - **Input**: A feature name or branch name identifying the feature to close.
220
+ - **Actions performed by the agent**:
221
+ 1. Reads `.osddtrc` to resolve the project path (single vs monorepo). For monorepos, asks the user which package.
222
+ 2. Derives the feature name from the input (same rules as other commands — last segment of a branch name or kebab-cased slug, subject to the 30-character limit). Must match the folder under `working-on/`.
223
+ 3. Confirms all tasks in `osddt.tasks.md` are checked off (`- [x]`).
224
+ 4. Runs `npx @dezkareid/osddt done <feature-name> --dir <project-path>` to move the folder.
225
+
226
+ Note: the `osddt done` CLI command does **not** read `.osddtrc` — project path resolution is the agent's responsibility, handled in step 1 above.
227
+
217
228
  ### Template Data Convention
218
229
 
219
230
  When a template needs dynamic information (e.g. current branch, date, repo config), **do not pass it as a build-time argument**. Instead:
package/README.md CHANGED
@@ -8,7 +8,7 @@ Other spec driven development tool but for monorepo
8
8
  | `@dezkareid/osddt setup` | Generate agent command files for Claude and Gemini |
9
9
  | `@dezkareid/osddt setup --agents <list> --repo-type <type>` | Non-interactive setup (for CI/scripted environments) |
10
10
  | `@dezkareid/osddt meta-info` | Output current branch and date as JSON |
11
- | `@dezkareid/osddt done <feature-name>` | Move `working-on/<feature>` to `done/<feature>` |
11
+ | `@dezkareid/osddt done <feature-name> --dir <project-path>` | Move `working-on/<feature>` to `done/<feature>` |
12
12
 
13
13
  ### `osddt setup` options
14
14
 
@@ -51,7 +51,7 @@ osddt.start ──┘
51
51
  | `osddt.plan` | Create a technical implementation plan from a specification |
52
52
  | `osddt.tasks` | Generate actionable tasks from an implementation plan |
53
53
  | `osddt.implement` | Execute tasks from the task list one by one |
54
- | `osddt.done` | Mark a feature as done and move it from working-on to done |
54
+ | `osddt.done` | Resolve project path, verify tasks, and move the feature to done |
55
55
 
56
56
  Generated files are placed in:
57
57
 
package/dist/index.js CHANGED
@@ -192,19 +192,21 @@ Run the following command to write the feature specification:
192
192
  - If it does not exist, proceed using only the requirements provided in ${args}.
193
193
  2. Analyze the requirements provided in ${args}
194
194
  3. Identify the core problem being solved
195
- 4. Define the scope, constraints, and acceptance criteria
195
+ 4. Define the scope, user-facing constraints, and acceptance criteria
196
196
  5. Write the specification to \`osddt.spec.md\` in the working directory
197
197
 
198
198
  ## Specification Format
199
199
 
200
+ The spec should describe **what** the feature does and **why**, from a product and user perspective. Do **not** include implementation details, technology choices, or technical architecture — those belong in the plan.
201
+
200
202
  The spec should include:
201
- - **Overview**: What and why
202
- - **Requirements**: Functional and non-functional
203
- - **Scope**: What is in and out of scope
204
- - **Acceptance Criteria**: Clear, testable criteria
205
- - **Open Questions**: Any ambiguities to resolve
203
+ - **Overview**: What the feature is and why it is needed
204
+ - **Requirements**: Functional requirements only — what the system must do, expressed as user-observable behaviours
205
+ - **Scope**: What is in and out of scope, described in product terms
206
+ - **Acceptance Criteria**: Clear, testable criteria written from a user or business perspective
207
+ - **Open Questions**: Ambiguities about desired behaviour or product decisions to resolve
206
208
 
207
- > If \`osddt.research.md\` was found, add a **Research Summary** section that briefly references the key insights and constraints it identified.
209
+ > If \`osddt.research.md\` was found, add a **Research Summary** section that briefly references the key insights and user-facing constraints it identified.
208
210
 
209
211
  ## Arguments
210
212
 
@@ -332,17 +334,22 @@ Once all tasks are checked off, run the following command to mark the feature as
332
334
  description: 'Mark a feature as done and move it from working-on to done',
333
335
  body: (args) => `## Instructions
334
336
 
335
- 1. Confirm all tasks in \`osddt.tasks.md\` are checked off (\`- [x]\`)
336
- 2. Run the following command to move the feature folder from \`working-on\` to \`done\`:
337
+ 1. Resolve the project path:
338
+ - Read \`.osddtrc\` from the repository root.
339
+ - If \`repoType\` is \`"single"\`: the project path is the repository root.
340
+ - If \`repoType\` is \`"monorepo"\`: ask the user which package to work on (e.g. \`packages/my-package\`), then use \`<repo-root>/<package>\` as the project path.
341
+ 2. Derive the feature name from ${args} using the same rules as the other commands (last segment of a branch name, or a kebab-cased slug — subject to the 30-character limit). This must match the folder name under \`working-on/\`.
342
+ 3. Confirm all tasks in \`osddt.tasks.md\` are checked off (\`- [x]\`)
343
+ 4. Run the following command to move the feature folder from \`working-on\` to \`done\`:
337
344
 
338
345
  \`\`\`
339
- npx @dezkareid/osddt done ${args}
346
+ npx @dezkareid/osddt done <feature-name> --dir <project-path>
340
347
  \`\`\`
341
348
 
342
349
  The command will automatically prefix the destination folder name with today's date in \`YYYY-MM-DD\` format.
343
350
  For example, \`working-on/feature-a\` will be moved to \`done/YYYY-MM-DD-feature-a\`.
344
351
 
345
- 3. Report the result of the command, including the full destination path
352
+ 5. Report the result of the command, including the full destination path
346
353
 
347
354
  ## Arguments
348
355
 
@@ -531,16 +538,9 @@ function todayPrefix() {
531
538
  return `${yyyy}-${mm}-${dd}`;
532
539
  }
533
540
  async function runDone(featureName, cwd) {
534
- const configPath = path.join(cwd, '.osddtrc');
535
- if (!(await fs.pathExists(configPath))) {
536
- console.error('Error: .osddtrc not found. Run `osddt setup` first.');
537
- process.exit(1);
538
- }
539
- await fs.readJson(configPath);
540
- const projectPath = cwd;
541
- const src = path.join(projectPath, 'working-on', featureName);
541
+ const src = path.join(cwd, 'working-on', featureName);
542
542
  const destName = `${todayPrefix()}-${featureName}`;
543
- const dest = path.join(projectPath, 'done', destName);
543
+ const dest = path.join(cwd, 'done', destName);
544
544
  if (!(await fs.pathExists(src))) {
545
545
  console.error(`Error: working-on/${featureName} does not exist.`);
546
546
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dezkareid/osddt",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Package for Spec-Driven Development workflow",
5
5
  "keywords": [
6
6
  "spec-driven",