popeye-cli 1.10.0 → 2.0.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.
Files changed (253) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CONTRIBUTING.md +15 -1
  3. package/README.md +57 -0
  4. package/dist/pipeline/artifact-manager.d.ts +47 -0
  5. package/dist/pipeline/artifact-manager.d.ts.map +1 -0
  6. package/dist/pipeline/artifact-manager.js +251 -0
  7. package/dist/pipeline/artifact-manager.js.map +1 -0
  8. package/dist/pipeline/artifact-validators.d.ts +29 -0
  9. package/dist/pipeline/artifact-validators.d.ts.map +1 -0
  10. package/dist/pipeline/artifact-validators.js +173 -0
  11. package/dist/pipeline/artifact-validators.js.map +1 -0
  12. package/dist/pipeline/change-request.d.ts +47 -0
  13. package/dist/pipeline/change-request.d.ts.map +1 -0
  14. package/dist/pipeline/change-request.js +91 -0
  15. package/dist/pipeline/change-request.js.map +1 -0
  16. package/dist/pipeline/check-runner.d.ts +47 -0
  17. package/dist/pipeline/check-runner.d.ts.map +1 -0
  18. package/dist/pipeline/check-runner.js +417 -0
  19. package/dist/pipeline/check-runner.js.map +1 -0
  20. package/dist/pipeline/command-resolver.d.ts +9 -0
  21. package/dist/pipeline/command-resolver.d.ts.map +1 -0
  22. package/dist/pipeline/command-resolver.js +140 -0
  23. package/dist/pipeline/command-resolver.js.map +1 -0
  24. package/dist/pipeline/consensus/consensus-runner.d.ts +44 -0
  25. package/dist/pipeline/consensus/consensus-runner.d.ts.map +1 -0
  26. package/dist/pipeline/consensus/consensus-runner.js +212 -0
  27. package/dist/pipeline/consensus/consensus-runner.js.map +1 -0
  28. package/dist/pipeline/constitution.d.ts +45 -0
  29. package/dist/pipeline/constitution.d.ts.map +1 -0
  30. package/dist/pipeline/constitution.js +82 -0
  31. package/dist/pipeline/constitution.js.map +1 -0
  32. package/dist/pipeline/gate-engine.d.ts +55 -0
  33. package/dist/pipeline/gate-engine.d.ts.map +1 -0
  34. package/dist/pipeline/gate-engine.js +270 -0
  35. package/dist/pipeline/gate-engine.js.map +1 -0
  36. package/dist/pipeline/index.d.ts +26 -0
  37. package/dist/pipeline/index.d.ts.map +1 -0
  38. package/dist/pipeline/index.js +35 -0
  39. package/dist/pipeline/index.js.map +1 -0
  40. package/dist/pipeline/migration.d.ts +15 -0
  41. package/dist/pipeline/migration.d.ts.map +1 -0
  42. package/dist/pipeline/migration.js +76 -0
  43. package/dist/pipeline/migration.js.map +1 -0
  44. package/dist/pipeline/orchestrator.d.ts +28 -0
  45. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  46. package/dist/pipeline/orchestrator.js +238 -0
  47. package/dist/pipeline/orchestrator.js.map +1 -0
  48. package/dist/pipeline/packets/audit-report-builder.d.ts +11 -0
  49. package/dist/pipeline/packets/audit-report-builder.d.ts.map +1 -0
  50. package/dist/pipeline/packets/audit-report-builder.js +32 -0
  51. package/dist/pipeline/packets/audit-report-builder.js.map +1 -0
  52. package/dist/pipeline/packets/consensus-packet-builder.d.ts +35 -0
  53. package/dist/pipeline/packets/consensus-packet-builder.d.ts.map +1 -0
  54. package/dist/pipeline/packets/consensus-packet-builder.js +80 -0
  55. package/dist/pipeline/packets/consensus-packet-builder.js.map +1 -0
  56. package/dist/pipeline/packets/index.d.ts +12 -0
  57. package/dist/pipeline/packets/index.d.ts.map +1 -0
  58. package/dist/pipeline/packets/index.js +8 -0
  59. package/dist/pipeline/packets/index.js.map +1 -0
  60. package/dist/pipeline/packets/plan-packet-builder.d.ts +21 -0
  61. package/dist/pipeline/packets/plan-packet-builder.d.ts.map +1 -0
  62. package/dist/pipeline/packets/plan-packet-builder.js +27 -0
  63. package/dist/pipeline/packets/plan-packet-builder.js.map +1 -0
  64. package/dist/pipeline/packets/rca-packet-builder.d.ts +19 -0
  65. package/dist/pipeline/packets/rca-packet-builder.d.ts.map +1 -0
  66. package/dist/pipeline/packets/rca-packet-builder.js +22 -0
  67. package/dist/pipeline/packets/rca-packet-builder.js.map +1 -0
  68. package/dist/pipeline/phases/architecture.d.ts +7 -0
  69. package/dist/pipeline/phases/architecture.d.ts.map +1 -0
  70. package/dist/pipeline/phases/architecture.js +60 -0
  71. package/dist/pipeline/phases/architecture.js.map +1 -0
  72. package/dist/pipeline/phases/audit.d.ts +8 -0
  73. package/dist/pipeline/phases/audit.d.ts.map +1 -0
  74. package/dist/pipeline/phases/audit.js +144 -0
  75. package/dist/pipeline/phases/audit.js.map +1 -0
  76. package/dist/pipeline/phases/consensus-architecture.d.ts +7 -0
  77. package/dist/pipeline/phases/consensus-architecture.d.ts.map +1 -0
  78. package/dist/pipeline/phases/consensus-architecture.js +84 -0
  79. package/dist/pipeline/phases/consensus-architecture.js.map +1 -0
  80. package/dist/pipeline/phases/consensus-master-plan.d.ts +7 -0
  81. package/dist/pipeline/phases/consensus-master-plan.d.ts.map +1 -0
  82. package/dist/pipeline/phases/consensus-master-plan.js +81 -0
  83. package/dist/pipeline/phases/consensus-master-plan.js.map +1 -0
  84. package/dist/pipeline/phases/consensus-role-plans.d.ts +7 -0
  85. package/dist/pipeline/phases/consensus-role-plans.d.ts.map +1 -0
  86. package/dist/pipeline/phases/consensus-role-plans.js +85 -0
  87. package/dist/pipeline/phases/consensus-role-plans.js.map +1 -0
  88. package/dist/pipeline/phases/done.d.ts +7 -0
  89. package/dist/pipeline/phases/done.d.ts.map +1 -0
  90. package/dist/pipeline/phases/done.js +45 -0
  91. package/dist/pipeline/phases/done.js.map +1 -0
  92. package/dist/pipeline/phases/implementation.d.ts +8 -0
  93. package/dist/pipeline/phases/implementation.d.ts.map +1 -0
  94. package/dist/pipeline/phases/implementation.js +42 -0
  95. package/dist/pipeline/phases/implementation.js.map +1 -0
  96. package/dist/pipeline/phases/index.d.ts +20 -0
  97. package/dist/pipeline/phases/index.d.ts.map +1 -0
  98. package/dist/pipeline/phases/index.js +19 -0
  99. package/dist/pipeline/phases/index.js.map +1 -0
  100. package/dist/pipeline/phases/intake.d.ts +8 -0
  101. package/dist/pipeline/phases/intake.d.ts.map +1 -0
  102. package/dist/pipeline/phases/intake.js +40 -0
  103. package/dist/pipeline/phases/intake.js.map +1 -0
  104. package/dist/pipeline/phases/phase-context.d.ts +30 -0
  105. package/dist/pipeline/phases/phase-context.d.ts.map +1 -0
  106. package/dist/pipeline/phases/phase-context.js +33 -0
  107. package/dist/pipeline/phases/phase-context.js.map +1 -0
  108. package/dist/pipeline/phases/production-gate.d.ts +8 -0
  109. package/dist/pipeline/phases/production-gate.d.ts.map +1 -0
  110. package/dist/pipeline/phases/production-gate.js +84 -0
  111. package/dist/pipeline/phases/production-gate.js.map +1 -0
  112. package/dist/pipeline/phases/qa-validation.d.ts +7 -0
  113. package/dist/pipeline/phases/qa-validation.d.ts.map +1 -0
  114. package/dist/pipeline/phases/qa-validation.js +50 -0
  115. package/dist/pipeline/phases/qa-validation.js.map +1 -0
  116. package/dist/pipeline/phases/recovery-loop.d.ts +7 -0
  117. package/dist/pipeline/phases/recovery-loop.d.ts.map +1 -0
  118. package/dist/pipeline/phases/recovery-loop.js +91 -0
  119. package/dist/pipeline/phases/recovery-loop.js.map +1 -0
  120. package/dist/pipeline/phases/review.d.ts +8 -0
  121. package/dist/pipeline/phases/review.d.ts.map +1 -0
  122. package/dist/pipeline/phases/review.js +127 -0
  123. package/dist/pipeline/phases/review.js.map +1 -0
  124. package/dist/pipeline/phases/role-planning.d.ts +7 -0
  125. package/dist/pipeline/phases/role-planning.d.ts.map +1 -0
  126. package/dist/pipeline/phases/role-planning.js +75 -0
  127. package/dist/pipeline/phases/role-planning.js.map +1 -0
  128. package/dist/pipeline/phases/stuck.d.ts +7 -0
  129. package/dist/pipeline/phases/stuck.d.ts.map +1 -0
  130. package/dist/pipeline/phases/stuck.js +51 -0
  131. package/dist/pipeline/phases/stuck.js.map +1 -0
  132. package/dist/pipeline/repo-snapshot.d.ts +24 -0
  133. package/dist/pipeline/repo-snapshot.d.ts.map +1 -0
  134. package/dist/pipeline/repo-snapshot.js +343 -0
  135. package/dist/pipeline/repo-snapshot.js.map +1 -0
  136. package/dist/pipeline/role-execution-adapter.d.ts +59 -0
  137. package/dist/pipeline/role-execution-adapter.d.ts.map +1 -0
  138. package/dist/pipeline/role-execution-adapter.js +159 -0
  139. package/dist/pipeline/role-execution-adapter.js.map +1 -0
  140. package/dist/pipeline/skill-loader.d.ts +34 -0
  141. package/dist/pipeline/skill-loader.d.ts.map +1 -0
  142. package/dist/pipeline/skill-loader.js +156 -0
  143. package/dist/pipeline/skill-loader.js.map +1 -0
  144. package/dist/pipeline/skills/defaults.d.ts +16 -0
  145. package/dist/pipeline/skills/defaults.d.ts.map +1 -0
  146. package/dist/pipeline/skills/defaults.js +189 -0
  147. package/dist/pipeline/skills/defaults.js.map +1 -0
  148. package/dist/pipeline/type-defs/artifacts.d.ts +202 -0
  149. package/dist/pipeline/type-defs/artifacts.d.ts.map +1 -0
  150. package/dist/pipeline/type-defs/artifacts.js +66 -0
  151. package/dist/pipeline/type-defs/artifacts.js.map +1 -0
  152. package/dist/pipeline/type-defs/audit.d.ts +256 -0
  153. package/dist/pipeline/type-defs/audit.d.ts.map +1 -0
  154. package/dist/pipeline/type-defs/audit.js +54 -0
  155. package/dist/pipeline/type-defs/audit.js.map +1 -0
  156. package/dist/pipeline/type-defs/checks.d.ts +81 -0
  157. package/dist/pipeline/type-defs/checks.d.ts.map +1 -0
  158. package/dist/pipeline/type-defs/checks.js +38 -0
  159. package/dist/pipeline/type-defs/checks.js.map +1 -0
  160. package/dist/pipeline/type-defs/enums.d.ts +43 -0
  161. package/dist/pipeline/type-defs/enums.d.ts.map +1 -0
  162. package/dist/pipeline/type-defs/enums.js +55 -0
  163. package/dist/pipeline/type-defs/enums.js.map +1 -0
  164. package/dist/pipeline/type-defs/index.d.ts +12 -0
  165. package/dist/pipeline/type-defs/index.d.ts.map +1 -0
  166. package/dist/pipeline/type-defs/index.js +12 -0
  167. package/dist/pipeline/type-defs/index.js.map +1 -0
  168. package/dist/pipeline/type-defs/packets.d.ts +806 -0
  169. package/dist/pipeline/type-defs/packets.d.ts.map +1 -0
  170. package/dist/pipeline/type-defs/packets.js +109 -0
  171. package/dist/pipeline/type-defs/packets.js.map +1 -0
  172. package/dist/pipeline/type-defs/snapshot.d.ts +52 -0
  173. package/dist/pipeline/type-defs/snapshot.d.ts.map +1 -0
  174. package/dist/pipeline/type-defs/snapshot.js +35 -0
  175. package/dist/pipeline/type-defs/snapshot.js.map +1 -0
  176. package/dist/pipeline/type-defs/state.d.ts +449 -0
  177. package/dist/pipeline/type-defs/state.d.ts.map +1 -0
  178. package/dist/pipeline/type-defs/state.js +88 -0
  179. package/dist/pipeline/type-defs/state.js.map +1 -0
  180. package/dist/pipeline/types.d.ts +16 -0
  181. package/dist/pipeline/types.d.ts.map +1 -0
  182. package/dist/pipeline/types.js +16 -0
  183. package/dist/pipeline/types.js.map +1 -0
  184. package/dist/types/audit.d.ts +6 -6
  185. package/dist/workflow/index.d.ts.map +1 -1
  186. package/dist/workflow/index.js +48 -0
  187. package/dist/workflow/index.js.map +1 -1
  188. package/package.json +1 -1
  189. package/skills/PHASE_GATE_ENGINE_SPEC.md +113 -20
  190. package/skills/POPEYE_FULL_AUTONOMY_PIPELINE.md +66 -13
  191. package/src/pipeline/artifact-manager.ts +339 -0
  192. package/src/pipeline/artifact-validators.ts +224 -0
  193. package/src/pipeline/change-request.ts +119 -0
  194. package/src/pipeline/check-runner.ts +504 -0
  195. package/src/pipeline/command-resolver.ts +168 -0
  196. package/src/pipeline/consensus/consensus-runner.ts +317 -0
  197. package/src/pipeline/constitution.ts +109 -0
  198. package/src/pipeline/gate-engine.ts +347 -0
  199. package/src/pipeline/index.ts +82 -0
  200. package/src/pipeline/migration.ts +91 -0
  201. package/src/pipeline/orchestrator.ts +314 -0
  202. package/src/pipeline/packets/audit-report-builder.ts +47 -0
  203. package/src/pipeline/packets/consensus-packet-builder.ts +112 -0
  204. package/src/pipeline/packets/index.ts +15 -0
  205. package/src/pipeline/packets/plan-packet-builder.ts +52 -0
  206. package/src/pipeline/packets/rca-packet-builder.ts +38 -0
  207. package/src/pipeline/phases/architecture.ts +73 -0
  208. package/src/pipeline/phases/audit.ts +193 -0
  209. package/src/pipeline/phases/consensus-architecture.ts +104 -0
  210. package/src/pipeline/phases/consensus-master-plan.ts +100 -0
  211. package/src/pipeline/phases/consensus-role-plans.ts +105 -0
  212. package/src/pipeline/phases/done.ts +68 -0
  213. package/src/pipeline/phases/implementation.ts +48 -0
  214. package/src/pipeline/phases/index.ts +21 -0
  215. package/src/pipeline/phases/intake.ts +54 -0
  216. package/src/pipeline/phases/phase-context.ts +86 -0
  217. package/src/pipeline/phases/production-gate.ts +113 -0
  218. package/src/pipeline/phases/qa-validation.ts +63 -0
  219. package/src/pipeline/phases/recovery-loop.ts +118 -0
  220. package/src/pipeline/phases/review.ts +149 -0
  221. package/src/pipeline/phases/role-planning.ts +92 -0
  222. package/src/pipeline/phases/stuck.ts +62 -0
  223. package/src/pipeline/repo-snapshot.ts +395 -0
  224. package/src/pipeline/role-execution-adapter.ts +238 -0
  225. package/src/pipeline/skill-loader.ts +192 -0
  226. package/src/pipeline/skills/defaults.ts +215 -0
  227. package/src/pipeline/type-defs/artifacts.ts +81 -0
  228. package/src/pipeline/type-defs/audit.ts +67 -0
  229. package/src/pipeline/type-defs/checks.ts +47 -0
  230. package/src/pipeline/type-defs/enums.ts +62 -0
  231. package/src/pipeline/type-defs/index.ts +12 -0
  232. package/src/pipeline/type-defs/packets.ts +131 -0
  233. package/src/pipeline/type-defs/snapshot.ts +55 -0
  234. package/src/pipeline/type-defs/state.ts +165 -0
  235. package/src/pipeline/types.ts +16 -0
  236. package/src/workflow/index.ts +48 -0
  237. package/tests/pipeline/artifact-manager.test.ts +183 -0
  238. package/tests/pipeline/artifact-validators.test.ts +207 -0
  239. package/tests/pipeline/change-request.test.ts +180 -0
  240. package/tests/pipeline/check-runner.test.ts +157 -0
  241. package/tests/pipeline/command-resolver.test.ts +159 -0
  242. package/tests/pipeline/consensus-runner.test.ts +206 -0
  243. package/tests/pipeline/consensus-scoring.test.ts +163 -0
  244. package/tests/pipeline/constitution.test.ts +122 -0
  245. package/tests/pipeline/gate-engine.test.ts +195 -0
  246. package/tests/pipeline/migration.test.ts +133 -0
  247. package/tests/pipeline/orchestrator.test.ts +614 -0
  248. package/tests/pipeline/packets/builders.test.ts +347 -0
  249. package/tests/pipeline/repo-snapshot.test.ts +189 -0
  250. package/tests/pipeline/role-execution-adapter.test.ts +299 -0
  251. package/tests/pipeline/skill-loader.test.ts +186 -0
  252. package/tests/pipeline/start-env-checks.test.ts +123 -0
  253. package/tests/pipeline/types.test.ts +156 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,65 @@
