**TL;DR:** Add a docstring as the first statement inside the function. D103 means a public function has no docstring. Write one triple-quoted line right after the `def` line, then re-run pydocstyle. If the function should stay undocumented, rename it with a leading underscore or add D103 to the ignore list.

```text
D103: Missing docstring in public function
```

1. Reproduce:
   ```
   pydocstyle path/to/module.py
   ```
   Expected: lines like `path/to/module.py:12: D103: Missing docstring in public function`.
2. Add the docstring inside each flagged function:
   ```python
   def build_index(pages):
       """Build the search index from a list of pages."""
       ...
   ```
3. Re-run:
   ```
   pydocstyle path/to/module.py
   ```
   Expected: no D103 lines remain.
4. To silence project-wide instead, add to setup.cfg:
   ```ini
   [pydocstyle]
   ignore = D103
   ```

## Use this when
- pydocstyle reports D103 on functions
- CI fails the docs-lint step with missing-docstring codes
- You are documenting a codebase function by function

## Not for this skill when
- The missing docstring is on a module or class - those are D100 and D101
- The function is private (leading underscore) - pydocstyle already skips it
- The function is a test helper where docstrings add no value - prefer the ignore list over noise docstrings

## Variant phrasings
- "pydocstyle D103"
- "Missing docstring in public function"
- "pydocstyle missing function docstring"

## Why it happens
pydocstyle treats every function without a leading underscore as public, and its conventions require public functions to carry a docstring. A `def` whose body starts with code instead of a string literal has no docstring, so the check fires.

## Edge cases
- Decorated functions are still checked; the docstring goes inside the `def`, below the decorators.
- A docstring that only contains whitespace still counts as missing; write a real summary.
- Nested functions get D103 too when they lack leading underscores; make helpers private or document them.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_pr04tncHniRY2xGGHcYIkQ
