copilot-session-usage 0.6.1__tar.gz → 0.6.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/skills/gh-release-notes/SKILL.md +78 -35
  2. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/workflows/release-notes.yml +1 -1
  3. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/workflows/release.yml +1 -1
  4. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/AGENTS.md +10 -0
  5. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/PKG-INFO +1 -1
  6. copilot_session_usage-0.6.2/knowledge/findings/2026.07.13-14.27-release-notes-overreported-maintainer-changes.md +34 -0
  7. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/findings/index.md +1 -0
  8. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.editorconfig +0 -0
  9. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.gitattributes +0 -0
  10. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  12. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/changes/requests/skill-breakdown/01-request.md +0 -0
  13. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/guidelines/git-commit-message.guideline.md +0 -0
  14. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/guidelines/knowledge-base.guidelines.md +0 -0
  15. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/pull_request_template.md +0 -0
  16. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/skills/consolidate-knowledge-base/SKILL.md +0 -0
  17. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/skills/record-finding/SKILL.md +0 -0
  18. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/workflows/ci.yml +0 -0
  19. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/workflows/publish.yml +0 -0
  20. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.github/workflows/refresh-pricing.yml +0 -0
  21. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.gitignore +0 -0
  22. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/.readthedocs.yaml +0 -0
  23. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/CHANGELOG.md +0 -0
  24. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/CONTRIBUTING.md +0 -0
  25. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/LICENSE +0 -0
  26. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/README.md +0 -0
  27. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/internal/automated_release_proces.md +0 -0
  28. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/_static/changelog.js +0 -0
  29. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/_static/custom.css +0 -0
  30. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/changelog.md +0 -0
  31. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/conf.py +0 -0
  32. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/explanation/how-cost-estimation-works.md +0 -0
  33. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/explanation/index.md +0 -0
  34. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/how-to/add-commit-trailer.md +0 -0
  35. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/how-to/analyze-specific-session.md +0 -0
  36. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/how-to/batch-and-spending.md +0 -0
  37. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/how-to/export-json.md +0 -0
  38. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/how-to/index.md +0 -0
  39. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/how-to/wsl2.md +0 -0
  40. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/index.md +0 -0
  41. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/installation.md +0 -0
  42. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/reference/api.md +0 -0
  43. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/reference/cli.md +0 -0
  44. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/reference/index.md +0 -0
  45. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/reference/pricing.md +0 -0
  46. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/tutorials/getting-started.md +0 -0
  47. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/docs/source/tutorials/index.md +0 -0
  48. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/justfile +0 -0
  49. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Base.schema.yaml +0 -0
  50. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Concept.schema.yaml +0 -0
  51. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Experiment.schema.yaml +0 -0
  52. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Finding.schema.yaml +0 -0
  53. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Hypothesis.schema.yaml +0 -0
  54. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Outcome.schema.yaml +0 -0
  55. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Playbook.schema.yaml +0 -0
  56. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Principle.schema.yaml +0 -0
  57. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Reference.schema.yaml +0 -0
  58. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/_schema/Structure.schema.yaml +0 -0
  59. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/concepts/copilot-cli.md +0 -0
  60. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/concepts/index.md +0 -0
  61. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/concepts/overview.md +0 -0
  62. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/concepts/session-cost-analysis.md +0 -0
  63. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/concepts/threshold-based-pricing.md +0 -0
  64. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/experiments/index.md +0 -0
  65. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/experiments/verify-subagent-cost-attribution.md +0 -0
  66. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/findings/2026.07.02-00.00-subagent-logs-runsubagent-prefix.md +0 -0
  67. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/findings/2026.07.02-22.00-title-generation-not-counted-as-model-turn.md +0 -0
  68. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/findings/2026.07.02-23.00-cache-write-approximation.md +0 -0
  69. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/guides/automation-scripts.md +0 -0
  70. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/guides/cost-optimization.md +0 -0
  71. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/guides/index.md +0 -0
  72. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/guides/wsl2-setup.md +0 -0
  73. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/ideas/index.md +0 -0
  74. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/ideas/multi-session-efficiency-analytics.md +0 -0
  75. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/index.md +0 -0
  76. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/log.md +0 -0
  77. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/principles/findings-are-immutable.md +0 -0
  78. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/principles/index.md +0 -0
  79. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/reference/debug-log-format.md +0 -0
  80. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/reference/index.md +0 -0
  81. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/reference/pricing-formats.md +0 -0
  82. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/structures/cache-cost-approximation.md +0 -0
  83. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/structures/index.md +0 -0
  84. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/structures/knowledge-base-information-types.md +0 -0
  85. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/structures/session-discovery-algorithm.md +0 -0
  86. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/structures/subagent-cost-tracking.md +0 -0
  87. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/knowledge/structures/vscode-copilot-extension.md +0 -0
  88. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/pyproject.toml +0 -0
  89. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/scripts/refresh_pricing.py +0 -0
  90. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/skills/copilot-session-usage/SKILL.md +0 -0
  91. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/__init__.py +0 -0
  92. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/_internal/__init__.py +0 -0
  93. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/_internal/copilot_cli.py +0 -0
  94. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/_internal/core.py +0 -0
  95. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/_internal/git.py +0 -0
  96. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/_internal/vscode.py +0 -0
  97. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/api.py +0 -0
  98. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/cli.py +0 -0
  99. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/data/__init__.py +0 -0
  100. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/data/custom-models-pricing.yml +0 -0
  101. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/data/models-and-pricing.lock +0 -0
  102. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/src/copilot_session_usage/data/models-and-pricing.yml +0 -0
  103. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/conftest.py +0 -0
  104. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_api.py +0 -0
  105. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_cli.py +0 -0
  106. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_core.py +0 -0
  107. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_coverage_gaps.py +0 -0
  108. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_git.py +0 -0
  109. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_rendering.py +0 -0
  110. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_vscode.py +0 -0
  111. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/tests/test_vscode_platform.py +0 -0
  112. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/uv.lock +0 -0
  113. {copilot_session_usage-0.6.1 → copilot_session_usage-0.6.2}/uv.toml +0 -0
