get-tbd 0.1.30 → 0.2.0

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 (91) hide show
  1. package/README.md +5 -1
  2. package/dist/bin.mjs +2823 -2226
  3. package/dist/bin.mjs.map +1 -1
  4. package/dist/cli.mjs +1063 -665
  5. package/dist/cli.mjs.map +1 -1
  6. package/dist/{config-DVap9omo.mjs → config-BJz1m9eN.mjs} +179 -39
  7. package/dist/config-BJz1m9eN.mjs.map +1 -0
  8. package/dist/{config-BPHcePSm.mjs → config-DlCUMyCG.mjs} +1 -1
  9. package/dist/docs/README.md +5 -1
  10. package/dist/docs/guidelines/backward-compatibility-rules.md +4 -0
  11. package/dist/docs/guidelines/bun-monorepo-patterns.md +20 -4
  12. package/dist/docs/guidelines/cli-agent-skill-patterns.md +38 -34
  13. package/dist/docs/guidelines/commit-conventions.md +4 -0
  14. package/dist/docs/guidelines/common-doc-guidelines.md +234 -0
  15. package/dist/docs/guidelines/convex-limits-best-practices.md +4 -0
  16. package/dist/docs/guidelines/convex-rules.md +4 -0
  17. package/dist/docs/guidelines/electron-app-development-patterns.md +4 -0
  18. package/dist/docs/guidelines/error-handling-rules.md +4 -0
  19. package/dist/docs/guidelines/general-coding-rules.md +4 -0
  20. package/dist/docs/guidelines/general-comment-rules.md +4 -0
  21. package/dist/docs/guidelines/general-eng-assistant-rules.md +4 -0
  22. package/dist/docs/guidelines/general-tdd-guidelines.md +4 -0
  23. package/dist/docs/guidelines/general-testing-rules.md +4 -0
  24. package/dist/docs/guidelines/golden-testing-guidelines.md +4 -0
  25. package/dist/docs/guidelines/pnpm-monorepo-patterns.md +27 -6
  26. package/dist/docs/guidelines/python-cli-patterns.md +4 -0
  27. package/dist/docs/guidelines/python-modern-guidelines.md +30 -0
  28. package/dist/docs/guidelines/python-rules.md +4 -0
  29. package/dist/docs/guidelines/release-notes-guidelines.md +4 -0
  30. package/dist/docs/guidelines/supply-chain-hardening.md +11 -7
  31. package/dist/docs/guidelines/tbd-sync-troubleshooting.md +10 -4
  32. package/dist/docs/guidelines/typescript-cli-tool-rules.md +27 -24
  33. package/dist/docs/guidelines/typescript-code-coverage.md +11 -7
  34. package/dist/docs/guidelines/typescript-rules.md +10 -6
  35. package/dist/docs/guidelines/typescript-sorting-patterns.md +4 -0
  36. package/dist/docs/guidelines/typescript-yaml-handling-rules.md +7 -3
  37. package/dist/docs/shortcuts/standard/agent-handoff.md +4 -0
  38. package/dist/docs/shortcuts/standard/checkout-third-party-repo.md +4 -0
  39. package/dist/docs/shortcuts/standard/code-cleanup-all.md +4 -0
  40. package/dist/docs/shortcuts/standard/code-cleanup-docstrings.md +4 -0
  41. package/dist/docs/shortcuts/standard/code-cleanup-tests.md +4 -0
  42. package/dist/docs/shortcuts/standard/code-review-and-commit.md +4 -0
  43. package/dist/docs/shortcuts/standard/coding-spike.md +4 -0
  44. package/dist/docs/shortcuts/standard/create-or-update-pr-simple.md +4 -0
  45. package/dist/docs/shortcuts/standard/create-or-update-pr-with-validation-plan.md +4 -0
  46. package/dist/docs/shortcuts/standard/implement-beads.md +4 -0
  47. package/dist/docs/shortcuts/standard/merge-upstream.md +4 -0
  48. package/dist/docs/shortcuts/standard/new-architecture-doc.md +4 -0
  49. package/dist/docs/shortcuts/standard/new-guideline.md +4 -0
  50. package/dist/docs/shortcuts/standard/new-plan-spec.md +4 -0
  51. package/dist/docs/shortcuts/standard/new-qa-playbook.md +4 -0
  52. package/dist/docs/shortcuts/standard/new-research-brief.md +4 -0
  53. package/dist/docs/shortcuts/standard/new-shortcut.md +4 -0
  54. package/dist/docs/shortcuts/standard/new-validation-plan.md +4 -0
  55. package/dist/docs/shortcuts/standard/plan-implementation-with-beads.md +4 -0
  56. package/dist/docs/shortcuts/standard/precommit-process.md +4 -0
  57. package/dist/docs/shortcuts/standard/review-code-python.md +4 -0
  58. package/dist/docs/shortcuts/standard/review-code-typescript.md +4 -0
  59. package/dist/docs/shortcuts/standard/review-code.md +4 -0
  60. package/dist/docs/shortcuts/standard/review-github-pr.md +4 -0
  61. package/dist/docs/shortcuts/standard/revise-all-architecture-docs.md +4 -0
  62. package/dist/docs/shortcuts/standard/revise-architecture-doc.md +4 -0
  63. package/dist/docs/shortcuts/standard/setup-github-cli.md +4 -0
  64. package/dist/docs/shortcuts/standard/sync-failure-recovery.md +4 -0
  65. package/dist/docs/shortcuts/standard/update-specs-status.md +4 -0
  66. package/dist/docs/shortcuts/standard/welcome-user.md +4 -0
  67. package/dist/docs/tbd-closing.md +4 -0
  68. package/dist/docs/tbd-design.md +109 -68
  69. package/dist/docs/tbd-docs.md +20 -13
  70. package/dist/docs/tbd-prime.md +4 -0
  71. package/dist/docs/templates/architecture-doc.md +4 -0
  72. package/dist/docs/templates/plan-spec.md +4 -0
  73. package/dist/docs/templates/qa-playbook.md +4 -0
  74. package/dist/docs/templates/research-brief.md +4 -0
  75. package/dist/{id-mapping-Ctfl_nc1.mjs → id-mapping-CFoPVinz.mjs} +1 -1
  76. package/dist/{id-mapping-CqrrLgeX.mjs → id-mapping-CtfTfGIh.mjs} +146 -122
  77. package/dist/id-mapping-CtfTfGIh.mjs.map +1 -0
  78. package/dist/index.d.mts +53 -1
  79. package/dist/index.mjs +3 -3
  80. package/dist/{schemas-C8mOQykE.mjs → schemas-f0EcuAVu.mjs} +40 -3
  81. package/dist/schemas-f0EcuAVu.mjs.map +1 -0
  82. package/dist/{src-BK_EF6mk.mjs → src-rIE4xSVs.mjs} +3 -3
  83. package/dist/src-rIE4xSVs.mjs.map +1 -0
  84. package/dist/tbd +2823 -2226
  85. package/package.json +1 -1
  86. package/dist/config-DVap9omo.mjs.map +0 -1
  87. package/dist/docs/guidelines/general-style-rules.md +0 -38
  88. package/dist/docs/guidelines/writing-style-guidelines.md +0 -42
  89. package/dist/id-mapping-CqrrLgeX.mjs.map +0 -1
  90. package/dist/schemas-C8mOQykE.mjs.map +0 -1
  91. package/dist/src-BK_EF6mk.mjs.map +0 -1
