@dzhechkov/keysarium 1.7.14 → 1.7.18
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/.dz-manifest.json +215 -55
- package/README.md +35 -6
- package/README.ru.md +36 -16
- package/package.json +3 -3
- package/sbom.json +456 -56
- package/src/cli.js +32 -2
- package/src/commands/doctor.js +25 -1
- package/src/commands/init.js +46 -12
- package/src/utils.js +1 -0
- package/templates/.agents/skills/casarium/SKILL.md +29 -0
- package/templates/.claude/agents/code-goal-planner.md +9 -0
- package/templates/.claude/commands/analyst-manual.md +4 -2
- package/templates/.claude/commands/casarium.md +3 -1
- package/templates/.claude/commands/cjm-prototype.md +2 -2
- package/templates/.claude/commands/research.md +4 -1
- package/templates/.claude/rules/checkpoint-protocol.md +2 -1
- package/templates/.claude/rules/research-quality.md +11 -6
- package/templates/.claude/shards/phase-2-research.shard.md +12 -8
- package/templates/.claude/shards/phase-25-cjm.shard.md +5 -3
- package/templates/.claude/skills/analyst-manual-full/SKILL.md +65 -37
- package/templates/.claude/skills/feature-adr/SKILL.md +17 -15
- package/templates/.claude/skills/feature-adr/modules/03-adr.md +1 -1
- package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +1 -1
- package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +2 -2
- package/templates/.claude/skills/feature-adr/modules/08-qe.md +1 -1
- package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +12 -12
- package/templates/.claude/skills/feature-adr/references/agentic-qe/LICENSE.agentic-qe +21 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +20 -16
- package/templates/.claude/skills/feature-adr/references/agentic-qe/UPSTREAM-MANIFEST.json +246 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/README.md +218 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{brutal-honesty-review.md → qe-ref-brutal-honesty-review/REFERENCE.md} +14 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/resources/assessment-rubrics.md +295 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/resources/review-template.md +102 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/schemas/output.json +291 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/scripts/assess-code.sh +179 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/scripts/assess-tests.sh +223 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-brutal-honesty-review/scripts/validate-config.json +34 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-enterprise-integration-testing/REFERENCE.md +758 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-enterprise-integration-testing/evals/enterprise-integration-testing.yaml +158 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-enterprise-integration-testing/schemas/output.json +74 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-enterprise-integration-testing/scripts/validate-config.json +25 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/REFERENCE.md +226 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +138 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/schemas/output.json +568 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/scripts/validate-config.json +25 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/01-flag-detection.md +57 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/02-core-agents.md +29 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/03-batch1-results.md +15 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/04-conditional-agents.md +23 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/05-decision-synthesis.md +29 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/06-report-generation.md +18 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/07-learning-persistence.md +29 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-ideation-swarm/steps/08-final-output.md +18 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{qe-coverage-analysis.md → qe-ref-qe-coverage-analysis/REFERENCE.md} +42 -3
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qe-coverage-analysis/evals/qe-coverage-analysis.yaml +494 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qe-coverage-analysis/schemas/output.json +286 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qe-coverage-analysis/scripts/validate-config.json +42 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{qe-requirements-validation.md → qe-ref-qe-requirements-validation/REFERENCE.md} +13 -3
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qe-requirements-validation/evals/qe-requirements-validation.yaml +598 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qe-requirements-validation/schemas/output.json +587 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qe-requirements-validation/scripts/validate-config.json +37 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{regression-testing.md → qe-ref-regression-testing/REFERENCE.md} +30 -49
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-regression-testing/evals/regression-testing.yaml +504 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-regression-testing/schemas/output.json +311 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-regression-testing/scripts/validate-config.json +50 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{risk-based-testing.md → qe-ref-risk-based-testing/REFERENCE.md} +23 -52
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-risk-based-testing/evals/risk-based-testing.yaml +141 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-risk-based-testing/schemas/output.json +480 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-risk-based-testing/scripts/validate-config.json +25 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{shift-left-testing.md → qe-ref-shift-left-testing/REFERENCE.md} +33 -88
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-shift-left-testing/evals/shift-left-testing.yaml +145 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-shift-left-testing/schemas/output.json +459 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-shift-left-testing/scripts/validate-config.json +25 -0
- package/templates/CLAUDE.md +3 -1
- package/templates/docs/feature-adr/04-admin-guide.md +1 -1
- package/templates/docs/improvement-directions.md +3 -3
- package/templates/docs/keysarium/02-admin-guide.md +2 -2
- package/templates/docs/keysarium/03-user-guide.md +3 -3
- package/templates/docs/keysarium/05-architecture.md +9 -8
- package/templates/docs/keysarium/06-user-flows.md +4 -4
- package/templates/lib/platform-templates/copilot.md +1 -1
- package/templates/lib/platform-templates/opencode.md +1 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/enterprise-integration-testing.md +0 -111
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-ideation-swarm.md +0 -126
package/src/cli.js
CHANGED
|
@@ -10,7 +10,7 @@ function showBanner() {
|
|
|
10
10
|
console.log('');
|
|
11
11
|
console.log(cyan('╔══════════════════════════════════════════════════════╗'));
|
|
12
12
|
console.log(cyan('║') + bold(' \uD83D\uDD2C DZ-KEYSARIUM — AI Research Toolkit ') + cyan('║'));
|
|
13
|
-
console.log(cyan('║') + '
|
|
13
|
+
console.log(cyan('║') + ' Full 7-phase research pipeline ' + cyan('║'));
|
|
14
14
|
console.log(cyan('╚══════════════════════════════════════════════════════╝'));
|
|
15
15
|
console.log('');
|
|
16
16
|
}
|
|
@@ -40,6 +40,8 @@ function showHelp() {
|
|
|
40
40
|
console.log(' ' + yellow('--minimal') + ' Install only .claude/ directory (skills, commands, rules)');
|
|
41
41
|
console.log(' ' + yellow('--force') + ' Overwrite existing files without prompting');
|
|
42
42
|
console.log(' ' + yellow('--with-docs') + ' Include docs/ directory');
|
|
43
|
+
console.log(' ' + yellow('--target') + ' Install for claude (default) or codex');
|
|
44
|
+
console.log(' ' + yellow('--project') + ' Project directory (default: current directory)');
|
|
43
45
|
console.log(' ' + yellow('--dry-run') + ' Show what would be done without making changes');
|
|
44
46
|
console.log(' ' + yellow('--help, -h') + ' Show this help message');
|
|
45
47
|
console.log(' ' + yellow('--version, -v') + ' Show version number');
|
|
@@ -47,6 +49,7 @@ function showHelp() {
|
|
|
47
49
|
console.log(bold('Examples:'));
|
|
48
50
|
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium init');
|
|
49
51
|
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium init --minimal --force');
|
|
52
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium init --target codex --project ./my-case');
|
|
50
53
|
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium update --dry-run');
|
|
51
54
|
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium doctor');
|
|
52
55
|
console.log('');
|
|
@@ -64,11 +67,14 @@ function parseArgs(argv) {
|
|
|
64
67
|
withDocs: false,
|
|
65
68
|
dryRun: false,
|
|
66
69
|
targetDir: process.cwd(),
|
|
70
|
+
target: 'claude',
|
|
71
|
+
targetSpecified: false,
|
|
67
72
|
};
|
|
68
73
|
|
|
69
74
|
let command = null;
|
|
70
75
|
|
|
71
|
-
for (
|
|
76
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
77
|
+
const arg = args[index];
|
|
72
78
|
switch (arg) {
|
|
73
79
|
case '--minimal':
|
|
74
80
|
flags.minimal = true;
|
|
@@ -82,6 +88,25 @@ function parseArgs(argv) {
|
|
|
82
88
|
case '--dry-run':
|
|
83
89
|
flags.dryRun = true;
|
|
84
90
|
break;
|
|
91
|
+
case '--target': {
|
|
92
|
+
const value = args[++index];
|
|
93
|
+
if (value !== 'claude' && value !== 'codex') {
|
|
94
|
+
error('--target must be claude or codex');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
flags.target = value;
|
|
98
|
+
flags.targetSpecified = true;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case '--project': {
|
|
102
|
+
const value = args[++index];
|
|
103
|
+
if (!value || value.startsWith('-')) {
|
|
104
|
+
error('--project requires a directory path');
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
flags.targetDir = path.resolve(value);
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
85
110
|
case '--help':
|
|
86
111
|
case '-h':
|
|
87
112
|
command = 'help';
|
|
@@ -132,6 +157,11 @@ function main() {
|
|
|
132
157
|
|
|
133
158
|
// Route to command handlers
|
|
134
159
|
const resolvedCommand = command || 'init';
|
|
160
|
+
if (flags.targetSpecified && resolvedCommand !== 'init') {
|
|
161
|
+
error('--target is supported only by init; update and doctor use the installation manifest');
|
|
162
|
+
process.exitCode = 1;
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
135
165
|
|
|
136
166
|
switch (resolvedCommand) {
|
|
137
167
|
case 'init':
|
package/src/commands/doctor.js
CHANGED
|
@@ -293,6 +293,28 @@ function checkSettingsValid(targetDir) {
|
|
|
293
293
|
});
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
+
function checkCodexEntrypoint(targetDir) {
|
|
297
|
+
return check('Codex entrypoint', () => {
|
|
298
|
+
const entry = path.join(targetDir, '.agents', 'skills', 'casarium', 'SKILL.md');
|
|
299
|
+
const command = path.join(targetDir, '.claude', 'commands', 'casarium.md');
|
|
300
|
+
const shards = path.join(targetDir, '.claude', 'shards');
|
|
301
|
+
const missing = [entry, command, shards].filter((item) => !fileExists(item));
|
|
302
|
+
if (missing.length > 0) {
|
|
303
|
+
return { passed: false, detail: `Missing ${missing.map((item) => path.relative(targetDir, item)).join(', ')}`,
|
|
304
|
+
fix: 'Run keysarium update to restore the installed Codex entrypoint.' };
|
|
305
|
+
}
|
|
306
|
+
const body = fs.readFileSync(entry, 'utf8');
|
|
307
|
+
const frontmatter = body.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);
|
|
308
|
+
if (!frontmatter || !/^name:\s*casarium\s*$/m.test(frontmatter[1])
|
|
309
|
+
|| !/^description:\s*\S.+$/m.test(frontmatter[1])
|
|
310
|
+
|| !body.includes('.claude/commands/casarium.md')) {
|
|
311
|
+
return { passed: false, detail: 'SKILL.md lacks Codex discovery metadata or the canonical command reference',
|
|
312
|
+
fix: 'Run keysarium update to restore the Codex entrypoint.' };
|
|
313
|
+
}
|
|
314
|
+
return { passed: true, detail: 'Project skill and canonical pipeline references present' };
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
|
|
296
318
|
/**
|
|
297
319
|
* Check 8: researches/ directory exists.
|
|
298
320
|
*/
|
|
@@ -372,7 +394,9 @@ async function run(options) {
|
|
|
372
394
|
checkRulesPresent(targetDir),
|
|
373
395
|
checkShardsPresent(targetDir),
|
|
374
396
|
checkAgentsPresent(targetDir),
|
|
375
|
-
|
|
397
|
+
manifest.components?.includes('codex_entry')
|
|
398
|
+
? checkCodexEntrypoint(targetDir)
|
|
399
|
+
: checkSettingsValid(targetDir),
|
|
376
400
|
checkResearchDir(targetDir),
|
|
377
401
|
];
|
|
378
402
|
|
package/src/commands/init.js
CHANGED
|
@@ -22,8 +22,10 @@ const {
|
|
|
22
22
|
* --with-docs: add docs group
|
|
23
23
|
*/
|
|
24
24
|
function resolveComponents(options) {
|
|
25
|
-
const { minimal, withDocs } = options;
|
|
26
|
-
const coreKeys = ['skills', 'commands', 'rules', 'shards', 'agents', '
|
|
25
|
+
const { minimal, withDocs, target } = options;
|
|
26
|
+
const coreKeys = ['skills', 'commands', 'rules', 'shards', 'agents', 'claude_md', 'harvest'];
|
|
27
|
+
if (target === 'codex') coreKeys.push('codex_entry');
|
|
28
|
+
else coreKeys.push('hooks');
|
|
27
29
|
const keys = [...coreKeys];
|
|
28
30
|
|
|
29
31
|
if (!minimal) {
|
|
@@ -81,9 +83,10 @@ function installComponent(comp, templatesDir, targetDir, force) {
|
|
|
81
83
|
* @param {boolean} options.withDocs — Include docs/ directory
|
|
82
84
|
* @param {boolean} options.dryRun — Preview without writing anything
|
|
83
85
|
* @param {string} options.targetDir — Destination project root
|
|
86
|
+
* @param {string} options.target — claude (default) or codex
|
|
84
87
|
*/
|
|
85
88
|
async function run(options) {
|
|
86
|
-
const { force, dryRun, targetDir } = options;
|
|
89
|
+
const { force, dryRun, targetDir, target = 'claude' } = options;
|
|
87
90
|
const manifestPath = path.join(targetDir, MANIFEST_FILE);
|
|
88
91
|
|
|
89
92
|
// ── a) Check for existing installation ──────────────────────────────────
|
|
@@ -93,9 +96,25 @@ async function run(options) {
|
|
|
93
96
|
info(`Run ${cyan('npx @dzhechkov/keysarium update')} to update, or use ${yellow('--force')} to overwrite.`);
|
|
94
97
|
process.exit(1);
|
|
95
98
|
}
|
|
99
|
+
const existing = readJSON(manifestPath);
|
|
100
|
+
if (!existing || !Array.isArray(existing.components)) {
|
|
101
|
+
logError('Existing .keysarium.json is invalid; refusing to overwrite its ownership record.');
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
const existingTarget = existing.components.includes('codex_entry') ? 'codex' : 'claude';
|
|
105
|
+
if (existingTarget !== target) {
|
|
106
|
+
logError(`Cannot switch an installed ${existingTarget} toolkit to ${target} with --force. Remove it first, then init for the new target.`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
96
109
|
warn('Existing installation found — overwriting (--force).');
|
|
97
110
|
}
|
|
98
111
|
|
|
112
|
+
const codexEntryPath = path.join(targetDir, '.agents', 'skills', 'casarium', 'SKILL.md');
|
|
113
|
+
if (target === 'codex' && fileExists(codexEntryPath) && !force) {
|
|
114
|
+
logError('A project skill named casarium already exists. Use --force only if it may be replaced.');
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
|
|
99
118
|
// ── b) Determine components ─────────────────────────────────────────────
|
|
100
119
|
const componentKeys = resolveComponents(options);
|
|
101
120
|
const templatesDir = getTemplatesDir();
|
|
@@ -103,6 +122,7 @@ async function run(options) {
|
|
|
103
122
|
// ── c) Show plan ────────────────────────────────────────────────────────
|
|
104
123
|
console.log('');
|
|
105
124
|
info(bold('Installation plan:'));
|
|
125
|
+
info(`Target: ${target}; project: ${targetDir}`);
|
|
106
126
|
console.log('');
|
|
107
127
|
|
|
108
128
|
for (const key of componentKeys) {
|
|
@@ -161,16 +181,30 @@ async function run(options) {
|
|
|
161
181
|
|
|
162
182
|
console.log('');
|
|
163
183
|
console.log(bold('Next steps:'));
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
184
|
+
if (target === 'codex') {
|
|
185
|
+
console.log(` 1. Open ${cyan('Codex')} in ${targetDir}`);
|
|
186
|
+
console.log(` 2. Invoke ${cyan('$casarium [your case description]')}`);
|
|
187
|
+
console.log(` 3. Confirm each phase checkpoint and select a CJM variant`);
|
|
188
|
+
console.log('');
|
|
189
|
+
console.log(bold('Codex integration status:'));
|
|
190
|
+
console.log(' Bundled workflow skills: installed under .claude/skills/ as phase references');
|
|
191
|
+
console.log(' Full pipeline entrypoint: installed at .agents/skills/casarium/SKILL.md');
|
|
192
|
+
console.log(' Codex hooks and MCP integrations: not installed');
|
|
193
|
+
console.log(' Claude settings/hooks: not installed for this target');
|
|
194
|
+
} else {
|
|
195
|
+
console.log(` 1. Open ${cyan('Claude Code')} in this directory`);
|
|
196
|
+
console.log(` 2. Run ${cyan('/casarium [your case description]')}`);
|
|
197
|
+
console.log(` 3. Follow the 7-phase pipeline`);
|
|
198
|
+
}
|
|
173
199
|
console.log('');
|
|
200
|
+
if (target === 'claude') {
|
|
201
|
+
console.log(bold('Available commands:'));
|
|
202
|
+
console.log(` ${cyan('/casarium')} ${dim('\u2014 Full pipeline')}`);
|
|
203
|
+
console.log(` ${cyan('/new-research')} ${dim('\u2014 New research')}`);
|
|
204
|
+
console.log(` ${cyan('/parallel-research')} ${dim('\u2014 Multiple cases in parallel')}`);
|
|
205
|
+
console.log(` ${cyan('/harvest')} ${dim('\u2014 Extract knowledge')}`);
|
|
206
|
+
console.log('');
|
|
207
|
+
}
|
|
174
208
|
|
|
175
209
|
process.exit(0);
|
|
176
210
|
}
|
package/src/utils.js
CHANGED
|
@@ -311,6 +311,7 @@ const COMPONENT_SPECS = {
|
|
|
311
311
|
docs: { src: 'docs', name: 'Documentation', unit: 'guides', countMode: 'files', group: 'docs' },
|
|
312
312
|
claude_md: { src: 'CLAUDE.md', name: 'Master instructions', group: 'core', isFile: true },
|
|
313
313
|
harvest: { src: 'TOOLKIT_HARVEST.md', name: 'Knowledge harvest tracker', group: 'core', isFile: true },
|
|
314
|
+
codex_entry: { src: '.agents/skills/casarium', name: 'Codex pipeline entrypoint', unit: 'entrypoint', countMode: 'files', group: 'codex' },
|
|
314
315
|
};
|
|
315
316
|
|
|
316
317
|
/**
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: casarium
|
|
3
|
+
description: Run the installed Keysarium seven-phase case research pipeline in Codex, with phase artifacts and user checkpoints. Use when the user invokes $casarium or asks to work through a Keysarium case.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Casarium in Codex
|
|
7
|
+
|
|
8
|
+
This project contains the complete Keysarium workflow. Start by reading
|
|
9
|
+
`.claude/commands/casarium.md`; it is the source of truth for phase order, outputs and
|
|
10
|
+
checkpoints. Treat its `$ARGUMENTS` as the user's request after `$casarium`. If the case is
|
|
11
|
+
missing, ask for it.
|
|
12
|
+
|
|
13
|
+
For each phase, read only its `.claude/shards/phase-*.shard.md` and the skill files it names
|
|
14
|
+
under `.claude/skills/`. Read `.claude/rules/checkpoint-protocol.md` and
|
|
15
|
+
`.claude/rules/research-quality.md` when reaching their gates. Create phase artifacts under
|
|
16
|
+
`researches/<case-name>/` as the phase runs. Show the checkpoint and wait for the user's
|
|
17
|
+
confirmation before advancing. Phase 2.5 requires an explicit CJM choice; preserve that
|
|
18
|
+
choice in later phases. A failed research gate cannot emit a success promise.
|
|
19
|
+
|
|
20
|
+
The `.claude/` files are workflow references in Codex. Claude slash commands, Agent tool
|
|
21
|
+
calls, hook settings and model names inside them are not Codex commands or installed Codex
|
|
22
|
+
integrations. Use available Codex tools for the work and state any unavailable capability;
|
|
23
|
+
do not claim that a named Claude agent or hook ran. Parallel work is optional when the host
|
|
24
|
+
supports it. The research mode requirements still apply to every worker.
|
|
25
|
+
|
|
26
|
+
If the case asks for AI Factory mapping, read
|
|
27
|
+
`.claude/shards/phase-ai-factory.shard.md` and its referenced skill before Phase 0. Otherwise
|
|
28
|
+
leave that branch inactive. The project-local `$casarium` skill is the Codex entrypoint;
|
|
29
|
+
`/casarium` remains the Claude Code entrypoint.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-goal-planner
|
|
3
|
+
description: Plans software changes with the bundled SPARC-GOAP protocol and testable milestones.
|
|
4
|
+
color: blue
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Read `.claude/skills/feature-adr/references/agentic-qe/code-goal-planner.md` before planning. It is the canonical protocol for this project agent.
|
|
8
|
+
|
|
9
|
+
Use the feature requirements, ADR decisions, quality risks and current repository evidence to propose an ordered implementation plan. Give each milestone a deliverable and a check that could disprove completion. Identify unresolved inputs instead of inventing metrics or claiming that code has already been verified. Return the plan to Step 6 of feature-ADR; the lead checks it before recording the plan artifact.
|
|
@@ -20,9 +20,11 @@ $ARGUMENTS
|
|
|
20
20
|
- Output: `01_task_brief.md`
|
|
21
21
|
- ⏸️ **CHECKPOINT 1:** Подтверждение Task Brief + выбор verification mode
|
|
22
22
|
|
|
23
|
-
4. **Phase 2:
|
|
23
|
+
4. **Phase 2: Research** (goap-research-ed25519)
|
|
24
24
|
- Используй `scripts/goap_planner.py` и `scripts/ed25519_verifier.py`
|
|
25
|
-
-
|
|
25
|
+
- По умолчанию `moderate`; `strict`/`paranoid` выбираются только при подтверждённых `issuer_keys_available` и `source_class_verified`
|
|
26
|
+
- Если planner вернул `PlanNotFound`, покажи verdict и причину и остановись до Solve
|
|
27
|
+
- Статус подписи издателя бери из `verify_fact`, а целостность цепочки — отдельно из `verify_citation_chain`
|
|
26
28
|
- Output: `02_research_findings.md`
|
|
27
29
|
- ⏸️ **CHECKPOINT 2:** Подтверждение findings
|
|
28
30
|
|
|
@@ -195,7 +195,9 @@ researches/CASE_NAME/
|
|
|
195
195
|
- Файлы создаются в момент фазы, не в Phase 6
|
|
196
196
|
- ⭐ Phase 2.5 (CJM Prototype) — НИКОГДА НЕ ПРОПУСКАТЬ
|
|
197
197
|
- ⭐ 08_executive_summary.md — ОБЯЗАТЕЛЕН
|
|
198
|
-
- Research
|
|
198
|
+
- Research: `moderate` для обычных источников; `strict`/`paranoid` только после проверки
|
|
199
|
+
`issuer_keys_available` и `source_class_verified` по `.claude/rules/research-quality.md`.
|
|
200
|
+
Недостижимая цель исследования останавливает checkpoint и следующие фазы.
|
|
199
201
|
- {CHOSEN_CJM} передаётся в Phase 3-5
|
|
200
202
|
- Если банк: on-premise, ФЗ-152, ЦБ, GigaChat/YandexGPT
|
|
201
203
|
- Если мало времени: Quick Mode
|
|
@@ -23,7 +23,7 @@ $ARGUMENTS
|
|
|
23
23
|
4. **Step 2:** Определить 3 варианта CJM (A/B/C)
|
|
24
24
|
5. **Step 2.5:** VARIANT D — Future-Ready CJM (Trend-Based)
|
|
25
25
|
- Загрузи `.claude/skills/goap-research-ed25519/SKILL.md` для trend research
|
|
26
|
-
- Исследуй 5 категорий трендов
|
|
26
|
+
- Исследуй 5 категорий трендов в режиме, разрешённом `.claude/rules/research-quality.md`
|
|
27
27
|
- Создай Trend Brief
|
|
28
28
|
- Синтезируй Variant D
|
|
29
29
|
6. **Step 3:** Сгенерируй React-прототип (.jsx) с 4 вариантами
|
|
@@ -38,5 +38,5 @@ $ARGUMENTS
|
|
|
38
38
|
Запусти 3 агента параллельно:
|
|
39
39
|
- Agent 1: CJM Variant A — один подход к точке входа
|
|
40
40
|
- Agent 2: CJM Variant B + C — альтернативные подходы
|
|
41
|
-
- Agent 3: Trend Research для Variant D (GOAP
|
|
41
|
+
- Agent 3: Trend Research для Variant D (GOAP `moderate` для обычных источников)
|
|
42
42
|
Затем синтезируй в единый прототип с 4 вариантами.
|
|
@@ -12,7 +12,10 @@ $ARGUMENTS
|
|
|
12
12
|
|
|
13
13
|
1. **Загрузи скилл:** Прочитай `.claude/skills/goap-research-ed25519/SKILL.md`
|
|
14
14
|
2. **Прочитай Phase 0-1** для контекста
|
|
15
|
-
3.
|
|
15
|
+
3. **Выбери режим по `.claude/rules/research-quality.md`:** `moderate` для обычных
|
|
16
|
+
источников; `strict`/`paranoid` только при подтверждённых ключах издателей и
|
|
17
|
+
подписанной выдаче. Если GOAP вернул `GOAL_UNREACHABLE`, покажи причину и не
|
|
18
|
+
отмечай фазу завершённой.
|
|
16
19
|
|
|
17
20
|
4. **Исследуй по направлениям:**
|
|
18
21
|
- Аналоги — кто решал похожую задачу
|
|
@@ -29,7 +29,7 @@ Promises are machine-readable markers that formalize phase gates.
|
|
|
29
29
|
|-------|------------|---------|
|
|
30
30
|
| Phase 0 | `<promise>DISCOVERY_COMPLETE</promise>` | JTBD + competitors + ROI analyzed |
|
|
31
31
|
| Phase 1 | `<promise>CASE_EXPLORED</promise>` | Case fully understood, brief created |
|
|
32
|
-
| Phase 2 | `<promise>RESEARCH_PARANOID_PASSED</promise>` |
|
|
32
|
+
| Phase 2 | `<promise>RESEARCH_PARANOID_PASSED</promise>` | Legacy tag: evidence gate passed in the selected GOAP mode; no issuer-signature claim unless independently confirmed |
|
|
33
33
|
| Phase 2.5 | `<promise>CJM_VALIDATED</promise>` | CJM prototype created and variant chosen |
|
|
34
34
|
| Phase 3 | `<promise>SOLUTION_DESIGNED</promise>` | Solution strategy formulated |
|
|
35
35
|
| Phase 4 | `<promise>ARCHITECTURE_DEFINED</promise>` | C4 diagrams + sequence flows ready |
|
|
@@ -57,6 +57,7 @@ Files created: [list] ✅
|
|
|
57
57
|
### Promise Validation Rules
|
|
58
58
|
|
|
59
59
|
- A promise tag MUST only be emitted AFTER its conditions are verifiably met
|
|
60
|
+
- GOAP `GOAL_UNREACHABLE` cannot satisfy the Phase 2 promise; report the missing capability and stop
|
|
60
61
|
- If conditions are NOT met, emit `<promise>[TAG]_INCOMPLETE</promise>` instead
|
|
61
62
|
- Downstream phases SHOULD check for upstream promises before starting
|
|
62
63
|
- Promise tags serve as formal phase gates — they replace informal "phase done" signals
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
# Research Quality Rules
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
-
|
|
5
|
-
|
|
6
|
-
-
|
|
7
|
-
|
|
3
|
+
## Research mode selection
|
|
4
|
+
- Use GOAP `moderate` for ordinary web and publication sources. Cite material factual claims,
|
|
5
|
+
identify uncertainty and do not turn an unverified claim into a decisive conclusion.
|
|
6
|
+
- Select GOAP `strict` or `paranoid` only after confirming both `issuer_keys_available` (real
|
|
7
|
+
pinned Ed25519 issuer keys) and `source_class_verified` (signed delivery for that source
|
|
8
|
+
class). A URL or citation alone establishes neither capability.
|
|
9
|
+
- If the requested mode returns `GOAL_UNREACHABLE`, record the missing capabilities and stop
|
|
10
|
+
the research checkpoint. Do not emit a success promise or advance to the next phase.
|
|
11
|
+
- Zero tolerance for invented citations applies in every mode. Source attribution and issuer
|
|
12
|
+
signature verification are different claims.
|
|
8
13
|
|
|
9
14
|
## Citation Requirements
|
|
10
15
|
- Format: `[Claim] — Source: [URL or publication], [Date]`
|
|
@@ -14,7 +19,7 @@
|
|
|
14
19
|
## Verification Checklist
|
|
15
20
|
Before completing any research phase:
|
|
16
21
|
- [ ] All claims have sources
|
|
17
|
-
- [ ] No unverified statistics or percentages
|
|
22
|
+
- [ ] No unverified statistics or percentages presented as established facts
|
|
18
23
|
- [ ] Competitor names verified to exist
|
|
19
24
|
- [ ] Technology recommendations are for real, available products
|
|
20
25
|
- [ ] Regulatory references cite actual laws/standards
|
|
@@ -13,12 +13,14 @@ Load: `.claude/skills/goap-research-ed25519/SKILL.md`
|
|
|
13
13
|
## Mandatory Outputs
|
|
14
14
|
- `02_research_findings.md`
|
|
15
15
|
|
|
16
|
-
##
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
16
|
+
## Research mode and evidence
|
|
17
|
+
- Follow `.claude/rules/research-quality.md`: default GOAP `moderate` for ordinary sources.
|
|
18
|
+
- Use `strict`/`paranoid` only if both issuer-key and signed-delivery capabilities are
|
|
19
|
+
confirmed for the selected source class. Do not infer signature verification from a URL.
|
|
20
|
+
- Cite material factual claims; label unsupported claims `[UNVERIFIED]` and keep them out of
|
|
21
|
+
decisive conclusions. Invented citations are never acceptable.
|
|
22
|
+
- Citation format: `[Claim] — Source: [URL or publication], [Date]`.
|
|
23
|
+
- A `GOAL_UNREACHABLE` result blocks the checkpoint and transition to Phase 2.5.
|
|
22
24
|
|
|
23
25
|
## Agent Swarm (3 parallel, model: sonnet)
|
|
24
26
|
- Agent 1: Analogues + Benchmarks
|
|
@@ -28,13 +30,15 @@ Load: `.claude/skills/goap-research-ed25519/SKILL.md`
|
|
|
28
30
|
|
|
29
31
|
## Quality Gates
|
|
30
32
|
- ALL claims have sources
|
|
31
|
-
- No unverified statistics or percentages
|
|
33
|
+
- No unverified statistics or percentages presented as established facts
|
|
32
34
|
- Competitor names verified to exist
|
|
33
35
|
- Technology recommendations are for real, available products
|
|
34
36
|
- Regulatory references cite actual laws/standards
|
|
35
37
|
|
|
36
38
|
## Promise
|
|
37
|
-
On
|
|
39
|
+
On successful evidence review in the selected mode: `<promise>RESEARCH_PARANOID_PASSED</promise>`.
|
|
40
|
+
The tag name is retained for downstream compatibility; it does not assert GOAP paranoid mode or
|
|
41
|
+
cryptographic issuer verification. On failure, emit the incomplete marker and do not advance.
|
|
38
42
|
|
|
39
43
|
## Anti-Patterns to Check
|
|
40
44
|
- Bare claims without attribution → BLOCK
|
|
@@ -21,14 +21,15 @@
|
|
|
21
21
|
## Process
|
|
22
22
|
1. Extract: primary_user, segments, aha_moment, solution_concept from Phases 0-2
|
|
23
23
|
2. Define 3 CJM variants (A/B/C) with different approaches
|
|
24
|
-
3. Research 5 trend categories for Variant D
|
|
24
|
+
3. Research 5 trend categories for Variant D in the GOAP mode allowed by
|
|
25
|
+
`.claude/rules/research-quality.md`; ordinary sources use `moderate`
|
|
25
26
|
4. Generate React .jsx prototype with all 4 variants
|
|
26
27
|
5. User selects winning variant → sets `{CHOSEN_CJM}`
|
|
27
28
|
|
|
28
29
|
## Agent Swarm (3 parallel)
|
|
29
30
|
- Agent 1 (opus): CJM Variant A design
|
|
30
31
|
- Agent 2 (opus): CJM Variants B + C design
|
|
31
|
-
- Agent 3 (sonnet): Trend Research for Variant D (
|
|
32
|
+
- Agent 3 (sonnet): Trend Research for Variant D (selected GOAP mode, 5 categories)
|
|
32
33
|
|
|
33
34
|
## Critical Variable
|
|
34
35
|
`{CHOSEN_CJM}` — MUST be set by user selection. Passed to Phases 3-5.
|
|
@@ -36,7 +37,8 @@
|
|
|
36
37
|
## Quality Gates
|
|
37
38
|
- Minimum 3 CJM variants (A/B/C) + 1 trend variant (D)
|
|
38
39
|
- Prototype must be valid React JSX
|
|
39
|
-
- Trend research
|
|
40
|
+
- Trend research cites sources, labels uncertainty and does not claim issuer verification
|
|
41
|
+
without confirmed capabilities
|
|
40
42
|
- User MUST explicitly select a variant
|
|
41
43
|
|
|
42
44
|
## Promise
|