2
2
 
3
3
  All notable changes to Popeye CLI are documented in this file.
4
4
 
5
+ ## [2.0.0] - 2026-02-20
6
+
7
+ ### Breaking Changes
8
+ - **Full Autonomy Pipeline Engine** — Popeye now ships a complete 14-phase deterministic pipeline that replaces the ad-hoc plan-then-execute workflow with a gate-driven state machine. This is a fundamental architectural shift: every phase must produce typed artifacts, pass gate checks, and survive consensus review before the pipeline advances. The pipeline manages its own recovery, drift detection, and rewind logic without human intervention.
9
+ - `PipelineState` is now the authoritative runtime state for autonomous execution (distinct from the existing `ProjectState` used by the interactive CLI).
10
+ - New `src/pipeline/` module tree (33 source files) is a peer to the existing `src/workflow/` module.
11
+
12
+ ### Added — Pipeline Core (Autonomy Hardening v1.0)
13
+
14
+ - **14-Phase State Machine** — `INTAKE` -> `CONSENSUS_MASTER_PLAN` -> `ARCHITECTURE` -> `CONSENSUS_ARCHITECTURE` -> `ROLE_PLANNING` -> `CONSENSUS_ROLE_PLANS` -> `IMPLEMENTATION` -> `QA_VALIDATION` -> `REVIEW` -> `AUDIT` -> `PRODUCTION_GATE` -> `DONE` (or `RECOVERY_LOOP` / `STUCK` on failure). Each phase has a dedicated handler in `src/pipeline/phases/`.
15
+ - **Gate Engine** (`gate-engine.ts`) — Pure deterministic evaluator. Each phase has a `GateDefinition` specifying required artifacts, required checks, consensus thresholds, allowed transitions, and fail transition. No side effects; reads state only.
16
+ - **Orchestrator** (`orchestrator.ts`) — Main loop that drives the pipeline from any phase to completion. Handles phase dispatch, gate evaluation, recovery routing, resume from saved state, and terminal state handling.
17
+ - **Type-Safe Artifact System** (`artifact-manager.ts`, `type-defs/artifacts.ts`) — 18 artifact types (`master_plan`, `architecture`, `role_plan`, `consensus`, `repo_snapshot`, `rca_report`, `audit_report`, `qa_validation`, `review_decision`, `production_readiness`, `constitution`, `change_request`, `release_notes`, `journalist_update`, `dependency_graph`, `implementation_log`, `recovery_log`, `skill_definition`). Each artifact has id, type, phase, version, path, sha256, timestamp, immutability flag, content_type, and group_id.
18
+ - **Consensus System** (`consensus/consensus-runner.ts`, `packets/consensus-packet-builder.ts`) — Multi-reviewer consensus with confidence-weighted scoring. `APPROVE` = 1.0, `CONDITIONAL` = 0.5, `REJECT` = 0.0, weighted by voter confidence. Any vote with `blocking_issues` forces `weighted_score` to 0. Three consensus phases (master plan, architecture, role plans) each produce `ConsensusPacket` artifacts.
19
+ - **Skill Loader** (`skill-loader.ts`, `skills/defaults.ts`) — 16 pipeline roles (`DISPATCHER`, `FRONTEND_PROGRAMMER`, `BACKEND_PROGRAMMER`, `DATABASE_SPECIALIST`, `DEVOPS_ENGINEER`, `QA_ENGINEER`, `UX_DESIGNER`, `TECHNICAL_WRITER`, `REVIEWER`, `AUDITOR`, `JOURNALIST`, `SECURITY_ANALYST`, `PERFORMANCE_ENGINEER`, `INTEGRATION_SPECIALIST`, `ARCHITECT`, `PROJECT_MANAGER`). Each role has a system prompt, constraints, output contract, and required sections.
20
+ - **Constitution System** (`constitution.ts`) — SHA-256 hash verification of `POPEYE_CONSTITUTION.md`. Created during INTAKE, verified before every gate evaluation. Hash mismatch blocks pipeline progression.
21
+ - **Repo Snapshot & Drift Detection** (`repo-snapshot.ts`) — File/line counting, language detection, config file inventory, port scanning, test framework and build tool detection. Snapshot diffing for drift detection between approved plans and implementation.
22
+ - **Check Runner** (`check-runner.ts`) — Deterministic command execution for `build`, `test`, `lint`, `typecheck`, `start`, and `env_check` gates. Captures exit code, stdout/stderr, duration.
23
+ - **Command Resolver** (`command-resolver.ts`) — Auto-detects `build`, `test`, `lint`, `typecheck`, and `start` commands from `package.json` scripts, `Makefile`, and common patterns.
24
+ - **Artifact Validators** (`artifact-validators.ts`) — Deterministic regex/structural checks before LLM review: `master_plan` (Goals, Milestones, Success Criteria sections, 200+ chars), `architecture` (Components, Data Flow, Tech Stack, file path references), `role_plan` (Tasks, Dependencies, Acceptance Criteria), `qa_validation` (Test Results, Coverage), `audit_report` (JSON with findings array, overall_status, system_risk_score).
25
+ - **Change Request System** (`change-request.ts`) — Structured drift tracking: `scope` -> `CONSENSUS_MASTER_PLAN`, `architecture` -> `CONSENSUS_ARCHITECTURE`, `dependency` -> `CONSENSUS_ROLE_PLANS`, `config` -> `QA_VALIDATION`, `requirement` -> `CONSENSUS_MASTER_PLAN`. CRs include origin phase, requester, impact analysis (affected artifacts, phases, risk level).
26
+ - **Role Execution Adapter** (`role-execution-adapter.ts`) — Bridges pipeline roles to execution. Builds role-specific system prompts from skill + role plan, defines allowed paths and forbidden patterns, injects context into `ClaudeExecuteOptions`.
27
+ - **RCA & Recovery** (`packets/rca-packet-builder.ts`, `phases/recovery-loop.ts`) — Root Cause Analysis packets with `requires_phase_rewind_to` for targeted recovery. Recovery loop reads RCA artifacts from disk to determine rewind targets.
28
+ - **Packet Builders** — `plan-packet-builder.ts` (PlanPacket with milestones, constraints, deliverables), `consensus-packet-builder.ts` (ConsensusPacket with votes, scores, conditions), `rca-packet-builder.ts` (RCAPacket with root cause, evidence, rewind target), `audit-report-builder.ts` (AuditReport with findings, risk score, status).
29
+ - **Migration System** (`migration.ts`) — Version-aware pipeline state migration for forward compatibility.
30
+ - **Pipeline Index** (`index.ts`) — Public API: `runPipeline()`, `resumePipeline()`, `createDefaultPipelineState()`, `createGateEngine()`, plus all type exports.
31
+
32
+ ### Added — Autonomy Hardening v1.1 (Gap Fixes)
33
+
34
+ - **Deterministic CR Routing** — After REVIEW and AUDIT phases pass their gates, the orchestrator checks `pipeline.pendingChangeRequests` for proposed CRs. First proposed CR is marked `approved` and the pipeline transitions to its `target_phase` (a consensus phase). This is a real state machine transition, not advisory.
35
+ - **Constitution Verification in Orchestrator** — `verifyConstitution(pipeline, projectDir)` is called before every `evaluateGate()`. Result is passed as `{ constitutionValid, constitutionReason }` options. Gate engine adds constitution failure as a blocker.
36
+ - **Gate Result Merge** — `mergeGateResult()` preserves `score`/`consensusScore` stored by consensus phase handlers while updating `pass`/`blockers` from the gate engine. Prevents consensus scoring data loss on re-evaluation.
37
+ - **RCA Rewind from Disk** — `getLatestRCA()` reads the latest `rca_report` JSON artifact from the filesystem and parses `requires_phase_rewind_to`. Recovery loop uses this to rewind to the correct phase instead of always returning to the failed phase.
38
+ - `score?: number` on `GateResult` in `gate-engine.ts` (was present in type-defs but missing from the runtime interface).
39
+ - `pendingChangeRequests` array on `PipelineState` for CR lifecycle tracking (`proposed` -> `approved` -> routing).
40
+
41
+ ### Added — Type System
42
+
43
+ - **Split `types.ts` into `type-defs/` directory** (8 files) — `enums.ts` (PipelinePhase, PipelineRole), `artifacts.ts` (18 artifact types, ArtifactEntry, ArtifactRef, DependencyEdge), `packets.ts` (PlanPacket, ConsensusPacket, ReviewerVote, RCAPacket, ChangeRequest, Constraint), `audit.ts` (AuditFinding, AuditReport), `snapshot.ts` (RepoSnapshot, ConfigFileEntry, PortEntry, SnapshotDiff), `checks.ts` (GateCheckType, GateCheckResult, ResolvedCommands), `state.ts` (PipelineState, GateResult, GateDefinition, SkillDefinition, PhaseResult, PhaseContext), `index.ts` (barrel re-export). All existing `from '../pipeline/types.js'` imports work unchanged.
44
+
45
+ ### Added — Tests
46
+
47
+ - **59 new test files** covering the entire pipeline module with **1210 total tests** (up from 828):
48
+ - `orchestrator.test.ts` (25 tests) — Happy path, recovery loop, resume, gate integration, v1.1 gap fixes (CR routing, constitution, merge, RCA rewind)
49
+ - `gate-engine.test.ts` — Gate definitions, evaluations, transitions, consensus thresholds
50
+ - `consensus-scoring.test.ts` — Weighted scoring, CONDITIONAL=0.5, blocking issues, confidence weights
51
+ - `constitution.test.ts` — Artifact creation, hash computation, tamper detection
52
+ - `artifact-validators.test.ts` — Each type: valid pass, missing sections, empty content, edge cases
53
+ - `change-request.test.ts` — CR building, routing per change type, impact analysis
54
+ - `role-execution-adapter.test.ts` — Role context, prompt injection, forbidden patterns
55
+ - `start-env-checks.test.ts` — Start check (alive/crash/timeout), env check (complete/missing/empty)
56
+ - `check-runner.test.ts`, `command-resolver.test.ts`, `consensus-runner.test.ts`, `repo-snapshot.test.ts`, `skill-loader.test.ts`, `artifact-manager.test.ts`, `migration.test.ts`, `types.test.ts`, `packets/builders.test.ts`
57
+
58
+ ### Changed
59
+ - Orchestrator main loop now has 3 new behaviors between phase execution and transition: (1) constitution verification before gate eval, (2) gate result merging after gate eval, (3) CR routing check after REVIEW/AUDIT gate pass.
60
+ - REVIEW phase creates CRs for config drift and scope drift, registers them in `pipeline.pendingChangeRequests`.
61
+ - AUDIT phase creates CRs for blocking architectural and security findings, registers them in `pipeline.pendingChangeRequests`.
62
+ - `src/workflow/index.ts` — Added pipeline exports for integration with existing workflow system.
63
+
5
64
  ## [1.6.0] - 2026-02-17
