GSDFC Docstring Guide
This page is the practical companion to the authoritative GSDFC specification
in the docforge/__init__.py package docstring. It describes how to write
docstrings that render correctly in MkDocs and stay machine-parseable by
doc-forge, MkDocs, and MCP clients.
๐งญ Overview
- Docstrings are the single source of truth.
doc-forgecompiles docstrings but never rewrites them.- Every public symbol should have a complete, accurate docstring.
- Type hints live in signatures; prose entries repeat the type in parentheses and must match the signature.
๐ฆ Module docstrings
Modules use Markdown headings and --- separators.
Recommended sections:
# Summaryโ what the subsystem does# Examplesโ a representative usage snippet# Notesโ guarantees, lifecycle, and thread-safety notes
๐ฆ Class docstrings
Recommended sections, in order:
- summary line describing responsibility
Attributes:โ instance attributes withname (Type):entriesNotes:โ grouped subsections such as Guarantees, LifecycleExample:โ indentedpythoncode block
๐ฆ Function and method docstrings
Recommended section order:
Args:Returns:Raises:Yields:Notes:Example:
Formatting rules:
Args:entries arename (Type):followed by an indented description.Returns:entries areType:followed by an indented description.Raises:entries areExceptionType:followed by an indented condition.Yields:replacesReturns:for generators.- Summaries are written in the imperative mood.
- Fenced
pythonblocks are allowed insideExample:sections, indented four spaces.
๐ฆ Property docstrings
Properties document their return values with a Returns: section and, when
meaningful, an Example:.
๐ Example
๐ Keeping stubs in sync
Every .py module ships a matching .pyi stub. When a signature or a public
symbol changes, update both files. Signature annotations in the stub must
match the implementation.
๐ก๏ธ Enforcement
pydoclint (Google style) runs in CI and verifies that Args:/Returns:
sections match function signatures, including types.
allow-init-docstring = trueโ__init__docstrings are allowed.skip-checking-raises = trueโRaises:sections are descriptive and are not required to map to literalraisestatements.check-class-attributes = falseโAttributes:sections document instance attributes without class-level annotations.