@@ -7,10 +7,10 @@ user-invocable: true
7
7
 
8
8
  # Release Notes Generator (Git Diff Based)
9
9
 
10
- Generate **end-user friendly** release notes by analyzing actual code changes between releases.
11
- No scripts required — uses git commands to understand what changed and why it matters.
10
+ Generate **end-user-friendly, user-impact-only** release notes by analyzing the actual changes between releases.
11
+ No scripts required — use git commands to understand what changed and why it matters to someone using the product.
12
12
 
13
- The output is meant to be **copy-pasted into a GitHub Release** (or similar).
13
+ The output is meant to be **copy-pasted into a GitHub Release**. It must contain release-note sections only: never add a document title, preamble, file summary, commit summary, or closing separator.
14
14
 
15
15
  ---
16
16
 
@@ -33,12 +33,13 @@ What changed since the last release tag?
33
33
  ## What It Does
34
34
 
35
35
  1. **Reads actual diffs** — examines code changes, not just commit messages
36
- 2. **Interprets for end-users** — no technical jargon, functions, or variable names
37
- 3. **Categorizes intelligently** — Features, Enhancements, Bug Fixes, Breaking Changes
38
- 4. **Adds concrete examples** — shows what users see or can do after the change
39
- 5. **Links to public docs** — points to published documentation, not repo paths
40
- 6. **Consolidates related changes** — groups related diffs, eliminates back-and-forth noise
41
- 7. **Outputs clean markdown** — ready to paste into a GitHub Release note
36
+ 2. **Applies a user-impact gate** — includes a change only when a user-visible behavior, supported interface, user workflow, output, compatibility guarantee, or public documentation experience changed
37
+ 4. **Interprets for end-users** — no technical jargon, functions, variable names, file paths, or implementation summaries
38
+ 5. **Categorizes intelligently** — Features, Enhancements, Bug Fixes, Breaking Changes, or a no-product-impact classification
39
+ 6. **Adds concrete examples** — shows what users see or can do after a qualifying change
40
+ 7. **Links to public docs** — points to published documentation, not repo paths
41
+ 8. **Consolidates related changes** — groups related diffs and eliminates back-and-forth noise
42
+ 9. **Outputs clean markdown** — ready to paste into a GitHub Release note
42
43
 
43
44
  ---
44
45
 
@@ -58,19 +59,41 @@ Required:
58
59
 
59
60
  ## Analysis Process
60
61
 
