Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,4 @@ __pypackages__

# Claude Code agent worktrees (harness-internal scratch)
.claude/worktrees/
scratchpad/
24 changes: 22 additions & 2 deletions .planning/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,27 @@ Plans:
4. The `3.0.16` git tag exists, the GitHub release page is published with the changelog body, and `pip install cement==3.0.16` from PyPI succeeds on a clean venv
5. The release workflow itself (not just the artifacts) ran end-to-end without manual intervention beyond the user-approved publish step

**Plans**: TBD
**Plans**: 1/5 plans executed

**Wave 1**

- [x] 06-01-PLAN.md — Provisioning checkpoint: close Docker secrets (D-11) + confirm PyPI/RTD/release-env + one-time stable/3.0.x `-s ours` ancestry merge (D-09, D-10)

**Wave 2** *(blocked on Wave 1)*

- [ ] 06-02-PLAN.md — Release-prep PR: finalize CHANGELOG to `## 3.0.16` (D-01..D-04) + bump backend.py VERSION to 3.0.16 (REL-01); user reviews + merges (D-05)

**Wave 3** *(blocked on Wave 2)*

- [ ] 06-03-PLAN.md — Final `workflow_dispatch` dry-run against the merged 3.0.16 commit; 5-Python TestPyPI smoke green (D-06, CI-04, REL-02)

**Wave 4** *(blocked on Waves 1 + 3)*

- [ ] 06-04-PLAN.md — Pre-tag safety + USER tag push (D-07) + shepherd live run through the single approval gate; tag + GitHub Release published (D-08, REL-03)

**Wave 5** *(blocked on Wave 4)*

- [ ] 06-05-PLAN.md — REL-04 clean-venv PyPI check (D-13) + merge dev-bump PR to 3.0.17 (REL-05, D-12) + announcement draft (D-14) + 06-VERIFICATION.md flipping REL-01..05/CI-04/DOCS-03

## Progress

Expand All @@ -368,7 +388,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6, with inserted
| 05.2. ext.argparse command self-meta accessor (INSERTED) | 1/1 | Complete | 2026-06-25 |
| 05.3. Template packaging modernization + typed templates (INSERTED) | 6/6 | Complete | 2026-07-11 |
| 05.4. GitHub Actions Release Workflow (INSERTED) | 5/5 | Complete | 2026-07-12 |
| 6. Release Cut 3.0.16 | 0/TBD | Not started | - |
| 6. Release Cut 3.0.16 | 1/5 | In Progress| |

## Backlog

Expand Down
34 changes: 18 additions & 16 deletions .planning/STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
gsd_state_version: 1.0
milestone: v1.0
milestone_name: milestone
current_phase: 6
current_phase_name: Release Cut 3.0.16
current_phase: 06
current_phase_name: release-cut-3-0-16
status: executing
stopped_at: Phase 05.4 context gathered
last_updated: "2026-07-12T23:20:05.052Z"
last_activity: 2026-07-12
last_activity_desc: Phase 05.4 complete, transitioned to Phase 6
stopped_at: Phase 6 context gathered
last_updated: "2026-07-13T14:50:33.911Z"
last_activity: 2026-07-13
last_activity_desc: Phase 06 execution started
progress:
total_phases: 11
completed_phases: 9
total_plans: 45
completed_plans: 45
total_plans: 50
completed_plans: 46
Comment on lines 13 to +16

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Synchronize the release-progress counters.

The state files disagree: .planning/ROADMAP.md and 06-01-SUMMARY.md show Phase 05.4 complete and Phase 6 at 1/5, while .planning/STATE.md still says 44/45 plans, 9/11 phases, and Phase 05.4 is in progress. This can cause the planner to resume or gate the wrong phase.

  • .planning/STATE.md#L13-L16: reconcile the total/completed plan and phase counters with the roadmap.
  • .planning/STATE.md#L36-L36: replace the stale 44/45, 9/11, and Phase 05.4-in-progress values.
  • .planning/ROADMAP.md#L390-L391: keep the authoritative Phase 05.4-complete and Phase 6 1/5 values, or update both files consistently.
