Skip to content
Agentmart
Submit a tool

dpf-systematic-debugging

Use when a DPF symptom needs a root cause — a failing build, a wedged runtime, a stuck job, wrong output.

Skill by OpenDigitalProductFactory

IndexedApache-2.0★ 15
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/opendigitalproductfactory-dpf-systematic-debugging

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when a DPF symptom needs a root cause — a failing build, a wedged runtime, a stuck job, wrong output.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/dpf-systematic-debugging

Tools it pre-approves 8

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Bash
  • Grep
  • Glob
  • mcp__dpf__search_code_graph
  • mcp__dpf__get_build_progress_visibility
  • mcp__dpf__get_build_sandbox_state
  • mcp__dpf__diagnose_sandbox
  • mcp__dpf__list_work_capsules

What's inside

Skill name
dpf-systematic-debugging
Description
Use when a DPF symptom needs a root cause — a failing build, a wedged runtime, a stuck job, wrong output.
License
Apache-2.0
Allowed tools
Bash, Grep, Glob, mcp__dpf__search_code_graph, mcp__dpf__get_build_progress_visibility, mcp__dpf__get_build_sandbox_state, mcp__dpf__diagnose_sandbox, mcp__dpf__list_work_capsules
Instructions
63 lines in SKILL.md · view on GitHub

Before installing

  • Pre-approves any shell command

Files (2)

  • SKILL.md
  • recovery-routing.md · references/

SKILL.md (first lines)

# DPF Systematic Debugging

Hypothesis-and-isolate is assumed, not taught. In DPF the failure modes are substrate- and concurrency-shaped rather than logic-shaped, so the generic loop misleads more often than it helps. What follows is only the DPF-specific gating.

## Route platform or gate failures first

For a broken upgrade, unavailable MCP/portal/CI, permission denial or occupied break-fix lane, read [recovery routing](references/recovery-routing.md) before the normal steps below. A recovery route preserves authorization and reports unrun gates honestly. Ordinary queue contention still waits.

## When to use

- A build, job, or runtime is failing, stuck, or wedged and you need the root cause.
- Output is wrong and you are about to name a cause.
- A shared resource (portal, sandbox, queue, DB) appears "broken."

Skip it when you already have verified evidence of the cause, or when the "cause" is hypothetical with no observed symptom.

## Gate 1 — Live evidence before any hypothesis

**Hard gate: [`dpf-evidence-before-diagnosis`](../dpf-evidence-before-diagnosis/SKILL.md).** A log line saying "X failed because Y" is a hypothesis written by code that can itself be wrong — not a finding. Query the live state that would confirm or refute it:

- Live Postgres rows (`docker exec dpf-postgres-1 psql -U dpf -d dpf -c "…"`) — the actual record, not the log's claim about it.
- MCP status/tool signals (`tools/list`, build and sandbox status tools) — `check-tool-signals-first`.
- Container logs (`docker logs <svc>`), plus the relevant status route or run table (`QuiescenceRun`, `SelfUpgradeRun`, `FeatureBuild.buildExecState`).
- `get_build_sandbox_state`, `diagnose_sandbox`.
- `~/.dpf/install-state.json` and the deployed build identity when the symptom is install- or version-shaped.

Write down observed facts — numbers, timestamps, statuses — separately from any suggested cause.

> **Substrate anchor:** runtime-bound reproduction (running a service, testing against a live DB, exercising a build flow) belongs in the shared local-CI convergence sandbox, not a worktree. Kernel principle `worktree-is-source-control-not-runtime`; [AGENTS.md §3](../../../../AGENTS.md).

## Gate 2 — Concurrency and substrate, before declaring it broken

1. **Peer-session check (`propose-acknowledge-reassign`).** Before concluding a shared substrate is broken, check whether another session, worktree, or agent is already on it: `list_work_capsules`, `git log` for very recent commits, running build/compose processes, other worktrees. A peer may have the fix in flight, and re-fixing collides.
2. **Substrate verification ([`dpf-verify-substrate-first`](../dpf-verify-substrate-first/SKILL.md)).** Before "the component is missing," sweep `search_code_graph` plus a main-branch check. It usually exists; the wiring or the version is what is off.

## Gate 3 — Fix, then verify functionally

**Hard gate: `structural-verification-is-not-functional`.** A fix that compiles, type-checks, or lints is **not verified**. The symptom is fixed when the running thing behaves: the build goes green, the job completes, the row reaches the expected status, the endpoint returns the right value. A green typecheck on a wedged runtime is not a fix.

## Worked example (2026-05-30 — stuck quiescence drain)

The portal refused all MCP writes with `portal_quiescing`. Tempting diagnosis: "the quiescence logic is broken, go fix it."

- **Gate 1:** `QuiescenceRun` showed `status=draining`, `enteredStateAt.draining` 11+ minutes against a `budgetMs` of 300000, and `lastHeartbeatAt=null`. Observed fact: the coordinator never ran a single drain-tick. That refuted "logic bug in the wait loop" and pointed at "the coordinator never resumed."
- **Gate 2:** `ps` and `git log` showed a peer session had **already committed the fix** (`bcaa30a8`) and was rebuilding. Re-fixing would have collided in the shared tree.
- **Gate 3:** recovery was not "the code compiles" — it was the portal restarting on the fixed image and `quiescence-state` returning `level: normal` with MCP accepting a write.

Without gates 1 and 2, the obvious-but-wrong move — rewriting the quiescence logic — would have wasted effort and stepped on a peer.

## Guardrails

- **Never adopt a log's suggested cause as a finding.** Confirm against live state.
- **Never declare shared substrate broken without the peer check.**
- **Never report "fixed" on a structural pass.** Functional evidence or it is not fixed.
- **Keep observed facts separate from inferred causes** in notes and in the report.

## See also

- Predecessor gate: [`dpf-evidence-before-diagnosis`](../dpf-evidence-before-diagnosis/SKILL.md)
- Composes with: [`dpf-verify-substrate-first`](../dpf-verify-substrate-first/SKILL.md)
- Kernel: `evidence-before-diagnosis`, `structural-verification-is-not-functional`, `check-tool-signals-first`, `propose-acknowledge-reassign`.

From OpenDigitalProductFactory/opendigitalproductfactory, Apache-2.0.

More from OpenDigitalProductFactory/opendigitalproductfactory

Signals

Stars
15
Forks
4
Open issues
40
Last commit (this folder)
Oct 12, 2026 (17 days ago)
Last release
Oct 24, 2026 (4 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from OpenDigitalProductFactory

Cite this page

dpf-systematic-debugging skill. Agent Mart. https://agentmart.dev/skills/opendigitalproductfactory-dpf-systematic-debugging (last updated 2026-10-24)