62
+ ### Step 0: Apply the release-worthiness gate
63
+
64
+ Before writing any bullet, ask: **What can a user do, observe, configure, rely on, or learn differently after this change?** Require evidence from the diff, public CLI/API help, supported configuration, user-facing output, migration behavior, or published documentation.
65
+
66
+ Include a change only if it has at least one of these effects:
67
+
68
+ - Adds, removes, fixes, or changes a user-facing feature, command, API, configuration option, output, error message, compatibility guarantee, or supported platform.
69
+ - Changes runtime behavior in a way users can observe, such as performance, reliability, pricing data, security behavior, or data handling.
70
+ - Changes public documentation that users actually consume to operate the product, including a new guide, changed instructions, or migration guidance.
71
+
72
+ Do **not** infer user impact from a commit type, changed filename, test coverage, or the fact that a change is large. If the evidence does not show a user consequence, exclude it.
73
+
61
74
  ### Step 1: Collect Commits
62
75
  ```bash
63
76
  git log v1.0.0..v1.1.0 --oneline --no-merges
64
77
  ```
65
78
  Gather all commits in the specified range with their messages.
66
79
 
67
- ### Step 2: Examine Diffs
80
+ ### Step 2: Examine relevant diffs
68
81
  ```bash
69
- git diff v1.0.0..v1.1.0 -- src/
82
+ git diff v1.0.0..v1.1.0 -- . ':(exclude).github' ':(exclude)skills' ':(exclude)guidelines'
70
83
  ```
71
- Read actual code changes line-by-line to understand what changed.
84
+ Read actual code changes line-by-line to understand behavior. Inspect excluded paths only when needed to verify whether they caused a direct user-visible consequence; never report the paths themselves.
72
85
 
73
- ### Step 3: Interpret Changes
86
+ Treat these as non-release content by default:
87
+
88
+ - CI/CD workflows, automation, release jobs, repository settings, and bot configuration
89
+ - Internal skills, agent prompts, contributor guidelines, engineering process, and maintainer runbooks
90
+ - Tests, fixtures, formatting, linting, refactors, type annotations, and code organization
91
+ - Dependency, lockfile, build, packaging, or development-environment changes without a user-visible runtime consequence
92
+ - File counts, changed-file lists, commit counts, authors, implementation details, and internal URLs
93
+
94
+ These exclusions can be overridden only when the diff proves a direct user impact, such as a packaging change that changes the installable artifact or a security fix that changes behavior for users.
95
+
96
+ ### Step 3: Interpret qualifying changes
74
97
 
75
98
  Translate technical changes into user impact:
76
99
 
@@ -85,6 +108,8 @@ Translate technical changes into user impact:
85
108
 
86
109
  **Key: Focus on the user's experience, not the code implementation.**
87
110
 
111
+ Never turn a repository change into a release note merely by paraphrasing it. For example, “added CI workflow,” “updated contributor guidelines,” “improved project metadata,” and “7 files changed” are not release notes.
112
+
88
113
  ### Step 4: Identify Breaking Changes
89
114
 
90
115
  Breaking changes come from:
@@ -99,11 +124,17 @@ Breaking changes come from:
99
124
 
100
125
  ### Step 6: Categorize & Format
101
126
 
102
- Organize changes into buckets. **Only include sections that have content.** Omit empty sections entirely.
127
+ Organize qualifying changes into buckets. **Only include sections that have content.** Omit empty sections entirely. Do not add a title heading.
103
128
 
104
- ```markdown
105
- # Release Notes - v1.1.0
129
+ If there are no qualifying product changes, use exactly one concise fallback section:
130
+
131
+ - `## Maintenance` for a maintenance release containing internal upkeep, CI, release automation, dependency/build work, refactors, or other operational changes
132
+ - `## Documentation` for a documentation-update release whose meaningful outcome is public user documentation, even when no runtime behavior changed
133
+ - `## Internal` for an internal release containing changes intentionally limited to maintainers, contributors, or internal tooling
134
+
135
+ Choose the most accurate fallback; do not list the underlying files or tasks. A maintenance release may say only that it contains maintenance updates. An internal release may say only that it contains internal updates. Do not manufacture examples or links for either.
106
136
 
