127 lines
7.1 KiB
Markdown
127 lines
7.1 KiB
Markdown
# Documentation Policy
|
|
|
|
**Base Policy Version:** 1.0
|
|
|
|
**Last Updated:** 2026-09-06
|
|
|
|
## Purpose
|
|
|
|
Assign each documentation topic one canonical owner so ConfigKit's documentation
|
|
remains accurate and useful to consumers, maintainers, and implementation agents.
|
|
|
|
## Core rules
|
|
|
|
### One canonical owner
|
|
|
|
Each authoritative fact belongs in one owning document or Go declaration's
|
|
reference documentation. Other documents may summarize and link to that owner;
|
|
they must not maintain competing definitions of commands, API contracts, YAML
|
|
semantics, defaults, paths, diagnostics, or compatibility guarantees.
|
|
|
|
### Policies, current behavior, and future work
|
|
|
|
- Policies state currently binding contributor rules, including constraints on
|
|
future implementation. They do not imply that features already exist.
|
|
- Current API/configuration contracts, consumer guidance, and component
|
|
documentation describe implemented behavior only, including partial boundaries.
|
|
- ADRs record accepted decisions and rationale. Acceptance is not evidence of
|
|
implementation; execution status belongs in roadmaps.
|
|
- Roadmaps own unimplemented targets, deferred work, and execution status.
|
|
|
|
The initial target and implementation plan have separate owners. Do not put
|
|
staged steps or progress in `docs/roadmap/initial.md`. `docs/roadmap/implementation.md` owns those details.
|
|
As behavior lands, move its normative definition into the current contract and
|
|
replace the roadmap definition with a link. Retire completed roadmap material
|
|
as part of release preparation; ADRs preserve significant decision history.
|
|
|
|
### Audience and examples
|
|
|
|
Consumer documentation explains how to use the library and what consumers own.
|
|
Internal documents explain mechanisms and dependencies. Keep implementation
|
|
mechanics out of consumer guidance unless they affect a meaningful choice.
|
|
|
|
Complete copyable artifacts belong in `examples/`; Go API examples may live in
|
|
executable Go example tests beside the relevant package. Prose should use the
|
|
smallest useful excerpt and link to the maintained artifact. Examples must be
|
|
secret-free and checked against implemented behavior. Clearly label illustrative
|
|
future syntax in roadmaps; do not present it as a runnable current example.
|
|
|
|
### Security and privacy
|
|
|
|
Do not include real credentials, private keys, environment dumps, sensitive input,
|
|
or private infrastructure details unless intentionally public. Document secret
|
|
handling, not secret values.
|
|
|
|
## Canonical ownership
|
|
|
|
| Topic | Owner | Boundary |
|
|
| --- | --- | --- |
|
|
| Product orientation | `README.md` | Current status, purpose, navigation, and a minimal working example once available |
|
|
| Contributor entry point | `docs/development.md` | Reading guide and actual baseline validation commands |
|
|
| Architecture rules | `docs/policy/architecture.md` | Responsibilities, dependency constraints, invariants, and scope boundaries |
|
|
| Documentation rules | `docs/policy/documentation.md` | Ownership and document lifecycle |
|
|
| Testing rules | `docs/policy/testing.md` | Risk-based sufficiency, test boundaries, and maintenance principles |
|
|
| Release rules | `docs/policy/release.md` | Compatibility, integrity, gates, immutability, and exceptions |
|
|
| Release procedure | `docs/release.md`, when operational | Exact maintainer commands, prerequisites, supported targets, and verification |
|
|
| Exported Go API | Go documentation beside declarations | Symbol contracts, errors, ownership, and lifecycle API behavior |
|
|
| YAML and resolution semantics | `docs/config.md`, as behavior lands | Syntax, composition, precedence, conversion, secret references/bootstrap, and explanation semantics; Go reference docs link here for shared rules |
|
|
| Consumer walkthroughs | `docs/consumers/`, when useful | Task-oriented usage and consumer responsibilities, not duplicate API reference |
|
|
| Component inventory | `docs/internal/overview.md` | Implemented components and links to their owners |
|
|
| Component mechanics | Other `docs/internal/` files, when needed | Detailed implementation behavior and change recipes |
|
|
| Architectural decisions | `docs/adr/` | Context, decisions, alternatives, consequences, and supersession history |
|
|
| Initial target | `docs/roadmap/initial.md` | Unimplemented end-state and deferred feature scope |
|
|
| Implementation plan | `docs/roadmap/implementation.md` | Stages, dependencies, acceptance gates, and progress |
|
|
| Release readiness gaps | `docs/roadmap/release-readiness.md` | Outstanding release prerequisites and closure evidence |
|
|
| Historical release notes | `docs/releases/` | Version-specific historical summaries required by release policy |
|
|
| Complete examples | `examples/` and executable Go examples | Maintained artifacts; prose links instead of duplicating full examples |
|
|
|
|
A listed future owner is not a requirement to create an empty file now. Create
|
|
API, consumer, example, and component documents when the corresponding behavior
|
|
exists and there is useful content to own. Link only to existing files; use plain
|
|
code paths for planned files. Release prerequisites have the explicit temporary
|
|
exception recorded in the release policy.
|
|
|
|
ConfigKit has no owned HTTP service, application CLI, or runtime operations
|
|
interface. Do not create those reference documents for consuming applications.
|
|
|
|
## Boundary rules
|
|
|
|
Architecture owns governing constraints; ADRs explain why; contracts describe
|
|
implemented semantics; internal documentation explains how. A roadmap may link
|
|
to all of them but must not become a second current reference.
|
|
|
|
Release policy owns guarantees; the release procedure owns commands. A release
|
|
note cannot redefine a compatibility contract or replace a current-documentation
|
|
update. The note at an immutable tag is that release's historical record.
|
|
|
|
This policy owns what documentation may disclose. Architecture owns security
|
|
invariants. Current configuration and Go API contracts own secret-classification
|
|
and rendering behavior when implemented; internal docs own their mechanisms.
|
|
|
|
## Architectural decision records
|
|
|
|
Use sequential filenames, such as `0001-separate-composition-and-overlay.md`,
|
|
and the lightweight Nygard structure: title, status, date, context, decision,
|
|
alternatives considered, and consequences.
|
|
|
|
Accepted decision content is immutable. A changed decision requires a new ADR
|
|
and a superseded status/link in the old one. Navigation links may be repaired
|
|
when specification ownership moves without rewriting historical rationale.
|
|
Rejected architectural alternatives belong in ADRs; deferred or rejected product
|
|
features belong in roadmaps. Do not create an ADR for every routine choice.
|
|
|
|
## Maintenance and verification
|
|
|
|
Update the owning current documentation in the same change that implements or
|
|
changes behavior. When ownership moves, remove the old definition and preserve
|
|
useful navigation links.
|
|
|
|
Before completing documentation work:
|
|
|
|
- verify claims against the implementation or clearly identify future design;
|
|
- check changed local links, paths, fragments, examples, and commands;
|
|
- preserve the distinction between policy, decisions, target behavior, and status;
|
|
- check canonical ownership and remove stale or duplicate definitions;
|
|
- inspect formatting and whitespace;
|
|
- ensure no sensitive data was introduced.
|