6
65
 
7
66
  ### Added
package/CONTRIBUTING.md CHANGED
@@ -185,8 +185,14 @@ src/
185
185
  ├── cli/ # CLI commands and interface
186
186
  ├── config/ # Configuration management
187
187
  ├── generators/ # Project scaffolding
188
+ ├── pipeline/ # Full autonomy pipeline engine (14-phase state machine)
189
+ │ ├── orchestrator.ts # Main loop with CR routing, constitution check, gate merge
190
+ │ ├── gate-engine.ts # Deterministic gate evaluation
191
+ │ ├── phases/ # Phase handler implementations
192
+ │ └── type-defs/ # Pipeline-specific type definitions
188
193
  ├── state/ # State management
189
194
  ├── types/ # TypeScript type definitions
195
+ ├── upgrade/ # Project type upgrade system
190
196
  └── workflow/ # Core workflow logic
191
197
  ├── plan-storage.ts # Consensus docs per-app storage
192
198
  └── workspace-manager.ts # Multi-app workspace management
@@ -257,6 +263,14 @@ Understanding the codebase:
257
263
 
258
264
 
259
265
  ┌─────────────────────────────────────────────────────────────┐
266
+ │ Pipeline Layer │
267
+ │ (pipeline/*.ts - 14-phase autonomy engine, gate machine) │
268
+ │ Orchestrator -> Gate Engine -> Phase Handlers │
269
+ │ Constitution verification, CR routing, RCA rewind │
270
+ └─────────────────────────────────────────────────────────────┘
271
+
272
+
273
+ ┌─────────────────────────────────────────────────────────────┐
260
274
  │ Workflow Layer │
261
275
  │ (workflow/*.ts - Plan mode, Execution mode, Consensus) │
262
276
  └─────────────────────────────────────────────────────────────┘
@@ -264,7 +278,7 @@ Understanding the codebase:
264
278
 
265
279
  ┌─────────────────────────────────────────────────────────────┐
266
280
  │ Adapter Layer │
267
- │ (adapters/*.ts - Claude, OpenAI, Gemini)
281
+ │ (adapters/*.ts - Claude, OpenAI, Gemini, Grok)
268
282
  └─────────────────────────────────────────────────────────────┘
269
283
 
270
284
 
package/README.md CHANGED
@@ -1606,6 +1606,18 @@ src/
1606
1606
  │ ├── handlers.ts # Upgrade handlers (4 paths with file scaffolding)
1607
1607
  │ ├── index.ts # Transactional orchestrator with backup/rollback
1608
1608
  │ └── context.ts # Builds rich context for post-upgrade planning
1609
+ ├── pipeline/ # Full autonomy pipeline engine (14 phases)
1610
+ │ ├── orchestrator.ts # Top-level loop: phase dispatch, CR routing, constitution check
1611
+ │ ├── gate-engine.ts # Deterministic state machine: gate definitions, evaluation
1612
+ │ ├── constitution.ts # Constitution hashing and integrity verification (SHA-256)
1613
+ │ ├── change-request.ts # CR builder, routing (change_type -> consensus phase)
1614
+ │ ├── artifact-manager.ts # Artifact creation, storage, versioning
1615
+ │ ├── skill-loader.ts # Role skill prompt loading from skills/ directory
1616
+ │ ├── repo-snapshot.ts # Repo snapshot generation and diffing
1617
+ │ ├── consensus/ # Consensus runner for pipeline phases
1618
+ │ ├── phases/ # Phase handlers (intake, review, audit, recovery, etc.)
1619
+ │ ├── type-defs/ # Pipeline type definitions (state, enums, artifacts, packets)
1620
+ │ └── packets/ # Packet builders (audit report, consensus, RCA)
1609
1621
  ├── workflow/ # Workflow engine
1610
1622
  │ ├── consensus.ts # Consensus loop (reviewerPersona threading)
1611
1623
  │ ├── plan-mode.ts # Planning phase (strategy generation, monorepo-aware)
@@ -1645,6 +1657,51 @@ src/
1645
1657
  └── website-strategy.ts # WebsiteStrategyDocument, BrandAssetsContract, DesignTokens
1646
1658
  ```
1647
1659
 
1660
+ ### Full Autonomy Pipeline Engine
1661
+
1662
+ The `src/pipeline/` module implements the 14-phase deterministic pipeline defined in the `POPEYE_FULL_AUTONOMY_PIPELINE.md` spec. The pipeline drives a project from a single idea prompt through to production-ready status.
1663
+
1664
+ #### Pipeline Phases
1665
+
1666
+ ```
1667
+ INTAKE -> CONSENSUS_MASTER_PLAN -> ARCHITECTURE -> CONSENSUS_ARCHITECTURE
1668
+ -> ROLE_PLANNING -> CONSENSUS_ROLE_PLANS -> IMPLEMENTATION -> QA_VALIDATION
1669
+ -> REVIEW -> AUDIT -> PRODUCTION_GATE -> DONE
1670
+ (RECOVERY_LOOP on any gate failure, STUCK after max recovery iterations)
1671
+ ```
1672
+
1673
+ Each phase has:
1674
+ - **Required artifacts** that must exist before the gate passes
1675
+ - **Required checks** (build, test, lint, typecheck for PRODUCTION_GATE)
1676
+ - **Consensus threshold** (0.95 for plan phases)
1677
+ - **Allowed transitions** (strictly enforced, no phase skipping)
1678
+
1679
+ #### Autonomy Hardening (v1.1)
1680
+
1681
+ The orchestrator main loop includes three behaviors between phase execution and transition:
1682
+
1683
+ 1. **Constitution Verification**: Before every `evaluateGate()` call, the orchestrator verifies that `skills/POPEYE_CONSTITUTION.md` has not been modified since pipeline start (SHA-256 hash comparison). If the constitution is invalid, the gate is blocked with a specific reason.
1684
+
1685
+ 2. **Gate Result Merging**: After gate evaluation, `mergeGateResult()` preserves `score`/`consensusScore` values stored by consensus phase handlers while updating `pass`/`blockers` from the gate engine. This prevents consensus scores from being overwritten.
1686
+
1687
+ 3. **CR Routing**: After REVIEW and AUDIT phases pass their gates, the orchestrator checks `pipeline.pendingChangeRequests` for any `proposed` Change Requests. If found, the pipeline deterministically routes to the appropriate consensus phase rather than continuing normal progression.
1688
+
1689
+ #### Change Request System
1690
+
1691
+ | Change Type | Routes To |
1692
+ |-------------|-----------|
1693
+ | `scope` | `CONSENSUS_MASTER_PLAN` |
1694
+ | `architecture` | `CONSENSUS_ARCHITECTURE` |
1695
+ | `dependency` | `CONSENSUS_ROLE_PLANS` |
1696
+ | `config` | `QA_VALIDATION` |
1697
+ | `requirement` | `CONSENSUS_MASTER_PLAN` |
1698
+
1699
+ CR Lifecycle: `proposed` (created by REVIEW/AUDIT) -> `approved` (routed by orchestrator) or `rejected`.
1700
+
1701
+ #### Recovery and RCA Rewind
1702
+
1703
+ When any gate fails, the pipeline enters RECOVERY_LOOP. After successful recovery, the orchestrator reads the latest RCA artifact from disk and checks for a `requires_phase_rewind_to` field. If present, the pipeline rewinds to that specific phase instead of retesting the originally failed phase. This allows root-cause-aware recovery (e.g., an implementation failure caused by an architecture gap can rewind to ARCHITECTURE).
1704
+
1648
1705
  ## Development
1649
1706
 
1650
1707
  ```bash
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Artifact Manager — manages immutable versioned artifacts under /docs/.
3
+ * Supports both Markdown and JSON content types (P0-C).
4
+ * Implements version chains via group_id + previous_id (P1-2).
5
+ */
6
+ import type { ArtifactType, ArtifactEntry, ArtifactRef, ContentType, PipelinePhase } from './types.js';
7
+ export interface ArtifactManagerOptions {
8
+ projectDir: string;
9
+ }
10
+ export declare class ArtifactManager {
11
+ private readonly projectDir;
12
+ private readonly docsDir;
13
+ constructor(options: ArtifactManagerOptions);
14
+ /** Ensure all /docs/ subdirectories exist */
15
+ ensureDocsStructure(): void;
16
+ /** Create an artifact from Markdown content */
17
+ createArtifactText(type: ArtifactType, markdown: string, phase: PipelinePhase, groupId?: string): ArtifactEntry;
18
+ /** Create an artifact from a JSON-serializable object */
19
+ createArtifactJson(type: ArtifactType, jsonObject: unknown, phase: PipelinePhase, groupId?: string): ArtifactEntry;
20
+ /** Core artifact creation logic */
21
+ private createArtifact;
22
+ /** Get the file path for a given artifact type and naming components */
23
+ getArtifactPath(type: ArtifactType, sid: string, version: number, date: string, contentType: ContentType): string;
24
+ /** List all artifacts, optionally filtered by type */
25
+ listArtifacts(type?: ArtifactType): ArtifactEntry[];
26
+ /** Verify an artifact's SHA-256 matches its stored content */
27
+ verifyArtifact(entry: ArtifactEntry): boolean;
28
+ /** Get the latest artifact of a given type */
29
+ getLatestArtifact(type: ArtifactType): ArtifactEntry | null;
30
+ /** Get next version number for a group across existing artifacts */
31
+ getNextVersion(groupId: string, existingArtifacts: ArtifactEntry[]): number;
32
+ /** Convert an ArtifactEntry to an ArtifactRef */
33
+ toArtifactRef(entry: ArtifactEntry): ArtifactRef;
34
+ /** Store artifact metadata for later retrieval */
35
+ storeArtifactMetadata(entry: ArtifactEntry): void;
36
+ /** Create an artifact and store its metadata in one step */
37
+ createAndStoreText(type: ArtifactType, markdown: string, phase: PipelinePhase, groupId?: string): ArtifactEntry;
38
+ /** Create a JSON artifact and store its metadata in one step */
39
+ createAndStoreJson(type: ArtifactType, jsonObject: unknown, phase: PipelinePhase, groupId?: string): ArtifactEntry;
40
+ /** Update /docs/INDEX.md with current artifact listing */
41
+ updateIndex(artifacts: ArtifactEntry[]): void;
42
+ /** Get the latest artifact entry in a specific group */
43
+ private getLatestInGroup;
44
+ }
45
+ /** Factory function */
46
+ export declare function createArtifactManager(projectDir: string): ArtifactManager;
47
+ //# sourceMappingURL=artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-manager.d.ts","sourceRoot":"","sources":["../../src/pipeline/artifact-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AAqEpB,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,sBAAsB;IAK3C,6CAA6C;IAC7C,mBAAmB,IAAI,IAAI;IAY3B,+CAA+C;IAC/C,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IAIhB,yDAAyD;IACzD,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,OAAO,EACnB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IAKhB,mCAAmC;IACnC,OAAO,CAAC,cAAc;IAkDtB,wEAAwE;IACxE,eAAe,CACb,IAAI,EAAE,YAAY,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,GACvB,MAAM;IAMT,sDAAsD;IACtD,aAAa,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,aAAa,EAAE;IAyBnD,8DAA8D;IAC9D,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAW7C,8CAA8C;IAC9C,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,IAAI;IAM3D,oEAAoE;IACpE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,MAAM;IAO3E,iDAAiD;IACjD,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW;IAUhD,kDAAkD;IAClD,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAUjD,4DAA4D;IAC5D,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IAMhB,gEAAgE;IAChE,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,OAAO,EACnB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IAMhB,0DAA0D;IAC1D,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;IAyB7C,wDAAwD;IACxD,OAAO,CAAC,gBAAgB;CAUzB;AAED,uBAAuB;AACvB,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAEzE"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Artifact Manager — manages immutable versioned artifacts under /docs/.
3
+ * Supports both Markdown and JSON content types (P0-C).
4
+ * Implements version chains via group_id + previous_id (P1-2).
5
+ */
6
+ import { randomUUID } from 'node:crypto';
7
+ import { createHash } from 'node:crypto';
8
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync } from 'node:fs';
9
+ import { join, relative } from 'node:path';
10
+ // ─── Constants ───────────────────────────────────────────
11
+ /** Directory mappings: artifact type -> subdirectory under /docs/ */
12
+ const ARTIFACT_DIRS = {
13
+ master_plan: 'master-plan',
14
+ architecture: 'architecture',
15
+ role_plan: 'role-plans',
16
+ consensus: 'consensus',
17
+ arbitration: 'arbitration',
18
+ audit_report: 'audit',
19
+ rca_report: 'incidents',
20
+ production_readiness: 'production',
21
+ release_notes: 'release',
22
+ deployment: 'release',
23
+ rollback: 'release',
24
+ repo_snapshot: 'snapshots',
25
+ build_check: 'checks',
26
+ test_check: 'checks',
27
+ lint_check: 'checks',
28
+ typecheck_check: 'checks',
29
+ placeholder_scan: 'checks',
30
+ qa_validation: 'role-plans',
31
+ review_decision: 'consensus',
32
+ stuck_report: 'incidents',
33
+ journalist_trace: 'journal',
34
+ resolved_commands: 'checks',
35
+ constitution: 'governance',
36
+ change_request: 'governance',
37
+ };
38
+ /** All required subdirectories under /docs/ */
39
+ const DOCS_SUBDIRS = [
40
+ 'master-plan',
41
+ 'architecture',
42
+ 'role-plans',
43
+ 'consensus',
44
+ 'arbitration',
45
+ 'audit',
46
+ 'incidents',
47
+ 'production',
48
+ 'release',
49
+ 'snapshots',
50
+ 'checks',
51
+ 'journal',
52
+ 'governance',
53
+ ];
54
+ // ─── Helper Functions ────────────────────────────────────
55
+ function computeSha256(content) {
56
+ return createHash('sha256').update(content, 'utf-8').digest('hex');
57
+ }
58
+ function shortId() {
59
+ return randomUUID().split('-')[0];
60
+ }
61
+ function formatDate() {
62
+ return new Date().toISOString().split('T')[0];
63
+ }
64
+ function getExtension(contentType) {
65
+ return contentType === 'json' ? '.json' : '.md';
66
+ }
67
+ export class ArtifactManager {
68
+ projectDir;
69
+ docsDir;
70
+ constructor(options) {
71
+ this.projectDir = options.projectDir;
72
+ this.docsDir = join(options.projectDir, 'docs');
73
+ }
74
+ /** Ensure all /docs/ subdirectories exist */
75
+ ensureDocsStructure() {
76
+ if (!existsSync(this.docsDir)) {
77
+ mkdirSync(this.docsDir, { recursive: true });
78
+ }
79
+ for (const subdir of DOCS_SUBDIRS) {
80
+ const dirPath = join(this.docsDir, subdir);
81
+ if (!existsSync(dirPath)) {
82
+ mkdirSync(dirPath, { recursive: true });
83
+ }
84
+ }
85
+ }
86
+ /** Create an artifact from Markdown content */
87
+ createArtifactText(type, markdown, phase, groupId) {
88
+ return this.createArtifact(type, markdown, phase, 'markdown', groupId);
89
+ }
90
+ /** Create an artifact from a JSON-serializable object */
91
+ createArtifactJson(type, jsonObject, phase, groupId) {
92
+ const content = JSON.stringify(jsonObject, null, 2);
93
+ return this.createArtifact(type, content, phase, 'json', groupId);
94
+ }
95
+ /** Core artifact creation logic */
96
+ createArtifact(type, content, phase, contentType, groupId) {
97
+ this.ensureDocsStructure();
98
+ const resolvedGroupId = groupId ?? randomUUID();
99
+ const existingArtifacts = this.listArtifacts(type);
100
+ const version = this.getNextVersion(resolvedGroupId, existingArtifacts);
101
+ const previousEntry = this.getLatestInGroup(resolvedGroupId, existingArtifacts);
102
+ const id = randomUUID();
103
+ const date = formatDate();
104
+ const sid = shortId();
105
+ const ext = getExtension(contentType);
106
+ const filename = `${type}_${sid}_v${version}_${date}${ext}`;
107
+ const subdir = ARTIFACT_DIRS[type] ?? 'misc';
108
+ const dirPath = join(this.docsDir, subdir);
109
+ if (!existsSync(dirPath)) {
110
+ mkdirSync(dirPath, { recursive: true });
111
+ }
112
+ const filePath = join(dirPath, filename);
113
+ const sha256 = computeSha256(content);
114
+ writeFileSync(filePath, content, 'utf-8');
115
+ const relativePath = relative(this.projectDir, filePath);
116
+ const entry = {
117
+ id,
118
+ type,
119
+ phase,
120
+ version,
121
+ path: relativePath,
122
+ sha256,
123
+ timestamp: new Date().toISOString(),
124
+ immutable: true,
125
+ content_type: contentType,
126
+ group_id: resolvedGroupId,
127
+ previous_id: previousEntry?.id,
128
+ };
129
+ return entry;
130
+ }
131
+ /** Get the file path for a given artifact type and naming components */
132
+ getArtifactPath(type, sid, version, date, contentType) {
133
+ const ext = getExtension(contentType);
134
+ const subdir = ARTIFACT_DIRS[type] ?? 'misc';
135
+ return join(this.docsDir, subdir, `${type}_${sid}_v${version}_${date}${ext}`);
136
+ }
137
+ /** List all artifacts, optionally filtered by type */
138
+ listArtifacts(type) {
139
+ // Scan for artifact JSON metadata files in a .artifacts/ dir
140
+ const metaDir = join(this.docsDir, '.artifacts');
141
+ if (!existsSync(metaDir)) {
142
+ return [];
143
+ }
144
+ const entries = [];
145
+ const files = readdirSync(metaDir).filter((f) => f.endsWith('.json'));
146
+ for (const file of files) {
147
+ try {
148
+ const raw = readFileSync(join(metaDir, file), 'utf-8');
149
+ const parsed = JSON.parse(raw);
150
+ if (!type || parsed.type === type) {
151
+ entries.push(parsed);
152
+ }
153
+ }
154
+ catch {
155
+ // Skip malformed metadata files
156
+ }
157
+ }
158
+ return entries.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
159
+ }
160
+ /** Verify an artifact's SHA-256 matches its stored content */
161
+ verifyArtifact(entry) {
162
+ const fullPath = join(this.projectDir, entry.path);
163
+ if (!existsSync(fullPath)) {
164
+ return false;
165
+ }
166
+ const content = readFileSync(fullPath, 'utf-8');
167
+ const currentHash = computeSha256(content);
168
+ return currentHash === entry.sha256;
169
+ }
170
+ /** Get the latest artifact of a given type */
171
+ getLatestArtifact(type) {
172
+ const all = this.listArtifacts(type);
173
+ if (all.length === 0)
174
+ return null;
175
+ return all[all.length - 1];
176
+ }
177
+ /** Get next version number for a group across existing artifacts */
178
+ getNextVersion(groupId, existingArtifacts) {
179
+ const groupArtifacts = existingArtifacts.filter((a) => a.group_id === groupId);
180
+ if (groupArtifacts.length === 0)
181
+ return 1;
182
+ const maxVersion = Math.max(...groupArtifacts.map((a) => a.version));
183
+ return maxVersion + 1;
184
+ }
185
+ /** Convert an ArtifactEntry to an ArtifactRef */
186
+ toArtifactRef(entry) {
187
+ return {
188
+ artifact_id: entry.id,
189
+ path: entry.path,
190
+ sha256: entry.sha256,
191
+ version: entry.version,
192
+ type: entry.type,
193
+ };
194
+ }
195
+ /** Store artifact metadata for later retrieval */
196
+ storeArtifactMetadata(entry) {
197
+ const metaDir = join(this.docsDir, '.artifacts');
198
+ if (!existsSync(metaDir)) {
199
+ mkdirSync(metaDir, { recursive: true });
200
+ }
201
+ const metaPath = join(metaDir, `${entry.id}.json`);
202
+ writeFileSync(metaPath, JSON.stringify(entry, null, 2), 'utf-8');
203
+ }
204
+ /** Create an artifact and store its metadata in one step */
205
+ createAndStoreText(type, markdown, phase, groupId) {
206
+ const entry = this.createArtifactText(type, markdown, phase, groupId);
207
+ this.storeArtifactMetadata(entry);
208
+ return entry;
209
+ }
210
+ /** Create a JSON artifact and store its metadata in one step */
211
+ createAndStoreJson(type, jsonObject, phase, groupId) {
212
+ const entry = this.createArtifactJson(type, jsonObject, phase, groupId);
213
+ this.storeArtifactMetadata(entry);
214
+ return entry;
215
+ }
216
+ /** Update /docs/INDEX.md with current artifact listing */
217
+ updateIndex(artifacts) {
218
+ this.ensureDocsStructure();
219
+ const lines = [
220
+ '# Documentation Index',
221
+ '',
222
+ `> Auto-generated by Popeye Pipeline — ${new Date().toISOString()}`,
223
+ '',
224
+ '## Artifacts',
225
+ '',
226
+ '| Type | Version | Path | Phase | Timestamp |',
227
+ '|------|---------|------|-------|-----------|',
228
+ ];
229
+ const sorted = [...artifacts].sort((a, b) => a.timestamp.localeCompare(b.timestamp));
230
+ for (const a of sorted) {
231
+ lines.push(`| ${a.type} | v${a.version} | ${a.path} | ${a.phase} | ${a.timestamp} |`);
232
+ }
233
+ lines.push('');
234
+ const indexPath = join(this.docsDir, 'INDEX.md');
235
+ writeFileSync(indexPath, lines.join('\n'), 'utf-8');
236
+ }
237
+ /** Get the latest artifact entry in a specific group */
238
+ getLatestInGroup(groupId, existingArtifacts) {
239
+ const groupArtifacts = existingArtifacts
240
+ .filter((a) => a.group_id === groupId)
241
+ .sort((a, b) => a.version - b.version);
242
+ if (groupArtifacts.length === 0)
243
+ return null;
244
+ return groupArtifacts[groupArtifacts.length - 1];
245
+ }
246
+ }
247
+ /** Factory function */
248
+ export function createArtifactManager(projectDir) {
249
+ return new ArtifactManager({ projectDir });
250
+ }
251
+ //# sourceMappingURL=artifact-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-manager.js","sourceRoot":"","sources":["../../src/pipeline/artifact-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Artifact Completeness Validators — deterministic structural checks.
3
+ * Runs BEFORE LLM review in consensus phases to catch obvious issues.
4
+ * Each validator checks for required sections, minimum content length,
5
+ * and structural integrity specific to its artifact type.
6
+ */
7
+ import type { ArtifactType } from './types.js';
8
+ export interface ValidationResult {
9
+ valid: boolean;
10
+ errors: string[];
11
+ warnings: string[];
12
+ }
13
+ /**
14
+ * Validate artifact content completeness based on type-specific rules.
15
+ * Returns a ValidationResult with errors (blocking) and warnings (non-blocking).
16
+ *
17
+ * Args:
18
+ * type: The artifact type to validate against.
19
+ * content: The artifact content string.
20
+ *
21
+ * Returns:
22
+ * ValidationResult with valid flag, errors, and warnings.
23
+ */
24
+ export declare function validateArtifactCompleteness(type: ArtifactType, content: string): ValidationResult;
25
+ /**
26
+ * Get all artifact types that have validators.
27
+ */
28
+ export declare function getValidatableArtifactTypes(): ArtifactType[];
29
+ //# sourceMappingURL=artifact-validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-validators.d.ts","sourceRoot":"","sources":["../../src/pipeline/artifact-validators.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA2KD;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,GACd,gBAAgB,CAgBlB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,YAAY,EAAE,CAE5D"}