popeye-cli 1.10.0 → 2.1.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/CHANGELOG.md +114 -0
- package/CONTRIBUTING.md +38 -3
- package/README.md +104 -18
- package/dist/adapters/gemini.js +3 -3
- package/dist/adapters/openai.js +2 -2
- package/dist/adapters/openai.js.map +1 -1
- package/dist/auth/gemini.js +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +11 -5
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/resume.d.ts.map +1 -1
- package/dist/cli/commands/resume.js +9 -1
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +29 -3
- package/dist/cli/interactive.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +7 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +1 -7
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/popeye-md.d.ts +32 -0
- package/dist/config/popeye-md.d.ts.map +1 -0
- package/dist/config/popeye-md.js +111 -0
- package/dist/config/popeye-md.js.map +1 -0
- package/dist/config/schema.d.ts +3 -21
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +21 -8
- package/dist/config/schema.js.map +1 -1
- package/dist/pipeline/artifact-manager.d.ts +47 -0
- package/dist/pipeline/artifact-manager.d.ts.map +1 -0
- package/dist/pipeline/artifact-manager.js +251 -0
- package/dist/pipeline/artifact-manager.js.map +1 -0
- package/dist/pipeline/artifact-validators.d.ts +29 -0
- package/dist/pipeline/artifact-validators.d.ts.map +1 -0
- package/dist/pipeline/artifact-validators.js +173 -0
- package/dist/pipeline/artifact-validators.js.map +1 -0
- package/dist/pipeline/bridges/review-bridge.d.ts +70 -0
- package/dist/pipeline/bridges/review-bridge.d.ts.map +1 -0
- package/dist/pipeline/bridges/review-bridge.js +266 -0
- package/dist/pipeline/bridges/review-bridge.js.map +1 -0
- package/dist/pipeline/change-request.d.ts +47 -0
- package/dist/pipeline/change-request.d.ts.map +1 -0
- package/dist/pipeline/change-request.js +91 -0
- package/dist/pipeline/change-request.js.map +1 -0
- package/dist/pipeline/check-runner.d.ts +47 -0
- package/dist/pipeline/check-runner.d.ts.map +1 -0
- package/dist/pipeline/check-runner.js +417 -0
- package/dist/pipeline/check-runner.js.map +1 -0
- package/dist/pipeline/command-resolver.d.ts +9 -0
- package/dist/pipeline/command-resolver.d.ts.map +1 -0
- package/dist/pipeline/command-resolver.js +140 -0
- package/dist/pipeline/command-resolver.js.map +1 -0
- package/dist/pipeline/consensus/consensus-runner.d.ts +44 -0
- package/dist/pipeline/consensus/consensus-runner.d.ts.map +1 -0
- package/dist/pipeline/consensus/consensus-runner.js +212 -0
- package/dist/pipeline/consensus/consensus-runner.js.map +1 -0
- package/dist/pipeline/constitution.d.ts +45 -0
- package/dist/pipeline/constitution.d.ts.map +1 -0
- package/dist/pipeline/constitution.js +82 -0
- package/dist/pipeline/constitution.js.map +1 -0
- package/dist/pipeline/gate-engine.d.ts +55 -0
- package/dist/pipeline/gate-engine.d.ts.map +1 -0
- package/dist/pipeline/gate-engine.js +270 -0
- package/dist/pipeline/gate-engine.js.map +1 -0
- package/dist/pipeline/index.d.ts +26 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +35 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/migration.d.ts +15 -0
- package/dist/pipeline/migration.d.ts.map +1 -0
- package/dist/pipeline/migration.js +76 -0
- package/dist/pipeline/migration.js.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +30 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.js +242 -0
- package/dist/pipeline/orchestrator.js.map +1 -0
- package/dist/pipeline/packets/audit-report-builder.d.ts +11 -0
- package/dist/pipeline/packets/audit-report-builder.d.ts.map +1 -0
- package/dist/pipeline/packets/audit-report-builder.js +32 -0
- package/dist/pipeline/packets/audit-report-builder.js.map +1 -0
- package/dist/pipeline/packets/consensus-packet-builder.d.ts +35 -0
- package/dist/pipeline/packets/consensus-packet-builder.d.ts.map +1 -0
- package/dist/pipeline/packets/consensus-packet-builder.js +80 -0
- package/dist/pipeline/packets/consensus-packet-builder.js.map +1 -0
- package/dist/pipeline/packets/index.d.ts +12 -0
- package/dist/pipeline/packets/index.d.ts.map +1 -0
- package/dist/pipeline/packets/index.js +8 -0
- package/dist/pipeline/packets/index.js.map +1 -0
- package/dist/pipeline/packets/plan-packet-builder.d.ts +21 -0
- package/dist/pipeline/packets/plan-packet-builder.d.ts.map +1 -0
- package/dist/pipeline/packets/plan-packet-builder.js +27 -0
- package/dist/pipeline/packets/plan-packet-builder.js.map +1 -0
- package/dist/pipeline/packets/rca-packet-builder.d.ts +19 -0
- package/dist/pipeline/packets/rca-packet-builder.d.ts.map +1 -0
- package/dist/pipeline/packets/rca-packet-builder.js +22 -0
- package/dist/pipeline/packets/rca-packet-builder.js.map +1 -0
- package/dist/pipeline/phases/architecture.d.ts +7 -0
- package/dist/pipeline/phases/architecture.d.ts.map +1 -0
- package/dist/pipeline/phases/architecture.js +60 -0
- package/dist/pipeline/phases/architecture.js.map +1 -0
- package/dist/pipeline/phases/audit.d.ts +8 -0
- package/dist/pipeline/phases/audit.d.ts.map +1 -0
- package/dist/pipeline/phases/audit.js +144 -0
- package/dist/pipeline/phases/audit.js.map +1 -0
- package/dist/pipeline/phases/consensus-architecture.d.ts +7 -0
- package/dist/pipeline/phases/consensus-architecture.d.ts.map +1 -0
- package/dist/pipeline/phases/consensus-architecture.js +84 -0
- package/dist/pipeline/phases/consensus-architecture.js.map +1 -0
- package/dist/pipeline/phases/consensus-master-plan.d.ts +7 -0
- package/dist/pipeline/phases/consensus-master-plan.d.ts.map +1 -0
- package/dist/pipeline/phases/consensus-master-plan.js +81 -0
- package/dist/pipeline/phases/consensus-master-plan.js.map +1 -0
- package/dist/pipeline/phases/consensus-role-plans.d.ts +7 -0
- package/dist/pipeline/phases/consensus-role-plans.d.ts.map +1 -0
- package/dist/pipeline/phases/consensus-role-plans.js +85 -0
- package/dist/pipeline/phases/consensus-role-plans.js.map +1 -0
- package/dist/pipeline/phases/done.d.ts +7 -0
- package/dist/pipeline/phases/done.d.ts.map +1 -0
- package/dist/pipeline/phases/done.js +45 -0
- package/dist/pipeline/phases/done.js.map +1 -0
- package/dist/pipeline/phases/implementation.d.ts +8 -0
- package/dist/pipeline/phases/implementation.d.ts.map +1 -0
- package/dist/pipeline/phases/implementation.js +45 -0
- package/dist/pipeline/phases/implementation.js.map +1 -0
- package/dist/pipeline/phases/index.d.ts +20 -0
- package/dist/pipeline/phases/index.d.ts.map +1 -0
- package/dist/pipeline/phases/index.js +19 -0
- package/dist/pipeline/phases/index.js.map +1 -0
- package/dist/pipeline/phases/intake.d.ts +8 -0
- package/dist/pipeline/phases/intake.d.ts.map +1 -0
- package/dist/pipeline/phases/intake.js +49 -0
- package/dist/pipeline/phases/intake.js.map +1 -0
- package/dist/pipeline/phases/phase-context.d.ts +30 -0
- package/dist/pipeline/phases/phase-context.d.ts.map +1 -0
- package/dist/pipeline/phases/phase-context.js +33 -0
- package/dist/pipeline/phases/phase-context.js.map +1 -0
- package/dist/pipeline/phases/production-gate.d.ts +8 -0
- package/dist/pipeline/phases/production-gate.d.ts.map +1 -0
- package/dist/pipeline/phases/production-gate.js +84 -0
- package/dist/pipeline/phases/production-gate.js.map +1 -0
- package/dist/pipeline/phases/qa-validation.d.ts +7 -0
- package/dist/pipeline/phases/qa-validation.d.ts.map +1 -0
- package/dist/pipeline/phases/qa-validation.js +50 -0
- package/dist/pipeline/phases/qa-validation.js.map +1 -0
- package/dist/pipeline/phases/recovery-loop.d.ts +7 -0
- package/dist/pipeline/phases/recovery-loop.d.ts.map +1 -0
- package/dist/pipeline/phases/recovery-loop.js +93 -0
- package/dist/pipeline/phases/recovery-loop.js.map +1 -0
- package/dist/pipeline/phases/review.d.ts +8 -0
- package/dist/pipeline/phases/review.d.ts.map +1 -0
- package/dist/pipeline/phases/review.js +127 -0
- package/dist/pipeline/phases/review.js.map +1 -0
- package/dist/pipeline/phases/role-planning.d.ts +7 -0
- package/dist/pipeline/phases/role-planning.d.ts.map +1 -0
- package/dist/pipeline/phases/role-planning.js +75 -0
- package/dist/pipeline/phases/role-planning.js.map +1 -0
- package/dist/pipeline/phases/stuck.d.ts +7 -0
- package/dist/pipeline/phases/stuck.d.ts.map +1 -0
- package/dist/pipeline/phases/stuck.js +51 -0
- package/dist/pipeline/phases/stuck.js.map +1 -0
- package/dist/pipeline/repo-snapshot.d.ts +24 -0
- package/dist/pipeline/repo-snapshot.d.ts.map +1 -0
- package/dist/pipeline/repo-snapshot.js +343 -0
- package/dist/pipeline/repo-snapshot.js.map +1 -0
- package/dist/pipeline/role-execution-adapter.d.ts +59 -0
- package/dist/pipeline/role-execution-adapter.d.ts.map +1 -0
- package/dist/pipeline/role-execution-adapter.js +159 -0
- package/dist/pipeline/role-execution-adapter.js.map +1 -0
- package/dist/pipeline/skill-loader.d.ts +34 -0
- package/dist/pipeline/skill-loader.d.ts.map +1 -0
- package/dist/pipeline/skill-loader.js +156 -0
- package/dist/pipeline/skill-loader.js.map +1 -0
- package/dist/pipeline/skills/defaults.d.ts +16 -0
- package/dist/pipeline/skills/defaults.d.ts.map +1 -0
- package/dist/pipeline/skills/defaults.js +189 -0
- package/dist/pipeline/skills/defaults.js.map +1 -0
- package/dist/pipeline/type-defs/artifacts.d.ts +207 -0
- package/dist/pipeline/type-defs/artifacts.d.ts.map +1 -0
- package/dist/pipeline/type-defs/artifacts.js +67 -0
- package/dist/pipeline/type-defs/artifacts.js.map +1 -0
- package/dist/pipeline/type-defs/audit.d.ts +259 -0
- package/dist/pipeline/type-defs/audit.d.ts.map +1 -0
- package/dist/pipeline/type-defs/audit.js +54 -0
- package/dist/pipeline/type-defs/audit.js.map +1 -0
- package/dist/pipeline/type-defs/checks.d.ts +82 -0
- package/dist/pipeline/type-defs/checks.d.ts.map +1 -0
- package/dist/pipeline/type-defs/checks.js +38 -0
- package/dist/pipeline/type-defs/checks.js.map +1 -0
- package/dist/pipeline/type-defs/enums.d.ts +43 -0
- package/dist/pipeline/type-defs/enums.d.ts.map +1 -0
- package/dist/pipeline/type-defs/enums.js +55 -0
- package/dist/pipeline/type-defs/enums.js.map +1 -0
- package/dist/pipeline/type-defs/index.d.ts +12 -0
- package/dist/pipeline/type-defs/index.d.ts.map +1 -0
- package/dist/pipeline/type-defs/index.js +12 -0
- package/dist/pipeline/type-defs/index.js.map +1 -0
- package/dist/pipeline/type-defs/packets.d.ts +821 -0
- package/dist/pipeline/type-defs/packets.d.ts.map +1 -0
- package/dist/pipeline/type-defs/packets.js +109 -0
- package/dist/pipeline/type-defs/packets.js.map +1 -0
- package/dist/pipeline/type-defs/snapshot.d.ts +52 -0
- package/dist/pipeline/type-defs/snapshot.d.ts.map +1 -0
- package/dist/pipeline/type-defs/snapshot.js +35 -0
- package/dist/pipeline/type-defs/snapshot.js.map +1 -0
- package/dist/pipeline/type-defs/state.d.ts +455 -0
- package/dist/pipeline/type-defs/state.d.ts.map +1 -0
- package/dist/pipeline/type-defs/state.js +90 -0
- package/dist/pipeline/type-defs/state.js.map +1 -0
- package/dist/pipeline/types.d.ts +16 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +16 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/types/audit.d.ts +6 -6
- package/dist/types/consensus.d.ts +5 -1
- package/dist/types/consensus.d.ts.map +1 -1
- package/dist/types/consensus.js +15 -4
- package/dist/types/consensus.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/project.d.ts +1 -1
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +39 -10
- package/dist/types/project.js.map +1 -1
- package/dist/types/workflow.d.ts +1 -7
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/types/workflow.js +1 -1
- package/dist/types/workflow.js.map +1 -1
- package/dist/upgrade/handlers.js +5 -5
- package/dist/upgrade/handlers.js.map +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +52 -0
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/website-strategy.js +1 -1
- package/dist/workflow/website-strategy.js.map +1 -1
- package/package.json +1 -1
- package/skills/PHASE_GATE_ENGINE_SPEC.md +113 -20
- package/skills/POPEYE_FULL_AUTONOMY_PIPELINE.md +66 -13
- package/src/adapters/gemini.ts +3 -3
- package/src/adapters/openai.ts +2 -2
- package/src/auth/gemini.ts +1 -1
- package/src/cli/commands/create.ts +12 -6
- package/src/cli/commands/resume.ts +9 -1
- package/src/cli/interactive.ts +32 -3
- package/src/config/defaults.ts +7 -2
- package/src/config/popeye-md.ts +139 -0
- package/src/config/schema.ts +21 -8
- package/src/pipeline/artifact-manager.ts +339 -0
- package/src/pipeline/artifact-validators.ts +224 -0
- package/src/pipeline/bridges/review-bridge.ts +371 -0
- package/src/pipeline/change-request.ts +119 -0
- package/src/pipeline/check-runner.ts +504 -0
- package/src/pipeline/command-resolver.ts +168 -0
- package/src/pipeline/consensus/consensus-runner.ts +317 -0
- package/src/pipeline/constitution.ts +109 -0
- package/src/pipeline/gate-engine.ts +347 -0
- package/src/pipeline/index.ts +82 -0
- package/src/pipeline/migration.ts +91 -0
- package/src/pipeline/orchestrator.ts +322 -0
- package/src/pipeline/packets/audit-report-builder.ts +47 -0
- package/src/pipeline/packets/consensus-packet-builder.ts +112 -0
- package/src/pipeline/packets/index.ts +15 -0
- package/src/pipeline/packets/plan-packet-builder.ts +52 -0
- package/src/pipeline/packets/rca-packet-builder.ts +38 -0
- package/src/pipeline/phases/architecture.ts +73 -0
- package/src/pipeline/phases/audit.ts +193 -0
- package/src/pipeline/phases/consensus-architecture.ts +104 -0
- package/src/pipeline/phases/consensus-master-plan.ts +100 -0
- package/src/pipeline/phases/consensus-role-plans.ts +105 -0
- package/src/pipeline/phases/done.ts +68 -0
- package/src/pipeline/phases/implementation.ts +52 -0
- package/src/pipeline/phases/index.ts +21 -0
- package/src/pipeline/phases/intake.ts +68 -0
- package/src/pipeline/phases/phase-context.ts +86 -0
- package/src/pipeline/phases/production-gate.ts +113 -0
- package/src/pipeline/phases/qa-validation.ts +63 -0
- package/src/pipeline/phases/recovery-loop.ts +120 -0
- package/src/pipeline/phases/review.ts +149 -0
- package/src/pipeline/phases/role-planning.ts +92 -0
- package/src/pipeline/phases/stuck.ts +62 -0
- package/src/pipeline/repo-snapshot.ts +395 -0
- package/src/pipeline/role-execution-adapter.ts +238 -0
- package/src/pipeline/skill-loader.ts +192 -0
- package/src/pipeline/skills/defaults.ts +215 -0
- package/src/pipeline/type-defs/artifacts.ts +82 -0
- package/src/pipeline/type-defs/audit.ts +67 -0
- package/src/pipeline/type-defs/checks.ts +47 -0
- package/src/pipeline/type-defs/enums.ts +62 -0
- package/src/pipeline/type-defs/index.ts +12 -0
- package/src/pipeline/type-defs/packets.ts +131 -0
- package/src/pipeline/type-defs/snapshot.ts +55 -0
- package/src/pipeline/type-defs/state.ts +167 -0
- package/src/pipeline/types.ts +16 -0
- package/src/types/consensus.ts +16 -4
- package/src/types/index.ts +1 -0
- package/src/types/project.ts +39 -10
- package/src/types/workflow.ts +1 -1
- package/src/upgrade/handlers.ts +5 -5
- package/src/workflow/index.ts +52 -0
- package/src/workflow/website-strategy.ts +1 -1
- package/tests/cli/model-command.test.ts +19 -9
- package/tests/config/config.test.ts +3 -3
- package/tests/config/popeye-md.test.ts +168 -0
- package/tests/pipeline/artifact-manager.test.ts +183 -0
- package/tests/pipeline/artifact-validators.test.ts +207 -0
- package/tests/pipeline/bridges/review-bridge.test.ts +243 -0
- package/tests/pipeline/change-request.test.ts +180 -0
- package/tests/pipeline/check-runner.test.ts +157 -0
- package/tests/pipeline/command-resolver.test.ts +159 -0
- package/tests/pipeline/consensus-runner.test.ts +206 -0
- package/tests/pipeline/consensus-scoring.test.ts +163 -0
- package/tests/pipeline/constitution.test.ts +122 -0
- package/tests/pipeline/gate-engine.test.ts +195 -0
- package/tests/pipeline/migration.test.ts +133 -0
- package/tests/pipeline/orchestrator.test.ts +614 -0
- package/tests/pipeline/packets/builders.test.ts +347 -0
- package/tests/pipeline/repo-snapshot.test.ts +189 -0
- package/tests/pipeline/role-execution-adapter.test.ts +299 -0
- package/tests/pipeline/session-guidance.test.ts +205 -0
- package/tests/pipeline/skill-loader.test.ts +186 -0
- package/tests/pipeline/start-env-checks.test.ts +123 -0
- package/tests/pipeline/types.test.ts +156 -0
- package/tests/types/consensus.test.ts +1 -1
- package/tests/workflow/pipeline-bootstrap.test.ts +162 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REVIEW phase — verify implementation matches approved plans.
|
|
3
|
+
* Detects drift via snapshot diff (P1-E).
|
|
4
|
+
* v1.1: Creates Change Requests when drift is detected.
|
|
5
|
+
*/
|
|
6
|
+
import { successResult, failureResult } from './phase-context.js';
|
|
7
|
+
import { generateRepoSnapshot, createSnapshotArtifact, diffSnapshots } from '../repo-snapshot.js';
|
|
8
|
+
import { buildChangeRequest, formatChangeRequest, routeChangeRequest } from '../change-request.js';
|
|
9
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
export async function runReview(context) {
|
|
12
|
+
const { pipeline, artifactManager, projectDir } = context;
|
|
13
|
+
const artifacts = [];
|
|
14
|
+
const changeRequests = [];
|
|
15
|
+
try {
|
|
16
|
+
// 1. Generate fresh snapshot
|
|
17
|
+
const currentSnapshot = await generateRepoSnapshot(projectDir);
|
|
18
|
+
const snapshotEntry = createSnapshotArtifact(currentSnapshot, artifactManager, 'REVIEW');
|
|
19
|
+
artifacts.push(snapshotEntry);
|
|
20
|
+
pipeline.latestRepoSnapshot = artifactManager.toArtifactRef(snapshotEntry);
|
|
21
|
+
// 2. Find role-plan-approval snapshot for drift detection
|
|
22
|
+
const rolePlanSnapshots = pipeline.artifacts.filter((a) => a.type === 'repo_snapshot' && a.phase === 'CONSENSUS_ROLE_PLANS');
|
|
23
|
+
const baselineSnapshot = rolePlanSnapshots[rolePlanSnapshots.length - 1];
|
|
24
|
+
let driftReport = 'No baseline snapshot found for drift detection.';
|
|
25
|
+
let hasDrift = false;
|
|
26
|
+
if (baselineSnapshot) {
|
|
27
|
+
const baselinePath = join(projectDir, baselineSnapshot.path);
|
|
28
|
+
if (existsSync(baselinePath)) {
|
|
29
|
+
try {
|
|
30
|
+
const baselineData = JSON.parse(readFileSync(baselinePath, 'utf-8'));
|
|
31
|
+
const diff = diffSnapshots(baselineData, currentSnapshot);
|
|
32
|
+
if (diff.has_changes) {
|
|
33
|
+
hasDrift = true;
|
|
34
|
+
driftReport = [
|
|
35
|
+
'## Implementation Drift Detected',
|
|
36
|
+
'',
|
|
37
|
+
`Files delta: ${diff.files_delta > 0 ? '+' : ''}${diff.files_delta}`,
|
|
38
|
+
`Lines delta: ${diff.lines_delta > 0 ? '+' : ''}${diff.lines_delta}`,
|
|
39
|
+
diff.added_configs.length > 0 ? `Added configs: ${diff.added_configs.join(', ')}` : '',
|
|
40
|
+
diff.removed_configs.length > 0 ? `Removed configs: ${diff.removed_configs.join(', ')}` : '',
|
|
41
|
+
diff.changed_configs.length > 0 ? `Changed configs: ${diff.changed_configs.join(', ')}` : '',
|
|
42
|
+
].filter(Boolean).join('\n');
|
|
43
|
+
// v1.1: Create change requests for detected drift
|
|
44
|
+
if (diff.changed_configs.length > 0) {
|
|
45
|
+
const cr = buildChangeRequest({
|
|
46
|
+
originPhase: 'REVIEW',
|
|
47
|
+
requestedBy: 'REVIEWER',
|
|
48
|
+
changeType: 'config',
|
|
49
|
+
description: `Config files changed during implementation: ${diff.changed_configs.join(', ')}`,
|
|
50
|
+
justification: 'Detected by snapshot diff during review phase',
|
|
51
|
+
affectedArtifacts: [artifactManager.toArtifactRef(snapshotEntry)],
|
|
52
|
+
affectedPhases: ['IMPLEMENTATION', 'QA_VALIDATION'],
|
|
53
|
+
riskLevel: diff.changed_configs.length > 3 ? 'high' : 'medium',
|
|
54
|
+
});
|
|
55
|
+
changeRequests.push(cr);
|
|
56
|
+
}
|
|
57
|
+
if (Math.abs(diff.lines_delta) > 1000) {
|
|
58
|
+
const cr = buildChangeRequest({
|
|
59
|
+
originPhase: 'REVIEW',
|
|
60
|
+
requestedBy: 'REVIEWER',
|
|
61
|
+
changeType: 'scope',
|
|
62
|
+
description: `Significant scope drift detected: ${diff.lines_delta > 0 ? '+' : ''}${diff.lines_delta} lines`,
|
|
63
|
+
justification: 'Large line delta suggests scope changes beyond approved plans',
|
|
64
|
+
affectedArtifacts: [artifactManager.toArtifactRef(snapshotEntry)],
|
|
65
|
+
affectedPhases: ['CONSENSUS_MASTER_PLAN', 'IMPLEMENTATION'],
|
|
66
|
+
riskLevel: 'high',
|
|
67
|
+
});
|
|
68
|
+
changeRequests.push(cr);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
driftReport = 'No drift detected between approved plans and implementation.';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
driftReport = 'Failed to parse baseline snapshot for drift detection.';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// 3. Store change requests as artifacts and register in pipeline state
|
|
81
|
+
for (const cr of changeRequests) {
|
|
82
|
+
const crEntry = artifactManager.createAndStoreText('change_request', formatChangeRequest(cr), 'REVIEW');
|
|
83
|
+
artifacts.push(crEntry);
|
|
84
|
+
// Register CR in pipeline state for orchestrator routing
|
|
85
|
+
if (!pipeline.pendingChangeRequests) {
|
|
86
|
+
pipeline.pendingChangeRequests = [];
|
|
87
|
+
}
|
|
88
|
+
pipeline.pendingChangeRequests.push({
|
|
89
|
+
cr_id: cr.cr_id,
|
|
90
|
+
change_type: cr.change_type,
|
|
91
|
+
target_phase: routeChangeRequest(cr),
|
|
92
|
+
status: 'proposed',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// 4. Create review decision artifact
|
|
96
|
+
const reviewDoc = [
|
|
97
|
+
'# Review Decision',
|
|
98
|
+
'',
|
|
99
|
+
`**Timestamp:** ${new Date().toISOString()}`,
|
|
100
|
+
`**Phase:** REVIEW`,
|
|
101
|
+
`**Drift Detected:** ${hasDrift ? 'Yes' : 'No'}`,
|
|
102
|
+
`**Change Requests:** ${changeRequests.length}`,
|
|
103
|
+
'',
|
|
104
|
+
'## Drift Analysis',
|
|
105
|
+
driftReport,
|
|
106
|
+
'',
|
|
107
|
+
changeRequests.length > 0 ? '## Change Requests\n' + changeRequests.map((cr) => `- ${cr.cr_id}: ${cr.description}`).join('\n') : '',
|
|
108
|
+
'',
|
|
109
|
+
'## Plan Alignment',
|
|
110
|
+
'Implementation reviewed against approved role plans.',
|
|
111
|
+
'',
|
|
112
|
+
'## Decision',
|
|
113
|
+
hasDrift && changeRequests.length > 0
|
|
114
|
+
? 'Review flagged drift — change requests created for consensus review.'
|
|
115
|
+
: 'Review completed. See drift analysis above.',
|
|
116
|
+
].join('\n');
|
|
117
|
+
const reviewEntry = artifactManager.createAndStoreText('review_decision', reviewDoc, 'REVIEW');
|
|
118
|
+
artifacts.push(reviewEntry);
|
|
119
|
+
pipeline.artifacts.push(...artifacts);
|
|
120
|
+
return successResult('REVIEW', artifacts, `Review complete. ${changeRequests.length} change requests.`);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
124
|
+
return failureResult('REVIEW', 'Review failed', message);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/pipeline/phases/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ROLE_PLANNING phase — produce deterministic implementation plans by role.
|
|
3
|
+
* Runs per-role: DB, BE, FE, Website, QA. Creates role_plan artifacts.
|
|
4
|
+
*/
|
|
5
|
+
import type { PhaseContext, PhaseResult } from './phase-context.js';
|
|
6
|
+
export declare function runRolePlanning(context: PhaseContext): Promise<PhaseResult>;
|
|
7
|
+
//# sourceMappingURL=role-planning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-planning.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/role-planning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYpE,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAsEjF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ROLE_PLANNING phase — produce deterministic implementation plans by role.
|
|
3
|
+
* Runs per-role: DB, BE, FE, Website, QA. Creates role_plan artifacts.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { successResult, failureResult } from './phase-context.js';
|
|
8
|
+
/** Roles that produce implementation plans */
|
|
9
|
+
const PLANNING_ROLES = [
|
|
10
|
+
'DB_EXPERT',
|
|
11
|
+
'BACKEND_PROGRAMMER',
|
|
12
|
+
'FRONTEND_PROGRAMMER',
|
|
13
|
+
'WEBSITE_PROGRAMMER',
|
|
14
|
+
'QA_TESTER',
|
|
15
|
+
];
|
|
16
|
+
export async function runRolePlanning(context) {
|
|
17
|
+
const { pipeline, artifactManager, skillLoader, projectDir } = context;
|
|
18
|
+
const artifacts = [];
|
|
19
|
+
try {
|
|
20
|
+
// Read architecture doc for context
|
|
21
|
+
const archArtifact = pipeline.artifacts.find((a) => a.type === 'architecture');
|
|
22
|
+
let architectureContent = '';
|
|
23
|
+
if (archArtifact) {
|
|
24
|
+
const fullPath = join(projectDir, archArtifact.path);
|
|
25
|
+
if (existsSync(fullPath)) {
|
|
26
|
+
architectureContent = readFileSync(fullPath, 'utf-8');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Read master plan for context
|
|
30
|
+
const masterPlanArtifact = pipeline.artifacts.find((a) => a.type === 'master_plan');
|
|
31
|
+
let masterPlanContent = '';
|
|
32
|
+
if (masterPlanArtifact) {
|
|
33
|
+
const fullPath = join(projectDir, masterPlanArtifact.path);
|
|
34
|
+
if (existsSync(fullPath)) {
|
|
35
|
+
masterPlanContent = readFileSync(fullPath, 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const { executePrompt } = await import('../../adapters/claude.js');
|
|
39
|
+
// Generate plan for each role
|
|
40
|
+
for (const role of PLANNING_ROLES) {
|
|
41
|
+
// Skip website if not in active roles
|
|
42
|
+
if (role === 'WEBSITE_PROGRAMMER' && !pipeline.activeRoles.includes('WEBSITE_PROGRAMMER')) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const skill = skillLoader.loadSkill(role);
|
|
46
|
+
const planPrompt = [
|
|
47
|
+
skill.systemPrompt,
|
|
48
|
+
'',
|
|
49
|
+
'## Master Plan',
|
|
50
|
+
masterPlanContent.slice(0, 5000),
|
|
51
|
+
'',
|
|
52
|
+
'## Architecture',
|
|
53
|
+
architectureContent.slice(0, 5000),
|
|
54
|
+
'',
|
|
55
|
+
'## Instructions',
|
|
56
|
+
`Create your ${role} implementation plan. Include:`,
|
|
57
|
+
'- Deterministic file-level outputs',
|
|
58
|
+
'- Specific tasks with acceptance criteria',
|
|
59
|
+
'- Dependencies on other roles',
|
|
60
|
+
'- Test requirements',
|
|
61
|
+
].join('\n');
|
|
62
|
+
const planResult = await executePrompt(planPrompt);
|
|
63
|
+
const plan = planResult.response;
|
|
64
|
+
const entry = artifactManager.createAndStoreText('role_plan', `# ${role} Plan\n\n${plan}`, 'ROLE_PLANNING');
|
|
65
|
+
artifacts.push(entry);
|
|
66
|
+
}
|
|
67
|
+
pipeline.artifacts.push(...artifacts);
|
|
68
|
+
return successResult('ROLE_PLANNING', artifacts, `Created ${artifacts.length} role plans`);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
72
|
+
return failureResult('ROLE_PLANNING', 'Role planning failed', message);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=role-planning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-planning.js","sourceRoot":"","sources":["../../../src/pipeline/phases/role-planning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STUCK phase — safety valve when max recovery iterations exceeded.
|
|
3
|
+
* Produces stuck report with last RCA, suspected paths, required human input.
|
|
4
|
+
*/
|
|
5
|
+
import type { PhaseContext, PhaseResult } from './phase-context.js';
|
|
6
|
+
export declare function runStuck(context: PhaseContext): Promise<PhaseResult>;
|
|
7
|
+
//# sourceMappingURL=stuck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stuck.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/stuck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGpE,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAqD1E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STUCK phase — safety valve when max recovery iterations exceeded.
|
|
3
|
+
* Produces stuck report with last RCA, suspected paths, required human input.
|
|
4
|
+
*/
|
|
5
|
+
import { successResult, failureResult } from './phase-context.js';
|
|
6
|
+
export async function runStuck(context) {
|
|
7
|
+
const { pipeline, artifactManager } = context;
|
|
8
|
+
const artifacts = [];
|
|
9
|
+
try {
|
|
10
|
+
// Find last RCA
|
|
11
|
+
const lastRca = pipeline.artifacts
|
|
12
|
+
.filter((a) => a.type === 'rca_report')
|
|
13
|
+
.sort((a, b) => b.timestamp.localeCompare(a.timestamp))[0];
|
|
14
|
+
const stuckReport = [
|
|
15
|
+
'# Stuck Report',
|
|
16
|
+
'',
|
|
17
|
+
`**Timestamp:** ${new Date().toISOString()}`,
|
|
18
|
+
`**Recovery Iterations:** ${pipeline.recoveryCount} / ${pipeline.maxRecoveryIterations}`,
|
|
19
|
+
`**Failed Phase:** ${pipeline.failedPhase ?? 'unknown'}`,
|
|
20
|
+
'',
|
|
21
|
+
'## Last RCA',
|
|
22
|
+
lastRca ? `See: ${lastRca.path}` : 'No RCA available',
|
|
23
|
+
'',
|
|
24
|
+
'## Suspected Resolution Paths',
|
|
25
|
+
'1. Review the last RCA report for root cause details',
|
|
26
|
+
'2. Check the failing gate conditions and resolve blockers manually',
|
|
27
|
+
'3. Consider reverting to a known good state and re-running',
|
|
28
|
+
'',
|
|
29
|
+
'## Required Human Input',
|
|
30
|
+
'- Review failing gate conditions',
|
|
31
|
+
'- Determine if scope changes are needed',
|
|
32
|
+
'- Decide whether to restart pipeline from a specific phase',
|
|
33
|
+
'',
|
|
34
|
+
'## Artifacts That May Need Update',
|
|
35
|
+
...pipeline.artifacts
|
|
36
|
+
.filter((a) => a.phase === pipeline.failedPhase)
|
|
37
|
+
.map((a) => `- ${a.type}: ${a.path}`),
|
|
38
|
+
].join('\n');
|
|
39
|
+
const stuckEntry = artifactManager.createAndStoreText('stuck_report', stuckReport, 'STUCK');
|
|
40
|
+
artifacts.push(stuckEntry);
|
|
41
|
+
pipeline.artifacts.push(...artifacts);
|
|
42
|
+
// Update INDEX
|
|
43
|
+
artifactManager.updateIndex(pipeline.artifacts);
|
|
44
|
+
return successResult('STUCK', artifacts, 'Pipeline STUCK. Human intervention required.');
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
48
|
+
return failureResult('STUCK', 'Stuck report generation failed', message);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=stuck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stuck.js","sourceRoot":"","sources":["../../../src/pipeline/phases/stuck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,gBAAgB;QAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG;YAClB,gBAAgB;YAChB,EAAE;YACF,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YAC5C,4BAA4B,QAAQ,CAAC,aAAa,MAAM,QAAQ,CAAC,qBAAqB,EAAE;YACxF,qBAAqB,QAAQ,CAAC,WAAW,IAAI,SAAS,EAAE;YACxD,EAAE;YACF,aAAa;YACb,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB;YACrD,EAAE;YACF,+BAA+B;YAC/B,sDAAsD;YACtD,oEAAoE;YACpE,4DAA4D;YAC5D,EAAE;YACF,yBAAyB;YACzB,kCAAkC;YAClC,yCAAyC;YACzC,4DAA4D;YAC5D,EAAE;YACF,mCAAmC;YACnC,GAAG,QAAQ,CAAC,SAAS;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,CAAC;iBAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;SACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CACnD,cAAc,EACd,WAAW,EACX,OAAO,CACR,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEtC,eAAe;QACf,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,8CAA8C,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,OAAO,aAAa,CAAC,OAAO,EAAE,gCAAgC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repo Snapshot Generator — deterministic project state capture.
|
|
3
|
+
* Generated before every consensus gate for anti-hallucination.
|
|
4
|
+
* Supports caching via mtime for performance (P2-H).
|
|
5
|
+
*/
|
|
6
|
+
import type { RepoSnapshot } from './types.js';
|
|
7
|
+
import type { ArtifactEntry } from './types.js';
|
|
8
|
+
import { ArtifactManager } from './artifact-manager.js';
|
|
9
|
+
import type { PipelinePhase } from './types.js';
|
|
10
|
+
/** Generate a deterministic snapshot of the project */
|
|
11
|
+
export declare function generateRepoSnapshot(projectDir: string): Promise<RepoSnapshot>;
|
|
12
|
+
/** Store snapshot as an artifact */
|
|
13
|
+
export declare function createSnapshotArtifact(snapshot: RepoSnapshot, artifactManager: ArtifactManager, phase: PipelinePhase): ArtifactEntry;
|
|
14
|
+
/** Compare two snapshots to detect drift */
|
|
15
|
+
export declare function diffSnapshots(before: RepoSnapshot, after: RepoSnapshot): SnapshotDiff;
|
|
16
|
+
export interface SnapshotDiff {
|
|
17
|
+
added_configs: string[];
|
|
18
|
+
removed_configs: string[];
|
|
19
|
+
changed_configs: string[];
|
|
20
|
+
files_delta: number;
|
|
21
|
+
lines_delta: number;
|
|
22
|
+
has_changes: boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=repo-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-snapshot.d.ts","sourceRoot":"","sources":["../../src/pipeline/repo-snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyDhD,uDAAuD;AACvD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoCpF;AAED,oCAAoC;AACpC,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,aAAa,GACnB,aAAa,CAEf;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,GAClB,YAAY,CAsBd;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB"}
|