📍 Affects 2 files
  • .planning/STATE.md#L13-L16 (this comment)
  • .planning/STATE.md#L36-L36
  • .planning/ROADMAP.md#L390-L391
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.planning/STATE.md around lines 13 - 16, Synchronize release-progress
metadata with the authoritative roadmap: update .planning/STATE.md lines 13-16
and 36 to reflect Phase 05.4 complete, Phase 6 at 1/5, and the matching
total/completed plan and phase counts, removing stale 44/45, 9/11, and
in-progress values. Preserve .planning/ROADMAP.md lines 390-391 as the
authoritative values unless both files are updated consistently.

percent: 82
---

Expand All @@ -24,14 +24,14 @@ progress:
See: .planning/PROJECT.md (updated 2026-07-12)

**Core value:** Cement 3 stays solid, secure, performant, and bug-free under strict backward compatibility — while being continuously maintained against a modern Python and tooling ecosystem.
**Current focus:** Phase 05.4github-actions-release-workflow
**Current focus:** Phase 06release-cut-3-0-16

## Current Position

Phase: 6 — Release Cut 3.0.16
Plan: Not started
Status: Executing — plan 05 at provisioning/dry-run checkpoint (4/5 plans complete)
Last activity: 2026-07-12 — Phase 05.4 complete, transitioned to Phase 6
Phase: 06 (release-cut-3-0-16) — EXECUTING
Plan: 2 of 5
Status: Ready to execute
Last activity: 2026-07-13 — Phase 06 execution started

Progress: [███████████████████░] 44/45 plans (98%) — 9/11 phases complete (Phase 05.4 in progress, Phase 6 release-cut remaining)

Expand Down Expand Up @@ -88,6 +88,7 @@ Progress: [███████████████████░] 44/45 p
| Phase 05.4 P01 | 6 min | 3 tasks | 3 files |
| Phase 05.4 P02 | 2 min | 2 tasks | 2 files |
| Phase 05.4 P04 | 5 min | 2 tasks | 1 files |
| Phase 06-release-cut-3-0-16 P01 | ~35min | 3 tasks | 2 files |

## Accumulated Context

Expand Down Expand Up @@ -169,6 +170,7 @@ Recent decisions affecting current work:
- [Phase 05.4]: [Phase 05.4 Plan 01]: dev scripts print by design; T201 suppressed with local # noqa rather than editing shared ruff config. ruff include filters scripts/ so directory-mode ruff check scripts/ passes but is not a real gate — later waves must pin explicit per-file paths.
- [Phase 05.4]: [Phase 05.4 Plan 01]: cli-smoke-native banner accepts macOS plus Linux/Darwin/Windows (platform.platform() emits 'macOS-...' on modern Darwin runners). bump_dev_version targets backend.py VERSION, pyproject untouched via [tool.pdm.version] source=call.
- [Phase 05.4]: gates.yml holds ONLY gate jobs (no publish/OIDC surface, T-05.4-04); publish stays in release.yml. full-os-matrix defaults true so PR CI (D-14) and release both exercise the new Windows core-test and macOS/Windows native-smoke gates. PR caller omits secrets: inherit (gates need none).
- [Phase 06 Plan 01]: Docker Hub creds via org OAT at REPOSITORY scope (env-scope rejected: docker job declares no environment); stable/3.0.x ancestry recorded via user-run -s ours merge 8978b395 on main (D-10, real merge commit, zero drift)

### Roadmap Evolution

Expand Down Expand Up @@ -205,6 +207,6 @@ Recent decisions affecting current work:

## Session Continuity

Last session: 2026-07-12T17:24:58.299Z
Stopped at: Phase 05.4 context gathered
Resume file: .planning/phases/05.4-github-actions-release-workflow/05.4-CONTEXT.md
Last session: 2026-07-13T14:49:54.551Z
Stopped at: Phase 6 context gathered
Resume file: .planning/phases/06-release-cut-3-0-16/06-CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -289,18 +289,18 @@ Complete every box before pushing the first real `MAJOR.MINOR.PATCH` tag. Boxes
marked **(dry-run)** are the only ones the CI-04 `workflow_dispatch` dry-run
strictly needs.

