Finding
docs/configuration.md is the reference users copy from. It states, in three places, facts that live as code elsewhere, and nothing in __tests__/ reads the file:
- The
## prow.yaml example annotates tide, hold, approve, lgtm and sweep with "these are the defaults" / "this is the default". The defaults it spells out are decided by resolveTide / resolveHoldLabel / defaultSweepLookback (src/utils/config.ts), approveSettings (src/plugins/approve.ts), blunderbussSettings (src/plugins/blunderbuss.ts) and lgtmSettings (src/plugins/lgtmBinding.ts).
- Each
### \section`carries aField | Default | Meaning` table. The field set and the Default column restate the same resolvers.
## Where configuration lives lists the organization repositories, the repository probe paths in order, and quotes verbatim the no prow configuration found: … error that getLabelConfig (src/utils/labeling.ts:30-35) composes from orgConfigRepos, orgConfigPath and repoConfigPaths.
Changing any of those defaults or paths in code leaves the document silently wrong. By contrast docs/commands.md (#254), templates/prow.yaml and the starter workflows (__tests__/workflows.test.ts) already have doc↔code tests.
Evidence, main @ c48bd6d: grep -rn "docs/configuration" __tests__ → no matches. Unit coverage of the resolvers themselves is complete (npx vitest run --coverage: config.ts 100% lines, plugins 100% lines) — this is a documentation-consistency gap, not a line-coverage gap, so no coverage-gap priority applies.
Recommendation
Add __tests__/configurationDocs.test.ts that:
- parses the
## prow.yaml example with parseProwConfig and asserts its key set equals mergeProwConfig({}, {})'s, and that the five sections flagged as defaults deep-equal the resolver output for an empty config
- for every
Field | Default | Meaning table, asserts the field names equal the keys of the resolved settings object and that a backticked literal in the Default cell parses (as YAML) to the code default (unset ↔ undefined)
- asserts the tier table's organization repos and repository paths equal
orgConfigRepos / repoConfigPaths (.yaml spellings first, .yml after) and that the quoted error string is exactly what getLabelConfig builds for <owner>/<repo>
Priority
- Impact: medium — user-facing reference drifts silently from code
- Effort: low — one new test file, no source changes
🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: c48bd6d
— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88
Finding
docs/configuration.mdis the reference users copy from. It states, in three places, facts that live as code elsewhere, and nothing in__tests__/reads the file:## prow.yamlexample annotatestide,hold,approve,lgtmandsweepwith "these are the defaults" / "this is the default". The defaults it spells out are decided byresolveTide/resolveHoldLabel/defaultSweepLookback(src/utils/config.ts),approveSettings(src/plugins/approve.ts),blunderbussSettings(src/plugins/blunderbuss.ts) andlgtmSettings(src/plugins/lgtmBinding.ts).### \section`carries aField | Default | Meaning` table. The field set and the Default column restate the same resolvers.## Where configuration liveslists the organization repositories, the repository probe paths in order, and quotes verbatim theno prow configuration found: …error thatgetLabelConfig(src/utils/labeling.ts:30-35) composes fromorgConfigRepos,orgConfigPathandrepoConfigPaths.Changing any of those defaults or paths in code leaves the document silently wrong. By contrast
docs/commands.md(#254),templates/prow.yamland the starter workflows (__tests__/workflows.test.ts) already have doc↔code tests.Evidence,
main@ c48bd6d:grep -rn "docs/configuration" __tests__→ no matches. Unit coverage of the resolvers themselves is complete (npx vitest run --coverage:config.ts100% lines, plugins 100% lines) — this is a documentation-consistency gap, not a line-coverage gap, so nocoverage-gappriority applies.Recommendation
Add
__tests__/configurationDocs.test.tsthat:## prow.yamlexample withparseProwConfigand asserts its key set equalsmergeProwConfig({}, {})'s, and that the five sections flagged as defaults deep-equal the resolver output for an empty configField | Default | Meaningtable, asserts the field names equal the keys of the resolved settings object and that a backticked literal in the Default cell parses (as YAML) to the code default (unset↔undefined)orgConfigRepos/repoConfigPaths(.yamlspellings first,.ymlafter) and that the quoted error string is exactly whatgetLabelConfigbuilds for<owner>/<repo>Priority
🐝 Hive Agent:
quality| Instance:hosted-available-lke648397-260827-5q9t| SHA:c48bd6d— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88