cc-codeconductor 1.5.1 → 1.6.0
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 +9 -9
- package/dist/core/runner/runner-target.d.ts +4 -4
- package/dist/index.js +1246 -602
- package/dist/library.js +16 -5
- package/dist/validation/schemas.d.ts +27 -22
- package/package.json +1 -1
- package/presets/agy/skills/openspec/SKILL.md +39 -11
- package/presets/agy/workflows/cc-council.md +2 -2
- package/presets/claude/commands/cc/council.md +2 -2
- package/presets/claude/commands/cc/openspec.md +20 -1
- package/presets/claude/skills/openspec/SKILL.md +39 -11
- package/presets/codex/skills/cc-council/SKILL.md +2 -2
- package/presets/codex/skills/cc-openspec/SKILL.md +20 -1
- package/presets/codex/skills/openspec/SKILL.md +39 -11
- package/presets/cursor/commands/cc/council.md +2 -2
- package/presets/cursor/commands/cc/openspec.md +20 -1
- package/presets/cursor/skills/openspec/SKILL.md +39 -11
- package/presets/gemini/commands/cc/council.toml +2 -2
- package/presets/gemini/commands/cc/openspec.toml +20 -1
- package/presets/muse/AGENTS.md +46 -0
- package/presets/muse/hooks.json +30 -0
- package/presets/opencode/commands/cc-council.md +2 -2
- package/presets/opencode/commands/cc-openspec.md +5 -3
- package/presets/opencode/skills/openspec/SKILL.md +39 -11
- package/src/presets/manifests/muse.yml +18 -0
- package/src/presets/models/muse.yml +4 -0
- package/src/presets/models/roles.yml +14 -0
- package/src/presets/targets/muse.yml +12 -0
package/dist/library.js
CHANGED
|
@@ -25,13 +25,20 @@ var init_runner_target = __esm(() => {
|
|
|
25
25
|
"cursor",
|
|
26
26
|
"agy",
|
|
27
27
|
"pi",
|
|
28
|
+
"muse",
|
|
28
29
|
"all"
|
|
29
30
|
];
|
|
30
|
-
INDIVIDUAL_TARGETS = ["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi"];
|
|
31
|
+
INDIVIDUAL_TARGETS = ["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse"];
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
// src/validation/schemas.ts
|
|
35
|
+
import { isAbsolute } from "node:path";
|
|
34
36
|
import { z } from "zod";
|
|
37
|
+
function isContainedRelativePath(value) {
|
|
38
|
+
if (value === "" || isAbsolute(value))
|
|
39
|
+
return false;
|
|
40
|
+
return !value.replace(/\\/g, "/").split("/").includes("..");
|
|
41
|
+
}
|
|
35
42
|
function validateCouncilSpec(data) {
|
|
36
43
|
return CouncilSpecSchema.parse(data);
|
|
37
44
|
}
|
|
@@ -149,7 +156,7 @@ function validateProductEvent(data) {
|
|
|
149
156
|
function validateSkillsRegistry(data) {
|
|
150
157
|
return SkillsRegistrySchema.parse(data);
|
|
151
158
|
}
|
|
152
|
-
var CouncilAgentSpecSchema, CouncilSpecSchema, ProjectProfileSchema, CompileCheckConfigSchema, LoopConfigSchema, CodeConductorConfigSchema, RunnerTargetSchema, InstallStrategySchema, ManifestEntrySchema, InstallManifestSchema, ToolProviderNamesSchema, PermissionProviderNamesSchema, ModelConfigSchema, SkillFrontmatterSchema, CommandFrontmatterSchema, TargetCapabilitiesSchema, ContractTargetSchema, ContractFormatSchema, AgentContractSchema, CouncilFindingSchema, CouncilVerdictInputSchema, ConsensusConfigSchema, CouncilVerdictSchema, ClaudeAgentFileSchema, OpenCodeAgentFileSchema, SentryStackFrameSchema, SentryWebhookSchema, MemoryPointerSchema, MemoryIndexSchema, GoalTaskSchema, GoalGraphSchema, ConfidenceLevelSchema, ProductNodeTypeSchema, GraphRelationSchema, KnowledgeEntitySchema, DecisionSchema, EvidenceSchema, CanonicalTaskCardStatusSchema, CanonicalTaskCardSchema, ProductGraphNodeSchema, ProductGraphEdgeSchema, ProductGraphSchema, ProductMetaSchema, ProductEventTypeSchema, ProductEventSchema, OperationalStateSchema, StrategicMemorySchema, ImpactReportSchema, BusinessReviewOutputSchema, VerificationReportSchema, BacklogStatusSchema, BacklogTypeSchema, BacklogPrioritySchema, BacklogGlobalSchema, BacklogItemSchema, BacklogDocumentSchema, OpenspecTaskCardPhaseSchema, OpenspecTaskCardStatusSchema, OpenspecTaskCardSchema, OpenspecStateSchema, SpecAnalyzeFindingSchema, SpecAnalyzeReportSchema, WorkflowCommandSchema, CcepOutputFormatSchema, CommandEnvelopeSchema, WorkflowPhaseSchema, WorkflowRiskRuleSchema, WorkflowProfileSchema, ExecutionContextSchema, PlannerOutputSchema, AgentArtifactSchema, AgentOutputSchema, ImplementerTestsSchema, ImplementerOutputSchema, ReviewAxisSchema, ReviewFindingSchema, ReviewerOutputSchema, TechnicalPlanOutputSchema, FixIntakeOutputSchema, ScorecardVerdictSchema, ScorecardCriterionIdSchema, ScorecardCriterionSchema, ScorecardRecordSchema, TaskOutcomeSourceSchema, TaskOutcomeStatusSchema, DeliveryRouteSchema, TokenUsageSchema, DeliveryTelemetrySchema, DeliveryLedgerTaskSchema, DeliveryLedgerSchema, HandoffEnvelopeSchema, RepoRelativePathSchema, DeliveryLedgerRequestSchema, TaskOutcomeSchema, HarnessComponentIdSchema, HarnessComponentLayerSchema, HarnessToggleKindSchema, HarnessCatalogEntrySchema, HarnessCatalogSchema, HarnessOverlaySchema, HarnessExperimentSchema, HarnessSuiteTaskSchema, HarnessSuiteSchema, EvaluationIndexSchema, ExecutionProfileNameSchema, ExecutionProfileSchema, SkillsRegistrySchema;
|
|
159
|
+
var CouncilAgentSpecSchema, CouncilSpecSchema, ProjectProfileSchema, CompileCheckConfigSchema, LoopConfigSchema, CodeConductorConfigSchema, RunnerTargetSchema, InstallStrategySchema, ContainedRelativePathSchema, ManifestEntrySchema, InstallManifestSchema, ToolProviderNamesSchema, PermissionProviderNamesSchema, ModelConfigSchema, SkillFrontmatterSchema, CommandFrontmatterSchema, TargetCapabilitiesSchema, ContractTargetSchema, ContractFormatSchema, AgentContractSchema, CouncilFindingSchema, CouncilVerdictInputSchema, ConsensusConfigSchema, CouncilVerdictSchema, ClaudeAgentFileSchema, OpenCodeAgentFileSchema, SentryStackFrameSchema, SentryWebhookSchema, MemoryPointerSchema, MemoryIndexSchema, GoalTaskSchema, GoalGraphSchema, ConfidenceLevelSchema, ProductNodeTypeSchema, GraphRelationSchema, KnowledgeEntitySchema, DecisionSchema, EvidenceSchema, CanonicalTaskCardStatusSchema, CanonicalTaskCardSchema, ProductGraphNodeSchema, ProductGraphEdgeSchema, ProductGraphSchema, ProductMetaSchema, ProductEventTypeSchema, ProductEventSchema, OperationalStateSchema, StrategicMemorySchema, ImpactReportSchema, BusinessReviewOutputSchema, VerificationReportSchema, BacklogStatusSchema, BacklogTypeSchema, BacklogPrioritySchema, BacklogGlobalSchema, BacklogItemSchema, BacklogDocumentSchema, OpenspecTaskCardPhaseSchema, OpenspecTaskCardStatusSchema, OpenspecTaskCardSchema, OpenspecStateSchema, SpecAnalyzeFindingSchema, SpecAnalyzeReportSchema, WorkflowCommandSchema, CcepOutputFormatSchema, CommandEnvelopeSchema, WorkflowPhaseSchema, WorkflowRiskRuleSchema, WorkflowProfileSchema, ExecutionContextSchema, PlannerOutputSchema, AgentArtifactSchema, AgentOutputSchema, ImplementerTestsSchema, ImplementerOutputSchema, ReviewAxisSchema, ReviewFindingSchema, ReviewerOutputSchema, TechnicalPlanOutputSchema, FixIntakeOutputSchema, ScorecardVerdictSchema, ScorecardCriterionIdSchema, ScorecardCriterionSchema, ScorecardRecordSchema, TaskOutcomeSourceSchema, TaskOutcomeStatusSchema, DeliveryRouteSchema, TokenUsageSchema, DeliveryTelemetrySchema, DeliveryLedgerTaskSchema, DeliveryLedgerSchema, HandoffEnvelopeSchema, RepoRelativePathSchema, DeliveryLedgerRequestSchema, TaskOutcomeSchema, HarnessComponentIdSchema, HarnessComponentLayerSchema, HarnessToggleKindSchema, HarnessCatalogEntrySchema, HarnessCatalogSchema, HarnessOverlaySchema, HarnessExperimentSchema, HarnessSuiteTaskSchema, HarnessSuiteSchema, EvaluationIndexSchema, ExecutionProfileNameSchema, ExecutionProfileSchema, SkillsRegistrySchema;
|
|
153
160
|
var init_schemas = __esm(() => {
|
|
154
161
|
init_runner_target();
|
|
155
162
|
CouncilAgentSpecSchema = z.object({
|
|
@@ -229,9 +236,12 @@ var init_schemas = __esm(() => {
|
|
|
229
236
|
"create-only",
|
|
230
237
|
"skip"
|
|
231
238
|
]);
|
|
239
|
+
ContainedRelativePathSchema = z.string().refine(isContainedRelativePath, (value) => ({
|
|
240
|
+
message: `Path must be relative without ".." segments: ${value}`
|
|
241
|
+
}));
|
|
232
242
|
ManifestEntrySchema = z.object({
|
|
233
|
-
src:
|
|
234
|
-
dest:
|
|
243
|
+
src: ContainedRelativePathSchema,
|
|
244
|
+
dest: ContainedRelativePathSchema,
|
|
235
245
|
strategy: InstallStrategySchema,
|
|
236
246
|
globalStrategy: InstallStrategySchema.optional(),
|
|
237
247
|
template: z.boolean().optional()
|
|
@@ -252,7 +262,8 @@ var init_schemas = __esm(() => {
|
|
|
252
262
|
cursor: z.string().optional(),
|
|
253
263
|
agy: z.string().optional(),
|
|
254
264
|
pi: z.string().optional(),
|
|
255
|
-
grok: z.string().optional()
|
|
265
|
+
grok: z.string().optional(),
|
|
266
|
+
muse: z.string().optional()
|
|
256
267
|
})),
|
|
257
268
|
tools: z.record(z.string(), ToolProviderNamesSchema).optional(),
|
|
258
269
|
permissions: PermissionProviderNamesSchema.optional()
|
|
@@ -182,15 +182,15 @@ export declare const CodeConductorConfigSchema: z.ZodObject<{
|
|
|
182
182
|
profile?: string | undefined;
|
|
183
183
|
}>;
|
|
184
184
|
defaults: z.ZodObject<{
|
|
185
|
-
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi"]>;
|
|
185
|
+
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse"]>;
|
|
186
186
|
overwrite: z.ZodBoolean;
|
|
187
187
|
locale: z.ZodDefault<z.ZodOptional<z.ZodEnum<["en", "es"]>>>;
|
|
188
188
|
}, "strip", z.ZodTypeAny, {
|
|
189
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
189
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
190
190
|
overwrite: boolean;
|
|
191
191
|
locale: "en" | "es";
|
|
192
192
|
}, {
|
|
193
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
193
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
194
194
|
overwrite: boolean;
|
|
195
195
|
locale?: "en" | "es" | undefined;
|
|
196
196
|
}>;
|
|
@@ -287,7 +287,7 @@ export declare const CodeConductorConfigSchema: z.ZodObject<{
|
|
|
287
287
|
profile?: string | undefined;
|
|
288
288
|
};
|
|
289
289
|
defaults: {
|
|
290
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
290
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
291
291
|
overwrite: boolean;
|
|
292
292
|
locale: "en" | "es";
|
|
293
293
|
};
|
|
@@ -322,7 +322,7 @@ export declare const CodeConductorConfigSchema: z.ZodObject<{
|
|
|
322
322
|
profile?: string | undefined;
|
|
323
323
|
};
|
|
324
324
|
defaults: {
|
|
325
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
325
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
326
326
|
overwrite: boolean;
|
|
327
327
|
locale?: "en" | "es" | undefined;
|
|
328
328
|
};
|
|
@@ -354,14 +354,14 @@ export declare const CodeConductorConfigSchema: z.ZodObject<{
|
|
|
354
354
|
/**
|
|
355
355
|
* Runner target schema
|
|
356
356
|
*/
|
|
357
|
-
export declare const RunnerTargetSchema: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "all"]>;
|
|
357
|
+
export declare const RunnerTargetSchema: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse", "all"]>;
|
|
358
358
|
/**
|
|
359
359
|
* Install manifest schemas
|
|
360
360
|
*/
|
|
361
361
|
export declare const InstallStrategySchema: z.ZodEnum<["overwrite", "append", "merge-json", "merge-managed", "create-only", "skip"]>;
|
|
362
362
|
export declare const ManifestEntrySchema: z.ZodObject<{
|
|
363
|
-
src: z.ZodString
|
|
364
|
-
dest: z.ZodString
|
|
363
|
+
src: z.ZodEffects<z.ZodString, string, string>;
|
|
364
|
+
dest: z.ZodEffects<z.ZodString, string, string>;
|
|
365
365
|
strategy: z.ZodEnum<["overwrite", "append", "merge-json", "merge-managed", "create-only", "skip"]>;
|
|
366
366
|
globalStrategy: z.ZodOptional<z.ZodEnum<["overwrite", "append", "merge-json", "merge-managed", "create-only", "skip"]>>;
|
|
367
367
|
template: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -379,10 +379,10 @@ export declare const ManifestEntrySchema: z.ZodObject<{
|
|
|
379
379
|
template?: boolean | undefined;
|
|
380
380
|
}>;
|
|
381
381
|
export declare const InstallManifestSchema: z.ZodObject<{
|
|
382
|
-
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi"]>;
|
|
382
|
+
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse"]>;
|
|
383
383
|
entries: z.ZodArray<z.ZodObject<{
|
|
384
|
-
src: z.ZodString
|
|
385
|
-
dest: z.ZodString
|
|
384
|
+
src: z.ZodEffects<z.ZodString, string, string>;
|
|
385
|
+
dest: z.ZodEffects<z.ZodString, string, string>;
|
|
386
386
|
strategy: z.ZodEnum<["overwrite", "append", "merge-json", "merge-managed", "create-only", "skip"]>;
|
|
387
387
|
globalStrategy: z.ZodOptional<z.ZodEnum<["overwrite", "append", "merge-json", "merge-managed", "create-only", "skip"]>>;
|
|
388
388
|
template: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -407,7 +407,7 @@ export declare const InstallManifestSchema: z.ZodObject<{
|
|
|
407
407
|
globalStrategy?: "overwrite" | "append" | "merge-json" | "merge-managed" | "create-only" | "skip" | undefined;
|
|
408
408
|
template?: boolean | undefined;
|
|
409
409
|
}[];
|
|
410
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
410
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
411
411
|
}, {
|
|
412
412
|
entries: {
|
|
413
413
|
src: string;
|
|
@@ -416,7 +416,7 @@ export declare const InstallManifestSchema: z.ZodObject<{
|
|
|
416
416
|
globalStrategy?: "overwrite" | "append" | "merge-json" | "merge-managed" | "create-only" | "skip" | undefined;
|
|
417
417
|
template?: boolean | undefined;
|
|
418
418
|
}[];
|
|
419
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
419
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
420
420
|
}>;
|
|
421
421
|
/**
|
|
422
422
|
* Tool provider names schema — maps base tool names to provider-specific names
|
|
@@ -427,7 +427,7 @@ export declare const PermissionProviderNamesSchema: z.ZodRecord<z.ZodString, z.Z
|
|
|
427
427
|
* Model config schema — defines model names per provider per agent role
|
|
428
428
|
*/
|
|
429
429
|
export declare const ModelConfigSchema: z.ZodObject<{
|
|
430
|
-
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi"]>;
|
|
430
|
+
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse"]>;
|
|
431
431
|
agents: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
432
432
|
claude: z.ZodOptional<z.ZodString>;
|
|
433
433
|
opencode: z.ZodOptional<z.ZodString>;
|
|
@@ -437,6 +437,7 @@ export declare const ModelConfigSchema: z.ZodObject<{
|
|
|
437
437
|
agy: z.ZodOptional<z.ZodString>;
|
|
438
438
|
pi: z.ZodOptional<z.ZodString>;
|
|
439
439
|
grok: z.ZodOptional<z.ZodString>;
|
|
440
|
+
muse: z.ZodOptional<z.ZodString>;
|
|
440
441
|
}, "strip", z.ZodTypeAny, {
|
|
441
442
|
opencode?: string | undefined;
|
|
442
443
|
claude?: string | undefined;
|
|
@@ -445,6 +446,7 @@ export declare const ModelConfigSchema: z.ZodObject<{
|
|
|
445
446
|
cursor?: string | undefined;
|
|
446
447
|
agy?: string | undefined;
|
|
447
448
|
pi?: string | undefined;
|
|
449
|
+
muse?: string | undefined;
|
|
448
450
|
grok?: string | undefined;
|
|
449
451
|
}, {
|
|
450
452
|
opencode?: string | undefined;
|
|
@@ -454,6 +456,7 @@ export declare const ModelConfigSchema: z.ZodObject<{
|
|
|
454
456
|
cursor?: string | undefined;
|
|
455
457
|
agy?: string | undefined;
|
|
456
458
|
pi?: string | undefined;
|
|
459
|
+
muse?: string | undefined;
|
|
457
460
|
grok?: string | undefined;
|
|
458
461
|
}>>;
|
|
459
462
|
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
@@ -467,9 +470,10 @@ export declare const ModelConfigSchema: z.ZodObject<{
|
|
|
467
470
|
cursor?: string | undefined;
|
|
468
471
|
agy?: string | undefined;
|
|
469
472
|
pi?: string | undefined;
|
|
473
|
+
muse?: string | undefined;
|
|
470
474
|
grok?: string | undefined;
|
|
471
475
|
}>;
|
|
472
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
476
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
473
477
|
tools?: Record<string, Record<string, string>> | undefined;
|
|
474
478
|
permissions?: Record<string, string> | undefined;
|
|
475
479
|
}, {
|
|
@@ -481,9 +485,10 @@ export declare const ModelConfigSchema: z.ZodObject<{
|
|
|
481
485
|
cursor?: string | undefined;
|
|
482
486
|
agy?: string | undefined;
|
|
483
487
|
pi?: string | undefined;
|
|
488
|
+
muse?: string | undefined;
|
|
484
489
|
grok?: string | undefined;
|
|
485
490
|
}>;
|
|
486
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
491
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
487
492
|
tools?: Record<string, Record<string, string>> | undefined;
|
|
488
493
|
permissions?: Record<string, string> | undefined;
|
|
489
494
|
}>;
|
|
@@ -550,7 +555,7 @@ export type CommandFrontmatter = z.infer<typeof CommandFrontmatterSchema>;
|
|
|
550
555
|
* preset doesn't ship an MCP config, so `mcp: false` here).
|
|
551
556
|
*/
|
|
552
557
|
export declare const TargetCapabilitiesSchema: z.ZodObject<{
|
|
553
|
-
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi"]>;
|
|
558
|
+
target: z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse"]>;
|
|
554
559
|
invocation: z.ZodEnum<["colon", "hyphen", "dollar"]>;
|
|
555
560
|
commandFormat: z.ZodEnum<["markdown", "toml", "skill"]>;
|
|
556
561
|
contextFile: z.ZodString;
|
|
@@ -580,7 +585,7 @@ export declare const TargetCapabilitiesSchema: z.ZodObject<{
|
|
|
580
585
|
mcp: boolean;
|
|
581
586
|
}>;
|
|
582
587
|
}, "strip", z.ZodTypeAny, {
|
|
583
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
588
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
584
589
|
invocation: "colon" | "hyphen" | "dollar";
|
|
585
590
|
commandFormat: "markdown" | "toml" | "skill";
|
|
586
591
|
contextFile: string;
|
|
@@ -592,7 +597,7 @@ export declare const TargetCapabilitiesSchema: z.ZodObject<{
|
|
|
592
597
|
};
|
|
593
598
|
subagentInvocationStyle?: "task-tool" | "adopt-role" | "invoke-with-context" | undefined;
|
|
594
599
|
}, {
|
|
595
|
-
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi";
|
|
600
|
+
target: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse";
|
|
596
601
|
invocation: "colon" | "hyphen" | "dollar";
|
|
597
602
|
commandFormat: "markdown" | "toml" | "skill";
|
|
598
603
|
contextFile: string;
|
|
@@ -4714,7 +4719,7 @@ export declare const EvaluationIndexSchema: z.ZodObject<{
|
|
|
4714
4719
|
export declare const ExecutionProfileNameSchema: z.ZodEnum<["balanced", "quality", "economical"]>;
|
|
4715
4720
|
export declare const ExecutionProfileSchema: z.ZodObject<{
|
|
4716
4721
|
profile: z.ZodDefault<z.ZodEnum<["balanced", "quality", "economical"]>>;
|
|
4717
|
-
target: z.ZodOptional<z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi"]>>;
|
|
4722
|
+
target: z.ZodOptional<z.ZodEnum<["opencode", "claude", "codex", "gemini", "cursor", "agy", "pi", "muse"]>>;
|
|
4718
4723
|
overrides: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
4719
4724
|
subagentPolicy: z.ZodOptional<z.ZodObject<{
|
|
4720
4725
|
orchestrator: z.ZodOptional<z.ZodEnum<["primary", "delegate"]>>;
|
|
@@ -4729,14 +4734,14 @@ export declare const ExecutionProfileSchema: z.ZodObject<{
|
|
|
4729
4734
|
}, "strip", z.ZodTypeAny, {
|
|
4730
4735
|
profile: "balanced" | "quality" | "economical";
|
|
4731
4736
|
overrides: Record<string, string>;
|
|
4732
|
-
target?: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | undefined;
|
|
4737
|
+
target?: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse" | undefined;
|
|
4733
4738
|
subagentPolicy?: {
|
|
4734
4739
|
orchestrator?: "primary" | "delegate" | undefined;
|
|
4735
4740
|
testerReviewer?: "primary" | "delegate" | undefined;
|
|
4736
4741
|
} | undefined;
|
|
4737
4742
|
}, {
|
|
4738
4743
|
profile?: "balanced" | "quality" | "economical" | undefined;
|
|
4739
|
-
target?: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | undefined;
|
|
4744
|
+
target?: "opencode" | "claude" | "codex" | "gemini" | "cursor" | "agy" | "pi" | "muse" | undefined;
|
|
4740
4745
|
overrides?: Record<string, string> | undefined;
|
|
4741
4746
|
subagentPolicy?: {
|
|
4742
4747
|
orchestrator?: "primary" | "delegate" | undefined;
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@ gates, not a reference doc. Specs describe WHAT; `design.md` describes HOW.
|
|
|
16
16
|
|
|
17
17
|
## When to Use
|
|
18
18
|
|
|
19
|
-
- `/cc-openspec` or `openspec
|
|
19
|
+
- `/cc-openspec` or `openspec plan` / `next` / `done` / `sync` / `verify` / `archive`
|
|
20
20
|
- An item is `READY` or later and must move through the state machine
|
|
21
21
|
|
|
22
22
|
**NOT** for creating `BACKLOG.md` (use skill `backlog`) or for stack-specific
|
|
@@ -26,22 +26,43 @@ coding rules.
|
|
|
26
26
|
|
|
27
27
|
Local CLI is `bun run dev`. Published package is `npx cc-codeconductor`.
|
|
28
28
|
|
|
29
|
-
1. `openspec validate` — must pass before delivery.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
1. `openspec validate` — must pass before delivery. If you reached this
|
|
30
|
+
workflow on your own (the user did not ask for OpenSpec) and there is no
|
|
31
|
+
`BACKLOG.md` / `openspec/` root, answer normally instead — never scaffold
|
|
32
|
+
one as a side effect.
|
|
33
|
+
2. `openspec plan BC-xxx` if the item is not yet `PLANNED`. Planning only: it
|
|
34
|
+
writes TaskCards plus proposal/design/tasks/specs under
|
|
35
|
+
`openspec/changes/<slug>/` and stops. Never implement in this step.
|
|
36
|
+
3. Review the plan before `start`: read proposal → delta specs → tasks, in that
|
|
37
|
+
order, and confirm intent, scope, testable FR/SC, and edge-case scenarios.
|
|
38
|
+
Fix the Markdown directly or ask for revisions — code comes later.
|
|
39
|
+
4. `openspec analyze --output json` — CRITICAL findings exit 1. Do not implement.
|
|
40
|
+
5. Phases: discover (`repo-explorer`) → design (`architect`) → test (`tester`) →
|
|
33
41
|
implement (`implementer`) → review (`reviewer`). If Global `TDD required: yes`,
|
|
34
|
-
test runs before implement.
|
|
35
|
-
|
|
36
|
-
evidence JSON is rejected.
|
|
37
|
-
|
|
38
|
-
7.
|
|
39
|
-
|
|
42
|
+
test runs before implement. Discover is read-only: it never writes code.
|
|
43
|
+
6. `openspec done` on test/implement requires `captureTddSuiteEvidence`. Handmade
|
|
44
|
+
evidence JSON is rejected. The implementer ticks `tasks.md` boxes
|
|
45
|
+
(`- [ ]` → `- [x]`) as each FR lands; only `x`/`X` counts as done.
|
|
46
|
+
7. When implementation reveals a design problem, pause and reconcile the planning
|
|
47
|
+
artifacts first — in any direction (a later artifact may force revising an
|
|
48
|
+
earlier one). Planning artifacts only in that step, never code; confirm each
|
|
49
|
+
edit. If the item's intent changed rather than its details, open a fresh item
|
|
50
|
+
with `/cc-backlog` (`/cc:backlog`) instead of warping this one.
|
|
51
|
+
8. `openspec verify --output json` — advisory pre-archive checklist
|
|
52
|
+
(`archiveReady` plus Completeness/Correctness/Coherence issues). Optional:
|
|
53
|
+
`openspec sync` merges delta specs into `openspec/specs/` without closing.
|
|
54
|
+
9. `scorecard create --task BC-xxx --from-diff` then record a verdict.
|
|
55
|
+
10. `openspec archive` only after human review when `Review required: yes` and
|
|
56
|
+
the scorecard is PASS. Archive re-checks planning artifacts and analyze
|
|
57
|
+
CRITICALs, and warns on unchecked `tasks.md` boxes.
|
|
40
58
|
|
|
41
59
|
Status machine: `TODO` → `READY` → `PLANNED` → `IN_PROGRESS` → `REVIEW` → `DONE`
|
|
42
60
|
→ Archive. `BLOCKED` returns to `READY`. Reviewer rejection: `REVIEW` →
|
|
43
61
|
`IN_PROGRESS`.
|
|
44
62
|
|
|
63
|
+
`openspec status --output json` also reports artifact presence, `tasks.md`
|
|
64
|
+
checkbox progress, and `nextSteps` for the next CLI call.
|
|
65
|
+
|
|
45
66
|
## Web interface scope
|
|
46
67
|
|
|
47
68
|
When the task concerns web layout, component states, feedback, motion, or a
|
|
@@ -70,17 +91,24 @@ delivery read-only and record unavailable visual or emulator evidence as pending
|
|
|
70
91
|
| I'll add tests after green | Global TDD required means tester before implementer. |
|
|
71
92
|
| I'll write the evidence JSON myself | Handmade TDD JSON is rejected. Use the verification runner. |
|
|
72
93
|
| The item is small; skip analyze | `openspec analyze` CRITICAL still stops implement. |
|
|
94
|
+
| The plan is generated; skip reading it | Read proposal → specs → tasks before `start`. Generated is not reviewed. |
|
|
95
|
+
| I'll fix the spec after shipping | Reconcile planning artifacts before continuing to implement. |
|
|
73
96
|
|
|
74
97
|
## Red Flags
|
|
75
98
|
|
|
76
99
|
- Implementing while analyze reports CRITICAL
|
|
100
|
+
- Starting cards before reading the generated plan
|
|
77
101
|
- Archive without a PASS scorecard when review is required
|
|
102
|
+
- Archive while `openspec verify` reports CRITICAL
|
|
78
103
|
- Acceptance like "improve UX" with no measurable check
|
|
79
104
|
|
|
80
105
|
## Verification
|
|
81
106
|
|
|
82
107
|
- [ ] `openspec validate` exit 0
|
|
108
|
+
- [ ] Plan reviewed (proposal → specs → tasks) before `start`
|
|
83
109
|
- [ ] `openspec analyze --output json` has no CRITICAL
|
|
84
110
|
- [ ] TDD evidence from the runner when TDD is required
|
|
111
|
+
- [ ] `tasks.md` boxes ticked as FRs land
|
|
112
|
+
- [ ] `openspec verify --output json` checked before archive
|
|
85
113
|
- [ ] `scorecard create --from-diff` recorded
|
|
86
114
|
- [ ] Suite check (optional): `bun run dev scorecard suite-run --suite workflow-gates`
|
|
@@ -63,7 +63,7 @@ implementer must:
|
|
|
63
63
|
1. Write the minimal code required to pass the tests.
|
|
64
64
|
2. Touch ONLY the files specified in the Technical Plan (Surgical Changes).
|
|
65
65
|
3. NOT refactor adjacent code, change existing styles, or build speculative features.
|
|
66
|
-
4. Run the tests. Loop `implementer` -> `tester` until all tests pass (Green state).
|
|
66
|
+
4. Run the tests. Loop `implementer` -> `tester` until all tests pass (Green state), at most 3 iterations -- then stop and report the failing tests instead of looping.
|
|
67
67
|
|
|
68
68
|
---
|
|
69
69
|
|
|
@@ -75,7 +75,7 @@ The council will evaluate the diff against the 6 axes (Architecture, Security, P
|
|
|
75
75
|
|
|
76
76
|
If ANY agent votes CRITICAL (especially due to over-engineering, scope creep, or missing the verifiable goals):
|
|
77
77
|
- The Review Report status is **BLOCKED**.
|
|
78
|
-
- Return to Step 4 with the feedback.
|
|
78
|
+
- Return to Step 4 with the feedback (at most 3 review rounds in total -- then deliver the BLOCKED verdict with the unresolved findings instead of looping).
|
|
79
79
|
|
|
80
80
|
If APPROVED (no CRITICAL findings):
|
|
81
81
|
- Deliver the final Council Verdict and the diff summary.
|
|
@@ -62,7 +62,7 @@ implementer must:
|
|
|
62
62
|
1. Write the minimal code required to pass the tests.
|
|
63
63
|
2. Touch ONLY the files specified in the Technical Plan (Surgical Changes).
|
|
64
64
|
3. NOT refactor adjacent code, change existing styles, or build speculative features.
|
|
65
|
-
4. Run the tests. Loop `implementer` -> `tester` until all tests pass (Green state).
|
|
65
|
+
4. Run the tests. Loop `implementer` -> `tester` until all tests pass (Green state), at most 3 iterations -- then stop and report the failing tests instead of looping.
|
|
66
66
|
|
|
67
67
|
---
|
|
68
68
|
|
|
@@ -74,7 +74,7 @@ The council will evaluate the diff against the 6 axes (Architecture, Security, P
|
|
|
74
74
|
|
|
75
75
|
If ANY agent votes CRITICAL (especially due to over-engineering, scope creep, or missing the verifiable goals):
|
|
76
76
|
- The Review Report status is **BLOCKED**.
|
|
77
|
-
- Return to Step 4 with the feedback.
|
|
77
|
+
- Return to Step 4 with the feedback (at most 3 review rounds in total -- then deliver the BLOCKED verdict with the unresolved findings instead of looping).
|
|
78
78
|
|
|
79
79
|
If APPROVED (no CRITICAL findings):
|
|
80
80
|
- Deliver the final Council Verdict and the diff summary.
|
|
@@ -146,6 +146,13 @@ Show:
|
|
|
146
146
|
|
|
147
147
|
Update BACKLOG item status to `PLANNED` (CLI does this automatically).
|
|
148
148
|
|
|
149
|
+
`plan` is planning-only: it writes TaskCards plus proposal/design/tasks/specs
|
|
150
|
+
and stops. Before Step 4, review the plan in this order — proposal → delta
|
|
151
|
+
specs → tasks — and confirm: intent is right, no scope creep, every FR is
|
|
152
|
+
testable with a scenario that exercises it, edge/error cases are covered, and
|
|
153
|
+
each task traces to an FR/SC. Fix the Markdown directly or ask for revisions.
|
|
154
|
+
Do not `start` any card until the plan reads correctly.
|
|
155
|
+
|
|
149
156
|
---
|
|
150
157
|
|
|
151
158
|
## Drive card status (CLI)
|
|
@@ -156,10 +163,12 @@ Do not edit `.codeconductor/openspec-state.json` by hand.
|
|
|
156
163
|
npx cc-codeconductor openspec start <cardId>
|
|
157
164
|
npx cc-codeconductor openspec done <cardId>
|
|
158
165
|
npx cc-codeconductor openspec block <cardId> --reason "waiting on design"
|
|
166
|
+
npx cc-codeconductor openspec sync <itemId>
|
|
167
|
+
npx cc-codeconductor openspec verify <itemId>
|
|
159
168
|
npx cc-codeconductor openspec archive <itemId>
|
|
160
169
|
```
|
|
161
170
|
|
|
162
|
-
`start` moves the card `pending → doing` and the item `PLANNED → IN_PROGRESS`. `done` marks the card complete, updates Progress, and moves the item to `REVIEW` when every card is done and review is required. `archive` requires all cards done (and review evidence when Global review is required) and moves `openspec/changes/<slug>` to `archive/`.
|
|
171
|
+
`start` moves the card `pending → doing` and the item `PLANNED → IN_PROGRESS`. `done` marks the card complete, updates Progress, and moves the item to `REVIEW` when every card is done and review is required. `sync` merges delta specs into `openspec/specs/` without closing the item (optional before archive). `verify` is the advisory pre-archive checklist: exit 0 with `archiveReady` plus Completeness/Correctness/Coherence issues. `archive` requires all cards done (and review evidence when Global review is required), re-checks planning artifacts and analyze CRITICALs, warns on unchecked `tasks.md` boxes, then moves `openspec/changes/<slug>` to `archive/`.
|
|
163
172
|
|
|
164
173
|
---
|
|
165
174
|
|
|
@@ -196,6 +205,14 @@ After each phase:
|
|
|
196
205
|
|
|
197
206
|
Implementer: create a Git worktree before editing (`git worktree add ../<branch>-session <branch>`).
|
|
198
207
|
|
|
208
|
+
Discover is read-only: `repo-explorer` never writes code. The implementer ticks
|
|
209
|
+
`tasks.md` boxes (`- [ ]` → `- [x]`) as each FR lands — only `x`/`X` counts as
|
|
210
|
+
done. If implementation reveals a design problem, pause and reconcile the
|
|
211
|
+
planning artifacts first (any direction: a later artifact may force revising an
|
|
212
|
+
earlier one). Planning artifacts only in that step — never code — and confirm
|
|
213
|
+
each edit. If the item's intent changed rather than its details, open a fresh
|
|
214
|
+
item with `/cc:backlog` instead of warping this one.
|
|
215
|
+
|
|
199
216
|
---
|
|
200
217
|
|
|
201
218
|
## Step 5 — Review gate
|
|
@@ -221,6 +238,8 @@ If **approved**: proceed to Step 6.
|
|
|
221
238
|
|
|
222
239
|
## Step 6 — Scorecard and update backlog
|
|
223
240
|
|
|
241
|
+
First run the advisory pre-archive check (`npx cc-codeconductor openspec verify <BC-id> --output json`): confirm `archiveReady` and clear any Completeness/Correctness/Coherence issues. Optionally run `openspec sync <BC-id>` to merge delta specs into `openspec/specs/` without closing the item. Then:
|
|
242
|
+
|
|
224
243
|
1. `npx cc-codeconductor scorecard create --task <BC-id> --from-diff`
|
|
225
244
|
2. Complete criteria; `scorecard record` with verdict and optional cost/tokens
|
|
226
245
|
3. Set item `Progress: 100%`, `Status: DONE` if PASS
|
|
@@ -16,7 +16,7 @@ gates, not a reference doc. Specs describe WHAT; `design.md` describes HOW.
|
|
|
16
16
|
|
|
17
17
|
## When to Use
|
|
18
18
|
|
|
19
|
-
- `/cc-openspec` or `openspec
|
|
19
|
+
- `/cc-openspec` or `openspec plan` / `next` / `done` / `sync` / `verify` / `archive`
|
|
20
20
|
- An item is `READY` or later and must move through the state machine
|
|
21
21
|
|
|
22
22
|
**NOT** for creating `BACKLOG.md` (use skill `backlog`) or for stack-specific
|
|
@@ -26,22 +26,43 @@ coding rules.
|
|
|
26
26
|
|
|
27
27
|
Local CLI is `bun run dev`. Published package is `npx cc-codeconductor`.
|
|
28
28
|
|
|
29
|
-
1. `openspec validate` — must pass before delivery.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
1. `openspec validate` — must pass before delivery. If you reached this
|
|
30
|
+
workflow on your own (the user did not ask for OpenSpec) and there is no
|
|
31
|
+
`BACKLOG.md` / `openspec/` root, answer normally instead — never scaffold
|
|
32
|
+
one as a side effect.
|
|
33
|
+
2. `openspec plan BC-xxx` if the item is not yet `PLANNED`. Planning only: it
|
|
34
|
+
writes TaskCards plus proposal/design/tasks/specs under
|
|
35
|
+
`openspec/changes/<slug>/` and stops. Never implement in this step.
|
|
36
|
+
3. Review the plan before `start`: read proposal → delta specs → tasks, in that
|
|
37
|
+
order, and confirm intent, scope, testable FR/SC, and edge-case scenarios.
|
|
38
|
+
Fix the Markdown directly or ask for revisions — code comes later.
|
|
39
|
+
4. `openspec analyze --output json` — CRITICAL findings exit 1. Do not implement.
|
|
40
|
+
5. Phases: discover (`repo-explorer`) → design (`architect`) → test (`tester`) →
|
|
33
41
|
implement (`implementer`) → review (`reviewer`). If Global `TDD required: yes`,
|
|
34
|
-
test runs before implement.
|
|
35
|
-
|
|
36
|
-
evidence JSON is rejected.
|
|
37
|
-
|
|
38
|
-
7.
|
|
39
|
-
|
|
42
|
+
test runs before implement. Discover is read-only: it never writes code.
|
|
43
|
+
6. `openspec done` on test/implement requires `captureTddSuiteEvidence`. Handmade
|
|
44
|
+
evidence JSON is rejected. The implementer ticks `tasks.md` boxes
|
|
45
|
+
(`- [ ]` → `- [x]`) as each FR lands; only `x`/`X` counts as done.
|
|
46
|
+
7. When implementation reveals a design problem, pause and reconcile the planning
|
|
47
|
+
artifacts first — in any direction (a later artifact may force revising an
|
|
48
|
+
earlier one). Planning artifacts only in that step, never code; confirm each
|
|
49
|
+
edit. If the item's intent changed rather than its details, open a fresh item
|
|
50
|
+
with `/cc-backlog` (`/cc:backlog`) instead of warping this one.
|
|
51
|
+
8. `openspec verify --output json` — advisory pre-archive checklist
|
|
52
|
+
(`archiveReady` plus Completeness/Correctness/Coherence issues). Optional:
|
|
53
|
+
`openspec sync` merges delta specs into `openspec/specs/` without closing.
|
|
54
|
+
9. `scorecard create --task BC-xxx --from-diff` then record a verdict.
|
|
55
|
+
10. `openspec archive` only after human review when `Review required: yes` and
|
|
56
|
+
the scorecard is PASS. Archive re-checks planning artifacts and analyze
|
|
57
|
+
CRITICALs, and warns on unchecked `tasks.md` boxes.
|
|
40
58
|
|
|
41
59
|
Status machine: `TODO` → `READY` → `PLANNED` → `IN_PROGRESS` → `REVIEW` → `DONE`
|
|
42
60
|
→ Archive. `BLOCKED` returns to `READY`. Reviewer rejection: `REVIEW` →
|
|
43
61
|
`IN_PROGRESS`.
|
|
44
62
|
|
|
63
|
+
`openspec status --output json` also reports artifact presence, `tasks.md`
|
|
64
|
+
checkbox progress, and `nextSteps` for the next CLI call.
|
|
65
|
+
|
|
45
66
|
## Web interface scope
|
|
46
67
|
|
|
47
68
|
When the task concerns web layout, component states, feedback, motion, or a
|
|
@@ -70,17 +91,24 @@ delivery read-only and record unavailable visual or emulator evidence as pending
|
|
|
70
91
|
| I'll add tests after green | Global TDD required means tester before implementer. |
|
|
71
92
|
| I'll write the evidence JSON myself | Handmade TDD JSON is rejected. Use the verification runner. |
|
|
72
93
|
| The item is small; skip analyze | `openspec analyze` CRITICAL still stops implement. |
|
|
94
|
+
| The plan is generated; skip reading it | Read proposal → specs → tasks before `start`. Generated is not reviewed. |
|
|
95
|
+
| I'll fix the spec after shipping | Reconcile planning artifacts before continuing to implement. |
|
|
73
96
|
|
|
74
97
|
## Red Flags
|
|
75
98
|
|
|
76
99
|
- Implementing while analyze reports CRITICAL
|
|
100
|
+
- Starting cards before reading the generated plan
|
|
77
101
|
- Archive without a PASS scorecard when review is required
|
|
102
|
+
- Archive while `openspec verify` reports CRITICAL
|
|
78
103
|
- Acceptance like "improve UX" with no measurable check
|
|
79
104
|
|
|
80
105
|
## Verification
|
|
81
106
|
|
|
82
107
|
- [ ] `openspec validate` exit 0
|
|
108
|
+
- [ ] Plan reviewed (proposal → specs → tasks) before `start`
|
|
83
109
|
- [ ] `openspec analyze --output json` has no CRITICAL
|
|
84
110
|
- [ ] TDD evidence from the runner when TDD is required
|
|
111
|
+
- [ ] `tasks.md` boxes ticked as FRs land
|
|
112
|
+
- [ ] `openspec verify --output json` checked before archive
|
|
85
113
|
- [ ] `scorecard create --from-diff` recorded
|
|
86
114
|
- [ ] Suite check (optional): `bun run dev scorecard suite-run --suite workflow-gates`
|
|
@@ -73,7 +73,7 @@ implementer must:
|
|
|
73
73
|
1. Write the minimal code required to pass the tests.
|
|
74
74
|
2. Touch ONLY the files specified in the Technical Plan (Surgical Changes).
|
|
75
75
|
3. NOT refactor adjacent code, change existing styles, or build speculative features.
|
|
76
|
-
4. Run the tests. Loop `implementer` -> `tester` until all tests pass (Green state).
|
|
76
|
+
4. Run the tests. Loop `implementer` -> `tester` until all tests pass (Green state), at most 3 iterations -- then stop and report the failing tests instead of looping.
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -85,7 +85,7 @@ The council will evaluate the diff against the 6 axes (Architecture, Security, P
|
|
|
85
85
|
|
|
86
86
|
If ANY agent votes CRITICAL (especially due to over-engineering, scope creep, or missing the verifiable goals):
|
|
87
87
|
- The Review Report status is **BLOCKED**.
|
|
88
|
-
- Return to Step 4 with the feedback.
|
|
88
|
+
- Return to Step 4 with the feedback (at most 3 review rounds in total -- then deliver the BLOCKED verdict with the unresolved findings instead of looping).
|
|
89
89
|
|
|
90
90
|
If APPROVED (no CRITICAL findings):
|
|
91
91
|
- Deliver the final Council Verdict and the diff summary.
|
|
@@ -128,6 +128,13 @@ Show:
|
|
|
128
128
|
|
|
129
129
|
Update BACKLOG item status to `PLANNED` (CLI does this automatically).
|
|
130
130
|
|
|
131
|
+
`plan` is planning-only: it writes TaskCards plus proposal/design/tasks/specs
|
|
132
|
+
and stops. Before Step 5, review the plan in this order — proposal → delta
|
|
133
|
+
specs → tasks — and confirm: intent is right, no scope creep, every FR is
|
|
134
|
+
testable with a scenario that exercises it, edge/error cases are covered, and
|
|
135
|
+
each task traces to an FR/SC. Fix the Markdown directly or ask for revisions.
|
|
136
|
+
Do not `start` any card until the plan reads correctly.
|
|
137
|
+
|
|
131
138
|
---
|
|
132
139
|
|
|
133
140
|
## Drive card status (CLI)
|
|
@@ -138,10 +145,12 @@ Do not edit `.codeconductor/openspec-state.json` by hand.
|
|
|
138
145
|
npx cc-codeconductor openspec start <cardId>
|
|
139
146
|
npx cc-codeconductor openspec done <cardId>
|
|
140
147
|
npx cc-codeconductor openspec block <cardId> --reason "waiting on design"
|
|
148
|
+
npx cc-codeconductor openspec sync <itemId>
|
|
149
|
+
npx cc-codeconductor openspec verify <itemId>
|
|
141
150
|
npx cc-codeconductor openspec archive <itemId>
|
|
142
151
|
```
|
|
143
152
|
|
|
144
|
-
`start` moves the card `pending → doing` and the item `PLANNED → IN_PROGRESS`. `done` marks the card complete, updates Progress, and moves the item to `REVIEW` when every card is done and review is required. `archive` requires all cards done (and review evidence when Global review is required) and moves `openspec/changes/<slug>` to `archive/`.
|
|
153
|
+
`start` moves the card `pending → doing` and the item `PLANNED → IN_PROGRESS`. `done` marks the card complete, updates Progress, and moves the item to `REVIEW` when every card is done and review is required. `sync` merges delta specs into `openspec/specs/` without closing the item (optional before archive). `verify` is the advisory pre-archive checklist: exit 0 with `archiveReady` plus Completeness/Correctness/Coherence issues. `archive` requires all cards done (and review evidence when Global review is required), re-checks planning artifacts and analyze CRITICALs, warns on unchecked `tasks.md` boxes, then moves `openspec/changes/<slug>` to `archive/`.
|
|
145
154
|
|
|
146
155
|
For test and implementation cards, `done` also requires a current RDD-backed
|
|
147
156
|
RED or GREEN receipt respectively. Do not reuse evidence after candidate files
|
|
@@ -182,6 +191,14 @@ After each phase:
|
|
|
182
191
|
|
|
183
192
|
Implementer: create a Git worktree before editing (`git worktree add ../<branch>-session <branch>`).
|
|
184
193
|
|
|
194
|
+
Discover is read-only: `repo-explorer` never writes code. The implementer ticks
|
|
195
|
+
`tasks.md` boxes (`- [ ]` → `- [x]`) as each FR lands — only `x`/`X` counts as
|
|
196
|
+
done. If implementation reveals a design problem, pause and reconcile the
|
|
197
|
+
planning artifacts first (any direction: a later artifact may force revising an
|
|
198
|
+
earlier one). Planning artifacts only in that step — never code — and confirm
|
|
199
|
+
each edit. If the item's intent changed rather than its details, open a fresh
|
|
200
|
+
item with `$cc-backlog` instead of warping this one.
|
|
201
|
+
|
|
185
202
|
---
|
|
186
203
|
|
|
187
204
|
## Step 6 — Review gate
|
|
@@ -207,6 +224,8 @@ If **approved**: proceed to Step 6.
|
|
|
207
224
|
|
|
208
225
|
## Step 7 — Scorecard and update backlog
|
|
209
226
|
|
|
227
|
+
First run the advisory pre-archive check (`npx cc-codeconductor openspec verify <BC-id> --output json`): confirm `archiveReady` and clear any Completeness/Correctness/Coherence issues. Optionally run `openspec sync <BC-id>` to merge delta specs into `openspec/specs/` without closing the item. Then:
|
|
228
|
+
|
|
210
229
|
1. `npx cc-codeconductor scorecard create --task <BC-id> --from-diff`
|
|
211
230
|
2. Complete criteria; `scorecard record` with verdict and optional cost/tokens
|
|
212
231
|
3. Set item `Progress: 100%`, `Status: DONE` if PASS
|