137
+ ```markdown
107
138
  ## New Features
108
139
  - Added dark mode toggle in settings
109
140
  - New PDF export option
@@ -135,26 +166,25 @@ Organize changes into buckets. **Only include sections that have content.** Omit
135
166
 
136
167
  1. **Parse input** — extract `from_tag`, `to_tag`, `repo_path`, and optional filters
137
168
  2. **Discover public docs URL** — inspect `README.md`, `pyproject.toml`, `mkdocs.yml`, `docs/conf.py`, or `.readthedocs.yml` for the published documentation URL. Prefer ReadTheDocs, GitHub Pages, or the project's public docs site. If none is found, omit doc links.
138
- 3. **Fetch commits** — run `git log` with range, collect hashes & messages
139
- 4. **Read diffs per file** — `git show <hash>` for each commit, examine changed files
140
- 5. **Interpret impact** — what does each change mean to users?
141
- 6. **Detect breaking changes** — scan for BREAKING markers, API removals, schema changes
142
- 7. **Group by category** — assign each change to **New Features**, **Enhancements**, **Bug Fixes**, **Breaking Changes**, **Examples**, or **Documentation**
143
- 8. **Build examples** — for each user-facing change, look at README, docs, tests, or CLI help in the diff and add a short "what the user gets" example when it clarifies the change
144
- 9. **Consolidate** — merge related items, remove duplicates and flip-flops
145
- 10. **Format markdown** — generate clean bullet points with proper headings
146
- 11. **Omit empty sections** — do not print a section if it has no bullets
147
- 12. **Use public docs links** — every Documentation bullet and every feature/enhancement docs reference must use the public URL with a fragment identifier, not a repo-relative path
169
+ 3. **Fetch commits** — run `git log` with range, collect hashes and messages
170
+ 4. **Read diffs per file** — use `git show <hash>` for each relevant commit and examine changed behavior, not just filenames
171
+ 5. **Apply the user-impact gate** — discard CI, internal, process, and implementation-only changes unless the diff proves direct user impact
172
+ 6. **Interpret impact** — state what users can do, observe, configure, rely on, or learn differently
173
+ 7. **Detect breaking changes** — scan for BREAKING markers, public API removals, format changes, migrations, and changed defaults
174
+ 8. **Group by category** — assign each qualifying change to **New Features**, **Enhancements**, **Bug Fixes**, **Breaking Changes**, **Examples**, or **Documentation**
175
+ 9. **Build examples** — for each user-facing change, use README, public docs, tests, or CLI help as evidence and add a short example only when it clarifies the user outcome
176
+ 10. **Consolidate** — merge related items, remove duplicates and flip-flops
177
+ 11. **Use a fallback** — if no product change qualifies, emit exactly one of **Maintenance**, **Documentation**, or **Internal**
178
+ 12. **Format markdown** — generate clean section headings and bullets with no title, preamble, footer, file summary, or commit summary
179
+ 13. **Use public docs links** — every Documentation bullet and every feature/enhancement docs reference must use the public URL with a fragment identifier, not a repo-relative path
148
180
 
149
181
  ---
150
182
 
151
183
  ## Output Format
152
184
 
153
- **Clean markdown** for a GitHub Release:
185
+ **Clean markdown** for a GitHub Release body:
154
186
 
155
187
  ```markdown
156
- # Release Notes - v1.1.0
157
-
158
188
  ## New Features
159
189
  - Added dark mode toggle in settings
160
190
  - New PDF export option
