get-tbd 0.2.1 → 0.2.2

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 (31) hide show
  1. package/dist/bin.mjs +14 -7
  2. package/dist/bin.mjs.map +1 -1
  3. package/dist/cli.mjs +14 -7
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/docs/guidelines/bun-monorepo-patterns.md +65 -66
  6. package/dist/docs/guidelines/cli-agent-skill-patterns.md +314 -158
  7. package/dist/docs/guidelines/common-doc-guidelines.md +2 -2
  8. package/dist/docs/guidelines/convex-limits-best-practices.md +39 -39
  9. package/dist/docs/guidelines/convex-rules.md +13 -13
  10. package/dist/docs/guidelines/electron-app-development-patterns.md +18 -18
  11. package/dist/docs/guidelines/general-comment-rules.md +1 -1
  12. package/dist/docs/guidelines/general-tdd-guidelines.md +4 -4
  13. package/dist/docs/guidelines/golden-testing-guidelines.md +9 -9
  14. package/dist/docs/guidelines/pnpm-monorepo-patterns.md +49 -49
  15. package/dist/docs/guidelines/python-cli-patterns.md +1 -1
  16. package/dist/docs/guidelines/python-modern-guidelines.md +4 -4
  17. package/dist/docs/guidelines/release-notes-guidelines.md +18 -2
  18. package/dist/docs/guidelines/supply-chain-hardening.md +84 -29
  19. package/dist/docs/guidelines/tbd-sync-troubleshooting.md +3 -3
  20. package/dist/docs/guidelines/typescript-cli-tool-rules.md +17 -17
  21. package/dist/docs/guidelines/typescript-code-coverage.md +5 -5
  22. package/dist/docs/guidelines/typescript-rules.md +3 -3
  23. package/dist/docs/guidelines/typescript-yaml-handling-rules.md +3 -3
  24. package/dist/docs/tbd-design.md +40 -40
  25. package/dist/docs/tbd-docs.md +1 -1
  26. package/dist/docs/tbd-prime.md +3 -3
  27. package/dist/index.mjs +1 -1
  28. package/dist/{src-CtZIHxYM.mjs → src-BpvcrLnq.mjs} +2 -2
  29. package/dist/{src-CtZIHxYM.mjs.map → src-BpvcrLnq.mjs.map} +1 -1
  30. package/dist/tbd +14 -7
  31. package/package.json +1 -1
@@ -24,31 +24,31 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
24
24
 
25
25
  | Tool / Package | Version | Check For Updates |
26
26
  | --- | --- | --- |
