@ktpartners/dgs-platform 2.6.2
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/LICENSE +38 -0
- package/README.md +851 -0
- package/agents/dgs-codebase-cross-analyzer.md +183 -0
- package/agents/dgs-codebase-mapper.md +782 -0
- package/agents/dgs-codebase-synthesizer.md +156 -0
- package/agents/dgs-debugger.md +1256 -0
- package/agents/dgs-executor.md +550 -0
- package/agents/dgs-integration-checker.md +481 -0
- package/agents/dgs-nyquist-auditor.md +178 -0
- package/agents/dgs-phase-researcher.md +563 -0
- package/agents/dgs-phase-verifier.md +450 -0
- package/agents/dgs-plan-checker.md +708 -0
- package/agents/dgs-planner.md +1324 -0
- package/agents/dgs-project-researcher.md +631 -0
- package/agents/dgs-research-synthesizer.md +249 -0
- package/agents/dgs-roadmapper.md +652 -0
- package/agents/dgs-verifier.md +607 -0
- package/bin/install.js +2073 -0
- package/commands/dgs/add-doc.md +45 -0
- package/commands/dgs/add-idea.md +38 -0
- package/commands/dgs/add-phase.md +43 -0
- package/commands/dgs/add-repo.md +54 -0
- package/commands/dgs/add-tests.md +41 -0
- package/commands/dgs/add-todo.md +47 -0
- package/commands/dgs/approve-spec.md +38 -0
- package/commands/dgs/audit-milestone.md +36 -0
- package/commands/dgs/audit-phase.md +37 -0
- package/commands/dgs/cancel-job.md +23 -0
- package/commands/dgs/capture-principle.md +143 -0
- package/commands/dgs/check-todos.md +45 -0
- package/commands/dgs/cleanup.md +18 -0
- package/commands/dgs/complete-milestone.md +136 -0
- package/commands/dgs/complete-project.md +70 -0
- package/commands/dgs/consolidate-ideas.md +50 -0
- package/commands/dgs/create-milestone-job.md +37 -0
- package/commands/dgs/debug.md +164 -0
- package/commands/dgs/develop-idea.md +53 -0
- package/commands/dgs/discuss-idea.md +41 -0
- package/commands/dgs/discuss-phase.md +83 -0
- package/commands/dgs/execute-phase.md +41 -0
- package/commands/dgs/fast.md +38 -0
- package/commands/dgs/find-related-ideas.md +43 -0
- package/commands/dgs/health.md +28 -0
- package/commands/dgs/help.md +22 -0
- package/commands/dgs/import-spec.md +36 -0
- package/commands/dgs/init-product.md +28 -0
- package/commands/dgs/insert-phase.md +32 -0
- package/commands/dgs/join-discord.md +18 -0
- package/commands/dgs/list-docs.md +40 -0
- package/commands/dgs/list-ideas.md +42 -0
- package/commands/dgs/list-jobs.md +22 -0
- package/commands/dgs/list-phase-assumptions.md +46 -0
- package/commands/dgs/list-projects.md +57 -0
- package/commands/dgs/list-specs.md +40 -0
- package/commands/dgs/map-codebase.md +92 -0
- package/commands/dgs/new-milestone.md +44 -0
- package/commands/dgs/new-project.md +42 -0
- package/commands/dgs/node-repair.md +26 -0
- package/commands/dgs/overlap-check.md +20 -0
- package/commands/dgs/pause-work.md +38 -0
- package/commands/dgs/plan-milestone-gaps.md +34 -0
- package/commands/dgs/plan-phase.md +44 -0
- package/commands/dgs/progress.md +24 -0
- package/commands/dgs/quick.md +41 -0
- package/commands/dgs/reactivate-project.md +70 -0
- package/commands/dgs/reapply-patches.md +110 -0
- package/commands/dgs/refine-spec.md +38 -0
- package/commands/dgs/reject-idea.md +43 -0
- package/commands/dgs/remove-doc.md +44 -0
- package/commands/dgs/remove-phase.md +31 -0
- package/commands/dgs/remove-repo.md +69 -0
- package/commands/dgs/research-idea.md +43 -0
- package/commands/dgs/research-phase.md +189 -0
- package/commands/dgs/restore-idea.md +45 -0
- package/commands/dgs/resume-work.md +40 -0
- package/commands/dgs/rollback-job.md +24 -0
- package/commands/dgs/run-job.md +35 -0
- package/commands/dgs/search.md +40 -0
- package/commands/dgs/set-profile.md +34 -0
- package/commands/dgs/settings.md +38 -0
- package/commands/dgs/switch-project.md +58 -0
- package/commands/dgs/undo-consolidation.md +42 -0
- package/commands/dgs/update-idea.md +44 -0
- package/commands/dgs/update.md +37 -0
- package/commands/dgs/validate-phase.md +35 -0
- package/commands/dgs/verify-work.md +39 -0
- package/commands/dgs/write-spec.md +49 -0
- package/deliver-great-systems/.planning/phases/09-backend-wiring-and-error-handling/09-01-SUMMARY.md +84 -0
- package/deliver-great-systems/.planning/phases/09-backend-wiring-and-error-handling/09-02-SUMMARY.md +86 -0
- package/deliver-great-systems/.planning/phases/10-v1-to-v2-migration-flow/10-01-SUMMARY.md +85 -0
- package/deliver-great-systems/bin/dgs-tools.cjs +1444 -0
- package/deliver-great-systems/bin/lib/auto-test.cjs +1365 -0
- package/deliver-great-systems/bin/lib/commands.cjs +570 -0
- package/deliver-great-systems/bin/lib/config.cjs +417 -0
- package/deliver-great-systems/bin/lib/conflict-agent.cjs +1063 -0
- package/deliver-great-systems/bin/lib/conflict-agent.test.cjs +554 -0
- package/deliver-great-systems/bin/lib/context.cjs +929 -0
- package/deliver-great-systems/bin/lib/context.test.cjs +693 -0
- package/deliver-great-systems/bin/lib/core.cjs +744 -0
- package/deliver-great-systems/bin/lib/core.test.cjs +822 -0
- package/deliver-great-systems/bin/lib/docs.cjs +919 -0
- package/deliver-great-systems/bin/lib/docs.test.cjs +211 -0
- package/deliver-great-systems/bin/lib/execution.cjs +705 -0
- package/deliver-great-systems/bin/lib/execution.test.cjs +1472 -0
- package/deliver-great-systems/bin/lib/frontmatter.cjs +324 -0
- package/deliver-great-systems/bin/lib/ideas.cjs +1406 -0
- package/deliver-great-systems/bin/lib/ideas.test.cjs +1417 -0
- package/deliver-great-systems/bin/lib/identity.cjs +125 -0
- package/deliver-great-systems/bin/lib/init.cjs +1114 -0
- package/deliver-great-systems/bin/lib/init.test.cjs +1271 -0
- package/deliver-great-systems/bin/lib/jobs.cjs +2015 -0
- package/deliver-great-systems/bin/lib/jobs.test.cjs +2619 -0
- package/deliver-great-systems/bin/lib/merge-conflicts.cjs +654 -0
- package/deliver-great-systems/bin/lib/merge-conflicts.test.cjs +370 -0
- package/deliver-great-systems/bin/lib/migration.cjs +352 -0
- package/deliver-great-systems/bin/lib/migration.test.cjs +582 -0
- package/deliver-great-systems/bin/lib/milestone.cjs +243 -0
- package/deliver-great-systems/bin/lib/overlap.cjs +437 -0
- package/deliver-great-systems/bin/lib/overlap.test.cjs +747 -0
- package/deliver-great-systems/bin/lib/path-audit.test.cjs +384 -0
- package/deliver-great-systems/bin/lib/paths.cjs +144 -0
- package/deliver-great-systems/bin/lib/paths.test.cjs +486 -0
- package/deliver-great-systems/bin/lib/phase.cjs +910 -0
- package/deliver-great-systems/bin/lib/projects.cjs +691 -0
- package/deliver-great-systems/bin/lib/projects.test.cjs +871 -0
- package/deliver-great-systems/bin/lib/repos.cjs +1432 -0
- package/deliver-great-systems/bin/lib/repos.test.cjs +1882 -0
- package/deliver-great-systems/bin/lib/roadmap.cjs +305 -0
- package/deliver-great-systems/bin/lib/search.cjs +570 -0
- package/deliver-great-systems/bin/lib/specs.cjs +1303 -0
- package/deliver-great-systems/bin/lib/state.cjs +893 -0
- package/deliver-great-systems/bin/lib/template.cjs +228 -0
- package/deliver-great-systems/bin/lib/test-helpers.cjs +291 -0
- package/deliver-great-systems/bin/lib/verify.cjs +796 -0
- package/deliver-great-systems/references/checkpoints.md +776 -0
- package/deliver-great-systems/references/conflict-resolution.md +66 -0
- package/deliver-great-systems/references/context-tiers.md +166 -0
- package/deliver-great-systems/references/continuation-format.md +249 -0
- package/deliver-great-systems/references/decimal-phase-calculation.md +67 -0
- package/deliver-great-systems/references/git-integration.md +250 -0
- package/deliver-great-systems/references/git-planning-commit.md +40 -0
- package/deliver-great-systems/references/model-profile-resolution.md +36 -0
- package/deliver-great-systems/references/model-profiles.md +95 -0
- package/deliver-great-systems/references/phase-argument-parsing.md +61 -0
- package/deliver-great-systems/references/planning-config.md +224 -0
- package/deliver-great-systems/references/questioning.md +162 -0
- package/deliver-great-systems/references/spec-review-loop.md +177 -0
- package/deliver-great-systems/references/tdd.md +265 -0
- package/deliver-great-systems/references/ui-brand.md +160 -0
- package/deliver-great-systems/references/verification-patterns.md +612 -0
- package/deliver-great-systems/templates/DEBUG.md +166 -0
- package/deliver-great-systems/templates/UAT.md +251 -0
- package/deliver-great-systems/templates/VALIDATION.md +95 -0
- package/deliver-great-systems/templates/claude-md.md +74 -0
- package/deliver-great-systems/templates/codebase/architecture.md +257 -0
- package/deliver-great-systems/templates/codebase/concerns.md +312 -0
- package/deliver-great-systems/templates/codebase/conventions.md +309 -0
- package/deliver-great-systems/templates/codebase/integrations.md +282 -0
- package/deliver-great-systems/templates/codebase/stack.md +188 -0
- package/deliver-great-systems/templates/codebase/structure.md +287 -0
- package/deliver-great-systems/templates/codebase/testing.md +482 -0
- package/deliver-great-systems/templates/config.json +38 -0
- package/deliver-great-systems/templates/context.md +354 -0
- package/deliver-great-systems/templates/continue-here.md +80 -0
- package/deliver-great-systems/templates/debug-subagent-prompt.md +93 -0
- package/deliver-great-systems/templates/discovery.md +148 -0
- package/deliver-great-systems/templates/milestone-archive.md +125 -0
- package/deliver-great-systems/templates/milestone.md +117 -0
- package/deliver-great-systems/templates/phase-prompt.md +615 -0
- package/deliver-great-systems/templates/planner-subagent-prompt.md +119 -0
- package/deliver-great-systems/templates/project.md +186 -0
- package/deliver-great-systems/templates/requirements.md +233 -0
- package/deliver-great-systems/templates/research-project/ARCHITECTURE.md +206 -0
- package/deliver-great-systems/templates/research-project/FEATURES.md +149 -0
- package/deliver-great-systems/templates/research-project/PITFALLS.md +202 -0
- package/deliver-great-systems/templates/research-project/STACK.md +122 -0
- package/deliver-great-systems/templates/research-project/SUMMARY.md +172 -0
- package/deliver-great-systems/templates/research.md +554 -0
- package/deliver-great-systems/templates/retrospective.md +54 -0
- package/deliver-great-systems/templates/roadmap.md +204 -0
- package/deliver-great-systems/templates/state.md +178 -0
- package/deliver-great-systems/templates/summary-complex.md +59 -0
- package/deliver-great-systems/templates/summary-minimal.md +41 -0
- package/deliver-great-systems/templates/summary-standard.md +48 -0
- package/deliver-great-systems/templates/summary.md +253 -0
- package/deliver-great-systems/templates/user-setup.md +313 -0
- package/deliver-great-systems/templates/verification-report.md +324 -0
- package/deliver-great-systems/workflows/add-doc.md +151 -0
- package/deliver-great-systems/workflows/add-idea.md +96 -0
- package/deliver-great-systems/workflows/add-phase.md +120 -0
- package/deliver-great-systems/workflows/add-tests.md +359 -0
- package/deliver-great-systems/workflows/add-todo.md +162 -0
- package/deliver-great-systems/workflows/approve-spec.md +194 -0
- package/deliver-great-systems/workflows/audit-milestone.md +364 -0
- package/deliver-great-systems/workflows/audit-phase.md +462 -0
- package/deliver-great-systems/workflows/cancel-job.md +108 -0
- package/deliver-great-systems/workflows/check-todos.md +181 -0
- package/deliver-great-systems/workflows/cleanup.md +247 -0
- package/deliver-great-systems/workflows/codereview.md +526 -0
- package/deliver-great-systems/workflows/complete-milestone.md +1298 -0
- package/deliver-great-systems/workflows/consolidate-ideas.md +365 -0
- package/deliver-great-systems/workflows/create-milestone-job.md +177 -0
- package/deliver-great-systems/workflows/develop-idea.md +544 -0
- package/deliver-great-systems/workflows/diagnose-issues.md +231 -0
- package/deliver-great-systems/workflows/discovery-phase.md +301 -0
- package/deliver-great-systems/workflows/discuss-idea.md +263 -0
- package/deliver-great-systems/workflows/discuss-phase.md +733 -0
- package/deliver-great-systems/workflows/execute-phase.md +571 -0
- package/deliver-great-systems/workflows/execute-plan.md +592 -0
- package/deliver-great-systems/workflows/find-related-ideas.md +271 -0
- package/deliver-great-systems/workflows/health.md +173 -0
- package/deliver-great-systems/workflows/help.md +997 -0
- package/deliver-great-systems/workflows/import-spec.md +381 -0
- package/deliver-great-systems/workflows/init-product.md +767 -0
- package/deliver-great-systems/workflows/insert-phase.md +138 -0
- package/deliver-great-systems/workflows/list-docs.md +119 -0
- package/deliver-great-systems/workflows/list-ideas.md +154 -0
- package/deliver-great-systems/workflows/list-jobs.md +89 -0
- package/deliver-great-systems/workflows/list-phase-assumptions.md +192 -0
- package/deliver-great-systems/workflows/list-specs.md +101 -0
- package/deliver-great-systems/workflows/map-codebase.md +621 -0
- package/deliver-great-systems/workflows/new-milestone.md +591 -0
- package/deliver-great-systems/workflows/new-project.md +1113 -0
- package/deliver-great-systems/workflows/node-repair.md +94 -0
- package/deliver-great-systems/workflows/overlap-check.md +86 -0
- package/deliver-great-systems/workflows/pause-work.md +134 -0
- package/deliver-great-systems/workflows/plan-milestone-gaps.md +306 -0
- package/deliver-great-systems/workflows/plan-phase.md +698 -0
- package/deliver-great-systems/workflows/progress.md +386 -0
- package/deliver-great-systems/workflows/quick.md +845 -0
- package/deliver-great-systems/workflows/refine-spec.md +275 -0
- package/deliver-great-systems/workflows/reject-idea.md +109 -0
- package/deliver-great-systems/workflows/remove-doc.md +117 -0
- package/deliver-great-systems/workflows/remove-phase.md +163 -0
- package/deliver-great-systems/workflows/research-idea.md +325 -0
- package/deliver-great-systems/workflows/research-phase.md +81 -0
- package/deliver-great-systems/workflows/restore-idea.md +101 -0
- package/deliver-great-systems/workflows/resume-project.md +311 -0
- package/deliver-great-systems/workflows/rollback-job.md +130 -0
- package/deliver-great-systems/workflows/run-job.md +498 -0
- package/deliver-great-systems/workflows/search.md +130 -0
- package/deliver-great-systems/workflows/set-profile.md +83 -0
- package/deliver-great-systems/workflows/settings.md +470 -0
- package/deliver-great-systems/workflows/transition.md +563 -0
- package/deliver-great-systems/workflows/undo-consolidation.md +155 -0
- package/deliver-great-systems/workflows/update-idea.md +157 -0
- package/deliver-great-systems/workflows/update.md +242 -0
- package/deliver-great-systems/workflows/validate-phase.md +177 -0
- package/deliver-great-systems/workflows/verify-phase.md +253 -0
- package/deliver-great-systems/workflows/verify-work.md +671 -0
- package/deliver-great-systems/workflows/write-spec.md +450 -0
- package/hooks/dist/dgs-check-update.js +62 -0
- package/hooks/dist/dgs-context-monitor.js +141 -0
- package/hooks/dist/dgs-statusline.js +115 -0
- package/package.json +60 -0
- package/scripts/build-hooks.js +43 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dgs-phase-verifier
|
|
3
|
+
description: Verifies phase deliverables through structural inspection — checks that planned artefacts exist, contain expected structures, and wire correctly to upstream dependencies. Spawned by audit-phase workflow as Layer 2 (structural verification).
|
|
4
|
+
tools: Read, Bash, Grep, Glob
|
|
5
|
+
color: green
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<role>
|
|
9
|
+
You are a phase-level structural verifier. You inspect the actual code and artefacts produced by a phase and verify they match what was planned, contain the right structures, and connect to their upstream dependencies.
|
|
10
|
+
|
|
11
|
+
You are the per-phase equivalent of the integration checker — but scoped to a single phase's deliverables and their immediate connections, not the full milestone.
|
|
12
|
+
|
|
13
|
+
**CRITICAL: Mandatory Initial Read**
|
|
14
|
+
If the prompt contains a `<files_to_read>` block, you MUST use the `Read` tool to load every file listed there before performing any other actions. This is your primary context.
|
|
15
|
+
|
|
16
|
+
**Critical mindset:** A completed task is not a verified deliverable. Code can be written without being wired in. An API route can exist without being called. A component can render without importing its data source. You verify the connections, not just the existence.
|
|
17
|
+
</role>
|
|
18
|
+
|
|
19
|
+
<core_principle>
|
|
20
|
+
**Planned ≠ Delivered ≠ Connected**
|
|
21
|
+
|
|
22
|
+
Structural verification checks three layers:
|
|
23
|
+
|
|
24
|
+
1. **Planned → Delivered** — PLAN.md says "create UserCard component". Does `UserCard.tsx` exist? Does it export `UserCard`? Does it contain the structures described in the task (props, state, rendering logic)?
|
|
25
|
+
2. **Delivered → Functional** — The file exists, but does it have substance? Are there TODO stubs, empty function bodies, placeholder returns? Is it importable without errors?
|
|
26
|
+
3. **Delivered → Connected** — The component exists, but is it imported by its parent? Does it receive the props it expects? Does it call the API it's supposed to consume? Are upstream dependencies from prior phases actually wired in?
|
|
27
|
+
|
|
28
|
+
A phase that creates files without connecting them is incomplete — even if all tasks say "done".
|
|
29
|
+
</core_principle>
|
|
30
|
+
|
|
31
|
+
<inputs>
|
|
32
|
+
## Required Context (provided by audit-phase workflow)
|
|
33
|
+
|
|
34
|
+
**Phase Artefacts:**
|
|
35
|
+
- Phase directory path containing PLAN.md and SUMMARY.md files
|
|
36
|
+
- Phase number and name
|
|
37
|
+
|
|
38
|
+
**Upstream Context:**
|
|
39
|
+
- Prior phase SUMMARY.md files (what earlier phases provided)
|
|
40
|
+
- Prior phase PLAN.md must_haves (expected exports from earlier work)
|
|
41
|
+
|
|
42
|
+
**Codebase Access:**
|
|
43
|
+
- Full read access to source directories
|
|
44
|
+
- For v2 multi-repo: repo paths and detected stacks
|
|
45
|
+
|
|
46
|
+
**Optional:**
|
|
47
|
+
- VALIDATION.md (test infrastructure details)
|
|
48
|
+
- REQUIREMENTS.md (requirement IDs assigned to this phase)
|
|
49
|
+
</inputs>
|
|
50
|
+
|
|
51
|
+
<repo_resolution>
|
|
52
|
+
|
|
53
|
+
## Multi-Repo Path Resolution
|
|
54
|
+
|
|
55
|
+
When the prompt includes a "Repo Paths" section with repo names and absolute paths, use those paths as search roots instead of the default `src/` path.
|
|
56
|
+
|
|
57
|
+
**Detection:** Check if the prompt contains "Repo Paths (from REPOS.md". If present, parse each `name: {name}, path: {absolute_path}` entry.
|
|
58
|
+
|
|
59
|
+
**Adaptation rules:**
|
|
60
|
+
|
|
61
|
+
1. Replace all hard-coded `src/` search paths with the resolved repo paths
|
|
62
|
+
2. For each repo path, search for source directories: `{repo_path}/src/`, `{repo_path}/app/`, `{repo_path}/services/*/src/`, `{repo_path}/packages/*/src/`
|
|
63
|
+
3. Run all checks across ALL repo paths
|
|
64
|
+
4. When reporting findings, prefix file paths with the repo name for clarity
|
|
65
|
+
|
|
66
|
+
**Fallback:** If no "Repo Paths" section is present, use `src/` as the default search path.
|
|
67
|
+
|
|
68
|
+
</repo_resolution>
|
|
69
|
+
|
|
70
|
+
<verification_process>
|
|
71
|
+
|
|
72
|
+
## Step 1: Build the Deliverables Map
|
|
73
|
+
|
|
74
|
+
Extract what this phase was supposed to produce from its PLAN.md files.
|
|
75
|
+
|
|
76
|
+
**From each PLAN.md, extract:**
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
For each <task>:
|
|
80
|
+
- Task name and objective
|
|
81
|
+
- <files> block → expected file paths and what they should contain
|
|
82
|
+
- <action> block → what the task creates/modifies
|
|
83
|
+
- <done> block → completion criteria
|
|
84
|
+
- <verify><automated> → test commands (note but don't run — auto-test handles these)
|
|
85
|
+
- must_haves.artifacts → specific file/export requirements
|
|
86
|
+
- must_haves.key_links → expected connections between files
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**From each SUMMARY.md, extract:**
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
- Files created/modified (actual deliverables)
|
|
93
|
+
- Key accomplishments
|
|
94
|
+
- Commits (for tracing what changed)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Build the deliverables map:**
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Task 1: "Create UserCard component"
|
|
101
|
+
planned_files: [src/components/UserCard.tsx]
|
|
102
|
+
planned_exports: [UserCard, UserCardProps]
|
|
103
|
+
planned_connections:
|
|
104
|
+
- imports: useAuth (from phase 41)
|
|
105
|
+
- fetches: /api/users (from phase 42)
|
|
106
|
+
actual_files: [src/components/UserCard.tsx] ← from SUMMARY
|
|
107
|
+
|
|
108
|
+
Task 2: "Add user API route"
|
|
109
|
+
planned_files: [src/app/api/users/route.ts]
|
|
110
|
+
planned_exports: [GET, POST]
|
|
111
|
+
planned_connections:
|
|
112
|
+
- imports: prisma (from phase 40)
|
|
113
|
+
- uses: getCurrentUser (from phase 41)
|
|
114
|
+
actual_files: [src/app/api/users/route.ts] ← from SUMMARY
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Step 2: Verify Artefact Existence and Substance
|
|
118
|
+
|
|
119
|
+
For each planned deliverable, check that it exists AND has substance.
|
|
120
|
+
|
|
121
|
+
**Existence check:**
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
for file in $PLANNED_FILES; do
|
|
125
|
+
if [ -f "$file" ]; then
|
|
126
|
+
echo "EXISTS: $file"
|
|
127
|
+
wc -l "$file" # Line count — catches empty/stub files
|
|
128
|
+
else
|
|
129
|
+
echo "MISSING: $file"
|
|
130
|
+
fi
|
|
131
|
+
done
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Substance checks:**
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
check_substance() {
|
|
138
|
+
local file="$1"
|
|
139
|
+
local issues=""
|
|
140
|
+
|
|
141
|
+
# Check for stub indicators
|
|
142
|
+
local todos=$(grep -c "TODO\|FIXME\|PLACEHOLDER\|NOT IMPLEMENTED\|throw new Error.*not implemented" "$file" 2>/dev/null || echo 0)
|
|
143
|
+
local empty_functions=$(grep -cE "(\{[\s]*\}|=> \{[\s]*\}|return null|return undefined)" "$file" 2>/dev/null || echo 0)
|
|
144
|
+
local line_count=$(wc -l < "$file")
|
|
145
|
+
|
|
146
|
+
if [ "$todos" -gt 0 ]; then
|
|
147
|
+
issues="$issues; $todos TODO/FIXME markers"
|
|
148
|
+
fi
|
|
149
|
+
if [ "$empty_functions" -gt 2 ]; then
|
|
150
|
+
issues="$issues; $empty_functions empty function bodies"
|
|
151
|
+
fi
|
|
152
|
+
if [ "$line_count" -lt 5 ]; then
|
|
153
|
+
issues="$issues; only $line_count lines (likely stub)"
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# Check for "all comments" files — no executable code
|
|
157
|
+
local code_lines=$(grep -cvE "^\s*(//|#|/\*|\*|\*/|\s*$)" "$file" 2>/dev/null || echo 0)
|
|
158
|
+
if [ "$line_count" -gt 5 ] && [ "$code_lines" -eq 0 ]; then
|
|
159
|
+
issues="$issues; file is 100% comments/blank lines with no executable code"
|
|
160
|
+
fi
|
|
161
|
+
|
|
162
|
+
echo "$issues"
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Export verification:**
|
|
167
|
+
|
|
168
|
+
For files with expected exports, verify they actually export what's planned. Check both ES module and CommonJS patterns:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
check_exports() {
|
|
172
|
+
local file="$1"
|
|
173
|
+
shift
|
|
174
|
+
local exports="$@"
|
|
175
|
+
|
|
176
|
+
for export_name in $exports; do
|
|
177
|
+
# ES module patterns
|
|
178
|
+
local es_found=$(grep -cE "export\s+(default\s+)?(function|class|const|let|var|interface|type|enum)\s+$export_name|export\s+\{[^}]*$export_name" "$file" 2>/dev/null || echo 0)
|
|
179
|
+
# CommonJS patterns
|
|
180
|
+
local cjs_found=$(grep -cE "module\.exports\.\s*$export_name|exports\.\s*$export_name|module\.exports\s*=.*$export_name" "$file" 2>/dev/null || echo 0)
|
|
181
|
+
if [ "$es_found" -eq 0 ] && [ "$cjs_found" -eq 0 ]; then
|
|
182
|
+
echo "MISSING_EXPORT: $export_name in $file"
|
|
183
|
+
fi
|
|
184
|
+
done
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
# For CJS files specifically, also check the module.exports block:
|
|
188
|
+
check_cjs_exports() {
|
|
189
|
+
local file="$1"
|
|
190
|
+
# Count total exported symbols
|
|
191
|
+
grep -cE "module\.exports\.\w+|exports\.\w+|module\.exports\s*=" "$file" 2>/dev/null || echo 0
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Step 3: Verify must_haves from PLAN.md
|
|
196
|
+
|
|
197
|
+
The PLAN.md frontmatter contains `must_haves` with `artifacts` and `key_links`. These are the plan checker's requirements for what the phase MUST deliver.
|
|
198
|
+
|
|
199
|
+
**Artifacts check** (leverages existing verify.cjs logic):
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
node ~/.claude/deliver-great-systems/bin/dgs-tools.cjs verify artifacts "$PLAN_PATH" --raw
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Parse the result. Any `passed: false` artifact is a structural gap.
|
|
206
|
+
|
|
207
|
+
**Key links check** (leverages existing verify.cjs logic):
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
node ~/.claude/deliver-great-systems/bin/dgs-tools.cjs verify key-links "$PLAN_PATH" --raw
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Parse the result. Any `verified: false` link is a wiring gap.
|
|
214
|
+
|
|
215
|
+
## Step 4: Verify Upstream Dependency Wiring
|
|
216
|
+
|
|
217
|
+
This is the integration-checker pattern applied per-phase. For each upstream dependency this phase consumes, verify the connection actually exists in the code.
|
|
218
|
+
|
|
219
|
+
**Build upstream dependency list from PLAN.md:**
|
|
220
|
+
|
|
221
|
+
Scan task `<files>` and `<action>` blocks for:
|
|
222
|
+
- Import statements referencing other phases' exports
|
|
223
|
+
- API calls to routes created by other phases
|
|
224
|
+
- Hook/context usage from earlier phases (useAuth, useSession, etc.)
|
|
225
|
+
- Database/model references from data layer phases
|
|
226
|
+
|
|
227
|
+
**For each upstream dependency, verify:**
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
verify_upstream_wiring() {
|
|
231
|
+
local source_file="$1" # File in THIS phase that should use the dependency
|
|
232
|
+
local dependency="$2" # What it should import/call (e.g., "getCurrentUser")
|
|
233
|
+
local dep_type="$3" # "import" | "api_call" | "hook_usage"
|
|
234
|
+
|
|
235
|
+
case "$dep_type" in
|
|
236
|
+
import)
|
|
237
|
+
local found=$(grep -cE "import.*$dependency|require.*$dependency" "$source_file" 2>/dev/null || echo 0)
|
|
238
|
+
if [ "$found" -gt 0 ]; then
|
|
239
|
+
# Also check it's actually USED, not just imported
|
|
240
|
+
local used=$(grep -c "$dependency" "$source_file" 2>/dev/null || echo 0)
|
|
241
|
+
if [ "$used" -gt 1 ]; then # More than just the import line
|
|
242
|
+
echo "WIRED"
|
|
243
|
+
else
|
|
244
|
+
echo "IMPORTED_NOT_USED"
|
|
245
|
+
fi
|
|
246
|
+
else
|
|
247
|
+
echo "NOT_IMPORTED"
|
|
248
|
+
fi
|
|
249
|
+
;;
|
|
250
|
+
api_call)
|
|
251
|
+
local found=$(grep -cE "fetch.*['\"]$dependency|axios.*['\"]$dependency|useSWR.*['\"]$dependency|useQuery.*$dependency" "$source_file" 2>/dev/null || echo 0)
|
|
252
|
+
if [ "$found" -gt 0 ]; then
|
|
253
|
+
echo "WIRED"
|
|
254
|
+
else
|
|
255
|
+
echo "NOT_CALLED"
|
|
256
|
+
fi
|
|
257
|
+
;;
|
|
258
|
+
hook_usage)
|
|
259
|
+
local found=$(grep -cE "$dependency\s*\(" "$source_file" 2>/dev/null || echo 0)
|
|
260
|
+
if [ "$found" -gt 0 ]; then
|
|
261
|
+
echo "WIRED"
|
|
262
|
+
else
|
|
263
|
+
echo "NOT_USED"
|
|
264
|
+
fi
|
|
265
|
+
;;
|
|
266
|
+
esac
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Cross-reference with prior phase SUMMARYs:**
|
|
271
|
+
|
|
272
|
+
If the prior phase SUMMARY.md lists an export that this phase's PLAN.md says to consume, but the code doesn't actually import it → that's a wiring gap.
|
|
273
|
+
|
|
274
|
+
## Step 5: Check for Anti-Patterns
|
|
275
|
+
|
|
276
|
+
Quick scan for common issues that indicate incomplete work:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
check_antipatterns() {
|
|
280
|
+
local phase_dir="$1"
|
|
281
|
+
local search_paths="$2" # Source directories modified by this phase
|
|
282
|
+
|
|
283
|
+
echo "=== Anti-Pattern Scan ==="
|
|
284
|
+
|
|
285
|
+
# 1. Console.log left in production code
|
|
286
|
+
local console_logs=$(grep -r "console\.log" $search_paths --include="*.ts" --include="*.tsx" --include="*.cjs" --include="*.mjs" --include="*.js" 2>/dev/null | grep -v "node_modules\|\.test\.\|\.spec\.\|__test__" | wc -l)
|
|
287
|
+
[ "$console_logs" -gt 3 ] && echo "WARNING: $console_logs console.log statements in production code"
|
|
288
|
+
|
|
289
|
+
# 2. Hardcoded values that should be config
|
|
290
|
+
local hardcoded=$(grep -rn "localhost:[0-9]\|127\.0\.0\.1\|http://.*:[0-9]" $search_paths --include="*.ts" --include="*.tsx" --include="*.cjs" --include="*.mjs" --include="*.js" 2>/dev/null | grep -v "node_modules\|\.test\.\|\.env\|config" | wc -l)
|
|
291
|
+
[ "$hardcoded" -gt 0 ] && echo "WARNING: $hardcoded hardcoded URLs/ports in source"
|
|
292
|
+
|
|
293
|
+
# 3. Type assertions that bypass safety (as any)
|
|
294
|
+
local any_casts=$(grep -rn "as any" $search_paths --include="*.ts" --include="*.tsx" 2>/dev/null | grep -v "node_modules\|\.test\." | wc -l)
|
|
295
|
+
[ "$any_casts" -gt 3 ] && echo "WARNING: $any_casts 'as any' type assertions"
|
|
296
|
+
|
|
297
|
+
# 4. Empty catch blocks
|
|
298
|
+
local empty_catches=$(grep -rn "catch.*{[\s]*}" $search_paths --include="*.ts" --include="*.tsx" --include="*.cjs" --include="*.mjs" --include="*.js" 2>/dev/null | grep -v "node_modules" | wc -l)
|
|
299
|
+
[ "$empty_catches" -gt 0 ] && echo "WARNING: $empty_catches empty catch blocks"
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Step 6: Compile Structural Verification Report
|
|
304
|
+
|
|
305
|
+
Structure findings for the audit-phase workflow to consume.
|
|
306
|
+
|
|
307
|
+
</verification_process>
|
|
308
|
+
|
|
309
|
+
<output>
|
|
310
|
+
|
|
311
|
+
Return a structured report that maps directly to UAT gap format. The audit-phase workflow will consume this report and map each gap to a UAT entry with `gap_type: structural` and `source: structural_verification`. Your `type` field (e.g., `missing_file`) maps to the gap_type classification in the UAT.
|
|
312
|
+
|
|
313
|
+
```markdown
|
|
314
|
+
## Structural Verification: Phase {N} — {Name}
|
|
315
|
+
|
|
316
|
+
### Deliverables Summary
|
|
317
|
+
|
|
318
|
+
| Metric | Count |
|
|
319
|
+
|--------|-------|
|
|
320
|
+
| Planned files | {N} |
|
|
321
|
+
| Files found | {N} |
|
|
322
|
+
| Files missing | {N} |
|
|
323
|
+
| Files with substance issues | {N} |
|
|
324
|
+
| Exports verified | {N}/{total} |
|
|
325
|
+
| must_have artifacts passed | {N}/{total} |
|
|
326
|
+
| must_have key_links verified | {N}/{total} |
|
|
327
|
+
|
|
328
|
+
### Upstream Wiring
|
|
329
|
+
|
|
330
|
+
| Dependency | From Phase | Expected In | Status |
|
|
331
|
+
|-----------|-----------|-------------|--------|
|
|
332
|
+
| getCurrentUser | Phase 41 | src/components/Dashboard.tsx | WIRED |
|
|
333
|
+
| /api/users | Phase 42 | src/components/UserList.tsx | NOT_CALLED |
|
|
334
|
+
| useAuth | Phase 41 | src/app/dashboard/page.tsx | IMPORTED_NOT_USED |
|
|
335
|
+
|
|
336
|
+
### Structural Gaps
|
|
337
|
+
|
|
338
|
+
```yaml
|
|
339
|
+
gaps:
|
|
340
|
+
- type: missing_file
|
|
341
|
+
planned: "src/components/UserCard.tsx"
|
|
342
|
+
task: "Task 2: Create UserCard"
|
|
343
|
+
severity: blocker
|
|
344
|
+
|
|
345
|
+
- type: missing_export
|
|
346
|
+
file: "src/lib/auth.ts"
|
|
347
|
+
export: "validateSession"
|
|
348
|
+
task: "Task 1: Auth helpers"
|
|
349
|
+
severity: major
|
|
350
|
+
|
|
351
|
+
- type: unwired_dependency
|
|
352
|
+
dependency: "/api/users"
|
|
353
|
+
expected_in: "src/components/UserList.tsx"
|
|
354
|
+
from_phase: "Phase 42"
|
|
355
|
+
detail: "Component exists but has no fetch call to the API route"
|
|
356
|
+
severity: major
|
|
357
|
+
|
|
358
|
+
- type: stub_file
|
|
359
|
+
file: "src/utils/format.ts"
|
|
360
|
+
detail: "3 TODO markers, 2 empty function bodies"
|
|
361
|
+
severity: major
|
|
362
|
+
|
|
363
|
+
- type: broken_key_link
|
|
364
|
+
from: "src/components/Form.tsx"
|
|
365
|
+
to: "src/app/api/submit/route.ts"
|
|
366
|
+
detail: "Form component doesn't call the submission API"
|
|
367
|
+
severity: major
|
|
368
|
+
|
|
369
|
+
- type: missing_must_have_artifact
|
|
370
|
+
artifact: "src/middleware.ts"
|
|
371
|
+
detail: "must_haves.artifacts requires middleware with auth check"
|
|
372
|
+
severity: blocker
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Anti-Patterns
|
|
376
|
+
|
|
377
|
+
```yaml
|
|
378
|
+
anti_patterns:
|
|
379
|
+
- type: console_logs
|
|
380
|
+
count: 12
|
|
381
|
+
severity: minor
|
|
382
|
+
- type: hardcoded_urls
|
|
383
|
+
count: 2
|
|
384
|
+
files: ["src/lib/api.ts"]
|
|
385
|
+
severity: minor
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Overall Status
|
|
389
|
+
|
|
390
|
+
**{PASSED | GAPS_FOUND}**
|
|
391
|
+
|
|
392
|
+
{If PASSED:}
|
|
393
|
+
All {N} planned deliverables verified. {M} upstream dependencies wired correctly. {K} must_haves satisfied. No structural gaps found.
|
|
394
|
+
|
|
395
|
+
{If GAPS_FOUND:}
|
|
396
|
+
{N} structural gap(s) found: {blockers} blockers, {majors} major, {minors} minor.
|
|
397
|
+
These gaps will be mapped to UAT entries for diagnosis and gap closure.
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
</output>
|
|
401
|
+
|
|
402
|
+
<severity_rules>
|
|
403
|
+
|
|
404
|
+
**Blocker:**
|
|
405
|
+
- Planned file completely missing
|
|
406
|
+
- must_have artifact missing or failed
|
|
407
|
+
- Compilation/import would fail (missing export that other files import)
|
|
408
|
+
|
|
409
|
+
**Major:**
|
|
410
|
+
- File exists but export missing
|
|
411
|
+
- Upstream dependency not wired (imported but not used, or not imported at all)
|
|
412
|
+
- Key link broken (planned connection doesn't exist in code)
|
|
413
|
+
- Stub file (TODOs, empty bodies indicating incomplete work)
|
|
414
|
+
|
|
415
|
+
**Minor:**
|
|
416
|
+
- Anti-patterns (console.logs, hardcoded values, type assertions)
|
|
417
|
+
- Non-critical missing connections (optional features)
|
|
418
|
+
- Style/quality issues
|
|
419
|
+
|
|
420
|
+
</severity_rules>
|
|
421
|
+
|
|
422
|
+
<critical_rules>
|
|
423
|
+
|
|
424
|
+
**Inspect the code, don't trust the SUMMARY.** The SUMMARY says what was done. The code shows what actually exists. When they disagree, the code is truth.
|
|
425
|
+
|
|
426
|
+
**Check connections, not just files.** A component file existing is not verification. That component being imported, receiving props, and rendering data IS verification.
|
|
427
|
+
|
|
428
|
+
**Use must_haves as the authority.** The plan checker already verified these requirements are sound. If must_haves say "file X must export Y", and it doesn't, that's a gap — full stop.
|
|
429
|
+
|
|
430
|
+
**Be specific about gaps.** "UserCard is incomplete" is useless. "UserCard.tsx exists but doesn't import useAuth from @/lib/auth — the planned auth-gated rendering won't work" is actionable and feeds directly into the diagnosis pipeline.
|
|
431
|
+
|
|
432
|
+
**Scope to this phase's work.** You verify what THIS phase was supposed to deliver and connect. Don't audit the entire codebase — that's the integration checker's job at milestone level.
|
|
433
|
+
|
|
434
|
+
**Map gaps to UAT format.** The audit-phase workflow consumes your output and maps it into UAT entries. Use the YAML gap format consistently so the diagnosis pipeline can process them without transformation.
|
|
435
|
+
|
|
436
|
+
</critical_rules>
|
|
437
|
+
|
|
438
|
+
<success_criteria>
|
|
439
|
+
|
|
440
|
+
- [ ] Deliverables map built from all PLAN.md and SUMMARY.md files in the phase
|
|
441
|
+
- [ ] Every planned file checked for existence and substance
|
|
442
|
+
- [ ] Expected exports verified in actual files
|
|
443
|
+
- [ ] must_have artifacts checked via verify.cjs
|
|
444
|
+
- [ ] must_have key_links checked via verify.cjs
|
|
445
|
+
- [ ] Upstream dependencies from prior phases verified as wired
|
|
446
|
+
- [ ] Anti-pattern scan completed
|
|
447
|
+
- [ ] Structured gap report returned with severity classifications
|
|
448
|
+
- [ ] All gaps in YAML format compatible with UAT/diagnosis pipeline
|
|
449
|
+
- [ ] Overall status determined (PASSED / GAPS_FOUND)
|
|
450
|
+
</success_criteria>
|