systematic-troubleshooting — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited systematic-troubleshooting (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Guessing at explanations wastes time and corrupts the scientific record. Post-hoc rationalization is indistinguishable from cargo-cult science.
Core principle: ALWAYS investigate root cause before proposing explanations or re-running experiments. Rationalization without investigation is failure.
Violating the letter of this process is violating the spirit of scientific rigor.
NO EXPLANATIONS WITHOUT ROOT CAUSE INVESTIGATION FIRSTIf you haven't completed Phase 1, you cannot propose why an experiment failed.
Use for ANY unexpected experimental result:
Use this ESPECIALLY when:
Don't skip when:
You MUST complete each phase before proceeding to the next.
BEFORE proposing any explanation or re-running:
For multi-stage pipelines (raw data → preprocessing → model → analysis → unexpected output):
Add diagnostic checkpoints BEFORE proposing explanations:
For EACH pipeline stage boundary:
- Log input shape, dtype, summary statistics (N, mean, std, NaN count)
- Log output shape, dtype, summary statistics
- Verify expected invariants hold (e.g., no data leakage, correct normalization)
- Check that config values are actually applied, not silently overridden
Run once to gather evidence of WHERE the problem occurs
THEN analyze to identify the failing stage
THEN investigate that specific stageExample (neuroimaging pipeline):
# Stage 1: Raw data loading
print(f"Raw subjects loaded: {len(subjects)}, missing: {df.isnull().sum().sum()}")
# Stage 2: Preprocessing
print(f"After preprocessing: shape={X.shape}, NaN={np.isnan(X).sum()}, range=[{X.min():.3f}, {X.max():.3f}]")
# Stage 3: Train/test split
print(f"Train N={len(X_train)}, Test N={len(X_test)}, seed={config.seed}")
print(f"Train label distribution: {Counter(y_train)}")
print(f"Test label distribution: {Counter(y_test)}")
# Stage 4: Model output
print(f"Predictions: mean={preds.mean():.3f}, std={preds.std():.3f}, range=[{preds.min():.3f}, {preds.max():.3f}]")This reveals: Which stage produces invalid values (e.g., normalization ✓, split ✗ due to data leakage)
| Check | What to Look For |
|---|---|
| Data quality | Missing values, outliers beyond domain range, distribution shift between splits, duplicate subjects |
| Preprocessing consistency | Same pipeline applied to train and test? Any step fitted on full data before split? |
| Data leakage | Test-set labels or future timepoints visible during training? Subject-level vs. scan-level split? See docs/references/data-checklist.md §3 for full taxonomy (temporal, group, feature, preprocessing, label, duplication, target encoding, hyperparameter). |
| Numerical issues | NaN/Inf propagation, overflow in softmax/log, near-zero denominators, ill-conditioned matrices |
| Random seed fixation | Seed set before data split, model init, and augmentation? Library-specific seeds (numpy, torch, random) all set? |
| Config propagation | Is the config you loaded the one actually used? Are any values silently defaulting? |
| Metric calculation | Correct averaging (macro/micro/weighted)? Correct class assignment? Correct sign convention? |
| Baseline reference | Are you comparing to the correct baseline run, not a cached or stale result? |
Find the pattern before forming explanations:
Scientific method applied to your own pipeline:
Fix the root cause, not the symptom:
Pattern indicating a wrong hypothesis about the data or model:
STOP and question fundamentals:
Invoke `eureka:hypothesis-first` and re-examine the original research hypothesis before continuing.
This is not a failed debugging session — this may be a wrong assumption about what the result should be.
digraph systematic_troubleshooting {
rankdir=TB;
node [shape=box];
start [label="Unexpected result\nor experiment failure", shape=doublecircle];
iron_law [label="IRON LAW:\nNo explanations\nwithout investigation", shape=parallelogram];
p1 [label="Phase 1: Investigate\n- Read errors/outputs fully\n- Reproduce consistently\n- Check what changed\n- Trace data flow\n- Run diagnostic checkpoints"];
p1_done [label="Root cause\ncandidate identified?", shape=diamond];
p2 [label="Phase 2: Pattern Analysis\n- Find working experiment\n- Compare configs side by side\n- Compare data statistics\n- List every difference"];
p2_done [label="Pattern found?", shape=diamond];
p3 [label="Phase 3: Hypothesis\n- ONE hypothesis, written down\n- Smallest possible test\n- One variable at a time"];
p3_done [label="Hypothesis\nconfirmed?", shape=diamond];
p3_new [label="Form NEW hypothesis\nfrom evidence", shape=box];
p3_count [label="3+ hypotheses\ntested?", shape=diamond];
p4 [label="Phase 4: Resolution\n- Implement single fix\n- Verify full pipeline\n- Confirm no regressions\n- Document root cause"];
p4_done [label="Issue resolved?", shape=diamond];
escalate [label="Escalate:\nQuestion the hypothesis itself\nInvoke eureka:hypothesis-first", shape=parallelogram];
done [label="Document and commit\npost-mortem", shape=doublecircle];
start -> iron_law;
iron_law -> p1;
p1 -> p1_done;
p1_done -> p2 [label="no — gather more data"];
p1_done -> p2 [label="yes — continue"];
p2 -> p2_done;
p2_done -> p1 [label="no — expand investigation"];
p2_done -> p3 [label="yes"];
p3 -> p3_done;
p3_done -> p4 [label="yes"];
p3_done -> p3_new [label="no"];
p3_new -> p3_count;
p3_count -> p3 [label="< 3"];
p3_count -> escalate [label=">= 3"];
p4 -> p4_done;
p4_done -> done [label="yes"];
p4_done -> p1 [label="no — return to Phase 1"];
escalate -> done [label="after hypothesis revision"];
}If you catch yourself thinking any of the following, STOP and return to Phase 1:
ALL of these mean: STOP. Return to Phase 1.
If 3+ hypotheses failed: The hypothesis itself may be wrong. Invoke eureka:hypothesis-first.
| Excuse | Reality |
|---|---|
| "The model is just sensitive to initialization" | Random seed instability has a root cause. Fix the seed, then investigate. |
| "Results differ because of data heterogeneity" | Possibly true — but verify it with statistics before claiming it. |
| "The baseline probably wasn't tuned well" | If you can't reproduce the baseline exactly, you can't compare against it. |
| "This is expected given the small sample size" | Expected = predicted by power analysis. If you didn't run one, you don't know. |
| "NaN values are from outlier subjects — we can drop them" | NaNs appearing mid-pipeline indicate a bug. Find it before dropping anything. |
| "The literature reports similar variance" | The literature reporting it doesn't make your pipeline correct. |
| "Re-running fixed it — must have been a transient issue" | Transient results are unreproducible results. Investigate before publishing. |
| "The effect disappeared after preprocessing differently" | That is a finding, not a fix. Investigate which preprocessing is scientifically correct. |
| "Our method is novel so comparison is hard" | Novelty doesn't exempt you from sanity checks and ablations. |
| "The p-value is borderline but the trend is clear" | Borderline p-values require power analysis and effect size reporting, not narrative. |
| "Emergency, no time for root cause analysis" | Systematic troubleshooting is faster than re-running blind. Always. |
| "I've already tried 3 things — one more attempt" | Three failures signal a wrong hypothesis. Escalate, don't iterate. |
Stop attempting fixes. Invoke `eureka:hypothesis-first`.
Three failed hypotheses are a signal, not bad luck. Ask:
Document all three failed hypotheses before escalating. They are evidence.
| Phase | Key Activities | Gate to Next Phase |
|---|---|---|
| 1. Investigate | Read outputs fully; reproduce consistently; check what changed; trace data flow with diagnostic checkpoints; research-specific checks | Candidate location of failure identified |
| 2. Pattern Analysis | Find working experiment; diff configs; compare data statistics; list every difference | Pattern distinguishing working from failing identified |
| 3. Hypothesis and Testing | State one specific hypothesis; test with smallest change; one variable at a time | Hypothesis confirmed OR new evidence gathered |
| 4. Resolution | Implement single fix; verify full pipeline; confirm no regressions; document root cause | Issue resolved and documented |
eureka:hypothesis-first — if 3+ fixes fail, re-examine the original hypothesis before continuingdocs/references/statistical-guide.md — after root cause is found, verify the corrected analysis meets statistical reporting standardsdocs/references/data-checklist.md — data leakage taxonomy, preprocessing pipeline checks, split strategy best practiceseureka:verification-before-publication — before claiming a resolved issue is ready for publicationeureka:research-brainstorming — if investigation reveals the entire study design needs revision, use that skillRIGID — The four-phase sequence is not optional. Phase ordering is enforced. The Iron Law is not a suggestion.
The only flexibility is in the diagnostic methods within each phase — adapt them to your domain and pipeline. The phases themselves do not flex.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.