Skip to content

chore: release get-tbd v0.8.1 - #263

Merged
jlevy merged 2 commits into
mainfrom
claude/patch-release-readiness-4cq6ec
Aug 26, 2026
Merged

chore: release get-tbd v0.8.1#263
jlevy merged 2 commits into
mainfrom
claude/patch-release-readiness-4cq6ec

Conversation

@jlevy

@jlevy jlevy commented Aug 26, 2026

Copy link
Copy Markdown
Owner

Patch release covering the guideline work merged since v0.8.0.
No format change (repositories stay on f08) and no migration step.

The ## 0.8.1 CHANGELOG section is the release body — release.yml extracts it at tag
time. Verified: extract-changelog.ts 0.8.1 returns 104 lines, not the
Release vX.Y.Z fallback.

Version choice

Patch. The payload is bundled guidance content (12 new guideline documents, one new
shortcut) plus the routing change that decides which of them an agent loads. No new CLI
capability and no behavior users program against, so patch per
publishing.md §Step 2.

Release gates

Gate Result
pnpm test 2446 passed, 163 files
pnpm lint:check pass (typecheck, eslint, eslint-contract, action-pins)
pnpm format:check pass
pnpm release:verify pass (build + publint "All good!")
pnpm qa:upgrade-package 4/4 packed upgrade proofs pass
pnpm check:package-age 0 violations, 31 pins
main CI on eca14a9e conclusion=success

Supply chain (§Step 3)

pnpm-lock.yaml is byte-identical to v0.8.0
(79c2ed0861420defbd5214fab007d19b5087c68949f2ea23a7767a5a74598055), so the resolved
dependency tree is unchanged and there is nothing to classify.

pnpm audit --prod reports no runtime advisories. The 32 open advisories are all
dev-only, reached through vitest/vite and other build tooling not shipped to users;
tracked in tbd-ujyy, tbd-gx3a, tbd-o2xt rather than blocking.

The only manifest change since v0.8.0 is a root package.json script addition
(check-action-pins.mjs in lint:check) — no dependency edit.

Downstream proof (§Step 4)

This release changes what setup --auto generates, so the packed candidate was
exercised in a first-party downstream checkout.

  • Candidate: get-tbd-0.8.1.tgz, packed with TBD_VERSION_OVERRIDE=0.8.1; installed
    binary reports 0.8.1.
  • Downstream: jlevy/tryscript @ 1ffbe8f, starting at tbd 0.7.1 (f08).
  • tbd setup --auto → expected diff only: version stamps 0.7.10.8.1, the 12 new
    guidelines and review-code-rust registered in docs_cache, regenerated agent
    surfaces, refreshed ensure-gh-cli.sh.
  • Idempotent: repeated setup --auto leaves all four generated surfaces
    byte-identical (sha256sum -c OK).
  • Downstream pnpm ci:quality, pnpm build, and pnpm test all pass on the upgraded
    tree.

Note: tbd_upgrades appends one entry per setup --auto run, so three runs left three
0.8.1 entries. Pre-existing behavior — no code in this release touches that path.

A defect found during validation, fixed on this train

The first CI run failed Coverage & Lint — 6 tests/cli-sync.tryscript.md cases, while
all four Test jobs passed. (pnpm test runs vitest only; the tryscript suites run only
under test:coverage — see tbd-h0mu.)

Root cause, not a flake: classifySyncError matched HTTP status codes with bare 403,
401, and 5\d\d patterns that hit digits anywhere in the message, including the
repository path. The run's temp directory was /tmp/tryscript-05895p, and 5\d\d
matched the 589 inside it, so a missing-remote push failure classified as an HTTP 5xx
and printed the transient-failure advice instead of the unknown-failure advice.

/5\d\d/.test('/tmp/tryscript-05895p')   // true  — matched "589"

This is a real bug in v0.8.0, not a test artifact. errorType === 'permanent' calls
handlePermanentFailure(), which auto-saves to the outbox and reports the push as
policy-blocked — so a repository path containing 403 changed what tbd sync did.

