Skip to content

Commit 1d24a2e

Browse files
docs(faq): fix escaped backticks and trailing spaces in commitlint FAQ
1 parent 21f65af commit 1d24a2e

1 file changed

Lines changed: 50 additions & 50 deletions

File tree

docs/internals/multimod/faq.md

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -102,50 +102,50 @@ Three levels of trust. Without `--write` — read-only. With `--write` — local
102102

103103
No. Multimod will reject this with a clear error: "root module must not require internal sub-modules." Root is the zero-deps core. Subs depend on root, not reverse. This is the standard Go monorepo convention (OTEL, Kubernetes, every major project).
104104

105-
### "I renamed my module directory and releases broke! Multimod is garbage!"
106-
105+
### "I renamed my module directory and releases broke! Multimod is garbage!"
106+
107107
Multimod is fine. You broke your users. Renaming a Go module directory = changing the module path = breaking change for every downstream consumer. This is Go's rule, not ours. `github.com/you/project/otel` and `github.com/you/project/motel` are two different modules — like two different npm packages. Old tags still point to the old module path. New directory has zero release history. Every user must change their import paths manually. Multimod can't prevent this because it sees current state, not history — and even if it could, the decision to rename is yours, not ours.
108108

109-
### "OTEL has module sets — groups of modules with different versions. Where's yours?"
110-
111-
You don't need them. Module sets exist because OTEL has no discovery — they don't know what modules exist, so they list them in YAML. Since they already have YAML, they added grouping. We discover modules automatically.
112-
109+
### "OTEL has module sets — groups of modules with different versions. Where's yours?"
110+
111+
You don't need them. Module sets exist because OTEL has no discovery — they don't know what modules exist, so they list them in YAML. Since they already have YAML, they added grouping. We discover modules automatically.
112+
113113
Module = package with `go.mod`. That's Go's rule, not ours. You either release all modules together (default) or one specific module (`--module` flag). Arbitrary groupings ("A+C together, B+D together") are a symptom of bad structure. If two modules always release together — they should be one module. If not — they're independent. No config file needed.
114114

115-
### "OTEL checks that stable modules don't depend on unstable ones. You don't?"
116-
117-
Correct. That's not a release concern — it's an analysis concern. Like Capslock analyzers, like `go vet`, like any static analysis tool. It shouldn't block your dev or release flow.
118-
119-
Multimod reports facts. External tools apply policy:
120-
121-
\`\`\`bash
122-
multimod modules | your-stability-checker
123-
\`\`\`
124-
115+
### "OTEL checks that stable modules don't depend on unstable ones. You don't?"
116+
117+
Correct. That's not a release concern — it's an analysis concern. Like Capslock analyzers, like `go vet`, like any static analysis tool. It shouldn't block your dev or release flow.
118+
119+
Multimod reports facts. External tools apply policy:
120+
121+
```bash
122+
multimod modules | your-stability-checker
123+
```
124+
125125
Want to check stable→unstable deps? Write a `jq` one-liner over `multimod modules` output. Want a different policy? Change the one-liner. Multimod doesn't judge your dependency graph — it describes it.
126126

127-
### "Why do I have to specify the version manually? Can't you auto-increment?"
128-
129-
No. Version strategy is your decision, not ours. Semantic-release? Conventional commits? Manual changelog review? Calendar versioning? We don't know and we don't care.
130-
127+
### "Why do I have to specify the version manually? Can't you auto-increment?"
128+
129+
No. Version strategy is your decision, not ours. Semantic-release? Conventional commits? Manual changelog review? Calendar versioning? We don't know and we don't care.
130+
131131
`multimod release v1.2.3` — you tell us what. We do it. How you arrived at `v1.2.3` is between you and your CI pipeline. Unix way — each tool does one thing.
132132

133-
### "How do I know which module to release? Can't multimod detect changes?"
134-
135-
That's git's job. Multimod knows what exists. Git knows what changed. Pipe them:
136-
137-
\`\`\`bash
138-
multimod modules | jq -r '.subs[].dir' | while read dir; do
139-
git log v1.2.0..HEAD --oneline -- "$dir" | grep -q . && echo "$dir"
140-
done
141-
\`\`\`
142-
133+
### "How do I know which module to release? Can't multimod detect changes?"
134+
135+
That's git's job. Multimod knows what exists. Git knows what changed. Pipe them:
136+
137+
```bash
138+
multimod modules | jq -r '.subs[].dir' | while read dir; do
139+
git log v1.2.0..HEAD --oneline -- "$dir" | grep -q . && echo "$dir"
140+
done
141+
```
142+
143143
We don't reinvent `git diff`. We give you the module list, git gives you the history, your script makes the decision. Three tools, three responsibilities, zero overlap.
144144

145-
### "I ran multimod in CI and it shows zero releases! All my tags are gone!"
146-
147-
Your CI does `git clone --depth 1`. Tags aren't fetched. That's not a multimod problem — that's a CI configuration problem. Like buying a car and not filling the gas tank, then complaining to the dealership.
148-
145+
### "I ran multimod in CI and it shows zero releases! All my tags are gone!"
146+
147+
Your CI does `git clone --depth 1`. Tags aren't fetched. That's not a multimod problem — that's a CI configuration problem. Like buying a car and not filling the gas tank, then complaining to the dealership.
148+
149149
Multimod reports what it sees in your local git. No tags locally? No tags reported. Add `fetch-depth: 0` or `git fetch --tags` to your CI config. Multimod will warn if it detects a shallow clone with zero tags — but it won't fix your pipeline for you.
150150

151151
## Competition
@@ -187,22 +187,22 @@ No. `multimod && git diff --quiet` is your verify. Multimod syncs state, git sho
187187

188188
Templates in `.multimod/templates/` run automatically as part of every `multimod` invocation. Not a command — a pipeline step. Add a template, run multimod, get generated files. Remove a template, multimod stops owning those files.
189189

190-
### "How do I integrate with conventional commits and commitlint?"
191-
192-
Multimod gives you the module list. Commitlint validates scopes. CI connects them:
193-
194-
\`\`\`bash
195-
# Generate allowed scopes from actual modules
196-
multimod modules | jq -r '.subs[].dir' > .allowed-scopes
197-
198-
# Commitlint validates against dynamic list
199-
commitlint --scopes-from .allowed-scopes
200-
201-
# CI extracts scope from commit, releases that module
202-
MODULE=$(git log -1 --format='%s' | parse-scope)
203-
multimod release v1.3.0 --module "$MODULE" --write --push
204-
\`\`\`
205-
190+
### "How do I integrate with conventional commits and commitlint?"
191+
192+
Multimod gives you the module list. Commitlint validates scopes. CI connects them:
193+
194+
```bash
195+
# Generate allowed scopes from actual modules
196+
multimod modules | jq -r '.subs[].dir' > .allowed-scopes
197+
198+
# Commitlint validates against dynamic list
199+
commitlint --scopes-from .allowed-scopes
200+
201+
# CI extracts scope from commit, releases that module
202+
MODULE=$(git log -1 --format='%s' | parse-scope)
203+
multimod release v1.3.0 --module "$MODULE" --write --push
204+
```
205+
206206
Multimod doesn't know about conventional commits. Commitlint doesn't know about Go modules. Composition through stdout. Add a module — scope appears automatically. Remove a module — scope disappears. Zero maintenance.
207207

208208
---

0 commit comments

Comments
 (0)