@sacho/sacho-aarch64-pc-windows-msvc 0.1.0-dev.0 → 0.1.0-dev.10

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 (4) hide show
  1. package/LICENSE +674 -674
  2. package/README.md +227 -245
  3. package/package.json +1 -1
  4. package/sacho.exe +0 -0
package/README.md CHANGED
@@ -1,245 +1,227 @@
1
- Sacho: an opinionated changelog manager
2
- =======================================
3
-
4
- Motivation
5
- ----------
6
-
7
- Changelogs are not commit messages. A commit message explains why a change was
8
- made and addresses collaborators; a changelog tells users what changed and what
9
- they should or can do when they upgrade. Most changelog tooling ignores this
10
- distinction. Tools like git-cliff, conventional-changelog, and semantic-release
11
- generate changelogs *from* commit messages, which produces documents written
12
- for the wrong audience in the wrong voice. Sacho rejects generation outright:
13
- every changelog entry is prose written by a human, for users, at the time the
14
- change is made.
15
-
16
- The remaining tools that share this stance are tied to language ecosystems.
17
- towncrier assumes Python; changesets assumes an npm monorepo. Sacho is a single
18
- static binary with no runtime dependencies, usable in any repository regardless
19
- of language, and it does not even assume Git.
20
-
21
- [Sacho is opinionated.](./PHILOSOPHY.md) It enforces one fragment format,
22
- one output style, and one set of invariants. Configuration exists to describe
23
- your repository, not to customize the philosophy.
24
-
25
-
26
- Installation
27
- ------------
28
-
29
- The recommended way to install Sacho is with [mise]'s GitHub backend:
30
-
31
- ~~~~ sh
32
- mise use -g github:dahlia/sacho
33
- ~~~~
34
-
35
- This selects the release archive for the current platform and puts *sacho* on
36
- your `PATH`. npm installs the same prebuilt binary:
37
-
38
- ~~~~ sh
39
- npm install -g @sacho/sacho
40
- ~~~~
41
-
42
- Development builds are available as `@sacho/sacho@canary`.
43
-
44
- Cargo can build and install the published crate from crates.io instead:
45
-
46
- ~~~~ sh
47
- cargo install sacho
48
- ~~~~
49
-
50
- Without mise, npm, or Cargo, download the archive for your platform from
51
- [GitHub Releases], then extract
52
- *sacho* (*sacho.exe* on Windows) into a directory on your `PATH`.
53
-
54
- [mise]: https://mise.jdx.dev/
55
- [GitHub Releases]: https://github.com/dahlia/sacho/releases
56
-
57
-
58
- How it works
59
- ------------
60
-
61
- Each user-visible change lives in a small Markdown file under *changes.d/*.
62
- These files are called fragments. They are the source of truth for the next
63
- release; the unreleased section in *CHANGES.md* is generated output. Sacho
64
- sorts and formats the fragments, then turns them into a dated version section
65
- when you release. The consumed fragment files are deleted, while the released
66
- section is left untouched.
67
-
68
- A fragment contains exactly one top-level unordered list. One item is usual,
69
- but related changes may share a fragment:
70
-
71
- ~~~~ markdown
72
- - Added `clear()` to remove every entry at once.
73
- - Added `is_empty()` for checking whether a collection has entries.
74
- ~~~~
75
-
76
- Name fragments after the change itself, such as *clear-function.md*, rather
77
- than after an issue or pull request number. A later change to the same feature
78
- can then update the existing fragment instead of documenting an intermediate
79
- state that never shipped.
80
-
81
-
82
- Basic workflow
83
- --------------
84
-
85
- With `sacho` on your `PATH`, initialize it at the repository root and choose
86
- the version you are preparing:
87
-
88
- ~~~~ sh
89
- sacho init
90
- sacho next 1.2.0
91
- ~~~~
92
-
93
- Initialization creates *sacho.toml*, *changes.d/*, and *CHANGES.md*. It also
94
- sets up the merge integration supported by the detected version-control
95
- system. The interactive setup can infer an issue-link template from the
96
- repository URL and offer to install a Git pre-commit hook. Repository
97
- integrations use the executable that ran `init`; pass
98
- `--integration-executable PATH` to use another executable.
99
-
100
- Create one fragment for each user-visible change, then edit the path printed by
101
- the command:
102
-
103
- ~~~~ sh
104
- sacho add clear-function
105
- ~~~~
106
-
107
- Repositories configured with sections, such as packages in a monorepo, select
108
- the section by its configured id:
109
-
110
- ~~~~ sh
111
- sacho add --section core clear-function
112
- ~~~~
113
-
114
- Format the fragments, inspect the compiled release, and check the repository
115
- before committing:
116
-
117
- ~~~~ sh
118
- sacho fmt
119
- sacho preview
120
- sacho check
121
- ~~~~
122
-
123
- `sacho fmt` also refreshes the materialized unreleased section. Do not edit
124
- that section in *CHANGES.md* by hand; edit its fragments and run `sacho sync`
125
- if the generated copy falls out of date. To enforce fragment coverage for
126
- source changes, configure `[check].paths` and use `sacho check --staged` for
127
- staged Git changes or `sacho check --base <revision>` in CI.
128
-
129
- When the version is ready, compile and consume its fragments. This command
130
- releases the version stored by `sacho next`, uses the current local date, and
131
- starts the next version:
132
-
133
- ~~~~ sh
134
- sacho release --next 1.3.0
135
- ~~~~
136
-
137
- If no next version has been set, pass the release version explicitly, for
138
- example `sacho release 1.2.0`. Use `--date YYYY-MM-DD` when the release date
139
- must be supplied rather than taken from the local clock.
140
-
141
- After committing a release, print its frozen Markdown section with `show`:
142
-
143
- ~~~~ sh
144
- sacho show 1.2.0
145
- ~~~~
146
-
147
- The output starts at the version heading and ends before the next released
148
- version heading. It is written to standard output unless `-o PATH` or
149
- `--output-file PATH` is supplied. Pass `-H` or `--skip-heading` to omit the
150
- version heading. For example, a GitHub Actions job triggered by a `v1.2.0` tag
151
- can run:
152
-
153
- ~~~~ sh
154
- version="${GITHUB_REF_NAME#v}"
155
- sacho show "$version" --skip-heading --output-file release-notes.md
156
- gh release create "$GITHUB_REF_NAME" --notes-file release-notes.md
157
- ~~~~
158
-
159
-
160
- Version-control integration
161
- ---------------------------
162
-
163
- Sacho can enforce that commits changing configured source paths also carry a
164
- changelog fragment. Select the repository's VCS in *sacho.toml*:
165
-
166
- ~~~~ toml
167
- [vcs]
168
- preset = "git" # "jj", "hg", or "none"
169
-
170
- [check]
171
- paths = ["src/**"]
172
- ~~~~
173
-
174
- Then check commits after a base revision with `sacho check --base <revision>`.
175
- Git also supports `sacho check --staged`. The `none` preset explicitly skips
176
- VCS-backed checks while leaving fragment validation and changelog consistency
177
- checks enabled.
178
-
179
- Each preset supplies three subprocess commands. Repositories can override one
180
- command without repeating the other two:
181
-
182
- ~~~~ toml
183
- [vcs]
184
- preset = "git"
185
-
186
- [vcs.commands]
187
- message = ["my-vcs-wrapper", "message", "${commit}"]
188
- ~~~~
189
-
190
- The first array element is the executable and every remaining element is one
191
- literal argument; Sacho never invokes a shell. The commits command uses
192
- `${base}`, while changed-paths and message use `${commit}`. An overridden query
193
- is the complete query and does not invoke commands from its preset behind the
194
- scenes. The built-in Mercurial preset handles parent comparisons internally.
195
-
196
- The query output contracts are:
197
-
198
- - `commits` emits zero or more nonempty UTF-8 commit identifiers, oldest
199
- first and one per line. The final line may end in LF; CRLF is also
200
- accepted.
201
- - `changed-paths` emits concatenated NUL-terminated name-status records.
202
- Ordinary records are `A\0PATH\0`, `D\0PATH\0`, `M\0PATH\0`, or
203
- `T\0PATH\0`, where `T` denotes a file type change. Copy and rename records
204
- are `C[SIMILARITY]\0OLD_PATH\0NEW_PATH\0` and
205
- `R[SIMILARITY]\0OLD_PATH\0NEW_PATH\0`, where the optional similarity is a
206
- decimal percentage from 0 through 100. Status fields are UTF-8 and paths
207
- are nonempty repository-relative platform paths; path bytes need not be
208
- UTF-8 on Unix. Nonempty output ends in NUL. A copied or renamed fragment
209
- counts as new content only when similarity is present and below 100;
210
- omitting it does not satisfy fragment coverage.
211
- - `message` emits the complete UTF-8 commit message verbatim. Sacho does not
212
- trim it.
213
-
214
- `sacho init` installs Git merge attributes and drivers in Git repositories. In
215
- Mercurial repositories it installs an idempotent block in *.hg/hgrc* containing
216
- a successful-merge update hook and, when changelog materialization is enabled,
217
- the changelog merge driver. These integrations invoke the executable that ran
218
- `init` unless `--integration-executable` selects another one. Jujutsu has no
219
- per-path merge-driver hook; after resolving a concurrent fragment merge, run
220
- `sacho sync --force`.
221
-
222
-
223
- Etymology
224
- ---------
225
-
226
- Sacho (史草) names the
227
- [draft records kept by official historians of Joseon Korea.][1]
228
- Historiographers wrote sacho independently, event by event, as things happened.
229
- Only after a king's death did the Office for Annals Compilation collect the
230
- sacho and compile them into the Veritable Records (sillok, 實錄). Once
231
- compiled, the annals were sealed in archives and could not be revised; not even
232
- the king was permitted to read the sacho or to interfere with their
233
- compilation. The drafts themselves were then washed of their ink so the paper
234
- could be reused, a step with its own name: secho (洗草).
235
-
236
- The correspondence to this tool is close enough that the name doubles as a
237
- design summary. Fragments are sacho: independent records written when the
238
- change happens. A release is the compilation of the annals: fragments are
239
- gathered into a permanent document. Released sections are sealed: Sacho never
240
- rewrites them. Deleting consumed fragments after a release is secho. The
241
- institutional insistence that drafts, not recollection, are the source of truth
242
- is the same insistence this tool makes against generating changelogs from
243
- commit messages after the fact.
244
-
245
- [1]: https://en.wikipedia.org/wiki/Veritable_Records_of_the_Joseon_Dynasty#Compilation_process
1
+ Sacho: an opinionated changelog manager
2
+ =======================================
3
+
4
+ Motivation
5
+ ----------
6
+
7
+ Changelogs are not commit messages. A commit message explains why a change was
8
+ made and addresses collaborators; a changelog tells users what changed and what
9
+ they should or can do when they upgrade. Most changelog tooling ignores this
10
+ distinction. Tools like git-cliff, conventional-changelog, and semantic-release
11
+ generate changelogs *from* commit messages, which produces documents written
12
+ for the wrong audience in the wrong voice. Sacho rejects generation outright:
13
+ every changelog entry is prose written by a human, for users, at the time the
14
+ change is made.
15
+
16
+ The remaining tools that share this stance are tied to language ecosystems.
17
+ towncrier assumes Python; changesets assumes an npm monorepo. Sacho is a single
18
+ static binary with no runtime dependencies, usable in any repository regardless
19
+ of language, and it does not even assume Git.
20
+
21
+ [*Sacho is opinionated.*](./PHILOSOPHY.md) It enforces one fragment format,
22
+ one output style, and one set of invariants. Configuration exists to describe
23
+ your repository, not to customize the philosophy.
24
+
25
+
26
+ Installation
27
+ ------------
28
+
29
+ The recommended way to install Sacho is with [mise]'s GitHub backend:
30
+
31
+ ~~~~ sh
32
+ mise use -g github:dahlia/sacho
33
+ ~~~~
34
+
35
+ This selects the release archive for the current platform and puts *sacho* on
36
+ your `PATH`. npm installs the same prebuilt binary:
37
+
38
+ ~~~~ sh
39
+ npm install -g @sacho/sacho
40
+ ~~~~
41
+
42
+ Development builds are available as `@sacho/sacho@canary`.
43
+
44
+ Cargo can build and install the published crate from crates.io instead:
45
+
46
+ ~~~~ sh
47
+ cargo install sacho
48
+ ~~~~
49
+
50
+ Without mise, npm, or Cargo, download the archive for your platform from
51
+ [GitHub Releases], then extract
52
+ *sacho* (*sacho.exe* on Windows) into a directory on your `PATH`.
53
+
54
+ [mise]: https://mise.jdx.dev/
55
+ [GitHub Releases]: https://github.com/dahlia/sacho/releases
56
+
57
+
58
+ Documentation
59
+ -------------
60
+
61
+ The [*Sacho documentation*] walks through adoption, everyday use, releases,
62
+ CI, and version-control integration. It also explains Sacho's core concepts and
63
+ provides complete command and configuration references.
64
+
65
+ [*Sacho documentation*]: https://sacho.dev/guide/getting-started
66
+
67
+
68
+ How it works
69
+ ------------
70
+
71
+ Each user-visible change lives in a small Markdown file under *changes.d/*.
72
+ These files are called fragments. They are the source of truth for the next
73
+ release; the unreleased section in *CHANGES.md* is generated output. Sacho
74
+ sorts and formats the fragments, then turns them into a dated version section
75
+ when you release. The consumed fragment files are deleted, while the released
76
+ section is left untouched.
77
+
78
+ A fragment contains exactly one top-level unordered list. One item is usual,
79
+ but related changes may share a fragment:
80
+
81
+ ~~~~ markdown
82
+ - Added `clear()` to remove every entry at once.
83
+ - Added `is_empty()` for checking whether a collection has entries.
84
+ ~~~~
85
+
86
+ Name fragments after the change itself, such as *clear-function.md*, rather
87
+ than after an issue or pull request number. A later change to the same feature
88
+ can then update the existing fragment instead of documenting an intermediate
89
+ state that never shipped.
90
+
91
+
92
+ Basic workflow
93
+ --------------
94
+
95
+ With `sacho` on your `PATH`, initialize it at the repository root and choose
96
+ the version you are preparing:
97
+
98
+ ~~~~ sh
99
+ sacho init
100
+ sacho next 1.2.0
101
+ ~~~~
102
+
103
+ Initialization creates *sacho.toml*, *changes.d/*, and *CHANGES.md*. It also
104
+ sets up the merge integration supported by the detected version-control
105
+ system. The interactive setup can infer an issue-link template from the
106
+ repository URL and offer to install a Git pre-commit hook. Repository
107
+ integrations use the executable that ran `init`; pass
108
+ `--integration-executable PATH` to use another executable.
109
+
110
+ Create one fragment for each user-visible change, then edit the path printed by
111
+ the command:
112
+
113
+ ~~~~ sh
114
+ sacho add clear-function
115
+ ~~~~
116
+
117
+ Repositories configured with sections, such as packages in a monorepo, select
118
+ the section by its configured id:
119
+
120
+ ~~~~ sh
121
+ sacho add --section core clear-function
122
+ ~~~~
123
+
124
+ Format the fragments, inspect the compiled release, and check the repository
125
+ before committing:
126
+
127
+ ~~~~ sh
128
+ sacho fmt
129
+ sacho preview
130
+ sacho check
131
+ ~~~~
132
+
133
+ `sacho fmt` also refreshes the materialized unreleased section. Do not edit
134
+ that section in *CHANGES.md* by hand; edit its fragments and run `sacho sync`
135
+ if the generated copy falls out of date. To enforce fragment coverage for
136
+ source changes, configure `[check].paths` and use `sacho check --staged` for
137
+ staged Git changes or `sacho check --base <revision>` in CI.
138
+
139
+ When the version is ready, compile and consume its fragments. This command
140
+ releases the version stored by `sacho next`, uses the current local date, and
141
+ starts the next version:
142
+
143
+ ~~~~ sh
144
+ sacho release --next 1.3.0
145
+ ~~~~
146
+
147
+ If no next version has been set, pass the release version explicitly, for
148
+ example `sacho release 1.2.0`. Use `--date YYYY-MM-DD` when the release date
149
+ must be supplied rather than taken from the local clock.
150
+
151
+ After committing a release, print its frozen Markdown section with `show`:
152
+
153
+ ~~~~ sh
154
+ sacho show 1.2.0
155
+ ~~~~
156
+
157
+ The output starts at the version heading and ends before the next released
158
+ version heading. It is written to standard output unless `-o PATH` or
159
+ `--output-file PATH` is supplied. Pass `-H` or `--skip-heading` to omit the
160
+ version heading. For example, a GitHub Actions job triggered by a `v1.2.0` tag
161
+ can run:
162
+
163
+ ~~~~ sh
164
+ version="${GITHUB_REF_NAME#v}"
165
+ sacho show "$version" --skip-heading --output-file release-notes.md
166
+ gh release create "$GITHUB_REF_NAME" --notes-file release-notes.md
167
+ ~~~~
168
+
169
+
170
+ Version-control integration
171
+ ---------------------------
172
+
173
+ Sacho can enforce that commits changing configured source paths also carry a
174
+ changelog fragment. Select the repository's VCS and the paths to check in
175
+ *sacho.toml*:
176
+
177
+ ~~~~ toml
178
+ [vcs]
179
+ preset = "git" # "jj", "hg", or "none"
180
+
181
+ [check]
182
+ paths = ["src/**"]
183
+ ~~~~
184
+
185
+ Then check commits after a base revision with `sacho check --base <revision>`.
186
+ Git also supports `sacho check --staged`. The `none` preset explicitly skips
187
+ VCS-backed checks while leaving fragment validation and changelog consistency
188
+ checks enabled.
189
+
190
+ `sacho init` installs Git merge attributes and drivers in Git repositories. In
191
+ Mercurial repositories it installs an idempotent block in *.hg/hgrc* containing
192
+ a successful-merge update hook and, when changelog materialization is enabled,
193
+ the changelog merge driver. These integrations invoke the executable that ran
194
+ `init` unless `--integration-executable` selects another one. Jujutsu has no
195
+ per-path merge-driver hook; after resolving a concurrent fragment merge, run
196
+ `sacho sync --force`.
197
+
198
+ See [*CI and hooks*] for fragment coverage and [*Version control*] for preset,
199
+ merge-driver, and custom-query details.
200
+
201
+ [*CI and hooks*]: https://sacho.dev/guide/ci-and-hooks
202
+ [*Version control*]: https://sacho.dev/guide/version-control
203
+
204
+
205
+ Etymology
206
+ ---------
207
+
208
+ Sacho (史草) names the
209
+ [draft records kept by official historians of Joseon Korea.][1]
210
+ Historiographers wrote sacho independently, event by event, as things happened.
211
+ Only after a king's death did the Office for Annals Compilation collect the
212
+ sacho and compile them into the Veritable Records (sillok, 實錄). Once
213
+ compiled, the annals were sealed in archives and could not be revised; not even
214
+ the king was permitted to read the sacho or to interfere with their
215
+ compilation. The drafts themselves were then washed of their ink so the paper
216
+ could be reused, a step with its own name: secho (洗草).
217
+
218
+ The correspondence to this tool is close enough that the name doubles as a
219
+ design summary. Fragments are sacho: independent records written when the
220
+ change happens. A release is the compilation of the annals: fragments are
221
+ gathered into a permanent document. Released sections are sealed: Sacho never
222
+ rewrites them. Deleting consumed fragments after a release is secho. The
223
+ institutional insistence that drafts, not recollection, are the source of truth
224
+ is the same insistence this tool makes against generating changelogs from
225
+ commit messages after the fact.
226
+
227
+ [1]: https://en.wikipedia.org/wiki/Veritable_Records_of_the_Joseon_Dynasty#Compilation_process
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sacho/sacho-aarch64-pc-windows-msvc",
3
- "version": "0.1.0-dev.0",
3
+ "version": "0.1.0-dev.10+64ac5bb",
4
4
  "description": "The Sacho binary for aarch64-pc-windows-msvc",
5
5
  "license": "GPL-3.0-only",
6
6
  "author": "Hong Minhee <hong@minhee.org>",
package/sacho.exe CHANGED
Binary file