Skip to content

chore(release): prepare 0.5.0 (merge after #28) - #29

Merged
NetDevAutomate merged 9 commits into
mainfrom
release/0.5.0
Sep 21, 2026
Merged

NetDevAutomate merged 9 commits into
mainfrom
release/0.5.0

Conversation

@NetDevAutomate

@NetDevAutomate NetDevAutomate commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Summary

Release preparation for 0.5.0, the plan-integration release.

Status 2026-09-21: #28 has landed on main (96806feb, owner push, CI 15/15 on the PR head). This branch took it as merge commit fc518a3d — a merge rather than a rebase because the repository ruleset refuses force-pushes to release/* as well as main. The tree is main plus the seven release-preparation files; just release-consistency-shipped passes on it (16/16 gate tests). The three 0.5.0 issues (#7, #10, #15) are closed on their evidence; the 0.5.0 milestone's only open item is this PR.

Before the cut

  1. Archive plan-integration-followons. Its .openspec.yaml deferral still reads "archived when item 5's row is scored, not before; not part of the current release tag" — row 3b is scored and item 5 is in this CHANGELOG, so the marker is stale and the archive belongs before the tag. One task is still open: T7.1's three owner-only steps (push or discard the local archive/feat-clean-start-2026-09-15 tag; the GitHub Support ticket; revoke the two tokens and delete ~/tmp/.env). Either the owner does them and T7.1 is ticked, or the archive proceeds with one incomplete task acknowledged.
  2. Date the CHANGELOG heading (## [0.5.0] - <cut date>, fresh ## [Unreleased] above) — the gate requires the CHANGELOG date to be on or after the tag's commit date, so it is written on the day.
  3. just release-check on the release commit.

The cut

Fast-forward main to this branch locally, tag v0.5.0 on that commit, owner pushes main and the tag together, then just release-verify and gh release create v0.5.0 --notes-file releases/v0.5.0.md.

Tested

test_release_consistency_script.py 16/16 (three new); check-release-consistency.py --skip-wheel --release --pre-tag passes at 0.5.0 on fc518a3d and prints the deferral's text; just docs (mkdocs --strict) exit 0; prepare-release/docs-guard tests 20/20. CI on this branch: see the checks on fc518a3d.

…deferral reasons

The guard had no test. Three RED pins: an undeferred change with commits since
the tag is named (already true); a `deferred: >-` folded reason is accepted and
printed as its text, not as the fold marker (red: the guard printed `>-`); an
empty fold is refused as the forgotten-deferral case it is (red: it passed).
`_deferred_reason` was a single-line match, so `.openspec.yaml` files written
in the usual folded form (`deferred: >-` + indented text) yielded the block
indicator `>-` as the "reason": the gate printed `deferred: >-` and would have
accepted a fold with nothing under it -- the unexplained deferral the guard
exists to catch. The reader now joins the indented continuation into the
reason and returns None for an empty block; a plain scalar still works.
Stdlib-only, as the script requires.
prepare-release 0.5.0 (both pyproject versions, uv.lock workspace entries, the
release note), the CHANGELOG entries for everything merged since v0.4.0 (#20,
#22, #23, #24, #27) and for #28, and releases/v0.5.0.md written from the PR
bodies and the archived change's specs -- every named tool, command and label
checked against the tree and against the v0.4.0 tag (record_plan_learning
predates this release and is not claimed as new).

The [Unreleased] heading is dated at the cut: the release gate requires the
CHANGELOG date to be on or after the tag's commit date, so it cannot be
dated before the tag exists. --release --pre-tag passes at 0.5.0.
@NetDevAutomate NetDevAutomate added this to the 0.5.0 milestone Sep 20, 2026
CHANGELOG and releases/v0.5.0.md gain the four changes the owner's rubric
row 3b walkthrough (2026-09-20) put on feat/energy-demand-body-double:

- the item-5 entry no longer says "due recall is never deferred" as if it
  covered every due row — the due-review reader emits a struggling row as a
  hands-on guided repair, and that copy now carries the repair's demand and
  defers with it (the defect: a low-energy day showed the repair the learner
  was just spared as the primary, its own deferral printed beneath it);
- the micro teach-back door for a `learning` concept and its gentle-review
  wording;
- the teach-back protocol's low-energy guided-explanation fallback;
- the verification note records that every row-3b reading was re-emitted
  through both readers before its verdict was read as a verdict on shipped
  behaviour.

`just release-consistency-shipped` passes on this tree (pre-tag form).
The fix landed on PR #28 (96806fe) after the third CI timeout of the
two-tab 409 e2e test named its mechanism from the captured state. The
CHANGELOG says what the learner saw and what changed; the release note
keeps it to the one-line consequence beside the other correctness fixes.
PR #28 (item 5 / D-F, the rubric-3b fixes, the session-timer init-once
fix) landed on main by fast-forward on 2026-09-21. The release branch
takes it as a merge commit rather than a rebase: the repository ruleset
refuses force-pushes to release/* as well as main, so a rebased branch
could not be published. Tree = main + the four release-preparation
commits; the 0.5.0 notes already describe every change this merge
brings in (b3eb9ac, 2b63bc7).
…ral marker removed

T7.1's three owner steps were walked on 2026-09-21 with each fact
re-checked against the live system first, and two of the three had gone
stale since the handover: the Support ticket's stated symptom (phantom
contributors) has already cleared, though the orphaned refs/pull/1..6
heads remain fetchable and still carry the address the consolidation
removed, so the ticket goes reworded; and ~/tmp/.env was rewritten on
2026-09-19 into a Fabric configuration holding neither D-J token, so the
"delete ~/tmp/.env" step would have destroyed the wrong file and is
recorded as deliberately not done. The tag was pushed after checking it
is the only copy of the clean-start tooling.

The deferred: marker comes out because its own condition — item 5's
rubric row scored — is met, and its last sentence ("not part of the
current release tag") is false for 0.5.0, whose CHANGELOG describes item
5 as shipped. Left in place it would travel into the archive as a false
statement about the release; removed, the release gate expects the
change to be archived, which is the next commit.
…he main specs

Every task is ticked and every artifact done, and the archive condition
the change set for itself — item 5's rubric row scored by the owner — is
met (row 3b: (a)–(e) yes, (f) resolved by a fix, 2026-09-20). Archived
with the CLI's own merge: +8 requirements added and 3 modified across
seven main specs (active-learning-decisions, agent-adapters,
cli-surface, health-and-diagnostics, live-session-orchestration,
mcp-server, web-ui), each verified afterwards against its delta —
ADDED requirements and their scenarios present, MODIFIED bodies
verbatim, no other spec touched. `openspec validate --specs --all`
24/24; the new archive validates.

This is the release gate's expectation once the deferral marker is
gone: a change with commits since v0.4.0 must be archived or deferred,
and 0.5.0 ships items 1–5, so archived is the true state.
Written on the day, as the gate requires: the [0.5.0] heading's date must
be on or after the v0.5.0 tag's commit date, and the tag is cut on this
commit. A fresh, empty [Unreleased] sits above it in the shape the 0.4.0
cut left.
@NetDevAutomate
NetDevAutomate merged commit fa1b2af into main Sep 21, 2026
15 checks passed
@NetDevAutomate
NetDevAutomate deleted the release/0.5.0 branch September 21, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant