@boyingliu01/opencode-plugin 0.13.0 → 0.13.1
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/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-08
|
|
4
|
-
**Commit:**
|
|
5
|
-
**Branch:**
|
|
6
|
-
**Version:** 0.13.
|
|
4
|
+
**Commit:** 93df689
|
|
5
|
+
**Branch:** main
|
|
6
|
+
**Version:** 0.13.1.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/SPRINT-FLOW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-08
|
|
4
|
-
**Commit:**
|
|
5
|
-
**Branch:**
|
|
6
|
-
**Version:** 0.13.
|
|
4
|
+
**Commit:** 93df689
|
|
5
|
+
**Branch:** main
|
|
6
|
+
**Version:** 0.13.1.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
**6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
|
|
@@ -9,7 +9,7 @@ const path = require('path');
|
|
|
9
9
|
|
|
10
10
|
const SKILL_MD_PATH = path.join(__dirname, '..', 'SKILL.md');
|
|
11
11
|
const REFERENCES_DIR = path.join(__dirname, '..', 'references');
|
|
12
|
-
const PHASE_2_BUILD_PATH = path.join(REFERENCES_DIR, 'phase-
|
|
12
|
+
const PHASE_2_BUILD_PATH = path.join(REFERENCES_DIR, 'phase-3-build.md');
|
|
13
13
|
const ORCHESTRATION_RULES_PATH = path.join(REFERENCES_DIR, 'orchestration-rules.md');
|
|
14
14
|
|
|
15
15
|
let skillContent = '';
|
|
@@ -139,13 +139,12 @@ function testNegativeTestCasesExist() {
|
|
|
139
139
|
function testWorkflowStepsOrder() {
|
|
140
140
|
const frontmatter = parseFrontmatter(skillContent);
|
|
141
141
|
const steps = frontmatter.workflow_steps || [];
|
|
142
|
-
if (steps.length !==
|
|
143
|
-
throw new Error(`workflow_steps must have exactly
|
|
142
|
+
if (steps.length !== 6) {
|
|
143
|
+
throw new Error(`workflow_steps must have exactly 6 entries, got ${steps.length}`);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
const expectedOrder = [
|
|
147
|
-
'
|
|
148
|
-
'REVIEW', 'FEEDBACK', 'SHIP', 'LAND', 'USER ACCEPTANCE', 'CLEANUP',
|
|
147
|
+
'PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE',
|
|
149
148
|
];
|
|
150
149
|
|
|
151
150
|
for (let i = 0; i < expectedOrder.length; i++) {
|
|
@@ -155,29 +154,29 @@ function testWorkflowStepsOrder() {
|
|
|
155
154
|
);
|
|
156
155
|
}
|
|
157
156
|
}
|
|
158
|
-
console.log(' ✓ workflow_steps order matches canonical
|
|
157
|
+
console.log(' ✓ workflow_steps order matches canonical 6-phase sequence');
|
|
159
158
|
}
|
|
160
159
|
|
|
161
160
|
function testPhaseFlowDiagramOrder() {
|
|
162
|
-
// The Phase Flow diagram in the body must show:
|
|
163
|
-
const flowMatch = skillContent.match(/
|
|
161
|
+
// The Phase Flow diagram in the body must show: PREP → ... → SHIP → CLOSE
|
|
162
|
+
const flowMatch = skillContent.match(/PREP →.*CLOSE/);
|
|
164
163
|
if (!flowMatch) {
|
|
165
164
|
throw new Error('Phase Flow diagram not found in SKILL.md body');
|
|
166
165
|
}
|
|
167
166
|
const flow = flowMatch[0];
|
|
168
167
|
|
|
169
|
-
// Verify
|
|
170
|
-
const
|
|
168
|
+
// Verify VERIFY comes before SHIP
|
|
169
|
+
const verifyPos = flow.indexOf('VERIFY');
|
|
171
170
|
const shipPos = flow.indexOf('SHIP');
|
|
172
|
-
const
|
|
173
|
-
if (
|
|
171
|
+
const closePos = flow.indexOf('CLOSE');
|
|
172
|
+
if (verifyPos === -1 || shipPos === -1 || closePos === -1) {
|
|
174
173
|
throw new Error('Phase Flow diagram missing required phases');
|
|
175
174
|
}
|
|
176
|
-
if (
|
|
177
|
-
throw new Error('
|
|
175
|
+
if (verifyPos > shipPos) {
|
|
176
|
+
throw new Error('VERIFY must come before SHIP in phase flow diagram');
|
|
178
177
|
}
|
|
179
|
-
if (shipPos >
|
|
180
|
-
throw new Error('SHIP must come before
|
|
178
|
+
if (shipPos > closePos) {
|
|
179
|
+
throw new Error('SHIP must come before CLOSE in phase flow diagram');
|
|
181
180
|
}
|
|
182
181
|
console.log(' ✓ Phase Flow diagram has correct ordering');
|
|
183
182
|
}
|
|
@@ -199,15 +198,14 @@ function testCanonicalPhaseOrderTableExists() {
|
|
|
199
198
|
function testAll11PhasesInPhaseFlowConsistency() {
|
|
200
199
|
const section = skillContent.split('Phase Flow Consistency')[1];
|
|
201
200
|
const requiredPhases = [
|
|
202
|
-
'
|
|
203
|
-
'REVIEW', 'FEEDBACK', 'SHIP', 'LAND', 'USER ACCEPTANCE', 'CLEANUP',
|
|
201
|
+
'PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE',
|
|
204
202
|
];
|
|
205
203
|
for (const phase of requiredPhases) {
|
|
206
204
|
if (!section.includes(phase)) {
|
|
207
205
|
throw new Error(`Phase Flow Consistency section missing phase: ${phase}`);
|
|
208
206
|
}
|
|
209
207
|
}
|
|
210
|
-
console.log(' ✓ All
|
|
208
|
+
console.log(' ✓ All 6 phases referenced in Phase Flow Consistency section');
|
|
211
209
|
}
|
|
212
210
|
|
|
213
211
|
// === Force Levels Tests ===
|
|
@@ -272,9 +270,9 @@ function testUvpMentionsEmergentRequirements() {
|
|
|
272
270
|
function testTimingSectionExists() {
|
|
273
271
|
const phase2BuildContent = fs.readFileSync(PHASE_2_BUILD_PATH, 'utf-8');
|
|
274
272
|
if (!phase2BuildContent.includes('Timing & Stability')) {
|
|
275
|
-
throw new Error('phase-
|
|
273
|
+
throw new Error('phase-3-build.md must contain "Timing & Stability" section');
|
|
276
274
|
}
|
|
277
|
-
console.log(' ✓ Timing & Stability section exists in phase-
|
|
275
|
+
console.log(' ✓ Timing & Stability section exists in phase-3-build.md');
|
|
278
276
|
}
|
|
279
277
|
|
|
280
278
|
function testTimeoutRecommendationsExist() {
|
|
@@ -289,7 +287,7 @@ function testTimeoutRecommendationsExist() {
|
|
|
289
287
|
function testExecutionTimeEstimatesExist() {
|
|
290
288
|
const phase2BuildContent = fs.readFileSync(PHASE_2_BUILD_PATH, 'utf-8');
|
|
291
289
|
if (!phase2BuildContent.includes('Expected Time')) {
|
|
292
|
-
throw new Error('phase-
|
|
290
|
+
throw new Error('phase-3-build.md must include expected execution time estimates');
|
|
293
291
|
}
|
|
294
292
|
console.log(' ✓ Expected execution time estimates exist');
|
|
295
293
|
}
|
|
@@ -305,12 +303,8 @@ function testOrchestrationRulesExists() {
|
|
|
305
303
|
|
|
306
304
|
function testPhaseSubagentMatrixOrder() {
|
|
307
305
|
const orchContent = fs.readFileSync(ORCHESTRATION_RULES_PATH, 'utf-8');
|
|
308
|
-
const expectedOrder = [
|
|
309
|
-
'ISOLATE', 'AUTO-ESTIMATE', 'THINK', 'PLAN', 'BUILD',
|
|
310
|
-
'REVIEW', 'USER ACCEPT', 'FEEDBACK', 'SHIP', 'LAND', 'CLEANUP',
|
|
311
|
-
];
|
|
312
306
|
// The matrix order reflects file names, but phases should all be present
|
|
313
|
-
for (const phase of ['
|
|
307
|
+
for (const phase of ['PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE']) {
|
|
314
308
|
if (!orchContent.includes(phase)) {
|
|
315
309
|
throw new Error(`orchestration-rules.md missing phase: ${phase}`);
|
|
316
310
|
}
|
|
@@ -336,7 +330,7 @@ function runTests(opts = {}) {
|
|
|
336
330
|
{ name: 'Phase Flow diagram has correct ordering', fn: testPhaseFlowDiagramOrder },
|
|
337
331
|
{ name: 'Phase Flow Consistency section exists', fn: testPhaseFlowConsistencySectionExists },
|
|
338
332
|
{ name: 'Canonical Phase Order table exists', fn: testCanonicalPhaseOrderTableExists },
|
|
339
|
-
{ name: 'All
|
|
333
|
+
{ name: 'All 6 phases in consistency section', fn: testAll11PhasesInPhaseFlowConsistency },
|
|
340
334
|
{ name: 'force-levels.md exists with three levels', fn: testForceLevelsDocumentExists },
|
|
341
335
|
{ name: 'force-levels.md requires Delphi review', fn: testForceLevelsRequiresDelphi },
|
|
342
336
|
{ name: 'Unique Value Proposition exists', fn: testUniqueValuePropositionExists },
|
|
@@ -378,7 +372,7 @@ function runTests(opts = {}) {
|
|
|
378
372
|
function testUncommittedGateExists() {
|
|
379
373
|
const phase2BuildContent = fs.readFileSync(PHASE_2_BUILD_PATH, 'utf-8');
|
|
380
374
|
if (!phase2BuildContent.includes('Uncommitted Changes Gate')) {
|
|
381
|
-
throw new Error('phase-
|
|
375
|
+
throw new Error('phase-3-build.md must contain "Uncommitted Changes Gate" section');
|
|
382
376
|
}
|
|
383
377
|
console.log(' ✓ Uncommitted Changes Gate section exists');
|
|
384
378
|
}
|
|
@@ -419,7 +413,7 @@ describe('sprint-flow SKILL.md', () => {
|
|
|
419
413
|
{ name: 'Phase Flow diagram has correct ordering', fn: testPhaseFlowDiagramOrder },
|
|
420
414
|
{ name: 'Phase Flow Consistency section exists', fn: testPhaseFlowConsistencySectionExists },
|
|
421
415
|
{ name: 'Canonical Phase Order table exists', fn: testCanonicalPhaseOrderTableExists },
|
|
422
|
-
{ name: 'All
|
|
416
|
+
{ name: 'All 6 phases in consistency section', fn: testAll11PhasesInPhaseFlowConsistency },
|
|
423
417
|
{ name: 'force-levels.md exists with three levels', fn: testForceLevelsDocumentExists },
|
|
424
418
|
{ name: 'force-levels.md requires Delphi review', fn: testForceLevelsRequiresDelphi },
|
|
425
419
|
{ name: 'Unique Value Proposition exists', fn: testUniqueValuePropositionExists },
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-08
|
|
4
|
-
**Commit:**
|
|
5
|
-
**Branch:**
|
|
6
|
-
**Version:** 0.13.
|
|
4
|
+
**Commit:** 93df689
|
|
5
|
+
**Branch:** main
|
|
6
|
+
**Version:** 0.13.1.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|