diff --git a/README.md b/README.md index bc16dcb..95d466b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@
-
+
@@ -23,11 +23,11 @@
## AI Cost Tracking
-   
-  
+   
+  
-- 🤖 **LLM usage:** $8.7470 (397 commits)
-- 👤 **Human dev:** ~$14166 (141.7h @ $100/h, 30min dedup)
+- 🤖 **LLM usage:** $1.2644 (406 commits)
+- 👤 **Human dev:** ~$14287 (142.9h @ $100/h, 30min dedup)
Generated on 2026-08-10 using [openrouter/x-ai/grok-code-fast-1](https://openrouter.ai/x-ai/grok-code-fast-1)
diff --git a/TODO.md b/TODO.md
index 99c0bcd..3bcce70 100644
--- a/TODO.md
+++ b/TODO.md
@@ -55,6 +55,9 @@
version transition after a stale tag so post-publication metadata delivery
does not select a duplicate patch. State: `DONE / PUBLICATION`;
classification: `BUG / application`.
+- [ ] Deliver [ticket-019](project/ticket-019/README.md): publish the merged
+ boundary repair as Goal 2.1.291 and verify a fresh public-index install.
+ State: `IN_PROGRESS / EDIT`; classification: `SERVICE / integration`.
- [ ] After governance bootstrap, execute the sequential phases defined in
[the refactoring plan](docs/GOAL_KORU_SUBACTOR_REFACTORING_PLAN.md), with one
narrowly scoped ticket active at a time.
@@ -62,9 +65,10 @@
> Current workflow state: `ticket-001 DONE`; `ticket-002 DONE`;
> `ticket-003 DONE`; `ticket-004 DONE`; `ticket-005 DONE`;
> `ticket-006 DONE`; `ticket-007 DONE`; `ticket-009 DONE`.
-> `ticket-010 DONE`; `ticket-011 DONE`; `ticket-012 IN_PROGRESS`;
+> `ticket-010 DONE`; `ticket-011 DONE`; `ticket-012 DONE`;
> `ticket-013 DONE`; `ticket-014 CANCELLED`; `ticket-015 DONE`;
-> `ticket-016 DONE`; `ticket-017 DONE`; `ticket-018 DONE`.
+> `ticket-016 DONE`; `ticket-017 DONE`; `ticket-018 DONE`;
+> `ticket-019 IN_PROGRESS`.
> **Recently shipped (manual note):** `goal all [PATHS...]` monorepo sweep —
> runs `goal -a` in every git repo with uncommitted changes under the given
diff --git a/VERSION b/VERSION
index 713c4e6..b6d69f4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.290
+2.1.291
diff --git a/goal/__init__.py b/goal/__init__.py
index 1916637..96a0067 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.290"
+__version__ = "2.1.291"
diff --git a/project/TICKETS.md b/project/TICKETS.md
index b72f99c..3078806 100644
--- a/project/TICKETS.md
+++ b/project/TICKETS.md
@@ -24,4 +24,5 @@ This file indexes governance tickets without taking ownership of
| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-016/ai-codex-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |
| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-017/ai-codex-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |
| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-codex.md`](./ticket-018/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-018/ai-codex-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |
+| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-codex.md`](./ticket-019/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-019/ai-codex-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |
diff --git a/project/ticket-019/README.md b/project/ticket-019/README.md
new file mode 100644
index 0000000..cc2afcd
--- /dev/null
+++ b/project/ticket-019/README.md
@@ -0,0 +1,60 @@
+# Ticket 019: Publish Goal 2.1.291
+
+- **ID**: ticket-019
+- **Owner**: unresolved:human
+- **Status**: IN_PROGRESS
+- **Workflow state**: EDIT
+- **Created**: 2026-08-10
+- **Work classification**: `SERVICE / integration`
+
+## Goal and scope
+
+Publish the ticket-018 post-release boundary repair as Goal 2.1.291. The
+release must use Goal's evidence-based version decision, synchronize every
+managed version carrier and derived lock/readme metadata, pass the complete
+test and build gates, merge through exact-head validation, and be installed
+from the public PyPI index before it is considered complete.
+
+## Acceptance criteria
+
+- [x] AC-01: `goal check-versions` selects `normal-bump -> 2.1.291` from the
+ PyPI 2.1.290 baseline and the committed ticket-018 package source.
+- [x] AC-02: `VERSION`, `pyproject.toml`, `goal/__init__.py`, `uv.lock`, and
+ `README.md` consistently describe 2.1.291.
+- [x] AC-03: The full Python suite and package build pass from the synchronized
+ release tree.
+- [ ] AC-04: The release PR passes Python 3.12/3.13 CI and exact-head validator
+ approval before merge.
+- [ ] AC-05: Goal 2.1.291 is visible on PyPI and imports as 2.1.291 in a fresh
+ environment installed only from the public index.
+
+## Session authorization
+
+The user explicitly requested autonomous continuation, testing, publication,
+dependency refresh and downstream Goal updates. This bounded release executes
+that authorization without another confirmation. Registry credentials remain
+environment-owned and are used only by the governed publish command.
+
+## Boundary
+
+Only atomic release metadata, build evidence, this ticket and the ticket index
+may change. No application source, runtime dependency constraint, governance
+policy, GitHub workflow or downstream dirty repository is modified here.
+
+## Validation evidence
+
+- Initial decision: `normal-bump -> 2.1.291` from the PyPI 2.1.290 baseline.
+- Post-sync decision: `already-bumped -> 2.1.291`; all three managed carriers
+ are on target and `uv.lock`/`README.md` are synchronized.
+- Full Python suite: `510 passed, 2 skipped`.
+- Build produced `goal-2.1.291-py3-none-any.whl` and
+ `goal-2.1.291.tar.gz`.
+- Governance limits an S delivery to five implementation files, so generated
+ release notes were removed from this atomic version-carrier slice. A
+ dependent publication-evidence slice will add the changelog after PyPI
+ verification; version, manifest, lock and badge metadata stay indivisible.
+
+## Participants
+
+- Human participant: unresolved; no user-* file was created.
+- Agent participant: [ai-codex.md](ai-codex.md)
diff --git a/project/ticket-019/ai-codex-logs.txt b/project/ticket-019/ai-codex-logs.txt
new file mode 100644
index 0000000..e6e64bc
--- /dev/null
+++ b/project/ticket-019/ai-codex-logs.txt
@@ -0,0 +1,10 @@
+- 2026-08-10: Started the bounded Goal 2.1.291 release ticket on accepted base
+ `c8ac6ef28e0e491b305b9d4f0d129116823c4100` under the user's autonomous
+ test and publication authorization.
+- 2026-08-10: Goal selected normal-bump 2.1.290 -> 2.1.291; post-sync
+ validation selected already-bumped -> 2.1.291.
+- 2026-08-10: Full suite passed (510 passed, 2 skipped); Python build produced
+ the 2.1.291 wheel and sdist.
+- 2026-08-10: Governance rejected six implementation files under S and the
+ schema disallowed M. Removed only generated top-level release notes from this
+ slice; a dependent post-publication evidence slice will own that metadata.
diff --git a/project/ticket-019/ai-codex.md b/project/ticket-019/ai-codex.md
new file mode 100644
index 0000000..315f04f
--- /dev/null
+++ b/project/ticket-019/ai-codex.md
@@ -0,0 +1,25 @@
+---
+participant-id: agent:codex
+participant: codex
+role: agent
+ticket: ticket-019
+---
+# Participant: codex (AI agent)
+
+## Understanding
+
+Ticket-018 is merged and PyPI still exposes 2.1.290. Goal now correctly sees
+the two post-transition package-source files and selects one patch release.
+
+## Execution plan
+
+1. Record the version decision and synchronize the 2.1.291 release carriers.
+2. Run the full suite, build wheel/sdist, and pass fresh-base governance.
+3. Deliver through a PR with Python 3.12/3.13 CI and exact-head validation.
+4. Publish from clean merged main and verify a fresh public-index install.
+
+## Blockers
+
+- None inside the recorded intent; proceed autonomously.
+- A registry or immutable-version conflict aborts publication rather than
+ replacing an existing artifact.
diff --git a/project/ticket-019/changelog.md b/project/ticket-019/changelog.md
new file mode 100644
index 0000000..d935638
--- /dev/null
+++ b/project/ticket-019/changelog.md
@@ -0,0 +1,13 @@
+# Ticket Changelog (ticket-019)
+
+## [0.1.0] - 2026-08-10
+
+- Initialized the bounded release ticket after ticket-018 application and
+ closure PRs passed protected delivery.
+- No human participant identity or content was generated.
+- Goal selected `normal-bump -> 2.1.291` from the public 2.1.290 baseline and
+ synchronized every approved release carrier.
+- Full tests passed (510 passed, 2 skipped); wheel and sdist builds succeeded.
+- Kept the release at the accepted S limit by moving generated release notes
+ to a dependent publication-evidence slice; the five synchronized
+ version/manifest/lock/badge files remain atomic.
diff --git a/project/ticket-019/intent.json b/project/ticket-019/intent.json
new file mode 100644
index 0000000..af67ea6
--- /dev/null
+++ b/project/ticket-019/intent.json
@@ -0,0 +1,106 @@
+{
+ "schema": "new-project.intent/v3",
+ "ticket": "ticket-019",
+ "summary": "Publish Goal 2.1.291",
+ "workstream": "integration",
+ "classification": {
+ "kind": "SERVICE",
+ "priority": "P1",
+ "origin": "requested"
+ },
+ "allowedPaths": [
+ "VERSION",
+ "README.md",
+ "pyproject.toml",
+ "uv.lock",
+ "goal/__init__.py",
+ "project/ticket-019/**",
+ "project/TICKETS.md",
+ "TODO.md"
+ ],
+ "forbiddenPaths": ["project/ticket-*/user-*.md"],
+ "stacks": ["python"],
+ "dependsOn": ["ticket-018"],
+ "conflictsWith": [],
+ "integrationTicket": null,
+ "delivery": {
+ "acceptedBaseSha": "c8ac6ef28e0e491b305b9d4f0d129116823c4100",
+ "targetBranch": "main",
+ "outcome": "Goal 2.1.291 is atomically versioned, protected, published and verified from the public registry",
+ "nonGoals": [
+ "No application source changes",
+ "No dependency constraint changes",
+ "No governance or CI policy changes",
+ "No writes to dirty downstream repositories"
+ ],
+ "complexity": "S",
+ "estimatedMinutes": 30,
+ "budgets": {
+ "maxImplementationFiles": 5,
+ "maxAffectedComponents": 1,
+ "maxPublicInterfaceChanges": 0,
+ "maxRuntimeDependencies": 0
+ },
+ "architecture": {
+ "status": "accepted",
+ "decision": "Apply Goal's normal patch decision as one synchronized release transition, protect it through exact-head PR validation, then publish only from clean main",
+ "components": [
+ {
+ "name": "release-metadata",
+ "paths": [
+ "VERSION",
+ "README.md",
+ "pyproject.toml",
+ "uv.lock",
+ "goal/__init__.py"
+ ]
+ }
+ ],
+ "responsibilityChanges": false,
+ "interfaceChanges": [],
+ "dataChanges": [],
+ "ui": {
+ "impact": "none",
+ "states": [],
+ "evidence": []
+ },
+ "rollback": "Do not publish or merge the release when version, build, CI or exact-head evidence disagrees"
+ },
+ "runtimeDependencies": [],
+ "validation": [
+ {
+ "criterion": "AC-01",
+ "commands": [".venv/bin/goal check-versions"],
+ "evidence": "Decision is normal-bump from PyPI 2.1.290 to 2.1.291"
+ },
+ {
+ "criterion": "AC-02",
+ "commands": [".venv/bin/goal check-versions"],
+ "evidence": "All managed carriers and derived files agree on 2.1.291"
+ },
+ {
+ "criterion": "AC-03",
+ "commands": [
+ ".venv/bin/python -m pytest tests -q",
+ ".venv/bin/python -m build"
+ ],
+ "evidence": "Complete suite and wheel/sdist build pass"
+ },
+ {
+ "criterion": "AC-04",
+ "commands": [
+ "./project/governance-check.sh --base c8ac6ef28e0e491b305b9d4f0d129116823c4100"
+ ],
+ "evidence": "Governance, target CI and external exact-head validation pass"
+ },
+ {
+ "criterion": "AC-05",
+ "commands": [
+ "python -m pip install --index-url https://pypi.org/simple goal==2.1.291",
+ "goal --version"
+ ],
+ "evidence": "Fresh public-index installation reports Goal 2.1.291"
+ }
+ ]
+ }
+}
diff --git a/project/ticket-019/preprompt.md b/project/ticket-019/preprompt.md
new file mode 100644
index 0000000..1bdaa5d
--- /dev/null
+++ b/project/ticket-019/preprompt.md
@@ -0,0 +1,9 @@
+# Preprompt: ticket-019
+
+Publish the already merged ticket-018 package-source repair as Goal 2.1.291.
+Use the version baseline and committed-source evidence reported by Goal. Keep
+all release carriers synchronized, validate the exact PR head externally, and
+publish only after the protected merge reaches a clean `main` checkout.
+
+Do not change application source, dependencies, governance, CI, or downstream
+repositories. Do not create a human participant file or infer human identity.
diff --git a/pyproject.toml b/pyproject.toml
index 4862be1..d183c41 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "goal"
-version = "2.1.290"
+version = "2.1.291"
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 42aae0a..692c74e 100644
--- a/uv.lock
+++ b/uv.lock
@@ -771,7 +771,7 @@ wheels = [
[[package]]
name = "goal"
-version = "2.1.290"
+version = "2.1.291"
source = { editable = "." }
dependencies = [
{ name = "click" },