- [ ] **(dry-run)** GitHub Environment `testpypi` exists (Settings → Environments)
- [ ] **(dry-run)** TestPyPI trusted publisher exists — repo `datafolklabs/cement`, workflow `release.yml`, env `testpypi` (or blank)
- [ ] GitHub Environment `release` exists **with required reviewers** (Settings → Environments)
- [ ] PyPI trusted publisher exists — repo `datafolklabs/cement`, workflow `release.yml`, env `release`
- [ ] Docker Hub access token minted with push rights to `datafolklabs/cement` (OAT / bot-account PAT / maintainer PAT — see section 4)
- [ ] Repo secret `DOCKERHUB_USERNAME` set (Settings → Secrets and variables → Actions)
- [ ] Repo secret `DOCKERHUB_TOKEN` set (access token, not the account password)
- [ ] Read the Docs GitHub integration connected; tag rules allow the Actions bot to force-update tags `3` and `3.0` (see section 5 — no per-patch activation rule)
- [ ] One-time `-s ours` ancestry merge landed on `main` (section 6b — `stable/3.0.x` is diverged today and `branch-sync` WILL fail without it)
- [ ] No ruleset/protection blocks the Actions bot pushing `stable/3.0.x` (none exists as of 2026-07-12 — re-check if rules were added; section 6a)
- [x] **(dry-run)** GitHub Environment `testpypi` exists (Settings → Environments) — verified 2026-07-13 via `gh api .../environments`
- [x] **(dry-run)** TestPyPI trusted publisher exists — repo `datafolklabs/cement`, workflow `release.yml`, env `testpypi` (or blank) — proven by green dry-run 29212487225
- [x] GitHub Environment `release` exists **with required reviewers** (Settings → Environments) — verified 2026-07-13, reviewer `derks`
- [x] PyPI trusted publisher exists — repo `datafolklabs/cement`, workflow `release.yml`, env `release` — user-confirmed in PyPI UI 2026-07-13 (D-09 session)
- [x] Docker Hub access token minted with push rights to `datafolklabs/cement` (OAT / bot-account PAT / maintainer PAT — see section 4) — org OAT path (D-11 preferred), user-confirmed 2026-07-13
- [x] Repo secret `DOCKERHUB_USERNAME` set (Settings → Secrets and variables → Actions) — verified 2026-07-13 via `gh api .../actions/secrets` (repository scope)
- [x] Repo secret `DOCKERHUB_TOKEN` set (access token, not the account password) — verified 2026-07-13 via `gh api .../actions/secrets` (repository scope)
- [x] Read the Docs GitHub integration connected; tag rules allow the Actions bot to force-update tags `3` and `3.0` (see section 5 — no per-patch activation rule) — user-confirmed in RTD UI 2026-07-13; tag ruleset 18840408 is deletion-only (force-update: verify-on-run)
- [x] One-time `-s ours` ancestry merge landed on `main` (section 6b)verified 2026-07-13: merge `8978b395` on `origin/main`, two parents (`c4dc2df2` main + `0679bf51` stable tip), `merge-base --is-ancestor` prints FF-OK, `git diff` across the merge empty (zero content drift)
- [x] No ruleset/protection blocks the Actions bot pushing `stable/3.0.x` (none exists as of 2026-07-12 — re-check if rules were added; section 6a) — re-verified 2026-07-13: classic protection 404, only disabled "Default" branch ruleset
- [ ] Pre-tag check passes: `git merge-base --is-ancestor origin/stable/3.0.x <release-commit>` (A4; section 6c)
- [ ] Repo setting **"Allow GitHub Actions to create and approve pull requests"** enabled (Settings → Actions → General — required by the `dev-bump` job)
- [x] Repo setting **"Allow GitHub Actions to create and approve pull requests"** enabled (Settings → Actions → General — required by the `dev-bump` job) — verified 2026-07-13, `can_approve_pull_request_reviews: true`
- [ ] `testpypi` environment deployment branches restricted to `main` + tags (section 1 hardening — after feature-branch dry-run testing is done)
- [ ] `CHANGELOG.md` has a finalized `## <version>` section (NOT `- DEVELOPMENT`) — preflight (D-02) hard-fails otherwise (dry-runs tolerate the DEVELOPMENT marker; only real tag pushes require finalization)
- [ ] Package version (`cement.core.backend.VERSION`) equals the tag being pushed — preflight hard-fails otherwise
Expand Down
Loading