Fixed in e4fdf0d, red-green: the two new assertions failed against the old classifier
before the change. Status codes now require a boundary on both sides, asymmetric by
design (a leading . means the digits belong to a longer number; a trailing . is
sentence punctuation). Added as a genuine Fixes entry in the CHANGELOG.

publishing.md §Step 0 prescribes exactly this: fix the defect on the same train and
restart candidate validation, rather than publish around it.

Re-validated after the fix: pnpm test 2449 passed · full tryscript suite 1101
passed, 0 failed (CI's failing run was 1095/6) · pnpm lint:check · pnpm format:check
· pnpm release:verify · pnpm qa:upgrade-package 4/4.

Notes on what is deliberately not in the release notes

The bin.ts/cli.ts move from process.exit() to process.exitCode with an explicit
stream-error policy. I tried to reproduce a user-visible difference against published
0.8.0 (failing command with bulk stdout piped to an early-closing reader; the same with
2>&1; bulk stderr with a closed stderr pipe) and exit codes and output were identical
in every case
. Per release-notes-guidelines, a defect I cannot show shipped is not a
Fixes entry, so it is omitted rather than claimed.

Not blocking, but worth knowing

  • tbd-s4jk is the only open P0 bead and is stale — the trackingRefspec fix it
    describes landed in 191b584e, before v0.8.0. It should be closed.
  • chore(deps): bump the actions group across 1 directory with 5 updates #262 (dependabot actions bump) is green but deliberately left out of this
    train: it edits release.yml, and this is not the moment to change the publishing
    workflow. Merge after the tag.

After merge

Main CI must reach conclusion=success on the merge commit itself before v0.8.1 is
tagged. The tag push is what publishes — a merged-but-untagged release ships nothing.


🤖 Generated with Claude Code

https://claude.ai/code/session_013eaEeT9CYT5TDyNGAw95t9

Patch release covering the guideline work merged since v0.8.0: the Rust
guideline family, four language-neutral cross-cutting documents, and the
guideline routing change that shrinks the always-read core from nine
documents to one.

No format change (repositories stay on f08) and no migration step.
Lockfile is byte-identical to v0.8.0.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013eaEeT9CYT5TDyNGAw95t9
@deepsource-io

deepsource-io Bot commented Aug 26, 2026

Copy link
Copy Markdown

DeepSource Code Review

We reviewed changes in eca14a9...e4fdf0d on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Code Review Summary

Analyzer Status Updated (UTC) Details
Secrets Aug 26, 2026 6:19a.m. Review ↗

Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown

Coverage Report for packages/tbd

Status Category Percentage Covered / Total
🔵 Lines 46.07% 7656 / 16615
🔵 Statements 46.16% 7839 / 16982
🔵 Functions 51.05% 1239 / 2427
🔵 Branches 44.48% 4609 / 10361
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
packages/tbd/src/cli/lib/errors.ts 94.44% 94.73% 90.9% 94.28% 108-109
Generated in workflow #1395 for commit e4fdf0d by the Vitest Coverage Report Action

classifySyncError matched HTTP status codes with bare patterns (403, 401,
5\d\d) that hit digits anywhere in the message, including the repository
path. A missing-remote push failure under /tmp/tryscript-05895p classified
as a 5xx server error because 5\d\d matched the 589 in the directory name;
the identical failure elsewhere classified as unknown.

This is not cosmetic. A permanent classification auto-saves to the outbox
and reports the push as policy-blocked, so a path containing 403 changed
what sync did, not just what it printed.

Status codes are now matched only where git reports one (HTTP 500,
returned error: 403, status=401), requiring a boundary on both sides. The
two sides differ deliberately: a leading '.' means the digits belong to a
longer number, while a trailing '.' is sentence punctuation.

Found by release validation for v0.8.1: tests/cli-sync.tryscript.md
classified its push failure differently between runs on the temp directory
name alone.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013eaEeT9CYT5TDyNGAw95t9
@jlevy
jlevy marked this pull request as ready for review August 26, 2026 06:28
@jlevy
jlevy merged commit 2c2beff into main Aug 26, 2026
7 checks passed
@jlevy
jlevy deleted the claude/patch-release-readiness-4cq6ec branch August 26, 2026 06:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants