Help us improve
Share bugs, ideas, or general feedback.
From dpf-platform
Verifies log-suggested causes by querying live DB, status fields, and runtime state before reporting findings. Prevents accepting log claims without evidence.
npx claudepluginhub opendigitalproductfactory/opendigitalproductfactory --plugin dpf-platformHow this skill is triggered — by the user, by Claude, or both
Slash command
/dpf-platform:dpf-evidence-before-diagnosisThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
A log line says "X failed because Y." The agent reads it and reports "Y is the problem." **Stop.** Before naming Y as the cause, query the live state — DB row, status field, runtime ledger, tool return value — that would either confirm or refute the log's suggested cause. Logs are written by code that itself can be wrong; their suggested causes are hypotheses, not findings.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Explores codebases via GitNexus: discover repos, query execution flows, trace processes, inspect symbol callers/callees, and review architecture.
Share bugs, ideas, or general feedback.
A log line says "X failed because Y." The agent reads it and reports "Y is the problem." Stop. Before naming Y as the cause, query the live state — DB row, status field, runtime ledger, tool return value — that would either confirm or refute the log's suggested cause. Logs are written by code that itself can be wrong; their suggested causes are hypotheses, not findings.
This skill is the DPF-specific operationalization of the evidence-before-diagnosis and structural-verification-is-not-functional commandments. It composes with superpowers:systematic-debugging as the evidence-gathering step that comes before hypothesis testing.
superpowers:systematic-debugging territory.| Source | Path / tool | What to extract |
|---|---|---|
| Tool return values | The MCP / shell call that produced the suspicious output | Per check-tool-signals-first — the tool's structured return is the primary signal, not the log line that mentions it |
| Live DB state | mcp__dpf__get_backlog_item, mcp__dpf__get_build_progress_visibility, direct psql if needed | The current row state for any BI / FeatureBuild / SkillDefinition the symptom touches |
| Runtime ledger | mcp__dpf__list_build_activity_since, mcp__dpf__get_build_dispatch_history | Time-ordered evidence — when did the symptom start, what preceded it |
| Sandbox state | mcp__dpf__get_build_sandbox_state, mcp__dpf__diagnose_sandbox | Build sandbox health — disk, processes, recent stderr |
| Tool-trace logs | [tool-trace] log entries (per project_tool_trace_logging) | Durable trace; read before speculating about stuck agents |
| Code path | The function that wrote the log line | What conditions actually trigger this log emission |
kernel/principles/evidence-before-diagnosis — this skill IS that principle, operationalized.kernel/principles/structural-verification-is-not-functional — code-in-bundle, tests-pass, 4xx-on-malformed-input do NOT prove the feature works.kernel/principles/check-tool-signals-first — don't blame the model; check tool return values.kernel/principles/never-fabricate — ground every causal claim in code, spec, or DB state.State the symptom precisely. Quote the exact log line, error message, or operator observation. Imprecise symptoms beget imprecise diagnoses.
Check tool signals first. If the symptom came from a tool call, look at the structured return — success, error, message, data — not just the prose log emitted around it. Per feedback_check_tool_signals and project_proposal_trap_silent_failure, the most common diagnosis failure is reading the chat message and missing the structured success: true | false field that contradicts it.
Query live state for the suggested cause. If the log says "X failed because Y is null," go check whether Y is actually null in the DB or the status field. If the log says "build stuck on phase Z," query get_build_progress_visibility to see what phase the build is actually in. Verify the cause before naming it.
Look for a counter-example. Search for a recent case where the symptom occurred and the named cause was NOT present — that disproves the cause. If you find one, the log is misleading and the real cause is elsewhere.
Distinguish structural from functional verification. Per structural-verification-is-not-functional:
Write the diagnosis as a structured report, not screenshots (per feedback_dynamic_analysis_is_evidence). Structure: drove X, observed Y, signed off Z.
Surface to operator for ratification before mutating anything. Diagnoses can be wrong even when they're well-grounded.
**Diagnosis (evidence-grounded).**
- Symptom: <exact quote>
- Tool signal: <structured return — success/error/data — or "n/a, not from a tool">
- Live-state query: <what was queried, what was found>
- Counter-example search: <none found, OR named case where cause was absent>
- Verification mode: <structural | functional (drove X, observed Y)>
- Cause (high confidence | hypothesis): <one sentence>
- Recommended action: <fix-target | escalate | further investigation needed>
If verification mode is structural and the symptom is "X is complete / fixed / working," explicitly say:
WARNING: structural verification only. The feature has not been driven functionally.
Per the structural-verification-is-not-functional commandment, this does NOT prove the
feature works. Recommend a functional verification pass before claiming complete.
project_proposal_trap_silent_failure and project_hive_contribution_gaps, success messages have been wrong frequently enough that verification IS the default, not the exception.During the BI-3C1A6451 (semantic-fallback fix) build gate, the full vitest run reported Test Files 2 failed | 946 passed. The two failing tests were lib/mcp-tools-backlog.test.ts:75 and lib/mcp-tools-sandbox-admin.test.ts:90. The naïve diagnosis would have been: "my change broke these tests." This skill caught the trap:
Error: Test timed out in 5000ms at line const { PLATFORM_TOOLS } = await import("./mcp-tools");.await import("./mcp-tools") line — same shape, same place.case block, not at module-import time. Module-import-time code path was untouched.--testTimeout=30000 from apps/web cwd: 25/25 pass in 1.47s. Same module import, more time → pass.Had this skill been skipped, the diagnosis "my change broke these tests" would have been wrong, the fix would have been blocked or rolled back, and the real issue (test-runner default config) would have stayed buried.
structural-verification-is-not-functionalevidence-before-diagnosischeck-tool-signals-firstsuperpowers:systematic-debugging (4-phase root cause process)feedback_dynamic_analysis_is_evidence (dynamic-analysis output discipline)project_proposal_trap_silent_failure (success-message mistrust)project_tool_trace_logging ([tool-trace] log entries to read first)