@boyingliu01/opencode-plugin 0.14.4 → 0.14.6
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-09
|
|
4
|
-
**Commit:**
|
|
5
|
-
**Branch:**
|
|
6
|
-
**Version:** 0.14.
|
|
4
|
+
**Commit:** df2023f
|
|
5
|
+
**Branch:** main
|
|
6
|
+
**Version:** 0.14.6.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-09
|
|
4
|
-
**Commit:**
|
|
5
|
-
**Branch:**
|
|
6
|
-
**Version:** 0.14.
|
|
4
|
+
**Commit:** df2023f
|
|
5
|
+
**Branch:** main
|
|
6
|
+
**Version:** 0.14.6.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.
|
|
@@ -201,6 +201,10 @@ Every phase MUST output its header as the first line of that phase's output. For
|
|
|
201
201
|
5. Each phase completion MUST write Phase Summary to `.sprint-state/phase-outputs/phase-{N}-summary.md`
|
|
202
202
|
6. Each phase completion MUST update `.sprint-state/sprint-state.json`
|
|
203
203
|
|
|
204
|
+
### Required Rendering (MANDATORY per phase)
|
|
205
|
+
|
|
206
|
+
7. Each phase completion MUST render the ASCII progress dashboard using `templates/sprint-progress-template.md` — the orchestrator reads `sprint-state.json` and outputs the dashboard after every phase's status block, so the user always sees current global progress without needing to ask
|
|
207
|
+
|
|
204
208
|
### Phase Output Status Schema (MANDATORY per phase)
|
|
205
209
|
|
|
206
210
|
Each phase MUST close with structured status:
|
|
@@ -9,13 +9,32 @@ 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_OVERVIEW_PATH = path.join(REFERENCES_DIR, 'phase-overview.md');
|
|
12
13
|
const PHASE_2_BUILD_PATH = path.join(REFERENCES_DIR, 'phase-3-build.md');
|
|
13
14
|
const ORCHESTRATION_RULES_PATH = path.join(REFERENCES_DIR, 'orchestration-rules.md');
|
|
14
15
|
|
|
15
16
|
let skillContent = '';
|
|
17
|
+
let phaseOverviewContent = '';
|
|
16
18
|
|
|
17
19
|
function loadSkillMd() {
|
|
18
20
|
skillContent = fs.readFileSync(SKILL_MD_PATH, 'utf-8');
|
|
21
|
+
if (fs.existsSync(PHASE_OVERVIEW_PATH)) {
|
|
22
|
+
phaseOverviewContent = fs.readFileSync(PHASE_OVERVIEW_PATH, 'utf-8');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Search across SKILL.md AND references/phase-overview.md (progressive disclosure: sections
|
|
27
|
+
// like "Unique Value Proposition" and "Phase Flow Consistency" moved to reference file).
|
|
28
|
+
function contentIncludes(str) {
|
|
29
|
+
return skillContent.includes(str) || phaseOverviewContent.includes(str);
|
|
30
|
+
}
|
|
31
|
+
function contentSplit(str) {
|
|
32
|
+
// Return the part after str from whichever file contains it.
|
|
33
|
+
// Throws descriptive error instead of returning undefined so callers
|
|
34
|
+
// get a clear assertion message rather than a TypeError crash.
|
|
35
|
+
if (skillContent.includes(str)) return skillContent.split(str)[1];
|
|
36
|
+
if (phaseOverviewContent.includes(str)) return phaseOverviewContent.split(str)[1];
|
|
37
|
+
throw new Error(`Section "${str}" not found in SKILL.md or references/phase-overview.md`);
|
|
19
38
|
}
|
|
20
39
|
|
|
21
40
|
function parseFrontmatter(content) {
|
|
@@ -182,21 +201,21 @@ function testPhaseFlowDiagramOrder() {
|
|
|
182
201
|
}
|
|
183
202
|
|
|
184
203
|
function testPhaseFlowConsistencySectionExists() {
|
|
185
|
-
if (!
|
|
186
|
-
throw new Error('SKILL.md must contain "Phase Flow Consistency" section');
|
|
204
|
+
if (!contentIncludes('Phase Flow Consistency')) {
|
|
205
|
+
throw new Error('SKILL.md or references/phase-overview.md must contain "Phase Flow Consistency" section');
|
|
187
206
|
}
|
|
188
207
|
console.log(' ✓ Phase Flow Consistency section exists');
|
|
189
208
|
}
|
|
190
209
|
|
|
191
210
|
function testCanonicalPhaseOrderTableExists() {
|
|
192
|
-
if (!
|
|
193
|
-
throw new Error('SKILL.md must contain "Canonical Phase Order" table');
|
|
211
|
+
if (!contentIncludes('Canonical Phase Order')) {
|
|
212
|
+
throw new Error('SKILL.md or references/phase-overview.md must contain "Canonical Phase Order" table');
|
|
194
213
|
}
|
|
195
214
|
console.log(' ✓ Canonical Phase Order table exists');
|
|
196
215
|
}
|
|
197
216
|
|
|
198
217
|
function testAll11PhasesInPhaseFlowConsistency() {
|
|
199
|
-
const section =
|
|
218
|
+
const section = contentSplit('Phase Flow Consistency');
|
|
200
219
|
const requiredPhases = [
|
|
201
220
|
'PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE',
|
|
202
221
|
];
|
|
@@ -235,14 +254,14 @@ function testForceLevelsRequiresDelphi() {
|
|
|
235
254
|
// === Value Proposition Tests ===
|
|
236
255
|
|
|
237
256
|
function testUniqueValuePropositionExists() {
|
|
238
|
-
if (!
|
|
239
|
-
throw new Error('SKILL.md must contain "Unique Value Proposition" section');
|
|
257
|
+
if (!contentIncludes('Unique Value Proposition')) {
|
|
258
|
+
throw new Error('SKILL.md or references/phase-overview.md must contain "Unique Value Proposition" section');
|
|
240
259
|
}
|
|
241
260
|
console.log(' ✓ Unique Value Proposition section exists');
|
|
242
261
|
}
|
|
243
262
|
|
|
244
263
|
function testUvpMentionsTokenSavings() {
|
|
245
|
-
const section =
|
|
264
|
+
const section = contentSplit('Unique Value Proposition');
|
|
246
265
|
if (!section.includes('40') || !section.includes('67') || !section.includes('token')) {
|
|
247
266
|
throw new Error('Unique Value Proposition must mention 40-67% token savings');
|
|
248
267
|
}
|
|
@@ -250,7 +269,7 @@ function testUvpMentionsTokenSavings() {
|
|
|
250
269
|
}
|
|
251
270
|
|
|
252
271
|
function testUvpMentionsHardGate() {
|
|
253
|
-
const section =
|
|
272
|
+
const section = contentSplit('Unique Value Proposition');
|
|
254
273
|
if (!section.includes('HARD-GATE')) {
|
|
255
274
|
throw new Error('Unique Value Proposition must mention HARD-GATE discipline');
|
|
256
275
|
}
|
|
@@ -258,7 +277,7 @@ function testUvpMentionsHardGate() {
|
|
|
258
277
|
}
|
|
259
278
|
|
|
260
279
|
function testUvpMentionsEmergentRequirements() {
|
|
261
|
-
const section =
|
|
280
|
+
const section = contentSplit('Unique Value Proposition');
|
|
262
281
|
if (!section.toLowerCase().includes('emergent')) {
|
|
263
282
|
throw new Error('Unique Value Proposition must mention emergent requirements');
|
|
264
283
|
}
|
|
@@ -360,7 +379,7 @@ function runTests(opts = {}) {
|
|
|
360
379
|
}
|
|
361
380
|
|
|
362
381
|
console.log(`\n=== Results: ${passed} passed, ${failed} failed ===\n`);
|
|
363
|
-
|
|
382
|
+
for (const e of errors) console.log(e);
|
|
364
383
|
|
|
365
384
|
if (exitOnFail && failed > 0) {
|
|
366
385
|
process.exit(1);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-07-09
|
|
4
|
-
**Commit:**
|
|
5
|
-
**Branch:**
|
|
6
|
-
**Version:** 0.14.
|
|
4
|
+
**Commit:** df2023f
|
|
5
|
+
**Branch:** main
|
|
6
|
+
**Version:** 0.14.6.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|