reveille 0.1.0__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.
reveille-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vara Prasad Chilakanti
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,331 @@
1
+ Metadata-Version: 2.1
2
+ Name: reveille
3
+ Version: 0.1.0
4
+ Summary: A CLI tool that generates self-contained HTML performance reports from local Git repositories.
5
+ Home-page: https://github.com/varaprasadchilakanti/reveille
6
+ License: MIT
7
+ Keywords: git,analytics,reporting,cli,dashboard,contributors,devtools
8
+ Author: Varaprasad Chilakanti
9
+ Author-email: varaprasadchilakanti@gmail.com
10
+ Requires-Python: >=3.11,<4.0
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Natural Language :: English
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Classifier: Topic :: Software Development :: Version Control :: Git
22
+ Classifier: Topic :: Utilities
23
+ Classifier: Typing :: Typed
24
+ Requires-Dist: click (>=8.0.0,<8.3.0)
25
+ Requires-Dist: gitpython (>=3.1.40,<4.0.0)
26
+ Requires-Dist: jinja2 (>=3.1.0,<4.0.0)
27
+ Requires-Dist: plotly (>=5.20.0,<6.0.0)
28
+ Requires-Dist: pydantic (>=2.0,<3.0)
29
+ Requires-Dist: pydantic-settings (>=2.0,<3.0)
30
+ Requires-Dist: python-dateutil (>=2.9.0,<3.0.0)
31
+ Requires-Dist: typer[all] (>=0.12.0,<0.13.0)
32
+ Project-URL: Documentation, https://github.com/varaprasadchilakanti/reveille#readme
33
+ Project-URL: Repository, https://github.com/varaprasadchilakanti/reveille
34
+ Description-Content-Type: text/markdown
35
+
36
+ # Reveille
37
+
38
+ **A CLI tool that generates self-contained HTML performance reports from local Git repositories.**
39
+
40
+ Reveille reads your repository's Git history and produces a single portable `.html` file containing interactive visualisations of contributor activity, commit trends, code volume, and repository health — with no server, no external API calls, and no configuration beyond the command itself. Open the output in any browser, share it over email, or drop it into a Confluence page without modification.
41
+
42
+ ---
43
+
44
+ ## Contents
45
+
46
+ - [Overview](#overview)
47
+ - [Installation](#installation)
48
+ - [Quickstart](#quickstart)
49
+ - [CLI Reference](#cli-reference)
50
+ - [Output Description](#output-description)
51
+ - [Contributor Ranking System](#contributor-ranking-system)
52
+ - [Configuration](#configuration)
53
+ - [Documentation](#documentation)
54
+ - [Development Setup](#development-setup)
55
+ - [Running Tests](#running-tests)
56
+ - [Contributing](#contributing)
57
+ - [Changelog](#changelog)
58
+ - [Licence](#licence)
59
+
60
+ ---
61
+
62
+ ## Overview
63
+
64
+ Reveille is designed for developers, engineering managers, and technical leads who need a production-grade, shareable retrospective from any Git repository — without configuring infrastructure or connecting to external services.
65
+
66
+ **What it produces:**
67
+
68
+ - Contribution heatmaps showing commit activity by day and hour
69
+ - Commit frequency histograms and rolling activity timelines
70
+ - Per-contributor breakdowns covering commits, lines added and removed, and active day counts
71
+ - A structured ranking table assigning each contributor a tier designation based on weighted activity metrics
72
+ - Repository health indicators including bus factor, activity recency, and consistency scores
73
+
74
+ **Design constraints that are non-negotiable:**
75
+
76
+ - The output is always a single `.html` file. No directories, no asset folders, no dependencies.
77
+ - The file must open in any modern browser with no internet connection. All JavaScript, CSS, and chart data are embedded inline.
78
+ - No external CDN calls. No iframes. No cookies. No tracking.
79
+ - The output aesthetic is formal and stakeholder-ready. No emojis. No casual language. Typography is clean and readable.
80
+
81
+ ---
82
+
83
+ ## Installation
84
+
85
+ Reveille requires Python 3.11 or later.
86
+
87
+ **Install from PyPI:**
88
+
89
+ ```bash
90
+ pip install reveille
91
+ ```
92
+
93
+ **Install with pipx (recommended for CLI tools):**
94
+
95
+ ```bash
96
+ pipx install reveille
97
+ ```
98
+
99
+ **Verify the installation:**
100
+
101
+ ```bash
102
+ reveille --version
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Quickstart
108
+
109
+ Navigate to any Git repository on your machine and run:
110
+
111
+ ```bash
112
+ cd /path/to/your/repository
113
+ reveille generate
114
+ ```
115
+
116
+ Reveille reads the local Git history and writes a report to the current directory. The output file is named `reveille-report.html` by default. Open it in any browser.
117
+
118
+ **Generate a report for a specific date range:**
119
+
120
+ ```bash
121
+ reveille generate --since 2024-01-01 --until 2024-12-31
122
+ ```
123
+
124
+ **Write the output to a specific path:**
125
+
126
+ ```bash
127
+ reveille generate --output /tmp/q4-report.html
128
+ ```
129
+
130
+ **Specify the repository path explicitly:**
131
+
132
+ ```bash
133
+ reveille generate --repo /path/to/repository
134
+ ```
135
+
136
+ ---
137
+
138
+ ## CLI Reference
139
+
140
+ ### `reveille generate`
141
+
142
+ Generates the HTML performance report for the target repository.
143
+
144
+ | Flag | Short | Type | Default | Description |
145
+ |---|---|---|---|---|
146
+ | `--repo` | `-r` | `PATH` | `.` (current directory) | Path to the Git repository root. Must contain a `.git` directory. |
147
+ | `--output` | `-o` | `PATH` | `./reveille-report.html` | Path for the generated HTML file. Parent directories must exist. |
148
+ | `--since` | | `DATE` | Repository creation date | Include only commits on or after this date. Accepts `YYYY-MM-DD`. |
149
+ | `--until` | | `DATE` | Today | Include only commits on or before this date. Accepts `YYYY-MM-DD`. |
150
+ | `--branch` | `-b` | `TEXT` | Default branch | Analyse commits reachable from this branch only. |
151
+ | `--exclude-author` | | `TEXT` | None | Exclude a contributor by name or email. Repeatable. |
152
+ | `--min-commits` | | `INT` | `1` | Exclude contributors with fewer than this many commits in the analysis window. |
153
+ | `--title` | | `TEXT` | Repository name | Override the report title displayed in the HTML output. |
154
+ | `--no-ranking` | | Flag | Off | Omit the contributor ranking table from the output. |
155
+ | `--config` | `-c` | `PATH` | None | Path to a TOML configuration file. CLI flags take precedence over config file values. |
156
+
157
+ ### `reveille version`
158
+
159
+ Prints the installed version string and exits.
160
+
161
+ ### `reveille validate`
162
+
163
+ Validates that the target path is a readable Git repository and that the analysis window contains at least one commit. Exits with a non-zero status code if validation fails. Useful for CI integration.
164
+
165
+ ```bash
166
+ reveille validate --repo /path/to/repository
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Output Description
172
+
173
+ The generated HTML file is structured as a formal report with the following sections.
174
+
175
+ **Repository Summary** — Name, remote URL if present, default branch, total commits in the analysis window, unique contributors, date range, and report generation timestamp.
176
+
177
+ **Activity Heatmap** — A calendar-style matrix showing commit frequency by day across the analysis window. Modelled on GitHub's contribution graph but scoped to the repository and time range specified.
178
+
179
+ **Commit Timeline** — A rolling line chart showing commit volume per week over the analysis window. Highlights periods of high and low activity.
180
+
181
+ **Contributor Summary Table** — A ranked table listing each contributor with their commit count, lines added, lines removed, net line delta, active days, most recent commit date, and assigned tier designation.
182
+
183
+ **Per-Contributor Activity Charts** — Commit frequency histograms for each contributor showing their distribution of activity across the analysis window.
184
+
185
+ **Repository Health Indicators** — Bus factor estimate (minimum number of contributors accounting for 50% of commits), longest inactive streak, activity recency score, and contributor retention across the window.
186
+
187
+ All charts are rendered with Plotly and are fully interactive — hover states, zoom, pan, and legend toggling are available without any external dependencies.
188
+
189
+ ---
190
+
191
+ ## Contributor Ranking System
192
+
193
+ Reveille assigns each contributor a tier designation based on a weighted composite of four metrics.
194
+
195
+ | Metric | Default Weight |
196
+ |---|---|
197
+ | Commit volume | 30% |
198
+ | Lines contributed (additions + deletions) | 25% |
199
+ | Activity consistency (active days / total days) | 25% |
200
+ | Recency (decay-weighted recent activity) | 20% |
201
+
202
+ Weights are configurable. See [Configuration](#configuration).
203
+
204
+ The composite score maps to the following tier designations, applied relative to the contributor population in the analysis window.
205
+
206
+ | Tier | Designation | Composite Score Percentile |
207
+ |---|---|---|
208
+ | I | Private | 0 – 20th |
209
+ | II | Corporal | 21st – 40th |
210
+ | III | Sergeant | 41st – 60th |
211
+ | IV | Lieutenant | 61st – 75th |
212
+ | V | Captain | 76th – 88th |
213
+ | VI | Major | 89th – 95th |
214
+ | VII | Commander | 96th – 100th |
215
+
216
+ Tier boundaries and weights are documented defaults and are fully reproducible from the source. Changing the weights changes the scores but not the tier logic. Tiers are always relative to the contributor population within the analysis window, not absolute thresholds.
217
+
218
+ ---
219
+
220
+ ## Configuration
221
+
222
+ Reveille accepts a TOML configuration file for parameters that are cumbersome to pass on the command line on every invocation.
223
+
224
+ Create a file named `reveille.toml` at the repository root or pass the path explicitly with `--config`.
225
+
226
+ ```toml
227
+ [report]
228
+ title = "Engineering Performance Report — Q4 2024"
229
+ output = "./reports/q4-2024.html"
230
+ branch = "main"
231
+ since = "2024-10-01"
232
+ until = "2024-12-31"
233
+
234
+ [filters]
235
+ min_commits = 2
236
+ exclude_authors = [
237
+ "dependabot[bot]",
238
+ "github-actions[bot]",
239
+ ]
240
+
241
+ [ranking]
242
+ enabled = true
243
+ weights = { commits = 0.30, lines = 0.25, consistency = 0.25, recency = 0.20 }
244
+ ```
245
+
246
+ CLI flags always take precedence over configuration file values. The configuration file is entirely optional — all values have defaults.
247
+
248
+ ---
249
+
250
+ ## Documentation
251
+
252
+ A full operational reference is available at [docs/USER_GUIDE.md](docs/USER_GUIDE.md).
253
+ It covers every CLI flag and its interaction effects, every TOML key with
254
+ annotated examples, the ranking algorithm in plain language, how to interpret
255
+ each section of the generated report, and practical patterns for common use
256
+ cases.
257
+
258
+ ---
259
+
260
+ ## Development Setup
261
+
262
+ **Prerequisites:** Python 3.11 or later, `git`.
263
+
264
+ ```bash
265
+ git clone git@github.com:varaprasadchilakanti/reveille.git
266
+ cd reveille
267
+ poetry install
268
+ ```
269
+
270
+ **Verify the environment:**
271
+
272
+ ```bash
273
+ poetry run reveille --version
274
+ poetry run mypy src/
275
+ poetry run ruff check src/
276
+ ```
277
+
278
+ ---
279
+
280
+ ## Running Tests
281
+
282
+ ```bash
283
+ pytest
284
+ ```
285
+
286
+ **With coverage report:**
287
+
288
+ ```bash
289
+ pytest --cov=reveille --cov-report=term-missing
290
+ ```
291
+
292
+ **Type checking only:**
293
+
294
+ ```bash
295
+ mypy src/
296
+ ```
297
+
298
+ **Linting only:**
299
+
300
+ ```bash
301
+ ruff check src/
302
+ ```
303
+
304
+ ---
305
+
306
+ ## Contributing
307
+
308
+ Contributions are welcome. Before opening a pull request, please read the following.
309
+
310
+ **Reporting issues.** Use GitHub Issues. Include the output of `reveille --version`, the operating system, Python version, and a minimal reproduction case. If the issue involves a specific repository, a sanitised `git log --oneline` covering the relevant range is sufficient — do not include source code.
311
+
312
+ **Proposing changes.** Open an issue before starting significant work. This avoids duplication and ensures the direction is aligned before effort is invested.
313
+
314
+ **Submitting pull requests.** All pull requests must target the `main` branch. The CI pipeline runs `ruff`, `mypy`, and `pytest` on every pull request. All three must pass. New public functions require docstrings. New behaviour requires tests. The output contract — single self-contained HTML file, no external calls, formal aesthetic — is non-negotiable and must be preserved in every contribution.
315
+
316
+ **Code style.** Ruff handles linting and import ordering. Mypy runs in strict mode. Type annotations are required on every function signature. Early returns are preferred over nested conditionals throughout.
317
+
318
+ **Commit messages.** Follow the Conventional Commits specification: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`. Scope is optional but encouraged, e.g. `feat(ranking): add recency decay weighting`.
319
+
320
+ ---
321
+
322
+ ## Changelog
323
+
324
+ See [CHANGELOG.md](CHANGELOG.md) for the full release history. Reveille follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format and [Semantic Versioning 2.0](https://semver.org/).
325
+
326
+ ---
327
+
328
+ ## Licence
329
+
330
+ Reveille is released under the [MIT Licence](LICENSE).
331
+
@@ -0,0 +1,295 @@
1
+ # Reveille
2
+
3
+ **A CLI tool that generates self-contained HTML performance reports from local Git repositories.**
4
+
5
+ Reveille reads your repository's Git history and produces a single portable `.html` file containing interactive visualisations of contributor activity, commit trends, code volume, and repository health — with no server, no external API calls, and no configuration beyond the command itself. Open the output in any browser, share it over email, or drop it into a Confluence page without modification.
6
+
7
+ ---
8
+
9
+ ## Contents
10
+
11
+ - [Overview](#overview)
12
+ - [Installation](#installation)
13
+ - [Quickstart](#quickstart)
14
+ - [CLI Reference](#cli-reference)
15
+ - [Output Description](#output-description)
16
+ - [Contributor Ranking System](#contributor-ranking-system)
17
+ - [Configuration](#configuration)
18
+ - [Documentation](#documentation)
19
+ - [Development Setup](#development-setup)
20
+ - [Running Tests](#running-tests)
21
+ - [Contributing](#contributing)
22
+ - [Changelog](#changelog)
23
+ - [Licence](#licence)
24
+
25
+ ---
26
+
27
+ ## Overview
28
+
29
+ Reveille is designed for developers, engineering managers, and technical leads who need a production-grade, shareable retrospective from any Git repository — without configuring infrastructure or connecting to external services.
30
+
31
+ **What it produces:**
32
+
33
+ - Contribution heatmaps showing commit activity by day and hour
34
+ - Commit frequency histograms and rolling activity timelines
35
+ - Per-contributor breakdowns covering commits, lines added and removed, and active day counts
36
+ - A structured ranking table assigning each contributor a tier designation based on weighted activity metrics
37
+ - Repository health indicators including bus factor, activity recency, and consistency scores
38
+
39
+ **Design constraints that are non-negotiable:**
40
+
41
+ - The output is always a single `.html` file. No directories, no asset folders, no dependencies.
42
+ - The file must open in any modern browser with no internet connection. All JavaScript, CSS, and chart data are embedded inline.
43
+ - No external CDN calls. No iframes. No cookies. No tracking.
44
+ - The output aesthetic is formal and stakeholder-ready. No emojis. No casual language. Typography is clean and readable.
45
+
46
+ ---
47
+
48
+ ## Installation
49
+
50
+ Reveille requires Python 3.11 or later.
51
+
52
+ **Install from PyPI:**
53
+
54
+ ```bash
55
+ pip install reveille
56
+ ```
57
+
58
+ **Install with pipx (recommended for CLI tools):**
59
+
60
+ ```bash
61
+ pipx install reveille
62
+ ```
63
+
64
+ **Verify the installation:**
65
+
66
+ ```bash
67
+ reveille --version
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Quickstart
73
+
74
+ Navigate to any Git repository on your machine and run:
75
+
76
+ ```bash
77
+ cd /path/to/your/repository
78
+ reveille generate
79
+ ```
80
+
81
+ Reveille reads the local Git history and writes a report to the current directory. The output file is named `reveille-report.html` by default. Open it in any browser.
82
+
83
+ **Generate a report for a specific date range:**
84
+
85
+ ```bash
86
+ reveille generate --since 2024-01-01 --until 2024-12-31
87
+ ```
88
+
89
+ **Write the output to a specific path:**
90
+
91
+ ```bash
92
+ reveille generate --output /tmp/q4-report.html
93
+ ```
94
+
95
+ **Specify the repository path explicitly:**
96
+
97
+ ```bash
98
+ reveille generate --repo /path/to/repository
99
+ ```
100
+
101
+ ---
102
+
103
+ ## CLI Reference
104
+
105
+ ### `reveille generate`
106
+
107
+ Generates the HTML performance report for the target repository.
108
+
109
+ | Flag | Short | Type | Default | Description |
110
+ |---|---|---|---|---|
111
+ | `--repo` | `-r` | `PATH` | `.` (current directory) | Path to the Git repository root. Must contain a `.git` directory. |
112
+ | `--output` | `-o` | `PATH` | `./reveille-report.html` | Path for the generated HTML file. Parent directories must exist. |
113
+ | `--since` | | `DATE` | Repository creation date | Include only commits on or after this date. Accepts `YYYY-MM-DD`. |
114
+ | `--until` | | `DATE` | Today | Include only commits on or before this date. Accepts `YYYY-MM-DD`. |
115
+ | `--branch` | `-b` | `TEXT` | Default branch | Analyse commits reachable from this branch only. |
116
+ | `--exclude-author` | | `TEXT` | None | Exclude a contributor by name or email. Repeatable. |
117
+ | `--min-commits` | | `INT` | `1` | Exclude contributors with fewer than this many commits in the analysis window. |
118
+ | `--title` | | `TEXT` | Repository name | Override the report title displayed in the HTML output. |
119
+ | `--no-ranking` | | Flag | Off | Omit the contributor ranking table from the output. |
120
+ | `--config` | `-c` | `PATH` | None | Path to a TOML configuration file. CLI flags take precedence over config file values. |
121
+
122
+ ### `reveille version`
123
+
124
+ Prints the installed version string and exits.
125
+
126
+ ### `reveille validate`
127
+
128
+ Validates that the target path is a readable Git repository and that the analysis window contains at least one commit. Exits with a non-zero status code if validation fails. Useful for CI integration.
129
+
130
+ ```bash
131
+ reveille validate --repo /path/to/repository
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Output Description
137
+
138
+ The generated HTML file is structured as a formal report with the following sections.
139
+
140
+ **Repository Summary** — Name, remote URL if present, default branch, total commits in the analysis window, unique contributors, date range, and report generation timestamp.
141
+
142
+ **Activity Heatmap** — A calendar-style matrix showing commit frequency by day across the analysis window. Modelled on GitHub's contribution graph but scoped to the repository and time range specified.
143
+
144
+ **Commit Timeline** — A rolling line chart showing commit volume per week over the analysis window. Highlights periods of high and low activity.
145
+
146
+ **Contributor Summary Table** — A ranked table listing each contributor with their commit count, lines added, lines removed, net line delta, active days, most recent commit date, and assigned tier designation.
147
+
148
+ **Per-Contributor Activity Charts** — Commit frequency histograms for each contributor showing their distribution of activity across the analysis window.
149
+
150
+ **Repository Health Indicators** — Bus factor estimate (minimum number of contributors accounting for 50% of commits), longest inactive streak, activity recency score, and contributor retention across the window.
151
+
152
+ All charts are rendered with Plotly and are fully interactive — hover states, zoom, pan, and legend toggling are available without any external dependencies.
153
+
154
+ ---
155
+
156
+ ## Contributor Ranking System
157
+
158
+ Reveille assigns each contributor a tier designation based on a weighted composite of four metrics.
159
+
160
+ | Metric | Default Weight |
161
+ |---|---|
162
+ | Commit volume | 30% |
163
+ | Lines contributed (additions + deletions) | 25% |
164
+ | Activity consistency (active days / total days) | 25% |
165
+ | Recency (decay-weighted recent activity) | 20% |
166
+
167
+ Weights are configurable. See [Configuration](#configuration).
168
+
169
+ The composite score maps to the following tier designations, applied relative to the contributor population in the analysis window.
170
+
171
+ | Tier | Designation | Composite Score Percentile |
172
+ |---|---|---|
173
+ | I | Private | 0 – 20th |
174
+ | II | Corporal | 21st – 40th |
175
+ | III | Sergeant | 41st – 60th |
176
+ | IV | Lieutenant | 61st – 75th |
177
+ | V | Captain | 76th – 88th |
178
+ | VI | Major | 89th – 95th |
179
+ | VII | Commander | 96th – 100th |
180
+
181
+ Tier boundaries and weights are documented defaults and are fully reproducible from the source. Changing the weights changes the scores but not the tier logic. Tiers are always relative to the contributor population within the analysis window, not absolute thresholds.
182
+
183
+ ---
184
+
185
+ ## Configuration
186
+
187
+ Reveille accepts a TOML configuration file for parameters that are cumbersome to pass on the command line on every invocation.
188
+
189
+ Create a file named `reveille.toml` at the repository root or pass the path explicitly with `--config`.
190
+
191
+ ```toml
192
+ [report]
193
+ title = "Engineering Performance Report — Q4 2024"
194
+ output = "./reports/q4-2024.html"
195
+ branch = "main"
196
+ since = "2024-10-01"
197
+ until = "2024-12-31"
198
+
199
+ [filters]
200
+ min_commits = 2
201
+ exclude_authors = [
202
+ "dependabot[bot]",
203
+ "github-actions[bot]",
204
+ ]
205
+
206
+ [ranking]
207
+ enabled = true
208
+ weights = { commits = 0.30, lines = 0.25, consistency = 0.25, recency = 0.20 }
209
+ ```
210
+
211
+ CLI flags always take precedence over configuration file values. The configuration file is entirely optional — all values have defaults.
212
+
213
+ ---
214
+
215
+ ## Documentation
216
+
217
+ A full operational reference is available at [docs/USER_GUIDE.md](docs/USER_GUIDE.md).
218
+ It covers every CLI flag and its interaction effects, every TOML key with
219
+ annotated examples, the ranking algorithm in plain language, how to interpret
220
+ each section of the generated report, and practical patterns for common use
221
+ cases.
222
+
223
+ ---
224
+
225
+ ## Development Setup
226
+
227
+ **Prerequisites:** Python 3.11 or later, `git`.
228
+
229
+ ```bash
230
+ git clone git@github.com:varaprasadchilakanti/reveille.git
231
+ cd reveille
232
+ poetry install
233
+ ```
234
+
235
+ **Verify the environment:**
236
+
237
+ ```bash
238
+ poetry run reveille --version
239
+ poetry run mypy src/
240
+ poetry run ruff check src/
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Running Tests
246
+
247
+ ```bash
248
+ pytest
249
+ ```
250
+
251
+ **With coverage report:**
252
+
253
+ ```bash
254
+ pytest --cov=reveille --cov-report=term-missing
255
+ ```
256
+
257
+ **Type checking only:**
258
+
259
+ ```bash
260
+ mypy src/
261
+ ```
262
+
263
+ **Linting only:**
264
+
265
+ ```bash
266
+ ruff check src/
267
+ ```
268
+
269
+ ---
270
+
271
+ ## Contributing
272
+
273
+ Contributions are welcome. Before opening a pull request, please read the following.
274
+
275
+ **Reporting issues.** Use GitHub Issues. Include the output of `reveille --version`, the operating system, Python version, and a minimal reproduction case. If the issue involves a specific repository, a sanitised `git log --oneline` covering the relevant range is sufficient — do not include source code.
276
+
277
+ **Proposing changes.** Open an issue before starting significant work. This avoids duplication and ensures the direction is aligned before effort is invested.
278
+
279
+ **Submitting pull requests.** All pull requests must target the `main` branch. The CI pipeline runs `ruff`, `mypy`, and `pytest` on every pull request. All three must pass. New public functions require docstrings. New behaviour requires tests. The output contract — single self-contained HTML file, no external calls, formal aesthetic — is non-negotiable and must be preserved in every contribution.
280
+
281
+ **Code style.** Ruff handles linting and import ordering. Mypy runs in strict mode. Type annotations are required on every function signature. Early returns are preferred over nested conditionals throughout.
282
+
283
+ **Commit messages.** Follow the Conventional Commits specification: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`. Scope is optional but encouraged, e.g. `feat(ranking): add recency decay weighting`.
284
+
285
+ ---
286
+
287
+ ## Changelog
288
+
289
+ See [CHANGELOG.md](CHANGELOG.md) for the full release history. Reveille follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format and [Semantic Versioning 2.0](https://semver.org/).
290
+
291
+ ---
292
+
293
+ ## Licence
294
+
295
+ Reveille is released under the [MIT Licence](LICENSE).