This repository documents implemented behavior only. If a feature is not present in code, it should be described as not implemented rather than speculating.
This documentation is split across two licenses:
- CC0-1.0 for
protocols/andtypes/(public domain, implementation-agnostic). - AGPL-3.0 for everything else (Helianthus-specific architecture, APIs, and deployment).
When editing, keep protocol/type content implementation-neutral and avoid Helianthus-specific references.
- Prefer concise, testable statements.
- Include wire layouts, byte formats, and examples with language-tagged code blocks.
- Keep diagrams in Mermaid for architecture, data flow, and state machines.
Doc-gate is mandatory for changes that affect implemented architecture, APIs, or behavior. A PR that triggers doc-gate is not merge-ready until required docs are updated in the same PR (or in a linked docs PR that is already merged).
| Change trigger | Practical examples | Required documentation updates | Gate decision |
|---|---|---|---|
| Architecture change | Plane model updates, routing/lifecycle changes, projection model changes | Update relevant files in architecture/ (typically architecture/overview.md, architecture/decisions.md, plus domain pages like architecture/vaillant.md) |
Block merge until docs are updated |
| API surface change | GraphQL fields/types, MCP tool behavior, HTTP endpoint semantics | Update relevant files in api/ (api/graphql.md, api/mcp.md, and endpoint behavior notes) |
Block merge until docs are updated |
| Runtime behavior / protocol change | New wire layout, parser semantics, status handling, discovery flow, smoke/device-dump behavior | Update affected docs in protocols/, types/, and/or development/ with concrete byte/field behavior |
Block merge until docs are updated |
| Internal-only refactor with no external behavior change | Renames/moves with no architecture, API, or behavior effect | No mandatory doc update; add a short PR note explaining why doc-gate does not trigger | Merge allowed after reviewer confirmation |
- Author classifies the PR using the trigger matrix above.
- Author updates docs for all triggered categories in the same PR, or links merged docs PR(s).
- Author completes checklist in the PR description.
- Reviewer verifies doc-gate coverage before approval.
- Merge remains blocked until checklist items are satisfied and CI is green.
- I evaluated doc-gate triggers for architecture, API, and runtime behavior.
- I updated all required docs in this PR (or linked already-merged docs PRs).
- For architecture-impacting changes, I updated the relevant
architecture/docs. - For API-impacting changes, I updated the relevant
api/docs. - For behavior/protocol-impacting changes, I updated the relevant
protocols/,types/, and/ordevelopment/docs. - I added a concise “docs updated / not triggered” note in the PR description.
- Trigger classification is correct for architecture/API/behavior impact.
- Required docs are updated and consistent with implemented behavior.
- Wire formats / API fields / behavior notes include concrete, testable details where needed.
- PR description includes clear evidence of doc updates (or valid non-trigger rationale).
- I will withhold approval if doc-gate requirements are incomplete.
For eBUS transport/protocol changes, merge readiness requires an additional runtime gate:
- Scope: changes in transport/protocol code paths (gateway transport selection, proxy upstream/downstream transport behavior, ebusgo transport implementations, arbitration behavior tied to wire protocol).
- Primary required artifact: full matrix result (
T01..T88) with no unexpected failures (fail) and no unexpected passes (xpass) against the active expected-failure inventory. - Proxy adjunct artifact (when proxy wire-semantics scope applies): proxy-semantics subset (
PX01..PX12) with the same no-unexpected-fail/xpasspolicy. - Required reference: PR description must include the primary
results/index.jsonpath or attachment reference, and for proxy wire-semantics scope it must also include the proxy-semantics artifact index reference. - Expected-failure inventory: any
xfailmust map to a documented transport limitation (case IDs + reason), and that inventory must be attached in the PR description. - Default policy: if runtime gate is not satisfied, merge is blocked.
- Owner override: only explicit owner approval may bypass this gate, with a written reason.
Hardware-backed ESERA passive validation remains a deferred follow-up for the proxy wire-semantics lane and is not a merge blocker for the current milestone set (tracked in Project-Helianthus/helianthus-docs-ebus#241).