@@ -179,16 +209,26 @@ Organize changes into buckets. **Only include sections that have content.** Omit
179
209
  - [Upgrade instructions](https://docs.example.com/upgrade#database)
180
210
  ```
181
211
 
212
+ For a release with no runtime product impact, use a short note such as:
213
+
214
+ ```markdown
215
+ ## Maintenance
216
+ - Maintenance release with no user-facing behavior changes.
217
+ ```
218
+
182
219
  **Key Rules:**
183
220
  - One line per bullet point
184
221
  - No sub-bullets or elaborate descriptions
185
- - User impact only (not implementation details)
222
+ - User impact only (not implementation details, changed-file summaries, CI, internal process, or contributor guidance)
223
+ - Do not include a title heading; the GitHub Release supplies the title
186
224
  - Use public documentation URLs; never use repo-relative paths like `docs/...` or `README.md`
187
225
  - Use fragment identifiers (`#section-name`) to point to specific docs sections
188
226
  - Add an **Examples** section when the diff shows a CLI command, API call, config snippet, or before/after behavior
189
- - Add a **Documentation** section when docs were added or updated, linking to the published page
227
+ - Add a **Documentation** section only when public user documentation changed in a way users need or benefit from; never report internal guidelines or maintainer documentation
190
228
  - Multiple links OK if they point to different topics
191
229
  - Omit any section that has no bullets
230
+ - If no user-facing change qualifies, emit exactly one concise `Maintenance`, `Documentation`, or `Internal` section
231
+ - Never include file counts, changed-file lists, commit metadata, CI/workflow summaries, or a closing separator
192
232
  - Do not add a "Notes", "Miscellaneous", or "Other" catch-all section
193
233
 
194
234
  ---
@@ -199,7 +239,7 @@ When this skill is invoked by a CI job with an explicit request for machine-read
199
239
 
200
240
  - Honor the requested tag range and repository path exactly.
201
241
  - Do not modify, commit, or push repository files unless the caller explicitly requests it.
202
- - Return only the final release-note Markdown, without an explanation or a code fence.
242
+ - Return only the final release-note Markdown, without an explanation, title heading, or code fence.
203
243
  - Preserve the user-impact categories, examples, breaking-change detection, and public documentation links described above.
204
244
 
205
245
  ## How to Use This Skill in a Session
@@ -226,6 +266,7 @@ Generate release notes from v2.1.0 to v2.2.0 for /path/to/my-app
226
266
  ✅ **Do:**
227
267
  - Read actual diffs to understand changes
228
268
  - Use end-user language ("improved performance" not "optimized O(n) loop")
269
+ - Require evidence of a user-visible consequence before including a change
229
270
  - Include breaking changes prominently
230
271
  - Group related changes
231
272
  - Add concrete examples drawn from README, docs, tests, or CLI help in the diff
@@ -239,6 +280,8 @@ Generate release notes from v2.1.0 to v2.2.0 for /path/to/my-app
239
280
  - Include dependency bumps or build changes unless they are user-visible
240
281
  - Include secrets, passwords, or internal URLs
241
282
  - Use repo-relative paths like `docs/source/how-to/...` or `README.md`
283
+ - Report CI, workflows, internal skills, contributor guidelines, maintainer process, file counts, or changed-file lists as release content
284
+ - Add a title heading to the generated body
242
285
  - Make up changes not shown in diffs
243
286
 
244
287
  ---
@@ -264,8 +307,8 @@ Generate release notes from v2.1.0 to v2.2.0 for /path/to/my-app
264
307
 
265
308
  ## Limitations
266
309
 
267
- - Requires git repository with proper tags
310
+ - Requires a git repository with proper tags
268
311
  - Complex changes may need human interpretation
269
- - Very large diffs (1000+ files) summarized by file count
312
+ - Very large diffs should be reduced to their evidenced user impact; never summarize them by file count
270
313
  - Works best with semantic versioning (v1.0.0 format)
271
- - Needs meaningful commit messages for best results
314
+ - Needs meaningful commit messages for best results, but commit messages alone are never evidence of user impact
@@ -80,7 +80,7 @@ jobs:
80
80
 
81
81
  Generate the final release notes for ${TARGET_TAG}, covering the actual changes from ${PREVIOUS_TAG} to ${TARGET_TAG} in ${GITHUB_WORKSPACE}.
82
82
 
83
- Follow the skill's diff-based analysis process. Use the project's public documentation URL when documentation links are appropriate. Return only the final release-note Markdown, with no introduction, explanation, or code fence. Do not modify any repository files."
83
+ Follow the skill's diff-based analysis process. Include only changes with a proven user-facing consequence; exclude CI, workflows, release automation, internal skills, guidelines, tests, file lists, and other repository housekeeping unless the diff proves direct product impact. If there is no product impact, emit one concise Maintenance, Documentation, or Internal section. Return only the final release-note Markdown, with no title heading, introduction, explanation, file summary, or code fence. Do not modify any repository files."
84
84
 
85
85
  gh copilot -- \
86
86
  --prompt "$prompt" \
@@ -143,7 +143,7 @@ jobs:
143
143
 
144
144
  Generate the final release notes for ${TARGET_TAG}, covering the actual changes from ${PREVIOUS_TAG} to ${TARGET_TAG} in ${GITHUB_WORKSPACE}.
145
145
 
146
- Follow the skill's diff-based analysis process. Use the project's public documentation URL when documentation links are appropriate. Return only the final release-note Markdown, with no introduction, explanation, or code fence. Do not modify, commit, or push any repository files."
146
+ Follow the skill's diff-based analysis process. Include only changes with a proven user-facing consequence; exclude CI, workflows, release automation, internal skills, guidelines, tests, file lists, and other repository housekeeping unless the diff proves direct product impact. If there is no product impact, emit one concise Maintenance, Documentation, or Internal section. Return only the final release-note Markdown, with no title heading, introduction, explanation, file summary, or code fence. Do not modify, commit, or push any repository files."
147
147
 
148
148
  gh copilot -- \
149
149
  --prompt "$prompt" \
@@ -77,6 +77,16 @@ to understand the rules of the knowledge base in `knowledge/`.
77
77
  - **Detail levels**: `minimal` < `compact` < `full`
78
78
  - **Output formats**: `json`, `table`, `detailed` (alias for table + full detail)
79
79
 
80
+ ## Git History and Pull Requests
81
+
82
+ This repository must maintain a linear history. **Never create a merge commit.**
83
+
84
+ - Rebase a feature branch onto the current target branch before opening or updating a pull request: `git fetch origin main && git rebase origin/main`.
85
+ - When the target branch advances, rebase again; do not merge `main` into the feature branch.
86
+ - Resolve conflicts during the rebase, run the relevant checks, and update the remote branch with `git push --force-with-lease` when required.
87
+ - Merge pull requests only with a squash merge or a rebase/fast-forward merge. Never use a merge commit or `--no-ff`.
88
+ - Do not force-push protected branches; `--force-with-lease` is permitted only for the contributor's feature branch.
89
+
80
90
  ## Before You Commit
81
91
 
82
92
  ```bash
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: copilot-session-usage
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: Usage and cost analytics for GitHub Copilot and Copilot-CLI session logs
5
5
  Project-URL: Homepage, https://github.com/gsemet/copilot-session-usage
6
6
  Project-URL: Documentation, https://copilot-session-usage.readthedocs.io/en/stable/
@@ -0,0 +1,34 @@
1
+ ---
2
+ type: Finding
3
+ title: Release-note generation reported maintainer changes as user-facing
4
+ features
5
+ description: The generated v0.6.1 draft release notes described contributor
6
+ guidelines, project metadata, and file counts instead of observable product
7
+ changes.
8
+ tags: [release-notes, copilot, user-impact, github-actions]
9
+ timestamp: 2026-07-13T14:27:04Z
10
+ confidence: high
11
+ context: >-
12
+ Observed in the draft release generated for v0.6.1 from the v0.6.0 range in
13
+ gsemet/copilot-session-usage. The custom release-note skill and workflow did
14
+ not explicitly exclude internal guidelines, CI/process changes, or file
15
+ summaries, and the generated body included those items plus a title heading.
16
+ The comparison was made against the user-facing v0.5.0 release notes.
17
+ links: []
18
+ backlinks: []
19
+ ---
20
+
21
+ The v0.6.1 release-note generation treated repository-maintenance changes as
22
+ product features: it listed knowledge-base and commit-message guidelines,
23
+ contributing documentation, project metadata, and counts of modified/added
24
+ files. These items were not shown as changes that users could observe or use.
25
+
26
+ This matters because a diff-based release-note prompt needs an explicit
27
+ user-impact gate and a hard exclusion for CI, internal process, contributor
28
+ material, and implementation-only changes. A no-product-impact release should
29
+ instead receive one concise internal, documentation-update, or maintenance
30
+ classification, and the generated body should not add its own title heading.
31
+
32
+ Caveat: this finding is based on one generated draft release and the local
33
+ skill/workflow revision made afterward; it does not establish that every
34
+ release range will produce the same pollution.
@@ -6,5 +6,6 @@ The body and claim are immutable once written. To correct a Finding, write a new
6
6
  Belongs to the Storage layer. Findings are promoted into Concepts or Structures when they converge and stabilize. They may also support Principles.
7
7
 
8
8
  - [cache_write approximated via fresh_input — matches AIC panel exactly](2026.07.02-23.00-cache-write-approximation.md) — VS Code JSONL logs and agent-traces.db both lack cache_creation token counts. Approximating cache_creation as fresh_input = inputTokens - cachedTokens and billing only the incremental delta (cache_write - input) / 1M produces an exact match to the VS Code AIC panel. Implemented in estimate_cost since v0.3. [Finding]
9
+ - [Release-note generation reported maintainer changes as user-facing features](2026.07.13-14.27-release-notes-overreported-maintainer-changes.md) — The generated v0.6.1 draft release notes described contributor guidelines, project metadata, and file counts instead of observable product changes. [Finding]
9
10
  - [Subagent Logs Use runSubagent Prefix](2026.07.02-00.00-subagent-logs-runsubagent-prefix.md) — Subagent activity is recorded in separate JSONL files prefixed with "runSubagent-" inside the session debug-logs directory. [Finding]
10
11
  - [title-*.jsonl adds 1 LLM call and its tokens to tool totals; VS Code panel excludes it](2026.07.02-22.00-title-generation-not-counted-as-model-turn.md) — The VS Code Agent Debug panel "Model Turns" counter excludes title-generation calls. copilot-session-usage counts them. The delta is exactly the title-*.jsonl file's token counts. [Finding]