Skip to content
Back to skills

Research Methods

BSecurity

Choose the design and the numbers a research run can honestly claim — write the structured METHOD RECORD (databases, date of access, search string, criteria, screening counts) that r0 validates, pick the claim strength a design can actually carry, record a statistic as data rather than prose, route to the reporting guideline the design owes, and decide what to preregister. Use when a run's question, design, search or statistics have to be settled before the writing, or when a claim needs a st...

  • 10 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 20, 2026
ai-agentsrustgogitdatabase

Works with

  • cli

Security analysis

B85/100
  • highContains patterns that look like hardcoded API keys

Pro scans all 2 files and shows the line behind each finding

Scanned October 20, 2026

npx -y skills add vecnode/vn-code --skill research-methods --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Research Methods?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Research Methods
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/vecnode-research-methods/badge)](https://www.skillsdirectory.com/skills/vecnode-research-methods)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: research-methods
description: Choose the design and the numbers a research run can honestly claim — write the structured METHOD RECORD (databases, date of access, search string, criteria, screening counts) that r0 validates, pick the claim strength a design can actually carry, record a statistic as data rather than prose, route to the reporting guideline the design owes, and decide what to preregister. Use when a run's question, design, search or statistics have to be settled before the writing, or when a claim needs a strength or a number attached to it.
whenToUse: Before writing a document that reports data or a search — when the question has to be made falsifiable, when a claim's verb has to match what the design can support, when a search has to be recorded so a reader can repeat it, when a number has to be attached to a claim, or when METHOD_COUNTS, BAD_STATISTIC or a reporting guideline comes up.
---

# Method before sentence

A document is only as good as the design under it, and two failures are cheap to
prevent and expensive to discover:

- **a claim that says more than its design can support** — `causes` over a
  correlation, `proves` over one study, `significant` with no effect size;
- **a search nobody can repeat** — "we searched the literature" is not a method,
  and a review whose search cannot be repeated cannot be checked by anyone,
  including its author a year later.

This skill is the method layer. It does not read your statistics for you and it
does not infer a design from keywords. What it does is make both of those things
**data on the record**, where a check can reach them.

The dense content — the design catalogue, the validity threats, the statistics
reporting bar, the guideline routing table, the ethics and authorship ground —
is in `reference/method.md` beside this file. Read it when the question is *what
does this design let me say*, and read the worked example below when the question
is *what do I call right now*.

## The method record: a search as data

`plan/method.md` is prose. `plan/method.json` is the record, and it is the one r0
validates and the build prints back as the document's own search-and-screening
flow. Six fields, all required:

```text
rs_plan slug=sleep-memory-review part=method method={
  "databases": ["PubMed", "Web of Science Core Collection", "PsycINFO"],
  "accessed": "2026-10-13",
  "search": "(\"sleep deprivation\" OR \"sleep restriction\") AND (\"memory consolidation\" OR recall) AND (adult OR human)",
  "include": ["adult human samples", "a sleep-deprivation or sleep-restriction manipulation", "a memory measure reported with a statistic"],
  "exclude": ["animal-only studies", "pharmacological sleep aids", "no memory outcome"],
  "screening": { "identified": 412, "screened": 96, "included": 23 }
}
```

```text
plan/method.json written, and plan/method.md regenerated from it
- path: C:\Users\ana\Desktop\vncode-research\sleep-memory-review\plan\method.json
- 3 database(s), accessed 2026-10-13, 412 identified -> 96 screened -> 23 included

The record is what r0 validates and what the document's search-and-screening flow is printed from. Edit the RECORD, not plan/method.md: the next write replaces the view.
```

**The counts are checked, and that is the point of the record.** Records are
removed at each step, never added, so `identified >= screened >= included` must
hold. It is the one arithmetic a review can lie to itself with and not notice:

```text
Refused (METHOD_COUNTS): the screening counts cannot be true: identified=96, screened=412, included=23 - records are removed at each step, never added, so identified >= screened >= included. Fix the record (or the review) rather than the arithmetic.
```

Three more rules the record enforces rather than trusts:

- **`accessed` is a real calendar date.** `2026-02-31` matches the shape and
  cannot be true; a date a reader cannot trust is worse than none.
- **The fields are closed.** `databases`, `accessed`, `search`, `include`,
  `exclude`, `screening` — plus optional `registration`, `platforms`, `notes`. A
  field this package does not read is a field nothing validates.
- **An empty `exclude` is legitimate; a missing one is not.** "Nothing was
  excluded" and "nobody said" are different statements, and only one of them is a
  method.

`registration` is where a preregistration ID goes (PROSPERO, OSF, INPLASY,
ClinicalTrials.gov, AsPredicted), and a review that has none is making a choice
worth recording rather than a gap worth hiding — see the reference for what to
register and when.

A record is validated **on the way in** by `rs_plan` and again on the way out by
**`r0-structure`**, which reports what it finds on disk as a problem rather than
believing it:

| code | severity | what it means |
|---|---|---|
| `method-incomplete` | warning | a field a reader needs is missing or empty — a hand-edited record, or one another version wrote |
| `method-counts` | error | the counts contradict each other; a clean build refuses on it |
| `method-date` | warning | `accessed` is not a real `YYYY-MM-DD` date |

## What the design lets you say

`strength` is already on every claim (`rs_write`), and this is the table that
decides it. Pick the verb the design can carry, not the one that reads better —
a `causal` claim over a correlational source is a defect of the sentence, fixed
by rewriting the sentence, not by re-labelling it.

| the design | what it can support | honest strength |
|---|---|---|
| randomised experiment, allocation concealed | a difference caused by the manipulation | `causal` |
| quasi-experiment with a credible counterfactual (difference-in-differences, regression discontinuity, IV) | a causal effect **under stated assumptions** — name them | `causal`, with the assumptions written down |
| cohort / case-control / cross-sectional | an association, adjusted for what was measured | `associational` |
| single-group pre-post | change over time, not the cause of it | `associational` at most |
| qualitative (interviews, ethnography, case study) | meaning, mechanism, experience — not prevalence | `descriptive` or `theoretical` |
| a model, a derivation, an argument | what follows if the premises hold | `theoretical` |
| a recommendation | what ought to be done, which no datum settles | `normative` |

Two rules that come from the table and are the ones an agent gets wrong:

- **`p < .05` on a cross-sectional study is not a causal claim.** The design
  cannot carry the verb, whatever the p-value says.
- **`descriptive` is not the weak option.** "412 records were identified" is a
  descriptive claim and it is exactly the right label for it. Reaching for
  `associational` because it sounds stronger is how a number becomes an
  overstatement.

## A number is data, not prose

A claim that rests on a statistic takes a `statistic` object, recorded on the
claim row:

```text
rs_write slug=sleep-memory-review section=memory
  text="Sleep restriction reduced next-day recall relative to the control condition [@walker2020cognitive]. [Recall was lower after restriction than after a full night of sleep]{#c0142} [@walker2020cognitive, p. 7]."
  claims=[{ "id": "c0142", "strength": "causal",
    "statistic": { "test": "Welch t-test", "statistic": "t = 2.41", "df": "38.2", "p": ".032", "effect": "d = 0.61", "ci": [0.12, 1.10], "n": 40 },
    "sources": [{ "key": "[REDACTED]",
      "locator": { "kind": "quote", "quote": "sleep-dependent consolidation of declarative memory" } }] }]
```

```text
doc/sections/memory.md written (replace)
- path: C:\Users\ana\Desktop\vncode-research\sleep-memory-review\doc\sections\memory.md
- words: 34
- claims in this text: 1 (1 new)
- citations: walker2020cognitive
- statistics recorded: c0142 (Welch t-test, t = 2.41, df 38.2, p .032, effect size d = 0.61, 95% CI .12 to 1.1, n 40)
```

Seven fields, closed: `test`, `statistic`, `df`, `p`, `effect`, `ci`, `n`. What
they are for is that the **build prints them** — `format=md` (and `docx`, `html`,
`tex`, from the same Markdown) carries a Statistics table in a draft naming each
claim and its numbers, and in a clean build naming each sentence and its numbers,
because a finished document must not cite ids that appear nowhere in it.

Three refusals, each a reporting standard rather than a preference:

- **`p = .000` is refused.** No test produces a probability of exactly zero; it
  is what a program prints after rounding, and copying it into a paper reports a
  number that cannot exist. Write `p < .001`.
- **A field with no numeral is refused** (`"effect": "large"`): a label is not a
  measurement. Write `d = 0.61` and let a reader disagree with the threshold.
- **A field nothing reads is refused**, like everywhere else in this dialect: a
  number nothing checks is a number nothing checks.

**Changing a statistic clears the claim's verification**, exactly as changing
words does. A verdict says "this passage supports what this claim asserts", and
`p = .032` is part of what it asserts — a check made about the old number is a
check about a claim that no longer exists. `rs_write` names every claim it
cleared, and you say so to the user in the same turn.

## The guideline the design owes

Before a document leaves the run, name the reporting guideline its design owes
and say which items it cannot yet satisfy. Route by design, never by keyword:
"trial" in a title does not make a study an RCT.

| the study is | the guideline |
|---|---|
| a randomised trial | CONSORT |
| a trial protocol | SPIRIT |
| an observational study (cohort, case-control, cross-sectional) | STROBE |
| a systematic review | PRISMA 2020 |
| a review protocol | PRISMA-P |
| a diagnostic-accuracy study | STARD |
| a prediction model | TRIPOD |
| a qualitative study (interviews, focus groups) | COREQ, or SRQR |
| a case report | CARE |
| a quality-improvement study | SQUIRE 2.0 |
| an economic evaluation | CHEERS |
| an animal study | ARRIVE |
| a practice guideline | AGREE II |

The full table, what each one covers, and how to handle a study that straddles
two, is in the reference. The rule that matters here: **a guideline you cannot
satisfy is a sentence in Limitations, not a silence.** An unmet item reported is
a defect a reader can weigh; an unmet item omitted is a defect they cannot see.

## What this skill refuses to do

- **It does not infer a design from keywords**, and neither should you: a
  guideline chosen by a title's wording is a checklist applied to the wrong
  study.
- **It does not recompute statistics.** Nothing in this package calculates a
  p-value from a test statistic or checks that `d = 0.61` follows from the means
  it was given. The numbers are recorded, printed and checkable by a reader — and
  saying that plainly is worth more than a recomputation that pretends to be
  arithmetic truth.
- **It does not decide ethics for you.** Consent, approval and data-protection
  obligations are an institution's determination, not a plugin's: the reference
  says what to collect and who has to decide.
- **No record is not a failure.** A theoretical paper has no search. The build
  reports `no plan/method.json` as a note rather than refusing, because inventing
  a requirement is not the same as enforcing one.

Files in this skill

  • SKILL.md11 KB
  • reference/method.md28.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.