27
- | **Node.js** | 24 (LTS “Krypton”) | [nodejs.org/releases](https://nodejs.org/en/about/previous-releases) Node 24 Active LTS until Oct 2026. **Node 26 Current** shipped 2026-05-05 (Temporal API enabled by default, V8 14.6, Undici 8.0). **Node 20 went EOL 2026-03-24.** Node 26 is the last release on the old two-major-per-year cadence; starting v27, all majors become LTS (one per year). |
28
- | **pnpm** | ^11.0.0 (11.2.x too recent) | [github.com/pnpm/pnpm/releases](https://github.com/pnpm/pnpm/releases) — **Pinned to 11.0.0 (2026-04-28) per the 14-day rule**; 11.2.0/11.2.2 shipped 2026-05-20/21 (1–2 days old today). Breaking changes: pure ESM (requires **Node 22+**); SQLite-based store (`$STORE/index.db`); **`minimumReleaseAge` defaults to 1440 minutes (1 day)** for supply-chain hygiene; **`blockExoticSubdeps` defaults to `true`**; `onlyBuiltDependencies`/`neverBuiltDependencies` removed and replaced by **`allowBuilds`**; `patchedDependencies` format simplified; experimental Rust-based `@pnpm/pacquet` engine arrives in 11.2+. v11.1 added `pnpm audit signatures`, `pnpm bugs`, `pnpm owner`. |
29
- | **TypeScript** | ^6.0.3 | [github.com/microsoft/TypeScript/releases](https://github.com/microsoft/TypeScript/releases) — **6.0.3 stable** (shipped 2026-03-23). 6.0 is the last JavaScript-based release; `strict: true` is now the default, ESM is the default module system, ~9 compiler settings flipped defaults. **TS 7.0 Beta** (Project Corsa, Go rewrite) shipped 2026-04-21 as `@typescript/native-preview` (binary: `tsgo`); claims ~10× type-check speed and ~3× less memory. Stable expected mid-to-late 2026. Do not adopt `tsgo` for production builds yet. |
30
- | **tsdown** | ^0.22.0 | [github.com/rolldown/tsdown/releases](https://github.com/rolldown/tsdown/releases) 0.22.0 (2026-05-07). Has not reached 1.0; incremental 0.20→0.22 releases since Feb 2026; no deprecations. Requires Node.js 20.19+. |
31
- | **publint** | ^0.3.20 (0.3.21 too recent) | [npmjs.com/package/publint](https://www.npmjs.com/package/publint) — **Pinned to 0.3.20 (2026-05-08) per the 14-day rule**; 0.3.21 (2026-05-13) is 9 days old today. Re-enabled TS/TSX file existence checks; `exports["default"]` support; bug fixes. |
32
- | **@changesets/cli** | ^2.31.0 | [github.com/changesets/changesets/releases](https://github.com/changesets/changesets/releases) 2.31.0 latest. No native Bun support added. |
33
- | **@types/node** | ^24.0.0 | [@types/node npm](https://www.npmjs.com/package/@types/node) Track Node.js major version. @types/node@25.x available; @types/node@26.x will follow Node 26. |
34
- | **actions/checkout** | v6 | [github.com/actions/checkout/releases](https://github.com/actions/checkout/releases) v6.0.2 (2026-01-09). Credentials now stored in `$RUNNER_TEMP` rather than `.git/config`; Node 24 runtime; requires runner ≥ 2.327.1. |
35
- | **actions/setup-node** | v6 | [github.com/actions/setup-node/releases](https://github.com/actions/setup-node/releases) Supports Node 24 by default. **Note GitHub’s 2026-06-02 deadline forcing Node.js 20 actions to Node.js 24.** |
36
- | **pnpm/action-setup** | v6 | [github.com/pnpm/action-setup/releases](https://github.com/pnpm/action-setup/releases) — **v6 required for pnpm 11+ support.** v4 (previously documented) does not handle pnpm 11’s ESM-only distribution correctly. |
37
- | **changesets/action** | v1 | [github.com/changesets/action](https://github.com/changesets/action) Still v1. No v2. |
38
- | **lefthook** | ^2.1.5 (2.1.7/2.1.8 too recent) | [github.com/evilmartians/lefthook/releases](https://github.com/evilmartians/lefthook/releases) — **Pinned to 2.1.5 (2026-04-06) per the 14-day rule**; 2.1.7/2.1.8 both shipped 2026-05-19. Patch-level since 2.1.1. v2 still excludes regexp `exclude` and `skip_output` from v1. |
39
- | **npm-check-updates** | ^22.0.0 (22.2.0 too recent) | [npmjs.com/package/npm-check-updates](https://www.npmjs.com/package/npm-check-updates) — **Major version jump from 19 to 22.** **Pinned to 22.0.0 (2026-04-25) per the 14-day rule**; 22.2.0 (2026-05-12) is 10 days old today. Now pure ESM; named imports only (`import { run } from 'npm-check-updates'`); `.ncurc.js` with `module.exports` no longer works in `"type": "module"` projects (use `.ncurc.cjs`). **Ships `--cooldown <days>` to refuse versions younger than the specified age** — primary enforcement for the 14-day package-age rule. See [Supply-Chain Mitigation](#supply-chain-mitigation). |
40
- | **tsx** | ^4.21.0 (4.22.x too recent) | [github.com/privatenumber/tsx/releases](https://github.com/privatenumber/tsx/releases) — **Pinned to 4.21.0 (2025-11-30) per the 14-day rule**; 4.22.0 shipped 2026-05-14 (8 days old) and 4.22.3 shipped 2026-05-19 (3 days old). Bump on next refresh once 4.22.x has aged. |
41
- | **prettier** | ^3.8.3 | [github.com/prettier/prettier/releases](https://github.com/prettier/prettier/releases) 3.8.3 stable. Prettier 4.0 is in alpha (4.0.0-alpha.13, CLI performance rewrite) — **not stable yet**; do not adopt. |
27
+ | **Node.js** | 24 (LTS “Krypton”) | [nodejs.org/releases](https://nodejs.org/en/about/previous-releases)—Node 24 Active LTS until Oct 2026. **Node 26 Current** shipped 2026-05-05 (Temporal API enabled by default, V8 14.6, Undici 8.0). **Node 20 went EOL 2026-03-24.** Node 26 is the last release on the old two-major-per-year cadence; starting v27, all majors become LTS (one per year). |
28
+ | **pnpm** | ^11.0.0 (11.2.x too recent) | [github.com/pnpm/pnpm/releases](https://github.com/pnpm/pnpm/releases)—**Pinned to 11.0.0 (2026-04-28) per the 14-day rule**; 11.2.0/11.2.2 shipped 2026-05-20/21 (1–2 days old today). Breaking changes: pure ESM (requires **Node 22+**); SQLite-based store (`$STORE/index.db`); **`minimumReleaseAge` defaults to 1440 minutes (1 day)** for supply-chain hygiene; **`blockExoticSubdeps` defaults to `true`**; `onlyBuiltDependencies`/`neverBuiltDependencies` removed and replaced by **`allowBuilds`**; `patchedDependencies` format simplified; experimental Rust-based `@pnpm/pacquet` engine arrives in 11.2+. v11.1 added `pnpm audit signatures`, `pnpm bugs`, `pnpm owner`. |
29
+ | **TypeScript** | ^6.0.3 | [github.com/microsoft/TypeScript/releases](https://github.com/microsoft/TypeScript/releases)—**6.0.3 stable** (shipped 2026-03-23). 6.0 is the last JavaScript-based release; `strict: true` is now the default, ESM is the default module system, ~9 compiler settings flipped defaults. **TS 7.0 Beta** (Project Corsa, Go rewrite) shipped 2026-04-21 as `@typescript/native-preview` (binary: `tsgo`); claims ~10× type-check speed and ~3× less memory. Stable expected mid-to-late 2026. Do not adopt `tsgo` for production builds yet. |
30
+ | **tsdown** | ^0.22.0 | [github.com/rolldown/tsdown/releases](https://github.com/rolldown/tsdown/releases)—0.22.0 (2026-05-07). Has not reached 1.0; incremental 0.20→0.22 releases since Feb 2026; no deprecations. Requires Node.js 20.19+. |
31
+ | **publint** | ^0.3.20 (0.3.21 too recent) | [npmjs.com/package/publint](https://www.npmjs.com/package/publint)—**Pinned to 0.3.20 (2026-05-08) per the 14-day rule**; 0.3.21 (2026-05-13) is 9 days old today. Re-enabled TS/TSX file existence checks; `exports["default"]` support; bug fixes. |
32
+ | **@changesets/cli** | ^2.31.0 | [github.com/changesets/changesets/releases](https://github.com/changesets/changesets/releases)—2.31.0 latest. No native Bun support added. |
33
+ | **@types/node** | ^24.0.0 | [@types/node npm](https://www.npmjs.com/package/@types/node)—Track Node.js major version. @types/node@25.x available; @types/node@26.x will follow Node 26. |
34
+ | **actions/checkout** | v6 | [github.com/actions/checkout/releases](https://github.com/actions/checkout/releases)—v6.0.2 (2026-01-09). Credentials now stored in `$RUNNER_TEMP` rather than `.git/config`; Node 24 runtime; requires runner ≥ 2.327.1. |
35
+ | **actions/setup-node** | v6 | [github.com/actions/setup-node/releases](https://github.com/actions/setup-node/releases)—Supports Node 24 by default. **Note GitHub’s 2026-06-02 deadline forcing Node.js 20 actions to Node.js 24.** |
36
+ | **pnpm/action-setup** | v6 | [github.com/pnpm/action-setup/releases](https://github.com/pnpm/action-setup/releases)—**v6 required for pnpm 11+ support.** v4 (previously documented) does not handle pnpm 11’s ESM-only distribution correctly. |
37
+ | **changesets/action** | v1 | [github.com/changesets/action](https://github.com/changesets/action)—Still v1. No v2. |
38
+ | **lefthook** | ^2.1.5 (2.1.7/2.1.8 too recent) | [github.com/evilmartians/lefthook/releases](https://github.com/evilmartians/lefthook/releases)—**Pinned to 2.1.5 (2026-04-06) per the 14-day rule**; 2.1.7/2.1.8 both shipped 2026-05-19. Patch-level since 2.1.1. v2 still excludes regexp `exclude` and `skip_output` from v1. |
39
+ | **npm-check-updates** | ^22.0.0 (22.2.0 too recent) | [npmjs.com/package/npm-check-updates](https://www.npmjs.com/package/npm-check-updates)—**Major version jump from 19 to 22.** **Pinned to 22.0.0 (2026-04-25) per the 14-day rule**; 22.2.0 (2026-05-12) is 10 days old today. Now pure ESM; named imports only (`import { run } from 'npm-check-updates'`); `.ncurc.js` with `module.exports` no longer works in `"type": "module"` projects (use `.ncurc.cjs`). **Ships `--cooldown <days>` to refuse versions younger than the specified age**—primary enforcement for the 14-day package-age rule. See [Supply-Chain Mitigation](#supply-chain-mitigation). |
40
+ | **tsx** | ^4.21.0 (4.22.x too recent) | [github.com/privatenumber/tsx/releases](https://github.com/privatenumber/tsx/releases)—**Pinned to 4.21.0 (2025-11-30) per the 14-day rule**; 4.22.0 shipped 2026-05-14 (8 days old) and 4.22.3 shipped 2026-05-19 (3 days old). Bump on next refresh once 4.22.x has aged. |
41
+ | **prettier** | ^3.8.3 | [github.com/prettier/prettier/releases](https://github.com/prettier/prettier/releases)—3.8.3 stable. Prettier 4.0 is in alpha (4.0.0-alpha.13, CLI performance rewrite)—**not stable yet**; do not adopt. |
42
42
  | **eslint-config-prettier** | ^10.0.0 | [github.com/prettier/eslint-config-prettier/releases](https://github.com/prettier/eslint-config-prettier/releases) |
43
- | **ESLint** | ^10.0.0 | [github.com/eslint/eslint/releases](https://github.com/eslint/eslint/releases) — **ESLint 10.0.0 shipped 2026-02-06.** **Breaking**: `.eslintrc.*` configuration is completely removed flat config (`eslint.config.js`) is the only supported format. Download size reduced (11 MB → 9.4 MB). Improved JSX reference tracking. **Minimum Node.js v20.19.0.** ESLint 9.x EOL is 2026-08-06. |
44
- | **Vitest** | ^4.1.5 (4.1.6/4.1.7 too recent) | [github.com/vitest-dev/vitest/releases](https://github.com/vitest-dev/vitest/releases) — **Pinned to 4.1.5 (2026-04-21) per the 14-day rule**; 4.1.7 (2026-05-20) is 2 days old today. v4.1 (Mar 2026) added Vite 8 support, test tags, extended chai-style assertions for mocking. Vitest now reuses installed Vite instead of bundling. Browser Mode stable, visual regression added. `coverage.all` was removed in v4. Vitest 5.0.0-beta.3 in pre-release (requires Node 22+, Vite 6.4+) — **do not adopt yet**. |
45
- | **Zod** | ^4.4.3 | [github.com/colinhacks/zod/releases](https://github.com/colinhacks/zod/releases) — **Zod 4 fully stable.** 14× faster string parsing, 7× faster array parsing, 6.5× faster object parsing vs Zod 3; core bundle 2.3× smaller. New `@zod/mini` package (~1.9 KB gzipped) for tree-shakable frontend validation. Migration from Zod 3 required see [zod.dev/v4/changelog](https://zod.dev/v4/changelog). |
46
- | **commander** | ^15.0.0 | [github.com/tj/commander.js/releases](https://github.com/tj/commander.js/releases) Commander 15 shipping May 2026, **ESM-only, requires Node v22.12.0+**. Commander 14 moves to maintenance (security only) until May 2027. |
47
- | **picocolors** | ^1.1.1 | [npmjs.com/package/picocolors](https://www.npmjs.com/package/picocolors) Last release October 2024. Stable; no changes expected. |
48
- | **dotenv** | ^17.4.2 | [npmjs.com/package/dotenv](https://www.npmjs.com/package/dotenv) Stable. **Prefer Node.js native `--env-file` for Node ≥20.6** (production-ready since Node 24 LTS); use dotenv only when you need variable expansion, multiline values, or custom precedence logic. |
49
- | **atomically** | ^2.1.1 | [npmjs.com/package/atomically](https://www.npmjs.com/package/atomically) 2.1.1 (2026-02-08). Still maintained. |
50
- | **yaml** | ^2.8.4 | [npmjs.com/package/yaml](https://www.npmjs.com/package/yaml) 2.8.4 (2026-05-02). v3.0.0-1 is tagged “next” (pre-release) do not adopt yet. |
51
- | **@vitest/coverage-v8** | ^4.1.7 | [npmjs.com/package/@vitest/coverage-v8](https://www.npmjs.com/package/@vitest/coverage-v8) Track Vitest version. |
43
+ | **ESLint** | ^10.0.0 | [github.com/eslint/eslint/releases](https://github.com/eslint/eslint/releases)—**ESLint 10.0.0 shipped 2026-02-06.** **Breaking**: `.eslintrc.*` configuration is completely removed—flat config (`eslint.config.js`) is the only supported format. Download size reduced (11 MB → 9.4 MB). Improved JSX reference tracking. **Minimum Node.js v20.19.0.** ESLint 9.x EOL is 2026-08-06. |
44
+ | **Vitest** | ^4.1.5 (4.1.6/4.1.7 too recent) | [github.com/vitest-dev/vitest/releases](https://github.com/vitest-dev/vitest/releases)—**Pinned to 4.1.5 (2026-04-21) per the 14-day rule**; 4.1.7 (2026-05-20) is 2 days old today. v4.1 (Mar 2026) added Vite 8 support, test tags, extended chai-style assertions for mocking. Vitest now reuses installed Vite instead of bundling. Browser Mode stable, visual regression added. `coverage.all` was removed in v4. Vitest 5.0.0-beta.3 in pre-release (requires Node 22+, Vite 6.4+)—**do not adopt yet**. |
45
+ | **Zod** | ^4.4.3 | [github.com/colinhacks/zod/releases](https://github.com/colinhacks/zod/releases)—**Zod 4 fully stable.** 14× faster string parsing, 7× faster array parsing, 6.5× faster object parsing vs Zod 3; core bundle 2.3× smaller. New `@zod/mini` package (~1.9 KB gzipped) for tree-shakable frontend validation. Migration from Zod 3 required—see [zod.dev/v4/changelog](https://zod.dev/v4/changelog). |
46
+ | **commander** | ^15.0.0 | [github.com/tj/commander.js/releases](https://github.com/tj/commander.js/releases)—Commander 15 shipping May 2026, **ESM-only, requires Node v22.12.0+**. Commander 14 moves to maintenance (security only) until May 2027. |
47
+ | **picocolors** | ^1.1.1 | [npmjs.com/package/picocolors](https://www.npmjs.com/package/picocolors)—Last release October 2024. Stable; no changes expected. |
48
+ | **dotenv** | ^17.4.2 | [npmjs.com/package/dotenv](https://www.npmjs.com/package/dotenv)—Stable. **Prefer Node.js native `--env-file` for Node ≥20.6** (production-ready since Node 24 LTS); use dotenv only when you need variable expansion, multiline values, or custom precedence logic. |
49
+ | **atomically** | ^2.1.1 | [npmjs.com/package/atomically](https://www.npmjs.com/package/atomically)—2.1.1 (2026-02-08). Still maintained. |
50
+ | **yaml** | ^2.8.4 | [npmjs.com/package/yaml](https://www.npmjs.com/package/yaml)—2.8.4 (2026-05-02). v3.0.0-1 is tagged “next” (pre-release)—do not adopt yet. |
51
+ | **@vitest/coverage-v8** | ^4.1.7 | [npmjs.com/package/@vitest/coverage-v8](https://www.npmjs.com/package/@vitest/coverage-v8)—Track Vitest version. |
52
52
 
53
53
  ### Reminders When Updating
54
54
 
@@ -56,7 +56,7 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
56
56
 
57
57
  2. **Update the table** with new versions and any relevant notes
58
58
 
59
- 3. **Search and update code examples** — version numbers appear in:
59
+ 3. **Search and update code examples**—version numbers appear in:
60
60
 
61
61
  - GitHub Actions workflows (CI and Release sections)
62
62
 
@@ -68,7 +68,7 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
68
68
 
69
69
  - Appendices A, B, and D (complete examples)
70
70
 
71
- 4. **Verify compatibility** — check that tools still work together (e.g., new
71
+ 4. **Verify compatibility**—check that tools still work together (e.g., new
72
72
  pnpm/action-setup versions may change caching behavior)
73
73
 
74
74
  5. **Update the “Last Updated” date** at the top of the document
@@ -76,9 +76,9 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
76
76
  6. **Review “Open Research Questions”** section for any resolved items
77
77
 
78
78
  7. **Honor the 14-day package-age rule** when bumping versions in code examples.
79
- See [Supply-Chain Mitigation](#supply-chain-mitigation) versions cited here should
80
- be ≥14 days old at the time the table is updated, except where a clearly-noted
81
- security exception applies.
79
+ See [Supply-Chain Mitigation](#supply-chain-mitigation)—versions cited here should be
80
+ ≥14 days old at the time the table is updated, except where a clearly-noted security
81
+ exception applies.
82
82
 
83
83
  * * *
84
84
 
@@ -137,7 +137,7 @@ recommendations from the TypeScript and JavaScript ecosystem maintainers.
137
137
 
138
138
  ## Research Findings
139
139
 
140
- ### 1. Package Manager & Workspace Structure
140
+ ### 1. Package Manager and Workspace Structure
141
141
 
142
142
  #### pnpm Workspaces
143
143
 
@@ -157,7 +157,7 @@ recommendations from the TypeScript and JavaScript ecosystem maintainers.
157
157
 
158
158
  - **pnpm 11 (shipped 2026-04-28)** adds significant supply-chain hardening defaults:
159
159
  `minimumReleaseAge: 1440` (1 day) and `blockExoticSubdeps: true`. We recommend
160
- overriding `minimumReleaseAge` to 14 days see
160
+ overriding `minimumReleaseAge` to 14 days—see
161
161
  [Supply-Chain Mitigation](#supply-chain-mitigation).
162
162
 
163
163
  - **pnpm 11 is pure ESM and requires Node.js 22+.** Lifecycle script gating has moved
@@ -469,7 +469,7 @@ Only provide dual ESM/CJS if you have confirmed CJS consumer requirements.
469
469
 
470
470
  * * *
471
471
 
472
- ### 4. Package Exports & Dual Module Support
472
+ ### 4. Package Exports and Dual Module Support
473
473
 
474
474
  #### Subpath Exports
475
475
 
@@ -668,7 +668,7 @@ package. Essential for any published package.
668
668
 
669
669
  * * *
670
670
 
671
- ### 7. Versioning & Release Automation
671
+ ### 7. Versioning and Release Automation
672
672
 
673
673
  #### Changesets
674
674
 
@@ -733,7 +733,7 @@ Changesets provides:
733
733
 
734
734
  **Assessment**: Changesets is the de facto standard for *multi-package* monorepo
735
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
736
+ For a repo that publishes a single package, its per-PR ceremony rarely pays off—prefer
737
737
  the tag-triggered approach below (see the LLM-era note).
738
738
 
739
739
  **References**:
@@ -1139,8 +1139,8 @@ Vite’s transformation pipeline.
1139
1139
  extended chai-style assertions for mocking.
1140
1140
  Vitest now reuses the installed Vite instead of bundling a separate dependency.
1141
1141
 
1142
- - **`coverage.all` was removed in v4** — use `coverage.include` and `coverage.exclude`
1143
- to control which files are reported.
1142
+ - **`coverage.all` was removed in v4**—use `coverage.include` and `coverage.exclude` to
1143
+ control which files are reported.
1144
1144
 
1145
1145
  - **Vitest 5.0.0-beta** is in pre-release (requires Node 22+ and Vite 6.4+). Stay on
1146
1146
  4.1.x for production until stable.
@@ -1572,7 +1572,7 @@ CI) provides the best developer experience while ensuring CI catches issues.
1572
1572
 
1573
1573
  * * *
1574
1574
 
1575
- ### 11. Git Hooks & Local Validation
1575
+ ### 11. Git Hooks and Local Validation
1576
1576
 
1577
1577
  #### Lefthook
1578
1578
 
@@ -1886,13 +1886,13 @@ workflow. This makes upgrades consistent and discoverable.
1886
1886
 
1887
1887
  **Workflow**:
1888
1888
 
1889
- 1. **Check for updates**: `pnpm upgrade:check` — see what’s available without changing
1889
+ 1. **Check for updates**: `pnpm upgrade:check`—see what’s available without changing
1890
1890
  anything
1891
1891
 
1892
- 2. **Safe upgrade**: `pnpm upgrade` — upgrade minor/patch versions and run tests to
1893
- verify nothing breaks
1892
+ 2. **Safe upgrade**: `pnpm upgrade`—upgrade minor/patch versions and run tests to verify
1893
+ nothing breaks
1894
1894
 
1895
- 3. **Major upgrades**: `pnpm upgrade:major` — interactively review major version bumps,
1895
+ 3. **Major upgrades**: `pnpm upgrade:major`—interactively review major version bumps,
1896
1896
  select which to apply, then test and review changelogs
1897
1897
 
1898
1898
  **Key insight**: Running tests after `upgrade` catches regressions immediately.
@@ -2546,8 +2546,8 @@ than discovering them when users try to use the library in browser/edge contexts
2546
2546
 
2547
2547
  **References**:
2548
2548
 
2549
- - [CLI Tool Development Rules](../../agent-rules/typescript-cli-tool-rules.md)
2550
- CLI-specific patterns using Commander.js, picocolors, and @clack/prompts
2549
+ - [CLI Tool Development Rules](../../agent-rules/typescript-cli-tool-rules.md)—CLI-specific
2550
+ patterns using Commander.js, picocolors, and @clack/prompts
2551
2551
 
2552
2552
  * * *
2553
2553
 
@@ -2556,7 +2556,7 @@ than discovering them when users try to use the library in browser/edge contexts
2556
2556
  Supply-chain hardening applies to **every repo, not just new monorepos**, so the full
2557
2557
  policy and hands-on enforcement now live in a standalone guideline:
2558
2558
  **`tbd guidelines supply-chain-hardening`**. It covers the cross-ecosystem 14-day
2559
- cool-off plus the Node/pnpm/Bun specifics lifecycle-script allowlists, lockfile
2559
+ cool-off plus the Node/pnpm/Bun specifics—lifecycle-script allowlists, lockfile
2560
2560
  discipline, `npm-check-updates --cooldown 14`, the CI audit gate, and the
2561
2561
  `check-package-age` pre-push guard.
2562
2562
  Deeper background and the named-incident watch list:
@@ -2707,7 +2707,7 @@ Deeper background and the named-incident watch list:
2707
2707
  `@typescript/native-preview` (binary `tsgo`). Claims ~10× type-check speed and ~3×
2708
2708
  less memory; passes 95%+ of the test suite.
2709
2709
  Available in Visual Studio 2026 18.6 Insiders by default.
2710
- **Do not adopt for production builds yet** — wait for stable (expected mid-to-late
2710
+ **Do not adopt for production builds yet**—wait for stable (expected mid-to-late
2711
2711
  2026). Monitor for tsdown/Vitest compatibility announcements.
2712
2712
 
2713
2713
  4. **Native TypeScript Execution**: TypeScript 5.8+ supports `--erasableSyntaxOnly`,
@@ -2716,9 +2716,9 @@ Deeper background and the named-incident watch list:
2716
2716
  Monitor for broader tooling adoption (linters, coverage tools).
2717
2717
 
2718
2718
  5. ~~**ESLint v10**~~: **SHIPPED** 2026-02-06. `.eslintrc.*` configuration is completely
2719
- removed flat config (`eslint.config.js`) is the only supported format.
2719
+ removed—flat config (`eslint.config.js`) is the only supported format.
2720
2720
  Download size reduced 11 MB → 9.4 MB. Minimum Node.js v20.19.0. ESLint 9.x EOL is
2721
- 2026-08-06 migrate now.
2721
+ 2026-08-06—migrate now.
2722
2722
 
2723
2723
  6. ~~**pnpm 11**~~: **SHIPPED** 2026-04-28 (currently 11.2.2). Breaking changes: pure
2724
2724
  ESM (requires Node 22+), SQLite-based store, `minimumReleaseAge` default (1 day),
@@ -2729,7 +2729,7 @@ Deeper background and the named-incident watch list:
2729
2729
  7. ~~**Zod 4**~~: **SHIPPED** (currently 4.4.3). 14× faster string parsing, 7× faster
2730
2730
  array parsing, 6.5× faster object parsing vs Zod 3; core bundle 2.3× smaller; new
2731
2731
  `@zod/mini` (~1.9 KB gzipped) for tree-shakable frontend validation.
2732
- Migration from Zod 3 required see
2732
+ Migration from Zod 3 required—see
2733
2733
  [zod.dev/v4/changelog](https://zod.dev/v4/changelog).
2734
2734
 
2735
2735
  8. **Commander 15 (ESM-only)**: Commander 15 ships May 2026, requires Node v22.12.0+,
@@ -2831,7 +2831,7 @@ ready for public release.
2831
2831
 
2832
2832
  - [Node.js Releases](https://nodejs.org/en/about/previous-releases)
2833
2833
 
2834
- ### Guides & Articles
2834
+ ### Guides and Articles
2835
2835
 
2836
2836
  - [Complete Monorepo Guide 2025](https://jsdev.space/complete-monorepo-guide/)
2837
2837
 
@@ -31,7 +31,7 @@ src/myproject/
31
31
  └── options.py # TypedDict for command options
32
32
  ```
33
33
 
34
- ### Agent & CI Compatibility
34
+ ### Agent and CI Compatibility
35
35
 
36
36
  Support automation with explicit flags:
37
37
  - `--format text|json|jsonl`: Output format
@@ -186,22 +186,22 @@ str(MyThing(file_path="/tmp/file.txt", title="Something " + "blah " * 50, url="h
186
186
  ## Releasing (tag-triggered, no changesets)
187
187
 
188
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
189
+ [`simple-modern-uv`](https://github.com/jlevy/simple-modern-uv) template’s model—it is
190
190
  the standard for tbd’s Python projects.
191
191
  The same clean principles as the TypeScript guidance apply: no changesets, releases cut
192
192
  from clean conventional commits.
193
193
 
194
194
  - **Dynamic versioning from the git tag** via
195
- [`uv-dynamic-versioning`](https://github.com/ninoseki/uv-dynamic-versioning) the tag
195
+ [`uv-dynamic-versioning`](https://github.com/ninoseki/uv-dynamic-versioning)—the tag
196
196
  *is* the version (no manual `version =` bump in `pyproject.toml`, no version commit).
197
197
  - **Release/tag-triggered publish**: a `publish.yml` workflow runs on
198
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
199
+ publishes with `uv publish --trusted-publishing always`—**PyPI Trusted Publishing
200
200
  (OIDC), no API token**.
201
201
  - **Supply-chain cool-off in CI**: set `UV_EXCLUDE_NEWER` to a 14-days-ago cutoff so the
202
202
  build never resolves a brand-new (potentially yanked/compromised) release.
203
203
  - **Release notes** are written per `release-notes-guidelines` from the commits since
204
- the last tag there is no per-PR changeset file.
204
+ the last tag—there is no per-PR changeset file.
205
205
  - Expose the version at runtime with `importlib.metadata.version("<pkg>")`.
206
206
 
207
207
  So a release is just: clean commits → create the GitHub release/tag `vX.Y.Z` → CI builds
@@ -20,6 +20,9 @@ Use these sections in order (omit empty sections):
20
20
  ### Fixes
21
21
  - Bug fixes and corrections
22
22
 
23
+ ### Guidelines and content
24
+ - Changes to shipped guidelines, skills, shortcuts, or templates that users invoke
25
+
23
26
  ### Refactoring
24
27
  - Internal improvements (only if user-visible impact)
25
28
 
@@ -29,6 +32,13 @@ Use these sections in order (omit empty sections):
29
32
  **Full commit history**: [link to compare]
30
33
  ```
31
34
 
35
+ **Releases are not code-only.** If the project ships content—bundled guidelines, skills,
36
+ shortcuts, prompts, or templates that users invoke—changes to that content are product
37
+ changes. Review those diffs (not just code commits) and give them their own
38
+ `### Guidelines and content` section.
39
+ Reserve `### Documentation` for docs *about* the project (README, dev/internal docs);
40
+ shipped content a user can invoke is never an “internal doc” to skip.
41
+
32
42
  ## Core Principle: Describe the Delta
33
43
 
34
44
  **Think in terms of two points in time:**
@@ -105,17 +115,23 @@ Don’t include:
105
115
  - Test-only changes (unless they fix flaky tests users noticed)
106
116
  - Pure refactoring with no user impact
107
117
  - CI/tooling changes
108
- - Minor doc typo fixes
118
+ - Minor typo fixes in docs *about* the project (README, dev/internal docs)
119
+
120
+ Do **not** treat shipped content as internal.
121
+ Changes to guidelines, skills, shortcuts, or templates that users invoke are product
122
+ changes—include them under `Guidelines and content` (see Structure).
109
123
 
110
124
  ## Review Checklist
111
125
 
112
126
  Before finalizing release notes:
113
127
 
114
128
  - [ ] Does each item describe the aggregate delta from the previous release?
115
- - [ ] Are related changes (features + their fixes) consolidated under one heading?
129
+ - [ ] Are related changes (features and their fixes) consolidated under one heading?
116
130
  - [ ] Would a user understand what’s different after upgrading?
117
131
  - [ ] Are feature names/commands in consistent format?
118
132
  - [ ] Are internal-only changes excluded?
133
+ - [ ] Did you review shipped-content diffs (guidelines, skills, shortcuts, templates),
134
+ not just code commits, and give them a section?
119
135
 
120
136
  ## Example
121
137
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Supply-Chain Hardening
3
- description: Strongly recommended for EVERY repo apply it if a repo has not been hardened yet. Cross-ecosystem policy for installing dependencies safely (the 14-day cool-off, disabled install scripts, lockfile discipline, untrusted-repo handling). Use whenever a user mentions hardening, security, supply chain, or setting up a new repo; before adding/upgrading dependencies; when auditing for compromised packages; or when reviewing install/build/run commands across npm/pnpm, PyPI, Cargo, or Go.
3
+ description: Strongly recommended for EVERY repo—apply it if a repo has not been hardened yet. Cross-ecosystem policy for installing dependencies safely (the 14-day cool-off, disabled install scripts, lockfile discipline, untrusted-repo handling). Use whenever a user mentions hardening, security, supply chain, or setting up a new repo; before adding/upgrading dependencies; when auditing for compromised packages; or when reviewing install/build/run commands across npm/pnpm, PyPI, Cargo, or Go.
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
5
  ---
6
6
  # Supply-Chain Hardening
@@ -12,8 +12,8 @@ malicious package versions are published, exfiltrate credentials or install pers
12
12
  and are usually yanked within minutes to days.
13
13
 
14
14
  **Strongly recommended for every repo.** If a project has not been hardened yet, apply
15
- this policy (and the per-ecosystem playbooks it links) as part of setup it is
16
- especially worth doing when standing up a new repo or whenever security comes up.
15
+ this policy (and the per-ecosystem playbooks it links) as part of setup—it is especially
16
+ worth doing when standing up a new repo or whenever security comes up.
17
17
 
18
18
  **This is the concise policy.** For the full playbooks (per-ecosystem ten-minute setups,
19
19
  a zero-dependency audit script, a curated watch list of named incidents, CI/publish-side
@@ -23,23 +23,22 @@ see `tbd guidelines bun-monorepo-patterns` or `tbd guidelines pnpm-monorepo-patt
23
23
 
24
24
  **When to use this guideline**: before adding or upgrading any dependency; when
25
25
  hardening a workstation, repo, or CI pipeline; when assessing whether an installed
26
- package is compromised; or when reviewing any `install` / `build` / `run` command —
27
- especially in a freshly cloned third-party repo.
26
+ package is compromised; or when reviewing any `install` / `build` / `run`
27
+ command—especially in a freshly cloned third-party repo.
28
28
 
29
29
  ## The Default: a 14-Day Cool-Off
30
30
 
31
31
  **Never install or upgrade to a package version less than 14 days old, unless a
32
32
  documented exception applies.** This is the single most effective default.
33
33
  It works because registries and researchers detect and yank malicious versions while
34
- legitimate versions keep accruing age so the only cost of waiting is slightly staler
34
+ legitimate versions keep accruing age—so the only cost of waiting is slightly staler
35
35
  dependencies.
36
36
 
37
37
  **14 days is a floor, not a ceiling.** A 30/60/90-day window is strictly safer; machines
38
38
  with publish tokens or production access should go higher.
39
- Scope: applies to `dependencies`, `devDependencies` (historically *more* dangerous
40
- build tooling runs with full privileges), `peer`/`optionalDependencies`, new installs,
41
- and upgrades.
42
- Pins resolved before adopting the policy are grandfathered until their next
39
+ Scope: applies to `dependencies`, `devDependencies` (historically *more* dangerous—build
40
+ tooling runs with full privileges), `peer`/`optionalDependencies`, new installs, and
41
+ upgrades. Pins resolved before adopting the policy are grandfathered until their next
43
42
  planned upgrade.
44
43
 
45
44
  ### Per-ecosystem control
@@ -64,23 +63,23 @@ To check one version’s age: `npm view <pkg> time.<ver>`.
64
63
  `pip install` / `cargo install` / `go install`: confirm the package is needed, the
65
64
  name is spelled correctly (typosquats are common), and the version clears the
66
65
  cool-off (or is lockfile-pinned, or has a stated exception).
67
- 2. **Disable install/lifecycle scripts by default** — the primary exfiltration vector in
66
+ 2. **Disable install/lifecycle scripts by default**—the primary exfiltration vector in
68
67
  worm-class attacks (`NPM_CONFIG_IGNORE_SCRIPTS=true`; pnpm `ignoreScripts: true` +
69
68
  `allowBuilds` allowlist; refuse PyPI sdist builds with
70
69
  `UV_NO_BUILD`/`PIP_ONLY_BINARY`).
71
70
  3. **Commit lockfiles; install frozen.** `pnpm install --frozen-lockfile` / `npm ci` /
72
71
  `--locked`. Never auto-update without review.
73
- 4. **Audit after every install** — `pnpm audit` / `npm audit` / `pip-audit` /
72
+ 4. **Audit after every install**—`pnpm audit` / `npm audit` / `pip-audit` /
74
73
  `cargo audit` / `govulncheck`; address findings before continuing.
75
- 5. **Don’t update for its own sake.** The safest update is the one you skip each bump
76
- is fresh attack surface.
74
+ 5. **Don’t update for its own sake.** The safest update is the one you skip—each bump is
75
+ fresh attack surface.
77
76
  Bump only for a concrete reason ("show me the commit we need"); prefer fewer,
78
77
  vendored/pinned dependencies; let audits and CVE monitoring tell you when a real
79
78
  update is warranted.
80
79
  6. **No unpinned zero-install runners.** Avoid `npx` / `pnpm dlx` / `bunx` / `uvx` /
81
80
  `go run <remote>` without an explicit `@version` pin and a review of the resolved
82
- `package@version` — they fetch and execute the latest code, bypassing the cool-off.
83
- (When a skill references a CLI via a runner, pin it see
81
+ `package@version`—they fetch and execute the latest code, bypassing the cool-off.
82
+ (When a skill references a CLI via a runner, pin it—see
84
83
  `tbd guidelines cli-agent-skill-patterns` §6.7.)
85
84
  7. **No `curl | sh` from untrusted sources.** Verify the installer URL belongs to the
86
85
  documented project; check signatures/checksums where available.
@@ -96,14 +95,70 @@ yesterday), take the exception **explicitly and on the record**:
96
95
  sources (OSV, GHSA, maintainer postmortem).
97
96
  - Log it, with a follow-up to confirm the version was not yanked afterward.
98
97
 
99
- No exception is “trivial” — the rule exists because we don’t trust ourselves to eyeball
98
+ No exception is “trivial”—the rule exists because we don’t trust ourselves to eyeball
100
99
  which fresh versions are safe.
101
100
  **Agents never self-approve an exception**: prepare the record and a human signs off.
102
101
 
102
+ ### Safe-override patterns (verify, then install surgically)
103
+
104
+ A release-age gate applies at **version resolution**, so `pkg@latest` (or a bare range)
105
+ silently resolves to the newest version *outside* the window—which can mean you get a
106
+ **stale** version without noticing.
107
+ (This is the dogfood case: an `~/.npmrc` `minimum-release-age` resolved
108
+ `npm i -g get-tbd@latest` to an older release because the newer one was still inside the
109
+ window.) When you genuinely need the fresh version, do not weaken the global
110
+ policy—override **surgically** for the one install, and **verify first**. The pattern is
111
+ always *verify the publisher, timestamp, and integrity → install by an exact,
112
+ resolution-bypassing reference → confirm afterwards.*
113
+
114
+ **1. Verify before fetching** (publisher identity, publish time, integrity hash):
115
+
116
+ | Ecosystem | Verify command |
117
+ | --- | --- |
118
+ | npm | `npm view <pkg>@<ver> _npmUser maintainers time.<ver> dist.integrity dist.tarball` |
119
+ | PyPI | `uv pip index versions <pkg>` and inspect the file hashes on `https://pypi.org/project/<pkg>/<ver>/#files` (or `pip download --no-deps --no-binary :all:` then check the hash) |
120
+ | Cargo | `cargo info <pkg>@<ver>` (owners, published-at); crates.io is immutable + checksummed in `Cargo.lock` |
121
+ | Go | `go list -m -json <module>@<ver>` (the proxy returns the checksum DB entry) |
122
+
123
+ For a package **you maintain** (the dogfood case), the strongest check is that the
124
+ published artifact matches the git tag—confirm the commit/tag and, where the registry
125
+ supports provenance/attestations (npm `--provenance`), that it was built from that
126
+ source.
127
+
128
+ **2. Install by an exact reference that bypasses version resolution**, so the gate does
129
+ not silently re-resolve:
130
+
131
+ ```bash
132
+ # npm — direct tarball URL (verified in step 1); skips before/min-release-age resolution
133
+ npm install -g https://registry.npmjs.org/<pkg>/-/<pkg>-X.Y.Z.tgz
134
+
135
+ # npm — git ref (strongest for packages you maintain: the source is auditable)
136
+ npm install -g git+https://github.com/<org>/<repo>#vX.Y.Z
137
+
138
+ # uv / pip — pin exact, with the hash recorded; --exclude-newer override is per-invocation
139
+ uv pip install "<pkg>==X.Y.Z" --exclude-newer "$(date -u +%Y-%m-%d)" # one-shot, not global
140
+
141
+ # cargo / go — pin exact in the manifest; the committed lockfile/sum carries the checksum
142
+ cargo add <pkg>@=X.Y.Z # then `cargo build --locked`
143
+ go get <module>@vX.Y.Z # then `go mod verify`
144
+ ```
145
+
146
+ A tarball-URL or git-ref install is the cleanest npm override because it never consults
147
+ `before` / `minimum-release-age` at all (those apply only to range resolution), so you
148
+ do not touch global config or env.
149
+ The uv/cargo/go forms pin an exact version rather than bypassing a gate, since those
150
+ ecosystems gate at the lockfile rather than at resolution.
151
+
152
+ **3. Keep it surgical and on the record.** The override must affect **one install**, not
153
+ global `~/.npmrc` / env / CI config; carry the same commit/PR record as any exception
154
+ (reason, exact `pkg@version`, the verification output); and **confirm afterwards** that
155
+ the version was not subsequently yanked.
156
+ Never relax the global cool-off to get one fresh package—that re-exposes every install.
157
+
103
158
  ## Node / TypeScript Enforcement (npm, pnpm, Bun)
104
159
 
105
160
  The hands-on controls for the rules above in the Node ecosystem.
106
- Applies to **any** repo, not just new monorepos drop these into an existing project.
161
+ Applies to **any** repo, not just new monorepos—drop these into an existing project.
107
162
 
108
163
  **Lifecycle-script hygiene (the highest-value control).** Block install/build scripts by
109
164
  default and allowlist only what you trust:
@@ -149,7 +204,7 @@ One root lockfile in a monorepo.
149
204
  [npm provenance attestations](https://docs.npmjs.com/generating-provenance-statements)
150
205
  (TypeScript, Vitest, Prettier, ESLint do).
151
206
  Run `pnpm audit signatures` / `npm audit signatures` periodically.
152
- A provenance badge is necessary, not sufficient the @antv worm forged one.
207
+ A provenance badge is necessary, not sufficient—the @antv worm forged one.
153
208
 
154
209
  **CI audit gate** (alongside lint/test):
155
210
 
@@ -165,7 +220,7 @@ audit:
165
220
  # errorLevel 0 logs but doesn't fail — flip to 2 once the backlog is cleared
166
221
  ```
167
222
 
168
- **Pre-push age guard** — a zero-dependency Node script wired into lefthook/husky:
223
+ **Pre-push age guard**—a zero-dependency Node script wired into lefthook/husky:
169
224
 
170
225
  ```ts
171
226
  #!/usr/bin/env tsx
@@ -192,18 +247,18 @@ leave a marker next to the pin (JSONC comment in `package.json`, or a `CHANGELOG
192
247
  note for strict JSON parsers): `// Exception: CVE-2026-XXXX patch within 14d window.
193
248
  Reviewed <date>.`
194
249
 
195
- ## Untrusted Repos & Modes
250
+ ## Untrusted Repos and Modes
196
251
 
197
252
  - **Treat any freshly-cloned third-party repo as untrusted.** Do not run
198
253
  `install`/`build`/`test`/`run`/`npx`/`uvx`/`cargo run`/`go run <remote>` against it on
199
- a machine with ambient credentials until you’ve reviewed it ideally in a container
200
- or namespace-isolated sandbox.
254
+ a machine with ambient credentials until you’ve reviewed it—ideally in a container or
255
+ namespace-isolated sandbox.
201
256
  (`build.rs`, proc-macros, `require()`-time payloads, and test files all execute code.)
202
257
  - **Modes**: default to **Balanced** (the policy above).
203
258
  Enter **Strict** (no upgrade without reviewing the change set; build-script allowlist
204
259
  required; mandatory sandbox; CI scanners checksum-verified) when the repo declares it,
205
260
  when the repo is untrusted, or on a machine with publish tokens / production access.
206
- **Emergency Exception** is a single logged per-command bypass never self-approved by
261
+ **Emergency Exception** is a single logged per-command bypass—never self-approved by
207
262
  an agent.
208
263
 
209
264
  ## What This Does and Doesn’t Cover
@@ -212,11 +267,11 @@ A cool-off plus disabled scripts neutralizes the dominant **fast-yanked-incident
212
267
  pattern. It does **not** stop: long-lived typosquats that survive past the window; a
213
268
  lockfile that already captured a bad version; payloads that fire on import/build rather
214
269
  than install; or **publish-pipeline compromises** (the May 2026 @antv worm shipped from
215
- legitimate CI with a forged “verified” provenance badge a green badge is not proof).
216
- Those need lockfile review, typosquat checks, build-time controls, and if you publish
217
- packages the publish-side controls in the guidebook’s `hardening-ci-cd.md` (OIDC
218
- trusted publishing, staged publishing, SHA-pinned actions, runner egress limits,
219
- provenance monitoring).
270
+ legitimate CI with a forged “verified” provenance badge—a green badge is not proof).
271
+ Those need lockfile review, typosquat checks, build-time controls, and—if you publish
272
+ packages—the publish-side controls in the guidebook’s `hardening-ci-cd.md` (OIDC trusted
273
+ publishing, staged publishing, SHA-pinned actions, runner egress limits, provenance
274
+ monitoring).
220
275
 
221
276
  ## Apply It Here (tbd)
222
277
 
@@ -79,7 +79,7 @@ auto-saving, since the issue is likely temporary.
79
79
 
80
80
  **What tbd now does:**
81
81
  - `mergeIssues()` detects no-op merges and skips the version/timestamp bump
82
- - `getUpdatedIssues()` ignores `version` and `updated_at` when filtering only issues
82
+ - `getUpdatedIssues()` ignores `version` and `updated_at` when filtering—only issues
83
83
  with actual content changes (title, status, labels, description, etc.)
84
84
  are saved
85
85
  - When fetch fails, the cached `origin/tbd-sync` ref is used for comparison instead of
@@ -87,7 +87,7 @@ auto-saving, since the issue is likely temporary.
87
87
 
88
88
  **If you encounter this with an older version:**
89
89
  1. Update tbd: `npm install -g get-tbd@latest`
90
- 2. If you already have a large outbox, you can safely import it the import will merge
90
+ 2. If you already have a large outbox, you can safely import it—the import will merge
91
91
  using field-level LWW and the trivial changes will be harmless
92
92
  3. Run `tbd sync` to clear the outbox
93
93
 
@@ -123,7 +123,7 @@ auto-saving, since the issue is likely temporary.
123
123
  ### Don’t gitignore .tbd/workspaces/
124
124
 
125
125
  When `tbd sync` fails and auto-saves to `.tbd/workspaces/outbox/`, a new untracked
126
- directory appears. Do not add it to `.gitignore` — the outbox must be committed to your
126
+ directory appears. Do not add it to `.gitignore`—the outbox must be committed to your
127
127
  working branch so unsynced data survives across sessions.
128
128
 
129
129
  **What to do instead:**