022 — New projects start at code maturity 1 (#94)

Status: shipped (v0.28.0) Roadmap: #50

Why

Code maturity 1 — every release through a pull request onto a protected base branch — is now the working default across the repos, but nothing says so. tp --init writes a task-plus.yml with no maturity key, so a new project starts at 0 and releases by pushing straight to main, and tp check is silent about it: a repo left at 0 is only noticed when someone remembers. The default should be the practice, and a repo below it should show up in tp check.

What changes

  • tp --init: the task-plus.yml it writes declares maturity: {code: 1} and merge_wait: 10m, so both defaults are visible in the file.
  • merge_wait: unset means 10m (was: no wait); merge_wait: 0 turns the wait off. Only a pull request mode release waits, so a direct release is unchanged.
  • tp check, task-plus.yml section: a warning when maturity.code is not declared, or is declared below 1, naming the fix (tp maturity code 1). A warning, not an error: existing repos at 0 keep passing check and their releases are unchanged.
  • docs/maturity.md, docs/release-workflow.md, README: the defaults and the check.

Acceptance

task-plus.yml maturity.code tp check
absent — File not found (using defaults) as now; no maturity finding
present not declared WARN maturity.code not declared — projects start at 1: run 'tp maturity code 1'
present 0 WARN maturity.code 0 is below 1 — run 'tp maturity code 1'
present 1 or 2 no maturity warning; the pull request mode checks as now
Command Result
tp --init task-plus.yml loads with maturity.code 1 and merge_wait 10m
merge_wait Pull request mode release
unset waits up to 10m for the merge, then tags
10m, any duration waits that long
0 does not wait; two runs

Out of scope

  • Changing what a missing maturity.code means at release time: it stays 0, so an existing repo's release mode does not flip silently.
  • Special-casing a GitHub release remote, where code 1 is refused; the warning still shows and tp maturity code 1 explains why it can't.
  • The rest of tp --init's template (its statichost deploy target is stale) and reporting the deploy ladder (#50 proper).

Decisions

none

Done when

  • tests express the acceptance table and pass
  • spec updated
  • ADR written if a fork was resolved
  • roadmap ticked and stamped; changelog entry
  • issue closed with a link to the release