@@ -104,15 +104,15 @@ So:
104
104
 
105
105
  - **Prompt/instructions only** → ship a `SKILL.md`. (§3, §4)
106
106
  - **Project-wide conventions** (build/test/style) → add an `AGENTS.md`. (§2)
107
- - **You have a CLI** → `SKILL.md` + agent-friendly `--json` CLI. (§0.2, §6)
107
+ - **You have a CLI** → `SKILL.md` and an agent-friendly `--json` CLI. (§0.2, §6)
108
108
  - **Many subcommands / a knowledge library** → CLI-as-skill meta-pattern.
109
109
  (§6)
110
110
  - **A service with no CLI, or you need OAuth / multi-tenant / audit** → MCP server.
111
111
  (§7)
112
- - **Maximum reach across many agents** → layer them: AGENTS.md + SKILL.md + CLI + MCP.
112
+ - **Maximum reach across many agents** → layer them: AGENTS.md, SKILL.md, CLI, and MCP.
113
113
  (§1)
114
114
  - **Self-installs into agents & ships evolving skills?** → that is the advanced Tier 2
115
- pattern (self-upgrade + format versioning); most tools are Tier 1: a pure skill run
115
+ pattern (self-upgrade and format versioning); most tools are Tier 1: a pure skill run
116
116
  via a **pinned** `npx`/`uvx`. (§6.0)
117
117
 
118
118
  Everything below is reference material.
@@ -136,7 +136,7 @@ or capability.
136
136
  | 5. Per-agent polish | `.cursor/rules/*.mdc`, plugin packaging, ACP, etc. | Glob-scoped activation, enterprise distribution, editor discovery | Per-agent |
137
137
 
138
138
  **Recommended default for a tool author who wants broad reach**: ship an `AGENTS.md`
139
- snippet (universal baseline) + a `SKILL.md` (portable capability) + an agent-friendly
139
+ snippet (universal baseline), a `SKILL.md` (portable capability), and an agent-friendly
140
140
  CLI. Add an MCP server only when a CLI can’t serve the need.
141
141
  Add agent-specific files last, and only where they buy something.
142
142
 
@@ -204,8 +204,8 @@ current ones. Only the `format=fNN` value changes when the block’s shape chang
204
204
 
