diff --git a/README.md b/README.md index 9f5631f..fe587cc 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

- Version + Version Python License PyPI @@ -23,7 +23,7 @@ ## AI Cost Tracking -![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.1.299-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) +![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.1.300-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green) ![AI Cost](https://img.shields.io/badge/AI%20Cost-$0.91-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-176.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fx--ai%2Fgrok--code--fast--1-lightgrey) - 🤖 **LLM usage:** $0.9104 (531 commits) diff --git a/TODO.md b/TODO.md index 97d7b9b..970a529 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,13 @@ ## Governed architecture roadmap +- [ ] Deliver [ticket-061](project/ticket-061/README.md): publish the merged + retry-safe runtime, doctor, producer and tracked configuration fixes as Goal + 2.1.300, then prove the public package on a disposable Glon checkout. State: + `IN_PROGRESS / PUBLICATION`; 618 tests (2 skips), scoped Ruff, governance + and isolated wheel/sdist validation pass; classification: + `SERVICE / P0 / requested`; depends on ticket-060. + - [x] Deliver [ticket-060](project/ticket-060/README.md): align Goal's own tracked Python strategy with the retry-safe Twine contract while preserving Node and Rust publishers. State: `DONE / DONE`; 618 tests (2 skips), diff --git a/VERSION b/VERSION index f6e2897..4aeb281 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.299 +2.1.300 diff --git a/goal/__init__.py b/goal/__init__.py index bf720ef..b1e4971 100644 --- a/goal/__init__.py +++ b/goal/__init__.py @@ -1,3 +1,3 @@ """Goal - Automated git push with smart commit messages, changelog updates, and version tagging.""" -__version__ = "2.1.299" +__version__ = "2.1.300" diff --git a/project/TICKETS.md b/project/TICKETS.md index 59881ac..a1dfee9 100644 --- a/project/TICKETS.md +++ b/project/TICKETS.md @@ -63,4 +63,5 @@ This file indexes governance tickets without taking ownership of | **ticket-058** | [`README.md`](./ticket-058/README.md) | [`preprompt.md`](./ticket-058/preprompt.md) | - | [`ai-codex.md`](./ticket-058/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-058/ai-codex-logs.txt) | [`changelog.md`](./ticket-058/changelog.md) | | **ticket-059** | [`README.md`](./ticket-059/README.md) | [`preprompt.md`](./ticket-059/preprompt.md) | - | [`ai-codex.md`](./ticket-059/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-059/ai-codex-logs.txt) | [`changelog.md`](./ticket-059/changelog.md) | | **ticket-060** | [`README.md`](./ticket-060/README.md) | [`preprompt.md`](./ticket-060/preprompt.md) | - | [`ai-codex.md`](./ticket-060/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-060/ai-codex-logs.txt) | [`changelog.md`](./ticket-060/changelog.md) | +| **ticket-061** | [`README.md`](./ticket-061/README.md) | [`preprompt.md`](./ticket-061/preprompt.md) | - | [`ai-codex.md`](./ticket-061/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-061/ai-codex-logs.txt) | [`changelog.md`](./ticket-061/changelog.md) | diff --git a/project/ticket-061/README.md b/project/ticket-061/README.md new file mode 100644 index 0000000..457f4a4 --- /dev/null +++ b/project/ticket-061/README.md @@ -0,0 +1,66 @@ +# Ticket 061: Publish Goal 2.1.300 retry-safe release + +- **ID**: ticket-061 +- **Owner**: unresolved:human +- **Status**: IN_PROGRESS +- **Workflow state**: PUBLICATION +- **Created**: 2026-08-12 + +## Goal and scope + +Publish Goal 2.1.300 from the exact merged retry-safety chain in tickets 058, +059 and 060. Synchronize only the five established release carriers through a +protected PR, then publish the wheel, sdist, annotated tag and final GitHub +Release exclusively from the clean, retested merge SHA. Prove the public +package on a disposable exact Glon checkout while preserving the user's dirty +live checkout. + +## Acceptance criteria + +- [x] AC-01: The user's instruction to repair and continue records + `SESSION_EXECUTION_AUTHORIZATION` for the bounded release. +- [x] AC-02: The governed PR synchronizes exactly VERSION, `pyproject.toml`, + `goal/__init__.py`, README version badges and `uv.lock` to 2.1.300, plus + this ticket's governance evidence. +- [ ] AC-03: Full tests, scoped Ruff, governance and wheel/sdist pass; + protected CI and Validator Agent approve the exact final PR head. +- [ ] AC-04: Clean merged `main` is retested before registry/tag/Release + effects and produces exactly one wheel and one sdist for 2.1.300. +- [ ] AC-05: PyPI, annotated `v2.1.300` and the final GitHub Release bind to + the exact merge and immutable hashes are recorded. +- [ ] AC-06: A fresh public-index install reports 2.1.300 and safely diagnoses + or executes the bounded Glon path without changing the live dirty checkout. + +## Boundary + +- No executable source belongs to this release ticket; implementation is + already integrated and independently approved in tickets 058-060. +- Top-level CHANGELOG is not rewritten; the release narrative lives here. +- No registry, tag or Release action occurs before protected merge and clean + merge validation. Existing immutable releases are never moved. +- Do not modify the live Glon checkout or its user-owned dirty files. + +## Participants + +- Human participant: unresolved; no user-* file was created by this script. +- Agent participant: [ai-codex.md](ai-codex.md) + +## Pre-publication evidence + +- Accepted base is clean `main@ad06f17`; tickets 058-060 are DONE, their + exact-head reviews and post-merge CI passed, and Goal has one main branch, + one worktree, zero open PRs and zero open issues. +- PyPI returned HTTP 404 for 2.1.300; neither local/remote `v2.1.300` nor a + GitHub Release exists before publication. + +## Candidate evidence + +- Goal's own `goal version patch` synchronized exactly the five declared + release carriers to 2.1.300; dependency versions and non-carrier files did + not change. +- 618 tests pass with 2 existing skips; scoped Ruff, governance (0 errors / 0 + warnings) and whitespace validation pass. +- An isolated package build produced exactly + `goal-2.1.300-py3-none-any.whl` and `goal-2.1.300.tar.gz`; both metadata + records declare version 2.1.300. Candidate build output and generated + metadata were removed after verification. diff --git a/project/ticket-061/ai-codex-logs.txt b/project/ticket-061/ai-codex-logs.txt new file mode 100644 index 0000000..fb05ddd --- /dev/null +++ b/project/ticket-061/ai-codex-logs.txt @@ -0,0 +1,7 @@ +2026-08-12T18:36:00Z ticket-061 allocated on clean accepted base ad06f1706ab1e90527bf4b9bc84a940a41af003d after tickets 058-060 closure and exact workspace cleanup. +2026-08-12T18:36:00Z SESSION_EXECUTION_AUTHORIZATION recorded from the user's instruction to repair and continue. +2026-08-12T18:36:00Z preflight: PyPI goal/2.1.300 HTTP 404; local tag absent; remote tag absent; GitHub Release absent; Goal has one clean main worktree/branch and zero open PRs/issues. +2026-08-12T18:40:00Z contract correction: allowedPaths already named goal/__init__.py as one of five release carriers, but a contradictory broad forbidden goal/**/*.py also matched it. Removed only the contradictory forbidden entry; allowed scope and budgets are unchanged. The ambient Glon venv lacks `build`, so package validation uses Goal's repository interpreter. +2026-08-12T18:42:00Z Goal version patch synchronized exactly VERSION, pyproject.toml, uv.lock, README.md and goal/__init__.py from 2.1.299 to 2.1.300; all five are staged and no other implementation path changed. +2026-08-12T18:42:00Z candidate validation: 618 full PASS/2 SKIP; scoped Ruff PASS; governance GOV-PASS 0 errors/0 warnings; whitespace PASS. Isolated build produced exactly goal-2.1.300-py3-none-any.whl and goal-2.1.300.tar.gz with matching 2.1.300 metadata. +2026-08-12T18:42:30Z cleanup: disposable candidate artifacts, goal.egg-info, build and dist are absent; only the five release carriers and ticket evidence remain changed. diff --git a/project/ticket-061/ai-codex.md b/project/ticket-061/ai-codex.md new file mode 100644 index 0000000..05ede1e --- /dev/null +++ b/project/ticket-061/ai-codex.md @@ -0,0 +1,41 @@ +--- +participant-id: agent:codex +participant: codex +role: agent +ticket: ticket-061 +--- +# Participant: codex (AI agent) + +## Understanding + +Tickets 058-060 are already integrated, independently approved and clean. +This ticket only publishes their exact retry-safe behavior through the +established release carriers and proves the public package on a disposable +Glon copy so existing user work remains untouched. + +## Execution plan + +1. Commit the bounded release plan on the exact clean accepted base. +2. Use Goal to synchronize the five release carriers and open a protected PR. +3. Validate the exact candidate with tests, governance and package build. +4. Require exact-head Validator approval and green hosted checks before merge. +5. Retest clean merged main, publish immutable artifacts, then verify a fresh + public install in the bounded Glon reproduction. + +## Actual changes + +- Initialized the bounded ticket and recorded SESSION_EXECUTION_AUTHORIZATION + from the request to execute this work. +- Declared a metadata-only release boundary; tickets 058-060 own all source + and configuration implementation. +- Used Goal's version command to synchronize exactly the five declared release + carriers, then passed full tests, Ruff, governance and isolated artifact + validation. +- Removed the disposable candidate artifacts and generated package metadata; + moved to PUBLICATION for the updated exact PR head. + +## Blockers + +- None inside the recorded intent; proceed without a second confirmation. +- New authority remains required for destructive action, secret access, new + external coordination, material objective expansion and trusted merge. diff --git a/project/ticket-061/changelog.md b/project/ticket-061/changelog.md new file mode 100644 index 0000000..ded83c4 --- /dev/null +++ b/project/ticket-061/changelog.md @@ -0,0 +1,10 @@ +# Ticket Changelog (ticket-061) + +## [0.1.0] - 2026-08-12 + +- Initial governance scaffold created. +- No human participant identity or content was generated. +- Bounded the 2.1.300 release to five established version carriers after + confirming every public artifact namespace is unused. +- Synchronized the five carriers through Goal, validated the full suite and + exact package metadata, then removed all candidate build output. diff --git a/project/ticket-061/intent.json b/project/ticket-061/intent.json new file mode 100644 index 0000000..51cf657 --- /dev/null +++ b/project/ticket-061/intent.json @@ -0,0 +1,90 @@ +{ + "schema": "new-project.intent/v3", + "ticket": "ticket-061", + "summary": "Publish Goal 2.1.300 retry-safe release", + "workstream": "integration", + "classification": { + "kind": "SERVICE", + "priority": "P0", + "origin": "requested" + }, + "allowedPaths": [ + "VERSION", + "pyproject.toml", + "uv.lock", + "goal/__init__.py", + "README.md", + "project/ticket-061/**", + "TODO.md", + "project/TICKETS.md" + ], + "forbiddenPaths": [ + "project/ticket-*/user-*.md", + "tests/**", + ".github/**", + ".env", + "**/*.pem", + "**/*secret*" + ], + "stacks": ["python", "docker"], + "dependsOn": ["ticket-060"], + "conflictsWith": [], + "integrationTicket": null, + "delivery": { + "acceptedBaseSha": "ad06f1706ab1e90527bf4b9bc84a940a41af003d", + "targetBranch": "main", + "outcome": "Goal 2.1.300 publishes the complete retry-safe Python publication contract and proves it without touching live Glon work", + "nonGoals": [ + "No executable source, dependency-set or top-level CHANGELOG change", + "No publication, tag or GitHub Release before protected merge", + "No duplicate, replacement or moved registry artifact", + "No mutation of the user's live Glon checkout" + ], + "complexity": "S", + "estimatedMinutes": 30, + "budgets": { + "maxImplementationFiles": 5, + "maxAffectedComponents": 2, + "maxPublicInterfaceChanges": 0, + "maxRuntimeDependencies": 0 + }, + "architecture": { + "status": "accepted", + "decision": "Synchronize the five existing release carriers through governed PR delivery, then publish only from exact validated merged main", + "components": [ + { + "name": "release-metadata", + "paths": ["VERSION", "pyproject.toml", "uv.lock", "goal/__init__.py", "README.md"] + } + ], + "responsibilityChanges": false, + "interfaceChanges": [], + "dataChanges": [], + "ui": {"impact": "none", "states": [], "evidence": []}, + "rollback": "Never replace immutable artifacts; issue a later patch if public verification fails" + }, + "runtimeDependencies": [], + "validation": [ + { + "criterion": "AC-02", + "commands": ["goal -a --delivery-mode pull-request --target-version 2.1.300 push --ticket ticket-061 --no-changelog --no-publish"], + "evidence": "project/ticket-061/ai-codex-logs.txt" + }, + { + "criterion": "AC-03", + "commands": ["pytest -q", "ruff check scoped paths", "./project/governance-check.sh", "python -m build"], + "evidence": "project/ticket-061/ai-codex-logs.txt" + }, + { + "criterion": "AC-04", + "commands": ["clean merged-main retest", "goal -a --delivery-mode publish-only --force-publish"], + "evidence": "project/ticket-061/ai-codex-logs.txt" + }, + { + "criterion": "AC-06", + "commands": ["fresh public-index goal==2.1.300 install", "bounded disposable Glon verification"], + "evidence": "project/ticket-061/ai-codex-logs.txt" + } + ] + } +} diff --git a/project/ticket-061/preprompt.md b/project/ticket-061/preprompt.md new file mode 100644 index 0000000..8a9baec --- /dev/null +++ b/project/ticket-061/preprompt.md @@ -0,0 +1,12 @@ +# Ticket preprompt + +- **Task ID**: ticket-061 +- **Task title**: Publish Goal 2.1.300 retry-safe release +- **Created**: 2026-08-12T18:36:11Z + +Keep executable implementation outside this governance/evidence directory. +Read a human-owned user-*.md file only when one exists. +The request to execute this work creates SESSION_EXECUTION_AUTHORIZATION; +proceed within the recorded intent without a redundant confirmation prompt. +Require new authority for destructive action, secrets, external coordination, +material objective expansion and trusted merge approval. diff --git a/pyproject.toml b/pyproject.toml index 07b82e6..6474699 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "goal" -version = "2.1.299" +version = "2.1.300" description = "Goal - Automated git push with enterprise-grade commit intelligence, smart conventional commit generation based on deep code analysis, and interactive release workflow management." readme = "README.md" authors = [ diff --git a/uv.lock b/uv.lock index 08d86f4..cd97cb0 100644 --- a/uv.lock +++ b/uv.lock @@ -771,7 +771,7 @@ wheels = [ [[package]] name = "goal" -version = "2.1.299" +version = "2.1.300" source = { editable = "." } dependencies = [ { name = "click" },