You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,6 +63,13 @@ Before starting new work, check whether a corresponding GitHub issue exists. If
63
63
Commit messages must begin with the GitHub issue key (e.g. `#90 Include file name in all exceptions raised during reading`). This applies to every commit, including fixups and amendments.
64
64
Focus the body on **why**, not **what** — the diff already shows the what. A short paragraph is usually enough; do not restate the change as a bullet list. See [CONTRIBUTING.md](CONTRIBUTING.md#commit-messages).
65
65
66
+
# Dive TUI
67
+
68
+
When changing visual styling in the `hardwood dive` TUI (any code under `cli/src/main/java/dev/hardwood/cli/dive/`), follow the visual-hierarchy decision tree in [_designs/DIVE_THEME.md](_designs/DIVE_THEME.md). Style spans through one of `Theme.primary()` / `Theme.accent()` / `Theme.selection()` / `Theme.dim()`, or leave them at default fg via `Style.EMPTY`. Direct use of `Color.*` constants or literal `Style.EMPTY.bold()` / `Style.EMPTY.fg(...)` outside `Theme.java` is a smell — review against the decision tree before introducing any.
69
+
70
+
List-shaped screens must build `Row` objects only for the visible viewport, never for the whole collection. Use `RowWindow.bottomPinned(selection, total, viewport)` to derive the slice and pass `window.selectionInWindow()` to `TableState.select(...)`. Building rows for the entire list is invisible on small inputs but turns navigation O(N) on dictionaries with hundreds of thousands of entries, page lists with thousands of pages, or wide-schema files. See [_designs/DIVE_LIST_VIEWPORT_VIRTUALIZATION.md](_designs/DIVE_LIST_VIEWPORT_VIRTUALIZATION.md).
71
+
66
72
# Code Reviews
67
73
68
74
When reviewing a pull request, make sure the principles described here are applied.
75
+
When asked to review a PR, write the findings to a Markdown file with a `[ ]` checkbox in front of each actionable item. When subsequently asked to address those review remarks, check the items off (`[x]`) as they are resolved.
Copy file name to clipboardExpand all lines: RELEASING.md
+37-3Lines changed: 37 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,16 +35,50 @@ Configure the following secrets in the repository settings:
35
35
|`JRELEASER_MAVENCENTRAL_USERNAME`| Maven Central (Sonatype) username |
36
36
|`JRELEASER_MAVENCENTRAL_TOKEN`| Maven Central (Sonatype) token |
37
37
38
+
## Preparing the release notes
39
+
40
+
Before triggering the release, land an `[release] <VERSION> release notes` commit on `main` that updates `docs/content/release-notes.md` with the new section, milestone link, and contributor list.
41
+
42
+
`tools/contributors.py` produces the contributor line, alphabetised and with display names resolved from each GitHub profile:
43
+
44
+
```shell
45
+
# Two tags: contributors with commits in (<since>, <until>]
46
+
tools/contributors.py v1.0.0.Beta1 HEAD
47
+
48
+
# One tag: contributors up to and including <since> (initial release)
49
+
tools/contributors.py v1.0.0.Alpha1
50
+
```
51
+
52
+
It reads commit authors and `Co-authored-by` trailers, skips bots, and resolves emails via `gh api` (so authentication needs to be set up — `gh auth status`). Emails on accounts with email privacy enabled may not resolve; the script reports them on stderr.
53
+
38
54
## Running the Release
39
55
40
56
Trigger the `Release` workflow from the GitHub Actions UI with the following inputs:
41
57
42
58
-**Release version**: The version to release (e.g., `1.0.0`)
43
59
-**Development version**: The next snapshot version (e.g., `1.1.0-SNAPSHOT`)
44
-
-**Stage**: `UPLOAD` to upload the release to the deploy to the Maven Central portal (you can examine it at https://central.sonatype.com/publishing/deployments then), or `PUBLISH` to publish directly to Maven Central
60
+
-**Stage**: `UPLOAD` to upload the release to the deploy to the Maven Central portal (you can examine it at https://central.sonatype.com/publishing/deployments then), or `FULL` to publish directly to Maven Central
45
61
46
-
To test a staged release, run the following:
62
+
To test a staged release, check out the release tag and run:
Versioned documentation is published as a manual follow-up to the release, so post-release touch-ups (announcement blog post link, release-notes errata) can be folded in without mutating the release tag itself. The convention is:
72
+
73
+
1. After the release, write the announcement and add the blog post link plus any errata to `docs/content/release-notes.md` on `main`.
74
+
2. Tag that commit `v<VERSION>-docs` and push the tag:
75
+
```shell
76
+
git tag v<VERSION>-docs
77
+
git push origin v<VERSION>-docs
78
+
```
79
+
3. Run the **Publish versioned documentation** workflow from the GitHub Actions UI with:
80
+
-**ref**: `v<VERSION>-docs`
81
+
-**version**: `<VERSION>` (e.g. `1.0.0.Beta2`)
82
+
-**update-latest**: leave checked for forward releases; uncheck for back-ports of an earlier line that should not displace the newer one.
83
+
84
+
The workflow fires a `repository_dispatch` at `hardwood-hq/hardwood-hq.github.io`, which builds the site at the resolved commit. The `dev` label is refreshed automatically on every successful Main Build of `main` and never claims `latest`.
0 commit comments