205
205
  ## 3. The Agent Skills Standard (SKILL.md)
206
206
 
207
- **What it is**: a folder with a `SKILL.md` file (YAML frontmatter + Markdown body), plus
208
- optional supporting files.
207
+ **What it is**: a folder with a `SKILL.md` file (YAML frontmatter and a Markdown body),
208
+ plus optional supporting files.
209
209
  Created by Anthropic (Dec 2025), published under Apache 2.0 at
210
210
  [agentskills.io](https://agentskills.io).
211
211
  280,000+ public skills exist as of early 2026.
@@ -318,8 +318,8 @@ Earlier guidance cited a flat ~15K-character budget.
318
318
  - The skill listing gets a budget of **~1% of the model’s context window** by default
319
319
  (`skillListingBudgetFraction`, default `0.01`). When it overflows, the
320
320
  least-recently-invoked skills lose their descriptions first.
321
- - Per-skill listing text (`description` + `when_to_use`) is truncated at **1,536 chars**
322
- (`maxSkillDescriptionChars`).
321
+ - Per-skill listing text (`description` and `when_to_use`) is truncated at **1,536
322
+ chars** (`maxSkillDescriptionChars`).
323
323
  - `SLASH_COMMAND_TOOL_CHAR_BUDGET` overrides the fraction with a fixed character count.
324
324
  - `skillOverrides` can set any skill to `on` / `name-only` / `user-invocable-only` /
325
325
  `off` without editing the file; `/doctor` reports overflow.
@@ -399,14 +399,14 @@ Verified against the Codex source (`codex-rs/core-skills/src/loader.rs`, tags
399
399
  `<dir>/.agents/skills/` from the project root down to cwd), `User`
400
400
  (`$HOME/.agents/skills/`), `Admin`, plus plugin roots and `$CODEX_HOME/skills`. So a
401
401
  **plain repo-root `.agents/skills/<name>/SKILL.md` is read directly**, no manifest
402
- required. (The repo path is built by joining `.agents` + `skills` at runtime, so it does
403
- *not* appear as a contiguous `.agents/skills` literal in the binary — a `strings`-based
404
- inspection will miss it and see only `.agents/plugins/marketplace.json`; confirm against
405
- the source, not binary strings.)
406
- **Plugins** are an *additional* distribution layer (installable units bundling skills +
407
- MCP servers — 90+ ship with Codex), declared in `.agents/plugins/marketplace.json` (also
408
- reads `.claude-plugin/marketplace.json`) — useful for *publishing a bundle*, but not
409
- needed to make a repo-local skill load.
402
+ required. (The repo path is built by joining `.agents` and `skills` at runtime, so it
403
+ does *not* appear as a contiguous `.agents/skills` literal in the binary — a
404
+ `strings`-based inspection will miss it and see only `.agents/plugins/marketplace.json`;
405
+ confirm against the source, not binary strings.)
406
+ **Plugins** are an *additional* distribution layer (installable units bundling skills
407
+ and MCP servers — 90+ ship with Codex), declared in `.agents/plugins/marketplace.json`
408
+ (also reads `.claude-plugin/marketplace.json`) — useful for *publishing a bundle*, but
409
+ not needed to make a repo-local skill load.
410
410
  Codex skills may carry a richer **`agents/openai.yaml`** companion (e.g.
411
411
  `interface.display_name`, icons, `dependencies.tools[]`,
412
412
  `policy.allow_implicit_invocation`); map the portable
@@ -431,7 +431,7 @@ sandboxed.
431
431
  This is the pattern for a richer tool: a CLI that is itself a skill, exposing many
432
432
  capabilities as subcommands while costing a single description slot.
433
433
  `tbd` is the reference implementation; **Beads/`bd`** (Steve Yegge), `tbd`’s lineage,
434
- follows the same shape (subcommands + `AGENTS.md` + `--json` + an optional MCP server).
434
+ follows the same shape (subcommands, `AGENTS.md`, `--json`, and an optional MCP server).
435
435
 
436
436
  Use this when you have many capabilities, need cross-session state, or want a curated
437
437
  knowledge library the agent pulls from.
@@ -550,8 +550,8 @@ Rules: reference commands **explicitly** (`mycli command arg`, never “see the
550
550
  - **Actionable errors** that include the next command to run.
551
551
  - **Discoverable help**: an `IMPORTANT:` epilog pointing at a context-restore command
552
552
  (e.g., `mycli prime`), and a “Getting Started” one-liner.
553
- - **A `prime` command** (dashboard + status + rules) for session start and post-compact,
554
- distinct from `skill` (pure documentation).
553
+ - **A `prime` command** (dashboard, status, and rules) for session start and
554
+ post-compact, distinct from `skill` (pure documentation).
555
555
 
556
556
  ### 6.6 Distribution & multi-agent install
557
557
 
@@ -621,14 +621,14 @@ project needs both.
621
621
  - **Fully generated install artifacts** (`.agents/skills/<tool>/SKILL.md`,
622
622
  `.claude/skills/<tool>/SKILL.md`, generated hook scripts, and the like): CLI-owned;
623
623
  mark them “DO NOT EDIT.” Pick **one of two modes** and be consistent:
624
- - **Commit + dogfood** (what `tbd` does): check the generated artifacts in, and add a
625
- **drift test** that regenerates them and fails if they differ.
624
+ - **Commit and dogfood** (what `tbd` does): check the generated artifacts in, and add
625
+ a **drift test** that regenerates them and fails if they differ.
626
626
  Pros: browsable on GitHub / skills.sh, the repo demonstrates its own output,
627
627
  reviewers see changes.
628
628
  Con: a regeneration shows up as a diff to commit.
629
629
  Keep generated output deterministic and formatter-stable (below) or the drift
630
630
  test/commits will churn.
631
- - **Gitignore + regenerate** (what `metaproc` does): add `.../skills/*/SKILL.md` to
631
+ - **Gitignore and regenerate** (what `metaproc` does): add `.../skills/*/SKILL.md` to
632
632
  `.gitignore` and let `setup`/`--install` (re)create them on demand.
633
633
  Pros: zero commit churn, no drift to guard.
634
634
  Con: not browsable in the repo, and no committed artifact to diff in review.
@@ -732,7 +732,7 @@ The clean implementation is the host language’s plugin mechanism:
732
732
 
733
733
  Keep each registered skill a **spec** (name, two-part description, `allowed-tools`, a
734
734
  baseline source, and an optional dynamic catalog function) and run them all through the
735
- **same** `compose` + `--install` path, so every skill — first-party or third-party —
735
+ **same** `compose` and `--install` path, so every skill — first-party or third-party —
736
736
  gets identical frontmatter, the `DO NOT EDIT`/format marker, and deterministic output.
737
737
  This keeps the “one tool, many self-injecting commands” model open for extension without
738
738
  the core tool taking a dependency on every plugin.
@@ -810,8 +810,8 @@ See `tbd guidelines supply-chain-hardening` for the cross-ecosystem policy.
810
810
  `uv tool install` / `pipx install`. `uvx` reuses a persistent install if one exists.
811
811
  - **Go**: `go run <module>@<ver>` (compiles on the fly) or `go install`.
812
812
  - **Rust**: no first-class zero-install runner — ship **prebuilt binaries** (GitHub
813
- releases + a `curl … | sh` installer) or `cargo binstall`; `cargo install` compiles.
814
- - **Cross-language**: a prebuilt binary + install script, or a container image (Docker
813
+ releases and a `curl … | sh` installer) or `cargo binstall`; `cargo install` compiles.
814
+ - **Cross-language**: a prebuilt binary and install script, or a container image (Docker
815
815
  is emerging as the production-grade distribution for MCP servers).
816
816
 
817
817
  This mirrors how the ecosystem ships agent tooling today: **MCP servers** are most often
@@ -821,7 +821,7 @@ configs; **CLIs** like Beads offer `brew` / `npm -g` / `curl` installers, while
821
821
 
822
822
  **Recommendation**: default the skill to a **pinned zero-install invocation**
823
823
  (`uvx`/`npx <pkg>@<version>`) for maximum reach across ephemeral and cloud agents; offer
824
- **global install + a `SessionStart` bootstrap** as the optimization for persistent
824
+ **global install and a `SessionStart` bootstrap** as the optimization for persistent
825
825
  environments where the project wants lockfile-managed versions and warm-start speed.
826
826
 
827
827
  ### 6.8 Publishing & discovery — make the skill installable
@@ -832,15 +832,15 @@ and the ecosystem finds it.
832
832
  The landscape worth targeting:
833
833
 
834
834
  - **`skills.sh` / `npx skills add <owner/repo>`** (Vercel) — the cross-agent “npm for
835
- skills”: one command installs into `.agents/skills/` + symlinks per agent (Claude
835
+ skills”: one command installs into `.agents/skills/` and symlinks per agent (Claude
836
836
  Code, Codex, Cursor, Copilot, Gemini, …). No review; ranked by install telemetry.
837
837
  **This is the highest-leverage target** and needs zero extra infra.
838
838
  - **GitHub-scraping indexers** (SkillsMP ~800k skills, ClaudeSkills.info, LobeHub,
839
839
  claudemarketplaces.com) — auto-list public repos that contain a `SKILL.md` (often
840
- gated on ≥2 stars). You get listed for free just by being public + discoverable.
840
+ gated on ≥2 stars). You get listed for free just by being public and discoverable.
841
841
  - **Plugin marketplaces** — `.claude-plugin/marketplace.json` (Claude Code, the official
842
842
  Anthropic channel) and `.agents/plugins/marketplace.json` (Codex; Codex reads both).
843
- These are *plugin* channels: bundles of skills + MCP + hooks + commands.
843
+ These are *plugin* channels: bundles of skills, MCP servers, hooks, and commands.
844
844
  They are **only for publishing a bundle** — a repo-local skill already loads from
845
845
  `.claude/skills/` (Claude Code) and `.agents/skills/` (Codex) **without any
846
846
  manifest**, so don’t add one just to be discovered.
@@ -873,10 +873,10 @@ itself. Generate this distribution `SKILL.md` from the same source as your in-re
873
873
  pushing.
874
874
 
875
875
  `tbd` does exactly this: `skills/tbd/SKILL.md` is generated at build time from the same
876
- baseline, carries `name: tbd` + a trigger-rich description, and opens with the
877
- `npm install -g get-tbd` + `tbd setup --auto` bootstrap — so `npx skills add jlevy/tbd`
878
- gives an agent a working landing page, and `tbd setup` then upgrades it to the full
879
- multi-agent install (§6.6).
876
+ baseline, carries `name: tbd` and a trigger-rich description, and opens with the
877
+ `npm install -g get-tbd` and `tbd setup --auto` bootstrap — so
878
+ `npx skills add jlevy/tbd` gives an agent a working landing page, and `tbd setup` then
879
+ upgrades it to the full multi-agent install (§6.6).
880
880
 
881
881
  * * *
882
882
 
@@ -1007,7 +1007,7 @@ going:
1007
1007
  - **Codex App-Server** — JSON-RPC (Thread/Turn/Item) decoupling Codex logic from client
1008
1008
  surfaces; relevant only for Codex-specific integration surfaces.
1009
1009
  - **Plugin marketplaces & `npx skills`** — distribution is consolidating: Claude Code
1010
- plugin marketplaces (official + community), Codex plugins, and Vercel’s
1010
+ plugin marketplaces (official and community), Codex plugins, and Vercel’s
1011
1011
  `npx skills add` over the skills.sh directory (cross-agent symlinks).
1012
1012
  - **Routines / scheduled agents, background monitors, `/run` & `/verify` skills** —
1013
1013
  newer Claude Code capabilities for autonomous, event-triggered, and app-verifying
@@ -1174,3 +1174,7 @@ going:
1174
1174
  - Supply-chain / dependency currency: `tbd guidelines bun-monorepo-patterns` or
1175
1175
  `pnpm-monorepo-patterns`
1176
1176
  - Testing: `tbd guidelines general-testing-rules`
1177
+
1178
+ <!-- This document follows common-doc-guidelines.md.
1179
+ See github.com/jlevy/practical-prose and review guidelines before editing.
1180
+ -->
@@ -77,3 +77,7 @@ ops: Update issue status for auth feature
77
77
  ops: Sync beads with remote
78
78
  process: Add TDD guidelines for agent workflows
79
79
  ```
80
+
81
+ <!-- This document follows common-doc-guidelines.md.
82
+ See github.com/jlevy/practical-prose and review guidelines before editing.
83
+ -->
@@ -0,0 +1,234 @@
1
+ ---
2
+ title: Common Documentation Guidelines
3
+ description: Common cross-project standards for writing and organizing docs, code comments, and text files — how to organize, structure, write, and format documents, plus the guideline footer convention. Downstream of github.com/jlevy/practical-prose. Use whenever writing or editing any documentation, README, guideline, or design doc.
4
+ author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ ---
6
+ # Common Documentation Guidelines
7
+
8
+ Version: v0.1 (last update 2026-05-11)\
9
+ Joshua Levy (github.com/jlevy)
10
+
11
+ ## Purpose
12
+
13
+ Both agents and humans benefit from accurate, maintained documentation.
14
+ These are brief and general guidelines for humans and agents when writing and organizing
15
+ code, text files, and documentation.
16
+
17
+ See the [Practical Prose](https://github.com/jlevy/practical-prose) repository for more
18
+ extensive guidelines and context.
19
+
20
+ ## Organizing Documentation
21
+
22
+ 1. **Organize documents for rapid orientation**
23
+
24
+ - All context for understanding a project should be efficiently discoverable.
25
+ - Documents should reference other documents whenever relevant.
26
+ - A reader should be able to navigate from an obvious root document to all other
27
+ documents relevant to a given need by following references.
28
+
29
+ 2. **Use self-evident filenames and concise references**
30
+
31
+ - For file naming, always follow existing project conventions.
32
+ If conventions are unclear, use the conventions here.
33
+ - Repos and key file folders should have a concise `README.md` as a root document
34
+ that points to other documents.
35
+ - Within the top-level repo or within key folders, a `docs/` folder should be added
36
+ with other key docs and referenced in the `README.md`.
37
+ - Whenever possible give documents brief but unique names.
38
+ - Include a hint of the *topic* as well as *purpose*, such as
39
+ `python-structural-quality-guidelines.md`.
40
+ - Documents that are likely to become less relevant over time should have *dates or
41
+ versions* as well, such as `plan-2026-04-28-browser-realtime-streaming.md`.
42
+ - Unless other rules forbid it, references within documents should be *maximally
43
+ concise* so they are easy to maintain:
44
+ - For URLs, use simple link text with the URL in Markdown format.
45
+ - For other documents, use the simplest unique reference, such as a title or
46
+ filename, that makes the document easy to find.
47
+ - Do not include unnecessary metadata, local paths, or other details readily
48
+ determined from a search.
49
+
50
+ 3. **Divide documents by ownership, audience, and cadence**
51
+
52
+ - Documents owned and maintained by different people or teams should usually be
53
+ distinct.
54
+ - Documents meant for different audiences (such as internal versus external, or team
55
+ docs versus sensitive docs) should be kept separate.
56
+ - Documents updated on different cadences (such as ad hoc, every sprint, or yearly)
57
+ should be distinct.
58
+ - Documents with the same ownership, audience, and update cadence should be
59
+ consolidated.
60
+
61
+ 4. **Organize documents for maintainability**
62
+
63
+ - Reference or include relevant guidelines for updates.
64
+ - Documents should be organized in a way that is compatible with typical update
65
+ processes.
66
+
67
+ ## Structuring Documents
68
+
69
+ 1. **Explain motivations and background**
70
+
71
+ - Assume readers have low context.
72
+ - Highest-level documents or introductory sections should explain *why* as well as
73
+ *what*.
74
+ - A key part of the *why* is explaining why some approaches are taken and their
75
+ benefits compared to alternate approaches or alternate tools.
76
+ - Cite external sources for all content that is best covered externally.
77
+
78
+ 2. **Give context gradually and efficiently**
79
+
80
+ - Documents should be as brief as possible while still preserving all relevant
81
+ detail.
82
+ - Add detail incrementally: start with summaries, link to deeper docs.
83
+
84
+ 3. **Keep details close to where they apply**
85
+
86
+ - For example, docstrings in code or descriptions within YAML are preferred to
87
+ separate documentation when the content directly relates to code or content in
88
+ those files.
89
+
90
+ 4. **Avoid duplication**
91
+
92
+ - Do *not* repeat content in higher-level docs if the details are in referenced
93
+ lower-level docs.
94
+ - For example, if `docs/design.md` is an overview of the design, do not repeat the
95
+ design in `README.md`; reference it instead.
96
+
97
+ 5. **Describe the present state, not what it replaced**
98
+
99
+ - By default, write as if the current work or referenced system or design always
100
+ existed. Most readers need to understand what *is*, not what *was*; replacement
101
+ history pollutes their context with deprecated concepts they would otherwise never
102
+ have to learn. When version control like Git is used, its history is the
103
+ authoritative record of what was removed.
104
+ - Agents are especially prone to retaining history notations that are no longer
105
+ relevant ( “this design was changed because of X,” “this function was previously
106
+ named X”, “removed Z”). When in doubt, cut it.
107
+ - Exceptions are allowed when the document’s purpose *includes* history: migration
108
+ guides, postmortems, deprecation notices, decision records, changelogs,
109
+ governance/versioning sections in standards and schemas, and one-line pointers when
110
+ a future reader needs to find a predecessor (for example, “see commit `abc123` for
111
+ the prior shape”). The test is whether the history serves the reader’s task or
112
+ simply records the author’s path.
113
+
114
+ ## Writing Style
115
+
116
+ Stylistically, emphasize **clarity**, **depth**, **rigor**, and **warmth**.
117
+
118
+ 1. **Be clear and concise**
119
+
120
+ - Use direct and simple language.
121
+ - Eliminate unnecessary or extraneous words.
122
+ - Avoid obvious statements.
123
+ - Remove duplication where a document says the same thing in different places.
124
+ - If removing a sentence loses no information about the subject, cut it.
125
+
126
+ 2. **Be detailed and specific**
127
+
128
+ - Use data or facts instead of generalizations or adjectives.
129
+ - Avoid vagueness or generalities.
130
+ - Use concrete examples.
131
+ - Cite sources whenever possible.
132
+
133
+ 3. **Be rigorous and logical**
134
+
135
+ - Use structure, such as headings, subheadings, and lists, effectively.
136
+ - Keep structure logical and consistent.
137
+ - Make headings specific; cleave to the true contours of the subject matter.
138
+
139
+ 4. **Be engaging and warm**
140
+
141
+ - Be friendly in tone, avoiding unnecessary formality unless required by the
142
+ situation (such as in legal documents).
143
+ - Be gracious in acknowledging previous work, even if correcting it.
144
+ - Avoid unnecessary coldness, blame, condescension, or opacity when writing for
145
+ humans. For agent-facing documents, the equivalent is directness, explicit context,
146
+ and absence of performative fluff.
147
+ `practical-prose-rubric.md` cites this as a Tone / Reader Respect contextual
148
+ modifier rather than a scored dimension.
149
+
150
+ ## Effective Communication
151
+
152
+ 1. **Respect the reader’s intelligence**
153
+
154
+ - Write for a reader that is *100% intelligent and 100% ignorant*. This respects the
155
+ reader yet provides enough context.
156
+ - Either explain concepts fully and from first principles or point them to where they
157
+ can learn the concept.
158
+ - Never dumb things down, be vague, or skip important technicalities or details.
159
+
160
+ 2. **Calibrate confidence**
161
+
162
+ - Never make a confident statement without citations or reasoning that justify the
163
+ confidence.
164
+ - Judgments are allowed but must be calibrated, considering evidence for and against.
165
+ - Do *not* aim to be agreeable; aim to be accurate when certain and explicit about
166
+ uncertainties.
167
+ - Do *not* make sweeping claims or use extravagant language.
168
+ Avoid words like “incontrovertibly,” “emphatically,” “definitively,”
169
+ “unequivocally,” “massive,” “monumental,” “profound,” “transformational,”
170
+ “seismic,” “paradigm-shifting,” “will revolutionize,” “structurally outmaneuvered,”
171
+ “successfully executing,” or “crushing it.”
172
+
173
+ 3. **Cut pompousness, meta-commentary, and unnecessary formality**
174
+
175
+ - Avoid “talking about talking,” such as narrating what a doc covers or instructing
176
+ readers on how to read a document.
177
+ Exception: standards, rubrics, runbooks, and other process documents may include
178
+ structural commentary (how dimensions map to rules, how to score, when to apply a
179
+ pass) when that commentary is what the document is *for*.
180
+ - Eliminate common but unnecessary phrases, such as “due to the fact” or “at this
181
+ point in time.” Avoid adverbs and general adjectives, such as “quickly respond” or
182
+ “very good.”
183
+ - Avoid pedantry, such as calling documents “canonical,” or giving justifications for
184
+ word choices. Jargon like “load-bearing” is acceptable when the audience uses it and
185
+ the term is genuinely descriptive (for example, a sentence-craft discussion citing
186
+ Gopen and Swan’s notion of *load-bearing constraints on sentence structure*); avoid
187
+ it as a filler intensifier in ordinary prose.
188
+ - Cut acronyms and jargon unless they serve a clear purpose.
189
+ - When technical terms or jargon are used, define them or reference their definition.
190
+
191
+ ## Formatting
192
+
193
+ > Block quotes like this should be used for meta-instructions, quotes, and epigraphs.
194
+
195
+ - **Boldface:** Use boldface for defining **key words** or concepts.
196
+ - **Italics:** Use italics for *general emphasis*.
197
+ - **Itemized lists:** Use bulleted lists whenever it aids with clarity.
198
+ Do not include full stops on each item for short lists and sentence fragments.
199
+ For lists with multiple sentences on each bullet (like this one), consistently use
200
+ full stops on all items.
201
+ - **Inline headings:** Inline headings, where the heading is on the same line as a
202
+ paragraph of text, should be formatted like this, using a boldfaced colon.
203
+ Use this format consistently for inline headings within itemized lists.
204
+ - **Em dashes:** Use em dashes *only* when they are the best punctuation for the
205
+ sentence. Prefer full stops, commas, colons, or semicolons as appropriate.
206
+ When you do use em dashes—like this—follow American style, without spaces around the
207
+ em dash.
208
+ - **Conjunctions:** Write “and” rather than `+` or `&` in prose, list separators, and
209
+ cross-references. Reserve `+` and `&` for code, identifiers, and proper names where
210
+ they are part of the canonical form (for example, “Strunk & White”).
211
+ - **Section headings:** Use Title Case (Chicago Manual of Style rules) for H1 `#` and H2
212
+ `##` headings (as in this document).
213
+ For H3 `###` and H4 `####`, title case is optional but should be applied consistently.
214
+
215
+ ### Auto-Formatting and Emojis
216
+
217
+ > These two conventions are tbd extensions not yet in upstream practical-prose; see the
218
+ > PR addendum proposing them upstream.
219
+
220
+ - **Auto-formatting:** Always use auto-formatting on every file type that supports it.
221
+ Defer to the language- or format-specific rules for exact style.
222
+ - **Emojis:** Do not use emojis gratuitously — only when they add clarity through a
223
+ consistent semantic vocabulary.
224
+ Use ✅ and ❌ for success and failure (or ✔︎ and ✘ if the codebase already uses them),
225
+ and ⚠️ and ‼️ for user-facing warnings and errors (or ∆ and ‼︎ to match an existing
226
+ codebase). You may use 📈 for reports and quantitative summaries, ⏰ for timings and
227
+ scheduling, and 🧪 for tests and experiments.
228
+ Apply whatever set you choose consistently.
229
+ Do not put emojis in code comments, where they add distraction without systematic
230
+ meaning.
231
+
232
+ <!-- This document follows common-doc-guidelines.md.
233
+ See github.com/jlevy/practical-prose and review guidelines before editing.
234
+ -->
@@ -2215,3 +2215,7 @@ constraints:
2215
2215
  | **10-50 KB** | Separate document or file storage | Use detail tables for on-demand fetch |
2216
2216
  | **50-900 KB** | **Must** use detail table or file storage | Approaching 1 MiB document limit |
2217
2217
  | **>900 KB** | **Must** use file storage with compression | Brotli compression for HTML/text (3:1 ratio) |
2218
+
2219
+ <!-- This document follows common-doc-guidelines.md.
2220
+ See github.com/jlevy/practical-prose and review guidelines before editing.
2221
+ -->
@@ -941,3 +941,7 @@ const mockAgentId = '12345;agents' as Id<'agents'>; // OK - looks like real Con
941
941
  entirely
942
942
 
943
943
  3. **Test IDs should follow Convex format** - if test ids `'12345;tableName'` pattern
944
+
945
+ <!-- This document follows common-doc-guidelines.md.
946
+ See github.com/jlevy/practical-prose and review guidelines before editing.
947
+ -->
@@ -835,3 +835,7 @@ Avoid `unsafe-eval` and `unsafe-inline`.
835
835
 
836
836
  - [Launchpad #1944468: Electron applications all crash upon launch](https://bugs.launchpad.net/bugs/1944468)
837
837
  — Ubuntu-specific Electron issues
838
+
839
+ <!-- This document follows common-doc-guidelines.md.
840
+ See github.com/jlevy/practical-prose and review guidelines before editing.
841
+ -->
@@ -561,3 +561,7 @@ grep -rn -A2 "} catch {" --include="*.ts" | grep -B1 "throw new"
561
561
  **Problematic patterns**:
562
562
  - `throw new CLIError('Failed to do X')` - Loses WHY it failed
563
563
  - `throw new Error('Operation failed')` - Generic message hides root cause
564
+
565
+ <!-- This document follows common-doc-guidelines.md.
566
+ See github.com/jlevy/practical-prose and review guidelines before editing.
567
+ -->
@@ -35,3 +35,7 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
35
35
  // Usage:
36
36
  const tradeCount = Math.min(trades.length, EXECUTION_STATS_LIMITS.maxTradeCount);
37
37
  ```
38
+
39
+ <!-- This document follows common-doc-guidelines.md.
40
+ See github.com/jlevy/practical-prose and review guidelines before editing.
41
+ -->
@@ -94,3 +94,7 @@ These are language-agnostic rules on comments:
94
94
  and at the top of files.
95
95
 
96
96
  - See language-specific comment rules for more details.
97
+
98
+ <!-- This document follows common-doc-guidelines.md.
99
+ See github.com/jlevy/practical-prose and review guidelines before editing.
100
+ -->
@@ -53,3 +53,7 @@ Therefore:
53
53
  That is useless generalization.
54
54
  Instead, specifically say what you’ve done, e.g., “I’ve added types, including
55
55
  generics, to all the methods in `Foo` and fixed all linter errors.”
56
+
57
+ <!-- This document follows common-doc-guidelines.md.
58
+ See github.com/jlevy/practical-prose and review guidelines before editing.
59
+ -->
@@ -145,3 +145,7 @@ Tests in the project are broken down into three types:
145
145
  Are not run on every commit as they can have costs or side effects or be slow.
146
146
  Requires all API keys.
147
147
  File names end with e2e.test.ts
148
+
149
+ <!-- This document follows common-doc-guidelines.md.
150
+ See github.com/jlevy/practical-prose and review guidelines before editing.
151
+ -->
@@ -25,3 +25,7 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
25
25
 
26
26
  - Test edge cases and boundaries: Include tests for empty inputs, nulls, maximums,
27
27
  minimums, and error conditions—not just happy paths.
28
+
29
+ <!-- This document follows common-doc-guidelines.md.
30
+ See github.com/jlevy/practical-prose and review guidelines before editing.
31
+ -->
@@ -812,3 +812,7 @@ Golden session testing works well alongside other testing strategies:
812
812
  - ScalaTest Matchers: https://www.scalatest.org/user_guide/using_matchers
813
813
 
814
814
  - Concordion (Java): https://concordion.org/
815
+
816
+ <!-- This document follows common-doc-guidelines.md.
817
+ See github.com/jlevy/practical-prose and review guidelines before editing.
818
+ -->
@@ -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** for
94
- versioning and release automation, **publint** for validating package publishability,
95
- and **lefthook** for fast local git hooks.
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**: Strongly Recommended
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 versioning.
733
- It integrates seamlessly with pnpm and GitHub Actions.
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
+ -->