diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index d6cf1a1..7c9dbf9 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "codex-usage-tracker", - "version": "0.8.1", + "version": "0.9.0", "description": "Unofficial local tracker for aggregate Codex token usage from local session logs.", "author": { "name": "Douglas Monsky" diff --git a/CHANGELOG.md b/CHANGELOG.md index 499b92a..4ae8d38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ ## Unreleased +## 0.9.0 - 2026-06-21 + +- Add persisted aggregate diagnostic snapshots with explicit on-demand refresh metadata and schema-versioned CLI/API contracts. +- Add dashboard Diagnostics panels for overview, tool output, commands, file reads, read productivity, and concentration. +- Add tool-output and command reports with terminal token-count buckets, missing-count coverage, command roots, and expandable command children. +- Add file-read and read-productivity reports with token allocation, largest read commands, read-to-modify correlation, and privacy-safe path labels. +- Add concentration reports for top source/session, project/cwd, and day shares without leaking raw source-log paths. +- Keep Diagnostics refresh isolated from normal live dashboard refresh so regular usage updates do not recompute or blink diagnostic panels. +- Add Playwright diagnostics smoke coverage and release documentation for the snapshot pipeline, privacy boundary, and on-demand refresh behavior. + ## 0.8.1 - 2026-06-20 - Make Diagnostics fact tables easier to scan by widening and pinning the Fact column while horizontally scrolling. diff --git a/docs/development.md b/docs/development.md index 431cb0a..506b046 100644 --- a/docs/development.md +++ b/docs/development.md @@ -38,7 +38,7 @@ fix/-short-description docs/-short-description chore/-short-description test/-short-description -release/0.8.1 +release/0.9.0 hotfix/0.3.3 ``` @@ -91,7 +91,7 @@ blocked Recommended milestones: ```text -0.8.1 +0.9.0 1.0-readiness 1.0.0 ``` @@ -146,8 +146,8 @@ python scripts/smoke_installed_package.py --docker To verify the public PyPI package instead of the local checkout: ```bash -python scripts/smoke_installed_package.py --from-pypi --version 0.8.1 -python scripts/smoke_installed_package.py --docker --from-pypi --version 0.8.1 +python scripts/smoke_installed_package.py --from-pypi --version 0.9.0 +python scripts/smoke_installed_package.py --docker --from-pypi --version 0.9.0 ``` `scripts/check_release.py` treats these public-package smoke commands as release-state claims. Keep their `--version` and `codex-usage-tracking==...` values aligned with `pyproject.toml`; the release gate fails when the docs claim a different public version. It also checks that install docs point at the real PyPI distribution, `codex-usage-tracking`, and keep the warning that `codex-usage-tracker` is a different PyPI package. @@ -293,8 +293,8 @@ After the release branch merges, tag from updated `main`, not from an unreviewed ```bash git switch main git pull --ff-only -git tag -a v0.8.1 -m "codex-usage-tracker 0.8.1" -git push origin v0.8.1 +git tag -a v0.9.0 -m "codex-usage-tracker 0.9.0" +git push origin v0.9.0 ``` Do not create or push release tags without maintainer approval. @@ -303,7 +303,7 @@ Do not create or push release tags without maintainer approval. Publishing uses GitHub Actions Trusted Publishing through `.github/workflows/publish.yml`; do not upload from a local machine and do not add PyPI or TestPyPI API tokens. -The first public package release, `0.3.0`, was published on June 8, 2026. Patch release `0.3.1` followed the same day to ship the live-dashboard skill launch fix. Patch release `0.3.2` made dashboard launch refresh the default and added runtime enablement for context loading. Minor release `0.4.0` added Python 3.14 support, release recovery docs, stricter privacy/support-bundle regression coverage, and large-history benchmark thresholds. Patch release `0.4.1` was published by workflow dispatch from `main`; it hardened the PyPI publish workflow and checked off completed 1.0 readiness gates. Minor release `0.5.0` added dashboard localization support and initial language catalogs. Minor release `0.6.0` is the performance and call-drilldown release with SQL-backed live API slices, materialized thread summaries, faster evidence loading, and dashboard runtime module refactors. Patch release `0.6.1` aligns the final README/package screenshots and companion plugin assets. Minor release `0.7.0` adds observed usage snapshots and the latest-observed dashboard card while keeping raw evidence on demand only. Minor release `0.8.0` adds aggregate diagnostics, source-offset context seeking, and live dashboard loading hardening. Patch release `0.8.1` improves Diagnostics fact table readability with pinned fact names and sortable fact columns. +The first public package release, `0.3.0`, was published on June 8, 2026. Patch release `0.3.1` followed the same day to ship the live-dashboard skill launch fix. Patch release `0.3.2` made dashboard launch refresh the default and added runtime enablement for context loading. Minor release `0.4.0` added Python 3.14 support, release recovery docs, stricter privacy/support-bundle regression coverage, and large-history benchmark thresholds. Patch release `0.4.1` was published by workflow dispatch from `main`; it hardened the PyPI publish workflow and checked off completed 1.0 readiness gates. Minor release `0.5.0` added dashboard localization support and initial language catalogs. Minor release `0.6.0` is the performance and call-drilldown release with SQL-backed live API slices, materialized thread summaries, faster evidence loading, and dashboard runtime module refactors. Patch release `0.6.1` aligns the final README/package screenshots and companion plugin assets. Minor release `0.7.0` adds observed usage snapshots and the latest-observed dashboard card while keeping raw evidence on demand only. Minor release `0.8.0` adds aggregate diagnostics, source-offset context seeking, and live dashboard loading hardening. Patch release `0.8.1` improves Diagnostics fact table readability with pinned fact names and sortable fact columns. Minor release `0.9.0` adds persisted diagnostic snapshots, on-demand diagnostic refresh, tool/command/file-read/concentration reports, and Diagnostics dashboard panels. - GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.0` - GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.1` diff --git a/docs/one-dot-oh-readiness.md b/docs/one-dot-oh-readiness.md index 5a107ab..a9ad5d3 100644 --- a/docs/one-dot-oh-readiness.md +++ b/docs/one-dot-oh-readiness.md @@ -24,12 +24,12 @@ Not guaranteed: ## 1. Public Install And Package Metadata -- [x] Verify the current public PyPI version is visible as `0.8.1`: `python -c "import json, urllib.request; print(json.load(urllib.request.urlopen('https://pypi.org/pypi/codex-usage-tracking/json'))['info']['version'])"`. -- [x] Verify public venv install for `0.8.1`: `python -m venv /tmp/codex-usage-pypi-smoke && . /tmp/codex-usage-pypi-smoke/bin/activate && python -m pip install codex-usage-tracking==0.8.1 && codex-usage-tracker --version`. -- [x] Verify public pipx install path for `0.8.1`: `PIPX_HOME=/tmp/codex-usage-pipx-home PIPX_BIN_DIR=/tmp/codex-usage-pipx-bin pipx install codex-usage-tracking==0.8.1 && /tmp/codex-usage-pipx-bin/codex-usage-tracker --version`. +- [x] Verify the current public PyPI version is visible as `0.9.0`: `python -c "import json, urllib.request; print(json.load(urllib.request.urlopen('https://pypi.org/pypi/codex-usage-tracking/json'))['info']['version'])"`. +- [x] Verify public venv install for `0.9.0`: `python -m venv /tmp/codex-usage-pypi-smoke && . /tmp/codex-usage-pypi-smoke/bin/activate && python -m pip install codex-usage-tracking==0.9.0 && codex-usage-tracker --version`. +- [x] Verify public pipx install path for `0.9.0`: `PIPX_HOME=/tmp/codex-usage-pipx-home PIPX_BIN_DIR=/tmp/codex-usage-pipx-bin pipx install codex-usage-tracking==0.9.0 && /tmp/codex-usage-pipx-bin/codex-usage-tracker --version`. - [x] Verify installed package resources from a built wheel: `python scripts/smoke_installed_package.py`. - [x] Verify installed package resources in Linux Docker: `python scripts/smoke_installed_package.py --docker`. -- [x] Verify public PyPI package in Docker: `python scripts/smoke_installed_package.py --docker --from-pypi --version 0.8.1`. +- [x] Verify public PyPI package in Docker: `python scripts/smoke_installed_package.py --docker --from-pypi --version 0.9.0`. - [x] Verify PyPI metadata names remain unchanged: `python scripts/check_release.py`. - [x] Add Python 3.14 as an official support target after CI, package classifiers, docs, and installed-package smoke coverage were added. Docker smoke coverage uses `python:3.14-slim` by default. Track this in issue #12. @@ -134,14 +134,14 @@ Not guaranteed: ## Evidence References -These references are the concrete proof behind completed checklist items. Public package smoke commands are version-specific to `0.8.1`; all repo tests use synthetic or aggregate-only data. +These references are the concrete proof behind completed checklist items. Public package smoke commands are version-specific to `0.9.0`; all repo tests use synthetic or aggregate-only data. ### Public Install And Package Metadata - Public PyPI version, public venv install, and public pipx install are proven by the exact public-install commands in section 1. - Built-wheel and installed-resource coverage is proven by `scripts/smoke_installed_package.py` and `tests/test_cli_release.py::test_installed_package_smoke_checks_help_for_stable_commands`. - Linux package-resource coverage is proven by `scripts/smoke_installed_package.py --docker`. -- Public PyPI Docker coverage is proven by `scripts/smoke_installed_package.py --docker --from-pypi --version 0.8.1`. +- Public PyPI Docker coverage is proven by `scripts/smoke_installed_package.py --docker --from-pypi --version 0.9.0`. - PyPI metadata, package/distribution names, package resources, source/wheel member names, Python 3.10-3.14 support metadata, CI workflow requirements, publish workflow safety text, and tracked secret patterns are proven by `scripts/check_release.py`, `scripts/check_release.py --dist`, and `tests/test_cli_release.py::test_release_check_script_passes`. ### Upgrade And Migration @@ -219,8 +219,8 @@ These references are the concrete proof behind completed checklist items. Public - Publish workflow package name, Trusted Publishing, TestPyPI/PyPI job presence, event guards, no push/PR publishing, no token/password publishing, and manual PyPI main/tag preflight are proven by `scripts/check_release.py::_check_publish_workflow`. - The GitHub `pypi` environment gate is proven by `gh api repos/douglasmonsky/codex-usage-tracker/environments/pypi`, which reports a `required_reviewers` protection rule and `can_admins_bypass=false`. - Dist filename and wheel/sdist member checks are proven by `python -m build`, `python -m twine check dist/*`, and `python scripts/check_release.py --dist`. -- TestPyPI publish process is proven by a workflow-dispatch run on `main`, followed by TestPyPI metadata and clean virtualenv install checks for `codex-usage-tracking==0.8.1`. -- PyPI publish process is proven by a workflow-dispatch run on `main`, protected `pypi` environment approval, PyPI metadata visibility, clean virtualenv install, temporary pipx install, and Docker public-package smoke for `codex-usage-tracking==0.8.1`. +- TestPyPI publish process is proven by a workflow-dispatch run on `main`, followed by TestPyPI metadata and clean virtualenv install checks for `codex-usage-tracking==0.9.0`. +- PyPI publish process is proven by a workflow-dispatch run on `main`, protected `pypi` environment approval, PyPI metadata visibility, clean virtualenv install, temporary pipx install, and Docker public-package smoke for `codex-usage-tracking==0.9.0`. - Release recovery documentation is proven by `scripts/check_release.py` required-file and docs checks. ### Known Limitations diff --git a/pyproject.toml b/pyproject.toml index 7df3a32..b2eea93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "codex-usage-tracking" -version = "0.8.1" +version = "0.9.0" description = "Unofficial local Codex plugin and dashboard for investigating aggregate token usage, costs, caching, and thread patterns." readme = "README.md" requires-python = ">=3.10" diff --git a/skills/codex-usage-tracker/scripts/run_mcp.py b/skills/codex-usage-tracker/scripts/run_mcp.py index 3387296..fea2f91 100644 --- a/skills/codex-usage-tracker/scripts/run_mcp.py +++ b/skills/codex-usage-tracker/scripts/run_mcp.py @@ -15,9 +15,9 @@ PACKAGE_SPEC = os.environ.get( "CODEX_USAGE_TRACKER_PACKAGE_SPEC", - "codex-usage-tracking==0.8.1", + "codex-usage-tracking==0.9.0", ) -RUNTIME_VERSION = "0.8.1" +RUNTIME_VERSION = "0.9.0" PACKAGE_SPEC_MARKER = ".codex-usage-tracker-package-spec" MODULE_CHECK = ( "import importlib.metadata; " diff --git a/src/codex_usage_tracker/__init__.py b/src/codex_usage_tracker/__init__.py index 54addb6..27df510 100644 --- a/src/codex_usage_tracker/__init__.py +++ b/src/codex_usage_tracker/__init__.py @@ -2,6 +2,6 @@ from codex_usage_tracker.models import UsageEvent -__version__ = "0.8.1" +__version__ = "0.9.0" __all__ = ["UsageEvent", "__version__"]