get-tbd 0.1.30 → 0.2.1
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.
- package/README.md +5 -1
- package/dist/bin.mjs +3193 -2220
- package/dist/bin.mjs.map +1 -1
- package/dist/cli.mjs +1545 -821
- package/dist/cli.mjs.map +1 -1
- package/dist/{config-DVap9omo.mjs → config-BJz1m9eN.mjs} +179 -39
- package/dist/config-BJz1m9eN.mjs.map +1 -0
- package/dist/{config-BPHcePSm.mjs → config-DlCUMyCG.mjs} +1 -1
- package/dist/docs/README.md +5 -1
- package/dist/docs/SKILL.md +2 -2
- package/dist/docs/guidelines/backward-compatibility-rules.md +4 -0
- package/dist/docs/guidelines/bun-monorepo-patterns.md +20 -4
- package/dist/docs/guidelines/cli-agent-skill-patterns.md +120 -34
- package/dist/docs/guidelines/commit-conventions.md +4 -0
- package/dist/docs/guidelines/common-doc-guidelines.md +234 -0
- package/dist/docs/guidelines/convex-limits-best-practices.md +4 -0
- package/dist/docs/guidelines/convex-rules.md +4 -0
- package/dist/docs/guidelines/electron-app-development-patterns.md +4 -0
- package/dist/docs/guidelines/error-handling-rules.md +4 -0
- package/dist/docs/guidelines/general-coding-rules.md +4 -0
- package/dist/docs/guidelines/general-comment-rules.md +4 -0
- package/dist/docs/guidelines/general-eng-assistant-rules.md +4 -0
- package/dist/docs/guidelines/general-tdd-guidelines.md +4 -0
- package/dist/docs/guidelines/general-testing-rules.md +4 -0
- package/dist/docs/guidelines/golden-testing-guidelines.md +4 -0
- package/dist/docs/guidelines/pnpm-monorepo-patterns.md +27 -6
- package/dist/docs/guidelines/python-cli-patterns.md +4 -0
- package/dist/docs/guidelines/python-modern-guidelines.md +30 -0
- package/dist/docs/guidelines/python-rules.md +4 -0
- package/dist/docs/guidelines/release-notes-guidelines.md +4 -0
- package/dist/docs/guidelines/supply-chain-hardening.md +11 -7
- package/dist/docs/guidelines/tbd-sync-troubleshooting.md +10 -4
- package/dist/docs/guidelines/typescript-cli-tool-rules.md +27 -24
- package/dist/docs/guidelines/typescript-code-coverage.md +11 -7
- package/dist/docs/guidelines/typescript-rules.md +10 -6
- package/dist/docs/guidelines/typescript-sorting-patterns.md +4 -0
- package/dist/docs/guidelines/typescript-yaml-handling-rules.md +7 -3
- package/dist/docs/shortcuts/standard/agent-handoff.md +4 -0
- package/dist/docs/shortcuts/standard/checkout-third-party-repo.md +4 -0
- package/dist/docs/shortcuts/standard/code-cleanup-all.md +4 -0
- package/dist/docs/shortcuts/standard/code-cleanup-docstrings.md +4 -0
- package/dist/docs/shortcuts/standard/code-cleanup-tests.md +4 -0
- package/dist/docs/shortcuts/standard/code-review-and-commit.md +4 -0
- package/dist/docs/shortcuts/standard/coding-spike.md +4 -0
- package/dist/docs/shortcuts/standard/create-or-update-pr-simple.md +4 -0
- package/dist/docs/shortcuts/standard/create-or-update-pr-with-validation-plan.md +4 -0
- package/dist/docs/shortcuts/standard/implement-beads.md +4 -0
- package/dist/docs/shortcuts/standard/merge-upstream.md +4 -0
- package/dist/docs/shortcuts/standard/new-architecture-doc.md +4 -0
- package/dist/docs/shortcuts/standard/new-guideline.md +4 -0
- package/dist/docs/shortcuts/standard/new-plan-spec.md +4 -0
- package/dist/docs/shortcuts/standard/new-qa-playbook.md +4 -0
- package/dist/docs/shortcuts/standard/new-research-brief.md +4 -0
- package/dist/docs/shortcuts/standard/new-shortcut.md +4 -0
- package/dist/docs/shortcuts/standard/new-validation-plan.md +4 -0
- package/dist/docs/shortcuts/standard/plan-implementation-with-beads.md +4 -0
- package/dist/docs/shortcuts/standard/precommit-process.md +4 -0
- package/dist/docs/shortcuts/standard/review-code-python.md +4 -0
- package/dist/docs/shortcuts/standard/review-code-typescript.md +4 -0
- package/dist/docs/shortcuts/standard/review-code.md +4 -0
- package/dist/docs/shortcuts/standard/review-github-pr.md +4 -0
- package/dist/docs/shortcuts/standard/revise-all-architecture-docs.md +4 -0
- package/dist/docs/shortcuts/standard/revise-architecture-doc.md +4 -0
- package/dist/docs/shortcuts/standard/setup-github-cli.md +4 -0
- package/dist/docs/shortcuts/standard/sync-failure-recovery.md +4 -0
- package/dist/docs/shortcuts/standard/update-specs-status.md +4 -0
- package/dist/docs/shortcuts/standard/welcome-user.md +4 -0
- package/dist/docs/shortcuts/system/skill-baseline.md +2 -2
- package/dist/docs/tbd-closing.md +4 -0
- package/dist/docs/tbd-design.md +109 -68
- package/dist/docs/tbd-docs.md +20 -13
- package/dist/docs/tbd-prime.md +4 -0
- package/dist/docs/templates/architecture-doc.md +4 -0
- package/dist/docs/templates/plan-spec.md +4 -0
- package/dist/docs/templates/qa-playbook.md +4 -0
- package/dist/docs/templates/research-brief.md +4 -0
- package/dist/{id-mapping-CqrrLgeX.mjs → id-mapping-687_UEsy.mjs} +198 -124
- package/dist/id-mapping-687_UEsy.mjs.map +1 -0
- package/dist/{id-mapping-Ctfl_nc1.mjs → id-mapping-mtoSP9Qt.mjs} +1 -1
- package/dist/index.d.mts +53 -1
- package/dist/index.mjs +3 -3
- package/dist/{schemas-C8mOQykE.mjs → schemas-f0EcuAVu.mjs} +40 -3
- package/dist/schemas-f0EcuAVu.mjs.map +1 -0
- package/dist/{src-BK_EF6mk.mjs → src-CtZIHxYM.mjs} +3 -3
- package/dist/src-CtZIHxYM.mjs.map +1 -0
- package/dist/tbd +3193 -2220
- package/package.json +1 -1
- package/dist/config-DVap9omo.mjs.map +0 -1
- package/dist/docs/guidelines/general-style-rules.md +0 -38
- package/dist/docs/guidelines/writing-style-guidelines.md +0 -42
- package/dist/id-mapping-CqrrLgeX.mjs.map +0 -1
- package/dist/schemas-C8mOQykE.mjs.map +0 -1
- package/dist/src-BK_EF6mk.mjs.map +0 -1
|
@@ -90,9 +90,10 @@ The architecture prioritizes fast iteration during early development while maint
|
|
|
90
90
|
clear path to split packages later without breaking changes.
|
|
91
91
|
|
|
92
92
|
The recommended stack uses **pnpm workspaces** for dependency management, **tsdown** for
|
|
93
|
-
building ESM/CJS dual outputs with TypeScript declarations, **Changesets**
|
|
94
|
-
|
|
95
|
-
and **
|
|
93
|
+
building ESM/CJS dual outputs with TypeScript declarations, **Changesets**
|
|
94
|
+
(multi-package monorepos) or **tag-triggered OIDC publishing** (single-package repos)
|
|
95
|
+
for versioning and release automation, **publint** for validating package
|
|
96
|
+
publishability, and **lefthook** for fast local git hooks.
|
|
96
97
|
This approach supports private development via GitHub Packages or direct GitHub
|
|
97
98
|
installs, with a seamless transition to public npm publishing when ready.
|
|
98
99
|
|
|
@@ -671,7 +672,8 @@ package. Essential for any published package.
|
|
|
671
672
|
|
|
672
673
|
#### Changesets
|
|
673
674
|
|
|
674
|
-
**Status**:
|
|
675
|
+
**Status**: Recommended for multi-package monorepos (for a single published package,
|
|
676
|
+
prefer the tag-triggered approach below)
|
|
675
677
|
|
|
676
678
|
**Details**:
|
|
677
679
|
|
|
@@ -729,8 +731,10 @@ Changesets provides:
|
|
|
729
731
|
|
|
730
732
|
- Publishes to npm when that PR is merged
|
|
731
733
|
|
|
732
|
-
**Assessment**: Changesets is the de facto standard for monorepo
|
|
733
|
-
|
|
734
|
+
**Assessment**: Changesets is the de facto standard for *multi-package* monorepo
|
|
735
|
+
versioning and integrates seamlessly with pnpm and GitHub Actions.
|
|
736
|
+
For a repo that publishes a single package, its per-PR ceremony rarely pays off — prefer
|
|
737
|
+
the tag-triggered approach below (see the LLM-era note).
|
|
734
738
|
|
|
735
739
|
**References**:
|
|
736
740
|
|
|
@@ -759,6 +763,19 @@ No NPM_TOKEN needed, no “Version Packages” PR workflow.
|
|
|
759
763
|
3. Commit, tag (e.g., `v1.2.3`), and push
|
|
760
764
|
4. GitHub Action publishes automatically on tag push
|
|
761
765
|
|
|
766
|
+
> **When to prefer this over Changesets (LLM-era note):** For a **single published
|
|
767
|
+
> package**, Changesets’ main wins (multi-package coordination and per-PR changelog
|
|
768
|
+
> accumulation) mostly evaporate, while its ceremony (a `.changeset/*.md` per PR, a
|
|
769
|
+
> bump-type decision per PR, the `changeset version` step, a “Version Packages” PR)
|
|
770
|
+
> stays. When releases are cut by an agent/maintainer who assembles notes from clean
|
|
771
|
+
> conventional commits at release time (see a release-notes template), tag-triggered
|
|
772
|
+
> publishing is simpler and has fewer moving parts: clean commits → bump + `## X.Y.Z`
|
|
773
|
+
> CHANGELOG section → tag → auto-publish.
|
|
774
|
+
> `tbd` itself uses this approach (project-local `docs/publishing.md` for the per-repo
|
|
775
|
+
> playbook; the workflow itself is the GitHub Action triggered by the `v*` tag).
|
|
776
|
+
> Keep Changesets when you publish several interdependent packages or want contributors
|
|
777
|
+
> to declare intent in each PR.
|
|
778
|
+
|
|
762
779
|
**One-time setup**:
|
|
763
780
|
|
|
764
781
|
1. Publish package manually once: `npm publish --access public`
|
|
@@ -3554,3 +3571,7 @@ ncu --dep dev --format group
|
|
|
3554
3571
|
# Upgrade with peer dependency handling
|
|
3555
3572
|
ncu --target minor -u && pnpm install --force
|
|
3556
3573
|
```
|
|
3574
|
+
|
|
3575
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
3576
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
3577
|
+
-->
|
|
@@ -83,3 +83,7 @@ Use `uv-dynamic-versioning` for git-based versions:
|
|
|
83
83
|
4. Separate handlers from command definitions for testability
|
|
84
84
|
5. Use TypedDict or dataclasses for type-safe options
|
|
85
85
|
6. Test with Typer’s CliRunner for isolated, fast tests
|
|
86
|
+
|
|
87
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
88
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
89
|
+
-->
|
|
@@ -182,3 +182,33 @@ class MyThing:
|
|
|
182
182
|
str(MyThing(file_path="/tmp/file.txt", title="Something " + "blah " * 50, url="https://www.example.com", body="..."))
|
|
183
183
|
# -> "MyThing(title='Something blah blah blah blah blah blah blah blah blah blah blah…', file_path=/tmp/file.txt, url=https://www.example.com)"
|
|
184
184
|
```
|
|
185
|
+
|
|
186
|
+
## Releasing (tag-triggered, no changesets)
|
|
187
|
+
|
|
188
|
+
For publishing Python packages to PyPI, follow the
|
|
189
|
+
[`simple-modern-uv`](https://github.com/jlevy/simple-modern-uv) template’s model — it is
|
|
190
|
+
the standard for tbd’s Python projects.
|
|
191
|
+
The same clean principles as the TypeScript guidance apply: no changesets, releases cut
|
|
192
|
+
from clean conventional commits.
|
|
193
|
+
|
|
194
|
+
- **Dynamic versioning from the git tag** via
|
|
195
|
+
[`uv-dynamic-versioning`](https://github.com/ninoseki/uv-dynamic-versioning) — the tag
|
|
196
|
+
*is* the version (no manual `version =` bump in `pyproject.toml`, no version commit).
|
|
197
|
+
- **Release/tag-triggered publish**: a `publish.yml` workflow runs on
|
|
198
|
+
`on: release: types: [published]` (or a `v*` tag), builds with `uv build`, and
|
|
199
|
+
publishes with `uv publish --trusted-publishing always` — **PyPI Trusted Publishing
|
|
200
|
+
(OIDC), no API token**.
|
|
201
|
+
- **Supply-chain cool-off in CI**: set `UV_EXCLUDE_NEWER` to a 14-days-ago cutoff so the
|
|
202
|
+
build never resolves a brand-new (potentially yanked/compromised) release.
|
|
203
|
+
- **Release notes** are written per `release-notes-guidelines` from the commits since
|
|
204
|
+
the last tag — there is no per-PR changeset file.
|
|
205
|
+
- Expose the version at runtime with `importlib.metadata.version("<pkg>")`.
|
|
206
|
+
|
|
207
|
+
So a release is just: clean commits → create the GitHub release/tag `vX.Y.Z` → CI builds
|
|
208
|
+
and publishes.
|
|
209
|
+
See `template/docs/publishing.md` in `simple-modern-uv` for the first-time
|
|
210
|
+
Trusted Publisher setup.
|
|
211
|
+
|
|
212
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
213
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
214
|
+
-->
|
|
@@ -258,3 +258,7 @@ These are general rules that *must* be followed on this project for Python code.
|
|
|
258
258
|
- Exported/public variables, functions, or methods SHOULD have concise docstrings.
|
|
259
259
|
Internal/local variables, functions, and methods DO NOT need docstrings unless their
|
|
260
260
|
purpose is not obvious.
|
|
261
|
+
|
|
262
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
263
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
264
|
+
-->
|
|
@@ -138,3 +138,7 @@ Before finalizing release notes:
|
|
|
138
138
|
|
|
139
139
|
**Full commit history**: https://github.com/org/repo/compare/v0.1.12...v0.1.13
|
|
140
140
|
```
|
|
141
|
+
|
|
142
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
143
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
144
|
+
-->
|
|
@@ -52,7 +52,7 @@ planned upgrade.
|
|
|
52
52
|
| pnpm 11+ | `minimumReleaseAge: 20160` in `pnpm-workspace.yaml` (pnpm 11 ignores `NPM_CONFIG_*`; env prefix is `PNPM_CONFIG_*`) |
|
|
53
53
|
| uv | `UV_EXCLUDE_NEWER="14 days"` |
|
|
54
54
|
| pip 26.1+ | `PIP_UPLOADED_PRIOR_TO="P14D"` |
|
|
55
|
-
| Cargo / Go | no native gate: commit the lockfile, pass `--locked` (Cargo) / keep `go.sum`
|
|
55
|
+
| Cargo / Go | no native gate: commit the lockfile, pass `--locked` (Cargo) / keep `go.sum` and `-mod=readonly` (Go), and require human review before re-resolving; gate automated bumps with Renovate/Dependabot release-age policy |
|
|
56
56
|
|
|
57
57
|
At upgrade-decision time, `npm-check-updates --cooldown 14` (pin the `ncu` version)
|
|
58
58
|
gates which upgrades are even offered.
|
|
@@ -75,8 +75,8 @@ To check one version’s age: `npm view <pkg> time.<ver>`.
|
|
|
75
75
|
5. **Don’t update for its own sake.** The safest update is the one you skip — each bump
|
|
76
76
|
is fresh attack surface.
|
|
77
77
|
Bump only for a concrete reason ("show me the commit we need"); prefer fewer,
|
|
78
|
-
vendored/pinned dependencies; let audits
|
|
79
|
-
is warranted.
|
|
78
|
+
vendored/pinned dependencies; let audits and CVE monitoring tell you when a real
|
|
79
|
+
update is warranted.
|
|
80
80
|
6. **No unpinned zero-install runners.** Avoid `npx` / `pnpm dlx` / `bunx` / `uvx` /
|
|
81
81
|
`go run <remote>` without an explicit `@version` pin and a review of the resolved
|
|
82
82
|
`package@version` — they fetch and execute the latest code, bypassing the cool-off.
|
|
@@ -208,10 +208,10 @@ Reviewed <date>.`
|
|
|
208
208
|
|
|
209
209
|
## What This Does and Doesn’t Cover
|
|
210
210
|
|
|
211
|
-
A cool-off
|
|
212
|
-
It does **not** stop: long-lived typosquats that survive past the window; a
|
|
213
|
-
that already captured a bad version; payloads that fire on import/build rather
|
|
214
|
-
install; or **publish-pipeline compromises** (the May 2026 @antv worm shipped from
|
|
211
|
+
A cool-off plus disabled scripts neutralizes the dominant **fast-yanked-incident**
|
|
212
|
+
pattern. It does **not** stop: long-lived typosquats that survive past the window; a
|
|
213
|
+
lockfile that already captured a bad version; payloads that fire on import/build rather
|
|
214
|
+
than install; or **publish-pipeline compromises** (the May 2026 @antv worm shipped from
|
|
215
215
|
legitimate CI with a forged “verified” provenance badge — a green badge is not proof).
|
|
216
216
|
Those need lockfile review, typosquat checks, build-time controls, and — if you publish
|
|
217
217
|
packages — the publish-side controls in the guidebook’s `hardening-ci-cd.md` (OIDC
|
|
@@ -235,3 +235,7 @@ provenance monitoring).
|
|
|
235
235
|
StepSecurity, Socket, Unit 42).
|
|
236
236
|
- Monorepo enforcement: `tbd guidelines pnpm-monorepo-patterns`,
|
|
237
237
|
`tbd guidelines bun-monorepo-patterns`.
|
|
238
|
+
|
|
239
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
240
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
241
|
+
-->
|
|
@@ -163,7 +163,8 @@ The `.tbd/.gitignore` file contains a `!workspaces/` negation pattern to prevent
|
|
|
163
163
|
- Conflicting changes at field level
|
|
164
164
|
|
|
165
165
|
**Solutions:**
|
|
166
|
-
1. Check attic for conflict details:
|
|
166
|
+
1. Check attic for conflict details:
|
|
167
|
+
`ls "$(git rev-parse --path-format=absolute --git-common-dir)/tbd/data-sync-worktree/.tbd/data-sync/attic/"`
|
|
167
168
|
2. Review conflict files to understand what was lost
|
|
168
169
|
3. Manually merge if needed
|
|
169
170
|
4. Re-import with fresh workspace if appropriate
|
|
@@ -195,7 +196,7 @@ The `.tbd/.gitignore` file contains a `!workspaces/` negation pattern to prevent
|
|
|
195
196
|
1. Run `tbd doctor --fix` to auto-repair
|
|
196
197
|
2. If that fails, manually repair:
|
|
197
198
|
```bash
|
|
198
|
-
rm -rf
|
|
199
|
+
rm -rf "$(git rev-parse --path-format=absolute --git-common-dir)/tbd/data-sync-worktree"
|
|
199
200
|
git worktree prune
|
|
200
201
|
tbd doctor --fix
|
|
201
202
|
```
|
|
@@ -204,7 +205,8 @@ The `.tbd/.gitignore` file contains a `!workspaces/` negation pattern to prevent
|
|
|
204
205
|
### Worktree shows “detached HEAD”
|
|
205
206
|
|
|
206
207
|
**Symptoms:**
|
|
207
|
-
- `git -C
|
|
208
|
+
- `git -C "$(git rev-parse --path-format=absolute --git-common-dir)/tbd/data-sync-worktree" status`
|
|
209
|
+
shows detached HEAD
|
|
208
210
|
- Commits not going to tbd-sync branch
|
|
209
211
|
|
|
210
212
|
**Solutions:**
|
|
@@ -224,7 +226,7 @@ tbd sync --status
|
|
|
224
226
|
tbd workspace list
|
|
225
227
|
|
|
226
228
|
# View worktree branch
|
|
227
|
-
git -C
|
|
229
|
+
git -C "$(git rev-parse --path-format=absolute --git-common-dir)/tbd/data-sync-worktree" branch
|
|
228
230
|
|
|
229
231
|
# Compare local vs remote
|
|
230
232
|
git log tbd-sync --oneline -5
|
|
@@ -258,3 +260,7 @@ tbd sync
|
|
|
258
260
|
- `--no-outbox`: Skip automatic import from outbox on success
|
|
259
261
|
|
|
260
262
|
See `tbd shortcut sync-failure-recovery` for the full workflow.
|
|
263
|
+
|
|
264
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
265
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
266
|
+
-->
|
|
@@ -7,17 +7,17 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
|
|
|
7
7
|
|
|
8
8
|
**Last Updated**: 2026-05-21
|
|
9
9
|
|
|
10
|
-
**Tracks**: Commander.js `^15.0.0` (ESM-only, requires Node v22.12.0+),
|
|
11
|
-
|
|
10
|
+
**Tracks**: Commander.js `^15.0.0` (ESM-only, requires Node v22.12.0+), picocolors
|
|
11
|
+
`^1.1.1` (stable; no recent changes), Node.js 24 LTS / Node 26 Current.
|
|
12
12
|
Commander 14 moves to security-only maintenance until May 2027.
|
|
13
13
|
|
|
14
14
|
**Related**:
|
|
15
15
|
|
|
16
16
|
- [TypeScript Rules](./typescript-rules.md)
|
|
17
17
|
- [Supply-Chain Mitigation](./pnpm-monorepo-patterns.md#supply-chain-mitigation) —
|
|
18
|
-
follow the 14-day package-age rule for every CLI dependency.
|
|
19
|
-
CLI dependencies that execute at install time (`postinstall` scripts) are
|
|
20
|
-
primary attack surface.
|
|
18
|
+
follow the 14-day package-age rule for every CLI dependency.
|
|
19
|
+
Bundlers and CLI dependencies that execute at install time (`postinstall` scripts) are
|
|
20
|
+
a primary attack surface.
|
|
21
21
|
|
|
22
22
|
These rules apply to all CLI tools, command-line scripts, and terminal utilities.
|
|
23
23
|
Examples may be inspired by modern TypeScript repos, but guidance here is intentionally
|
|
@@ -107,9 +107,9 @@ generic and reusable across projects.
|
|
|
107
107
|
## Commander.js Patterns
|
|
108
108
|
|
|
109
109
|
- **Use Commander.js for all CLI tools:** Import from `commander` and follow established
|
|
110
|
-
patterns for command registration and option handling.
|
|
111
|
-
(ESM-only, requires Node v22.12.0+).** Commander 14 is
|
|
112
|
-
only until May 2027; do not start new projects on it.
|
|
110
|
+
patterns for command registration and option handling.
|
|
111
|
+
**Target Commander 15+ (ESM-only, requires Node v22.12.0+).** Commander 14 is
|
|
112
|
+
security-maintenance only until May 2027; do not start new projects on it.
|
|
113
113
|
|
|
114
114
|
- **Apply colored help globally, not per-command:** Use Commander v14+ `configureHelp()`
|
|
115
115
|
with style functions, applied recursively to all commands at program initialization.
|
|
@@ -565,30 +565,29 @@ When supporting environment variables, especially those used by SDK libraries (l
|
|
|
565
565
|
`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, etc.), also support `.env` loading so CLIs work
|
|
566
566
|
seamlessly in local dev and in remote environments.
|
|
567
567
|
|
|
568
|
-
- **Prefer Node.js native `--env-file` for Node ≥20.6**: Production-ready on
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
568
|
+
- **Prefer Node.js native `--env-file` for Node ≥20.6**: Production-ready on Node 24
|
|
569
|
+
LTS. Pass `--env-file=.env.local --env-file=.env` on the CLI invocation; later files
|
|
570
|
+
do not override earlier ones, so list higher-priority first.
|
|
571
|
+
No dependency required:
|
|
572
572
|
|
|
573
573
|
```bash
|
|
574
574
|
node --env-file=.env.local --env-file=.env ./dist/bin.js
|
|
575
575
|
```
|
|
576
576
|
|
|
577
|
-
Make this the default for new projects.
|
|
578
|
-
(variable expansion, multiline values, custom
|
|
579
|
-
conditional loading from inside the CLI).
|
|
577
|
+
Make this the default for new projects.
|
|
578
|
+
Reserve `dotenv` for advanced needs (variable expansion, multiline values, custom
|
|
579
|
+
precedence logic, or runtime conditional loading from inside the CLI).
|
|
580
580
|
|
|
581
|
-
- **Use `dotenv` only when needed:** Add `dotenv` only if your CLI must load
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
581
|
+
- **Use `dotenv` only when needed:** Add `dotenv` only if your CLI must load env files
|
|
582
|
+
programmatically — e.g., it reads them after parsing command-line flags, performs
|
|
583
|
+
variable expansion, or supports custom file paths the user cannot pre-bake into the
|
|
584
|
+
`node` invocation.
|
|
585
585
|
|
|
586
|
-
- **Load `.env.local` and `.env` automatically (recommended):** Whichever
|
|
587
|
-
|
|
588
|
-
|
|
586
|
+
- **Load `.env.local` and `.env` automatically (recommended):** Whichever mechanism you
|
|
587
|
+
use, support both `.env.local` (higher priority, gitignored) and `.env` (lower
|
|
588
|
+
priority, committed defaults only).
|
|
589
589
|
|
|
590
|
-
- **Manual `dotenv` loading:** When you do need `dotenv`, load with explicit
|
|
591
|
-
precedence:
|
|
590
|
+
- **Manual `dotenv` loading:** When you do need `dotenv`, load with explicit precedence:
|
|
592
591
|
|
|
593
592
|
```ts
|
|
594
593
|
import dotenv from 'dotenv';
|
|
@@ -739,3 +738,7 @@ runtimes, Cloudflare Workers, etc.).
|
|
|
739
738
|
|
|
740
739
|
- **Make scripts composable:** Design scripts to work well in pipelines and automation.
|
|
741
740
|
Consider how they’ll be used in CI/CD and shell scripts.
|
|
741
|
+
|
|
742
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
743
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
744
|
+
-->
|
|
@@ -7,8 +7,8 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
|
|
|
7
7
|
|
|
8
8
|
**Last Updated**: 2026-05-21
|
|
9
9
|
|
|
10
|
-
**Tracks**: Vitest `^4.1.7`, `@vitest/coverage-v8` `^4.1.7`. Vitest 5.0 is in
|
|
11
|
-
|
|
10
|
+
**Tracks**: Vitest `^4.1.7`, `@vitest/coverage-v8` `^4.1.7`. Vitest 5.0 is in beta — do
|
|
11
|
+
not adopt yet.
|
|
12
12
|
|
|
13
13
|
**Related**:
|
|
14
14
|
|
|
@@ -86,16 +86,16 @@ Low branch coverage often indicates untested error paths and edge cases.
|
|
|
86
86
|
pnpm add -D vitest@^4.1 @vitest/coverage-v8@^4.1
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
Follow the
|
|
90
|
-
|
|
91
|
-
`pnpm install --frozen-lockfile`.
|
|
89
|
+
Follow the
|
|
90
|
+
[14-day package-age rule](./pnpm-monorepo-patterns.md#supply-chain-mitigation) on every
|
|
91
|
+
upgrade: use `ncu --cooldown 14` or `pnpm install --frozen-lockfile`.
|
|
92
92
|
|
|
93
93
|
### Vitest 4.x changes that affect coverage
|
|
94
94
|
|
|
95
95
|
- **`coverage.all` was removed** in Vitest 4. Use `coverage.include` and
|
|
96
96
|
`coverage.exclude` to define exactly which files are reported.
|
|
97
|
-
- Coverage reporters and v8 provider now ship as part of `@vitest/coverage-v8`
|
|
98
|
-
|
|
97
|
+
- Coverage reporters and v8 provider now ship as part of `@vitest/coverage-v8` aligned
|
|
98
|
+
with the Vitest major version — pin them together.
|
|
99
99
|
|
|
100
100
|
### Example Configuration
|
|
101
101
|
|
|
@@ -194,3 +194,7 @@ Vitest automatically fails when thresholds are not met if configured.
|
|
|
194
194
|
- **Don’t test implementation details**: Focus on public APIs and behavior
|
|
195
195
|
- **Don’t ignore branch coverage**: TypeScript’s type system creates many branches
|
|
196
196
|
- **Don’t exclude too much**: Be selective about exclusions
|
|
197
|
+
|
|
198
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
199
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
200
|
+
-->
|
|
@@ -9,9 +9,9 @@ alwaysApply: true
|
|
|
9
9
|
|
|
10
10
|
**Last Updated**: 2026-05-21
|
|
11
11
|
|
|
12
|
-
**Tracks**: TypeScript `^6.0.3` (stable).
|
|
13
|
-
(`@typescript/native-preview`, binary `tsgo`) is available but **not
|
|
14
|
-
production-ready** — do not adopt for shipped builds.
|
|
12
|
+
**Tracks**: TypeScript `^6.0.3` (stable).
|
|
13
|
+
TypeScript 7.0 Beta (`@typescript/native-preview`, binary `tsgo`) is available but **not
|
|
14
|
+
yet production-ready** — do not adopt for shipped builds.
|
|
15
15
|
|
|
16
16
|
**Related**:
|
|
17
17
|
|
|
@@ -21,9 +21,9 @@ production-ready** — do not adopt for shipped builds.
|
|
|
21
21
|
- [TypeScript Code Coverage](./typescript-code-coverage.md)
|
|
22
22
|
- [pnpm Monorepo Patterns](./pnpm-monorepo-patterns.md) and
|
|
23
23
|
[Bun Monorepo Patterns](./bun-monorepo-patterns.md)
|
|
24
|
-
- [Supply-Chain Mitigation](./pnpm-monorepo-patterns.md#supply-chain-mitigation) —
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
- [Supply-Chain Mitigation](./pnpm-monorepo-patterns.md#supply-chain-mitigation) — the
|
|
25
|
+
14-day package-age rule applies to every TypeScript dependency (`zod`, `commander`,
|
|
26
|
+
`vitest`, `eslint`, type packages, etc.).
|
|
27
27
|
|
|
28
28
|
## Coding Style
|
|
29
29
|
|
|
@@ -424,3 +424,7 @@ production-ready** — do not adopt for shipped builds.
|
|
|
424
424
|
import { writeFile } from 'atomically';
|
|
425
425
|
await writeFile(filePath, content);
|
|
426
426
|
```
|
|
427
|
+
|
|
428
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
429
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
430
|
+
-->
|
|
@@ -8,9 +8,9 @@ globs: "*.ts"
|
|
|
8
8
|
|
|
9
9
|
**Last Updated**: 2026-05-21
|
|
10
10
|
|
|
11
|
-
**Tracks**: `yaml@^2.8.4` (latest stable; 2026-05-02). The `yaml@3.0.0-1`
|
|
12
|
-
|
|
13
|
-
recommended validation companion.
|
|
11
|
+
**Tracks**: `yaml@^2.8.4` (latest stable; 2026-05-02). The `yaml@3.0.0-1` release is
|
|
12
|
+
tagged `next` (pre-release) — do not adopt yet.
|
|
13
|
+
Zod 4.x is the recommended validation companion.
|
|
14
14
|
|
|
15
15
|
**Related**:
|
|
16
16
|
|
|
@@ -205,3 +205,7 @@ const output = `---\n${stringifyYaml(data)}---\n\n${content}`;
|
|
|
205
205
|
|
|
206
206
|
- For general TypeScript rules, see `tbd guidelines typescript-rules`
|
|
207
207
|
- For error handling patterns, see `tbd guidelines error-handling-rules`
|
|
208
|
+
|
|
209
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
210
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
211
|
+
-->
|
|
@@ -57,3 +57,7 @@ References: packages/llm-pricing/ - see scripts/generate-llms-data.ts and src/_g
|
|
|
57
57
|
|
|
58
58
|
Setup: Run `pnpm install` after pulling (new dependencies added).
|
|
59
59
|
```
|
|
60
|
+
|
|
61
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
62
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
63
|
+
-->
|
|
@@ -48,3 +48,7 @@ need.
|
|
|
48
48
|
- The `attic/` directory is gitignored—cloned repos won’t pollute your project
|
|
49
49
|
- You can clone multiple repos into attic/ as needed
|
|
50
50
|
- Delete cloned repos when done to save disk space
|
|
51
|
+
|
|
52
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
53
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
54
|
+
-->
|
|
@@ -88,3 +88,7 @@ cycle afterwords, fixing all build or test issues.
|
|
|
88
88
|
- Batch database queries instead of individual fetches in loops
|
|
89
89
|
|
|
90
90
|
- Consolidate nested sequential queries into single `Promise.all` call
|
|
91
|
+
|
|
92
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
93
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
94
|
+
-->
|
|
@@ -75,3 +75,7 @@ export function formatContextMarkdown(
|
|
|
75
75
|
4. Review existing docstrings and remove any that are redundant or obvious
|
|
76
76
|
|
|
77
77
|
5. Run linting to ensure no syntax errors
|
|
78
|
+
|
|
79
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
80
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
81
|
+
-->
|
|
@@ -56,3 +56,7 @@ Keep tests that:
|
|
|
56
56
|
4. Remove trivial tests while preserving meaningful coverage
|
|
57
57
|
|
|
58
58
|
5. Run the full test suite to ensure no regressions
|
|
59
|
+
|
|
60
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
61
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
62
|
+
-->
|
|
@@ -42,3 +42,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
42
42
|
CI watch.
|
|
43
43
|
- Only proceed when you see all checks have passed.
|
|
44
44
|
- Confirm to the user that CI has passed.
|
|
45
|
+
|
|
46
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
47
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
48
|
+
-->
|
|
@@ -52,3 +52,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
9. Report findings and recommend next steps.
|
|
55
|
+
|
|
56
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
57
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
58
|
+
-->
|
|
@@ -55,3 +55,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
55
55
|
- Only proceed when you see all checks have passed in the final summary.
|
|
56
56
|
|
|
57
57
|
8. Confirm to the user that CI has passed and the PR is ready for review.
|
|
58
|
+
|
|
59
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
60
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
61
|
+
-->
|
|
@@ -74,3 +74,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
74
74
|
- Only proceed when you see all checks have passed in the final summary.
|
|
75
75
|
|
|
76
76
|
8. Confirm to the user that CI has passed and the PR is ready for review.
|
|
77
|
+
|
|
78
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
79
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
80
|
+
-->
|
|
@@ -28,3 +28,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
28
28
|
4. Repeat this for all beads where you know how to fix them.
|
|
29
29
|
If unsure about a bead, let the user know at the end of all work which beads had
|
|
30
30
|
problems.
|
|
31
|
+
|
|
32
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
33
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
34
|
+
-->
|
|
@@ -28,3 +28,7 @@ Merge upstream changes from origin/main into the current branch.
|
|
|
28
28
|
6. **Verify**: Run formatting, linting, and tests
|
|
29
29
|
- Fix any issues introduced by the merge
|
|
30
30
|
- Commit the merge result
|
|
31
|
+
|
|
32
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
33
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
34
|
+
-->
|
|
@@ -29,3 +29,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
29
29
|
If designing new architecture, iterate with the user on the design.
|
|
30
30
|
|
|
31
31
|
5. Summarize the architecture and ask the user to review.
|
|
32
|
+
|
|
33
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
34
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
35
|
+
-->
|
|
@@ -122,3 +122,7 @@ description: Best practices for designing TypeScript APIs including naming, type
|
|
|
122
122
|
| `{lang}-{topic}-rules` | `typescript-cli-tool-rules` | Specialized patterns |
|
|
123
123
|
| `{domain}-rules` | `convex-rules` | Framework/platform rules |
|
|
124
124
|
| `general-{topic}-rules` | `general-testing-rules` | Language-agnostic rules |
|
|
125
|
+
|
|
126
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
127
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
128
|
+
-->
|
|
@@ -47,3 +47,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
47
47
|
|
|
48
48
|
5. To list beads linked to a spec, use `tbd list --spec` (see `tbd list --help` for
|
|
49
49
|
details on filtering and path matching).
|
|
50
|
+
|
|
51
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
52
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
53
|
+
-->
|
|
@@ -57,3 +57,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
57
57
|
- Mark phases ✅/❌ in the status table after each run
|
|
58
58
|
- Add test results with dates in the “Test Results” section
|
|
59
59
|
- Archive or update playbooks when they become stale
|
|
60
|
+
|
|
61
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
62
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
63
|
+
-->
|
|
@@ -28,3 +28,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
28
28
|
Ask the user for guidance when you need clarification or hit decision points.
|
|
29
29
|
|
|
30
30
|
5. Summarize findings and ask the user to review.
|
|
31
|
+
|
|
32
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
33
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
34
|
+
-->
|
|
@@ -77,3 +77,7 @@ For official shortcuts added to `packages/tbd/docs/shortcuts/standard/`:
|
|
|
77
77
|
- **Guidelines**: Rules to reference (knowledge)
|
|
78
78
|
|
|
79
79
|
See `tbd shortcut new-guideline` for creating guidelines.
|
|
80
|
+
|
|
81
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
82
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
83
|
+
-->
|
|
@@ -85,3 +85,7 @@ This serves as both a testing checklist and a summary for PR reviewers, showing:
|
|
|
85
85
|
- Both
|
|
86
86
|
|
|
87
87
|
6. **Summarize** what’s validated vs what remains for the user to review.
|
|
88
|
+
|
|
89
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
90
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
91
|
+
-->
|
|
@@ -54,3 +54,7 @@ If unclear, ask the user if they want you to create a spec first using
|
|
|
54
54
|
- **Blocker** (`tbd dep add`): Sequential ordering.
|
|
55
55
|
A bead cannot start until its blockers are complete.
|
|
56
56
|
Use for tasks that genuinely depend on prior work.
|
|
57
|
+
|
|
58
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
59
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
60
|
+
-->
|
|
@@ -62,3 +62,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
62
62
|
(See `tbd guidelines commit-conventions` for details.)
|
|
63
63
|
If all checks pass, commit directly.
|
|
64
64
|
Only ask the user if there are unresolved problems.
|
|
65
|
+
|
|
66
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
67
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
68
|
+
-->
|
|
@@ -32,3 +32,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
32
32
|
- List Python-specific issues found (if any) with file:line references
|
|
33
33
|
- Suggest specific fixes
|
|
34
34
|
- Note any Python patterns that should be addressed
|
|
35
|
+
|
|
36
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
37
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
38
|
+
-->
|
|
@@ -32,3 +32,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
32
32
|
- List TypeScript-specific issues found (if any) with file:line references
|
|
33
33
|
- Suggest specific fixes
|
|
34
34
|
- Note any TypeScript patterns that should be addressed
|
|
35
|
+
|
|
36
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
37
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
38
|
+
-->
|
|
@@ -107,3 +107,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
107
107
|
- Otherwise, present the review and ask:
|
|
108
108
|
- **Fix issues**: Create tbd beads for issues and begin fixing
|
|
109
109
|
- **Report only**: Just output the review (no changes)
|
|
110
|
+
|
|
111
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
112
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
113
|
+
-->
|
|
@@ -139,3 +139,7 @@ Create a to-do list with the following items then perform all of them:
|
|
|
139
139
|
- List any beads created (if fixing with beads)
|
|
140
140
|
- Confirm CI status
|
|
141
141
|
- Provide the PR URL
|
|
142
|
+
|
|
143
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
144
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
145
|
+
-->
|
|
@@ -20,3 +20,7 @@ Run `tbd prime` for more on using tbd and current status.
|
|
|
20
20
|
4. Work through each child bead, close when done
|
|
21
21
|
|
|
22
22
|
5. Close epic with summary
|
|
23
|
+
|
|
24
|
+
<!-- This document follows common-doc-guidelines.md.
|
|
25
|
+
See github.com/jlevy/practical-prose and review guidelines before editing.
|
|
26
|
+
-->
|