@codewalla_india/openspec 1.0.1 → 1.0.3
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/README.md +2 -0
- package/dist/commands/feedback.js +2 -2
- package/dist/commands/workflow/instructions.js +1 -1
- package/dist/core/completions/command-registry.js +0 -19
- package/dist/core/init.js +2 -2
- package/dist/core/templates/workflows/comprehension-guidance.d.ts +1 -1
- package/dist/core/templates/workflows/comprehension-guidance.js +16 -8
- package/dist/core/update.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
11
|
<a href="https://github.com/codewalla-engineering/OpenSpec/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/codewalla-engineering/OpenSpec/actions/workflows/ci.yml/badge.svg" /></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/@codewalla_india/openspec"><img alt="npm version" src="https://img.shields.io/npm/v/@codewalla_india/openspec?style=flat-square" /></a>
|
|
12
13
|
<a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" /></a>
|
|
13
14
|
<a href="https://discord.gg/YctCnvvshC"><img alt="Discord" src="https://img.shields.io/discord/1411657095639601154?style=flat-square&logo=discord&logoColor=white&label=Discord&suffix=%20online" /></a>
|
|
14
15
|
</p>
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
<summary><strong>The most loved spec framework.</strong></summary>
|
|
18
19
|
|
|
19
20
|
[](https://github.com/codewalla-engineering/OpenSpec/stargazers)
|
|
21
|
+
[](https://www.npmjs.com/package/@codewalla_india/openspec)
|
|
20
22
|
[](https://github.com/codewalla-engineering/OpenSpec/graphs/contributors)
|
|
21
23
|
|
|
22
24
|
</details>
|
|
@@ -87,7 +87,7 @@ function formatBody(bodyText) {
|
|
|
87
87
|
* Generate a pre-filled GitHub issue URL for manual submission
|
|
88
88
|
*/
|
|
89
89
|
function generateManualSubmissionUrl(title, body) {
|
|
90
|
-
const repo = '
|
|
90
|
+
const repo = 'codewalla-engineering/OpenSpec';
|
|
91
91
|
const encodedTitle = encodeURIComponent(title);
|
|
92
92
|
const encodedBody = encodeURIComponent(body);
|
|
93
93
|
const encodedLabels = encodeURIComponent('feedback');
|
|
@@ -114,7 +114,7 @@ function submitViaGhCli(title, body) {
|
|
|
114
114
|
'issue',
|
|
115
115
|
'create',
|
|
116
116
|
'--repo',
|
|
117
|
-
'
|
|
117
|
+
'codewalla-engineering/OpenSpec',
|
|
118
118
|
'--title',
|
|
119
119
|
title,
|
|
120
120
|
'--body',
|
|
@@ -304,7 +304,7 @@ export async function generateApplyInstructions(projectRoot, changeName, schemaN
|
|
|
304
304
|
state = 'blocked';
|
|
305
305
|
missingComprehension = true;
|
|
306
306
|
comprehension = gate.info;
|
|
307
|
-
instruction = `Complete the comprehension quiz in /opsx:apply before implementation (score ≥ ${gate.info.thresholdPercent}% on specs and tasks).`;
|
|
307
|
+
instruction = `Complete the comprehension quiz in /opsx:apply before implementation (score ≥ ${gate.info.thresholdPercent}% on proposal, design, specs, and tasks).`;
|
|
308
308
|
}
|
|
309
309
|
else if (gate.active && gate.info) {
|
|
310
310
|
comprehension = gate.info;
|
|
@@ -192,25 +192,6 @@ export const COMMAND_REGISTRY = [
|
|
|
192
192
|
takesValue: true,
|
|
193
193
|
},
|
|
194
194
|
COMMON_FLAGS.json,
|
|
195
|
-
{
|
|
196
|
-
name: 'record-comprehension-pass',
|
|
197
|
-
description: 'Record a successful comprehension quiz pass (use with instructions apply)',
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
name: 'score',
|
|
201
|
-
description: 'Quiz score 0-100 (required with --record-comprehension-pass)',
|
|
202
|
-
takesValue: true,
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
name: 'attempt',
|
|
206
|
-
description: 'Quiz attempt number',
|
|
207
|
-
takesValue: true,
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
name: 'question-count',
|
|
211
|
-
description: 'Number of quiz questions taken',
|
|
212
|
-
takesValue: true,
|
|
213
|
-
},
|
|
214
195
|
COMMON_FLAGS.store,
|
|
215
196
|
],
|
|
216
197
|
},
|
package/dist/core/init.js
CHANGED
|
@@ -553,8 +553,8 @@ export class InitCommand {
|
|
|
553
553
|
}
|
|
554
554
|
// Links
|
|
555
555
|
console.log();
|
|
556
|
-
console.log(`Learn more: ${chalk.cyan('https://github.com/
|
|
557
|
-
console.log(`Feedback: ${chalk.cyan('https://github.com/
|
|
556
|
+
console.log(`Learn more: ${chalk.cyan('https://github.com/codewalla-engineering/OpenSpec')}`);
|
|
557
|
+
console.log(`Feedback: ${chalk.cyan('https://github.com/codewalla-engineering/OpenSpec/issues')}`);
|
|
558
558
|
// Restart instruction if any tools were configured
|
|
559
559
|
if (results.createdTools.length > 0 || results.refreshedTools.length > 0) {
|
|
560
560
|
console.log();
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* Interpolated into apply skill and slash command templates so agents run
|
|
5
5
|
* a spec comprehension gate before implementation.
|
|
6
6
|
*/
|
|
7
|
-
export declare const COMPREHENSION_QUIZ_GUIDANCE = "4. **Comprehension quiz (required before implementation)**\n\n After `openspec instructions apply --change \"<name>\" --json`, check comprehension status:\n\n - If `missingComprehension` is true OR `comprehension.required && !comprehension.passed`:\n - Do NOT edit application source code or mark task checkboxes yet\n - Read `contextFiles.specs`, `contextFiles.tasks` (or the `tasks` array in apply JSON)
|
|
7
|
+
export declare const COMPREHENSION_QUIZ_GUIDANCE = "4. **Comprehension quiz (required before implementation)**\n\n After `openspec instructions apply --change \"<name>\" --json`, check comprehension status:\n\n - If `missingComprehension` is true OR `comprehension.required && !comprehension.passed`:\n - Do NOT edit application source code or mark task checkboxes yet\n - Read `contextFiles.proposal`, `contextFiles.design`, `contextFiles.specs`, and `contextFiles.tasks` (or the `tasks` array in apply JSON)\n - Use `comprehension.questionCount` from the JSON as the number of questions\n\n **Generate questions**\n - Create exactly `comprehension.questionCount` multiple-choice questions\n - Each question MUST map to one artifact category:\n - **Proposal**: motivation, scope, or impact from `proposal.md`\n - **Design**: decisions, trade-offs, or approach from `design.md`\n - **Specs**: a `### Requirement:` or `#### Scenario:` from delta specs\n - **Tasks**: conceptual understanding of the implementation plan from pending (unchecked) tasks\n - When proposal, design, specs (with requirements), and pending tasks all exist, include at least one question from each category; fill remaining slots from any category\n - Do NOT use completed tasks as question sources\n - Each question: 4 options (1 correct from the source substance, 3 plausible distractors from other proposal/design/requirements/scenarios/task substance in the change)\n\n **Task question quality**\n - Test scope, approach, dependencies, sequencing rationale, or alignment with proposal/design\n - **Forbidden**: task numbers, checklist order, \"which task says X verbatim\", or answers identifiable only by task index or checkbox position\n - Good: \"What is the primary file where quiz rules are centralized?\" (answer from task substance)\n - Bad: \"Which task number updates `comprehension-guidance.ts`?\" or \"What is the exact text of task 2.1?\"\n\n **Present and grade**\n - Use the **AskUserQuestion tool** for each question (one at a time)\n - Grade: `score_percent = round(correct / question_count * 100)`\n - Pass when `score_percent >= comprehension.thresholdPercent` (default 80)\n\n **On failure (score below threshold)**\n - Announce score and that a new quiz is required\n - Update `.comprehension-session.yaml` in the change dir with `used_sources` from this attempt\n - Generate a NEW question set using different proposal/design/requirement/scenario/task sources (avoid `used_sources`)\n - Retry until pass\n\n **On pass**\n ```bash\n openspec instructions apply --change \"<name>\" --record-comprehension-pass --score <score> --attempt <n> --question-count <count> --json\n ```\n - Re-run `openspec instructions apply --change \"<name>\" --json`\n - Confirm `state` is `\"ready\"` and `comprehension.passed` is true before continuing\n\n **Output template**\n ```\n ## Applying: <change-name> \u2014 comprehension check\n\n Proposal, design, specs (<requirementCount> requirements, <scenarioCount> scenarios), tasks (<pendingTaskCount> pending) \u2192 <questionCount> questions\n\n Question 1/N: ...\n ...\n \u2713 Comprehension passed (<score>%, attempt <n>)\n ```\n\n Then continue to step 5 (show progress) and implementation.";
|
|
8
8
|
export declare const COMPREHENSION_APPLY_GUARDRAIL = "- NEVER implement code or mark tasks while `missingComprehension` is true\n- NEVER skip the comprehension quiz when the apply JSON requires it\n- If the user asks to skip the quiz, refuse and explain they must pass or set comprehension.enabled: false in openspec/config.yaml";
|
|
9
9
|
//# sourceMappingURL=comprehension-guidance.d.ts.map
|
|
@@ -10,17 +10,25 @@ export const COMPREHENSION_QUIZ_GUIDANCE = `4. **Comprehension quiz (required be
|
|
|
10
10
|
|
|
11
11
|
- If \`missingComprehension\` is true OR \`comprehension.required && !comprehension.passed\`:
|
|
12
12
|
- Do NOT edit application source code or mark task checkboxes yet
|
|
13
|
-
- Read \`contextFiles.specs\`, \`contextFiles.tasks\` (or the \`tasks\` array in apply JSON)
|
|
13
|
+
- Read \`contextFiles.proposal\`, \`contextFiles.design\`, \`contextFiles.specs\`, and \`contextFiles.tasks\` (or the \`tasks\` array in apply JSON)
|
|
14
14
|
- Use \`comprehension.questionCount\` from the JSON as the number of questions
|
|
15
15
|
|
|
16
16
|
**Generate questions**
|
|
17
17
|
- Create exactly \`comprehension.questionCount\` multiple-choice questions
|
|
18
|
-
- Each question MUST map to one
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
|
|
18
|
+
- Each question MUST map to one artifact category:
|
|
19
|
+
- **Proposal**: motivation, scope, or impact from \`proposal.md\`
|
|
20
|
+
- **Design**: decisions, trade-offs, or approach from \`design.md\`
|
|
21
|
+
- **Specs**: a \`### Requirement:\` or \`#### Scenario:\` from delta specs
|
|
22
|
+
- **Tasks**: conceptual understanding of the implementation plan from pending (unchecked) tasks
|
|
23
|
+
- When proposal, design, specs (with requirements), and pending tasks all exist, include at least one question from each category; fill remaining slots from any category
|
|
22
24
|
- Do NOT use completed tasks as question sources
|
|
23
|
-
- Each question: 4 options (1 correct from the source
|
|
25
|
+
- Each question: 4 options (1 correct from the source substance, 3 plausible distractors from other proposal/design/requirements/scenarios/task substance in the change)
|
|
26
|
+
|
|
27
|
+
**Task question quality**
|
|
28
|
+
- Test scope, approach, dependencies, sequencing rationale, or alignment with proposal/design
|
|
29
|
+
- **Forbidden**: task numbers, checklist order, "which task says X verbatim", or answers identifiable only by task index or checkbox position
|
|
30
|
+
- Good: "What is the primary file where quiz rules are centralized?" (answer from task substance)
|
|
31
|
+
- Bad: "Which task number updates \`comprehension-guidance.ts\`?" or "What is the exact text of task 2.1?"
|
|
24
32
|
|
|
25
33
|
**Present and grade**
|
|
26
34
|
- Use the **AskUserQuestion tool** for each question (one at a time)
|
|
@@ -30,7 +38,7 @@ export const COMPREHENSION_QUIZ_GUIDANCE = `4. **Comprehension quiz (required be
|
|
|
30
38
|
**On failure (score below threshold)**
|
|
31
39
|
- Announce score and that a new quiz is required
|
|
32
40
|
- Update \`.comprehension-session.yaml\` in the change dir with \`used_sources\` from this attempt
|
|
33
|
-
- Generate a NEW question set using different requirement/scenario/task sources (avoid \`used_sources\`)
|
|
41
|
+
- Generate a NEW question set using different proposal/design/requirement/scenario/task sources (avoid \`used_sources\`)
|
|
34
42
|
- Retry until pass
|
|
35
43
|
|
|
36
44
|
**On pass**
|
|
@@ -44,7 +52,7 @@ export const COMPREHENSION_QUIZ_GUIDANCE = `4. **Comprehension quiz (required be
|
|
|
44
52
|
\`\`\`
|
|
45
53
|
## Applying: <change-name> — comprehension check
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
Proposal, design, specs (<requirementCount> requirements, <scenarioCount> scenarios), tasks (<pendingTaskCount> pending) → <questionCount> questions
|
|
48
56
|
|
|
49
57
|
Question 1/N: ...
|
|
50
58
|
...
|
package/dist/core/update.js
CHANGED
|
@@ -196,7 +196,7 @@ export class UpdateCommand {
|
|
|
196
196
|
console.log(' /opsx:continue Create the next artifact');
|
|
197
197
|
console.log(' /opsx:apply Implement tasks');
|
|
198
198
|
console.log();
|
|
199
|
-
console.log(`Learn more: ${chalk.cyan('https://github.com/
|
|
199
|
+
console.log(`Learn more: ${chalk.cyan('https://github.com/codewalla-engineering/OpenSpec')}`);
|
|
200
200
|
}
|
|
201
201
|
const configuredAndNewTools = [...new Set([...configuredTools, ...newlyConfiguredTools])];
|
|
202
202
|
// 13. Detect new tool directories not currently configured
|