Skip to content

docs(release): add release system plan - #39

Merged
codewizdave merged 93 commits into
stagingfrom
docs/release-system-plan
Aug 3, 2026
Merged

docs(release): add release system plan#39
codewizdave merged 93 commits into
stagingfrom
docs/release-system-plan

Conversation

@martyy-code

Copy link
Copy Markdown
Contributor

Summary

Adds a written plan for the release system of @deessejs/errors. The plan is based on a Phase 0 inventory of the current pipeline and replaces the previously undocumented process with a concrete, reviewable spec.

What is in this PR

  • docs/internal/engineering/plans/release-system.md — the plan itself

What is NOT in this PR

  • No code changes
  • No workflow changes
  • No package.json changes
  • No tag or branch changes

The plan documents the current pipeline (Changesets + label version bump on PRs to main + cherry-pick releases from staging) and proposes a clearer rewrite of the GitHub Actions workflow plus a CI lint for changesets on PRs to staging. It also flags accidental drift between CLAUDE.md / CONTRIBUTING.md and the actual workflow.

Open questions

All four open questions are resolved in the document:

  1. Staging long-lived — kept.
  2. Nightlies — out of scope of this plan.
  3. Release engineer — single point of failure accepted for now.
  4. Hotfix path — release/hotfix-<slug> from main.

Next steps

Once this plan is merged into staging, the implementation phases can begin (Phase 0 inventory done, Phase 1 to Phase 6 in the plan body).

Checklist

  • Plan written in English (project convention)
  • No code changes
  • Branch targets staging per the project's release flow
  • Plan references the current workflow (release.yml, .changeset/config.json) truthfully

🤖 Generated with Claude Code

martyy-code and others added 30 commits June 1, 2026 11:59
- Update version to 1.0.0
- Add CHANGELOG.md with release notes
- Consume changeset for v1.0.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Uses softprops/action-gh-release to create release with CHANGELOG notes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Create initial documentation structure with 13 MDX pages covering:
- Getting started and installation
- Error factory and instance concepts
- Exception chaining with from() and causes()
- Single and multiple inheritance
- Type checking with is()
- Message templates
- API reference
- Practical recipes

Structure managed via meta.json with navigation sections.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Specify build command, output directory, and install command
to work with Vercel using repo root as root directory.

🤖 Generated with [Claude Code](https://claude.ai/claude-code)
🤖 Generated with [Claude Code](https://claude.ai/claude-code)
Use title="filename" format for code block headers

🤖 Generated with [Claude Code](https://claude.ai/claude-code)
docs: first draft of documentation site
Install @vercel/analytics and add Analytics component to layout

🤖 Generated with [Claude Code](https://claude.ai/claude-code)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Hero section with blueprint grid background
- Navigation bar with logo and GitHub link
- Code showcase with file header
- Features grid (4 main + 3 secondary + CTA)
- Before/after comparison section
- Install section with npm commands
- Footer with branding
- Uses Inter font (Geist pending Next.js support)
- rounded-none throughout per design system

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace all hardcoded Tailwind colors (gray-950, bg-white, etc.) with
FumaDocs theme CSS variables (bg-fd-primary, text-fd-foreground, etc.)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Use shiki for syntax highlighting on code blocks with dual
light/dark theme support (github-light, github-dark).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Shiki now removes inline background-color from pre element so
it inherits from theme CSS variables (bg-fd-background).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Uses codeToHtml from shiki directly
- Adds terminal-style header with colored dots
- title is optional
- removes old highlight.ts

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
martyy-code and others added 26 commits June 5, 2026 10:46
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Configure blog collection in source.config.ts
- Create blog listing page with post grid
- Create individual blog post page with Article JSON-LD
- Add share button component
- Create RSS feed at /blog/rss.xml
- Add blog OG images at /og/blog/[slug]
- Update sitemap to include blog routes
- Add RSS link to layout head
- Write first blog post: "Getting Started with @deessejs/errors"
- Install feed package for RSS generation

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add Blog link to the navigation bar using Fumadocs links prop
with BookIcon and nested-url active mode.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Only show icon-type links (like GitHub) in the docs sidebar.
Text links like Blog are shown in navbar only.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add Docs link with FileTextIcon alongside Blog link in navbar.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add ExternalLinkIcon with external indicator for deessejs.com.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
feat: add blog system with SEO optimization
Drop the Flue agent-harness runtime that was wired up for GitHub issue
triage — the project no longer needs a self-hosted agent workflow.

Removed:
- .flue/                  (Hono server + triage workflow)
- flue.config.ts          (Flue build config)
- .github/workflows/issue-triage.yml (CI trigger)
- .agents/skills/triage/  (Flue-backed skill; Claude Code triage skill kept)
- .claude/agents/flue-expert/  (Claude Code agent)
- .claude/agent-memory/flue-expert/  (agent memory)
- temp/flue-triage-plan.md

Deps: dropped @flue/cli, @flue/runtime, hono, valibot (hono and valibot
were only used by the Flue workflow).

Cleanup:
- .claude/skills/triage/SKILL.md: sign-off attribution updated
  from 'Flue Agent + MiniMax M2.7' to 'Tech Lead Agent'.
- DESIGN.md: removed Flue Framework design-inspiration references.

Co-Authored-By: Claude <noreply@anthropic.com>
Adds prettier@^3.9.5 as a direct devDep and reformats the project with the
existing .prettierrc config (semi, singleQuote, tabWidth 2, trailingComma es5,
printWidth 100). Adds temp/ to .prettierignore so reference repos and temp
docs are not checked.

This is the natural consequence of adding 'pnpm format:check' to the lint
CI workflow — without a clean baseline the new step would fail on every
PR.

Co-Authored-By: Claude <noreply@anthropic.com>
- Bump packageManager from pnpm@10.30.3 to pnpm@10.34.5 — patches
  CVE-2026-50016 (CVSS 8.8, symlink path-traversal bypassing --ignore-scripts)
- Add prettier@^3.9.5 as a direct devDep (was previously transitive from
  @changesets/cli, locking us to an old 2.8.8)
- Add lint-staged@^17.0.0
- apps/web: add 'lint' script (was previously skipped by turbo lint)
- apps/web: declare eslint + @eslint/js as devDeps (future-proofs against
  shamefully-hoist removal)

Co-Authored-By: Claude <noreply@anthropic.com>
- release.yml: enable npm Trusted Publishing (OIDC) via id-token: write
  permission; remove the Configure npm / NPM_TOKEN step. Manual action
  required on npmjs.com before the next release — register a Trusted
  Publisher for workflow release.yml.
- release.yml: limit release trigger to PRs targeting main; tighten 'if'
  to require base.ref == 'main'; checkout main explicitly (was detached
  PR ref, which would have failed on 'git push HEAD').
- lint.yml: add 'pnpm format:check' step.

Co-Authored-By: Claude <noreply@anthropic.com>
- Replace .husky/pre-commit body with 'pnpm exec lint-staged'.
- Drop the legacy '#!/usr/bin/env sh' + '. "$(dirname "$0")/_/husky.sh"'
  shim lines for Husky v10 readiness.
- Add .lintstagedrc.json (eslint --fix + prettier --write on code files;
  prettier --write on docs/config).
- Drop shamefully-hoist=true and legacy-peer-deps=true from .npmrc.
  apps/web (Next.js) builds verified clean without them.
- Extend .prettierignore with temp/.

Known follow-up: lint-staged config needs per-workspace eslint invocations
or a root eslint.config.js (currently fails for some file types because
ESLint 9 flat-config requires the config in the cwd). Tracked separately.

Co-Authored-By: Claude <noreply@anthropic.com>
CI fail fix. The apps/web source.config.ts (and the generated .source/source.config.mjs
loaded by 'next typegen') imports 'zod' directly, but zod was previously
only resolvable via shamefully-hoist=true, which made pnpm hoist transitive
deps to the root node_modules.

Removing shamefully-hoist=true (commit 929d862) exposed this hidden dep:
on a fresh install (CI), pnpm's strict isolation hides zod from apps/web
because it's only declared as a transitive dep of fumadocs-mdx.

Local 'pnpm install' had succeeded because the local node_modules already
contained hoisted zod from the pre-Tier 2 state.

Add zod@^4.4.3 to apps/web's dependencies to make the import explicit.

Co-Authored-By: Claude <noreply@anthropic.com>
Two follow-up issues surfaced by CI on the Tier 1+2 hardening PR:

1. apps/web/src/components/code-block.tsx imports 'shiki' directly, but
   shiki was only resolvable via shamefully-hoist=true (Tier 2 #17 removed
   that flag). Same pattern as the earlier zod fix (commit 65a4264).
   Add shiki@^4.3.1 as an explicit dep of apps/web.

2. pnpm format:check in CI was failing on:
   - .claude/** (agent tooling metadata, not project source)
   - apps/web/.source/** (generated by fumadocs-mdx)
   - apps/web/next-env.d.ts (generated by Next.js)
   - docs/learnings/** (internal learning docs, formatted manually)
   Extend .prettierignore to exclude these paths.

Co-Authored-By: Claude <noreply@anthropic.com>
…ening

chore: Tier 1+2 toolchain hardening (CVE-2026-50016, Node 22, lint-staged, Trusted Publishing)
Proposes a documented release system plan for @deessejs/errors. The plan
is grounded in a Phase 0 inventory of the current pipeline (Changesets +
'version bump' label + cherry-pick PRs from staging to main) and lists
six implementation phases to harden the workflow.

No code, no workflow changes, no tag changes in this commit.
@codewizdave
codewizdave merged commit acacf12 into staging Aug 3, 2026
4 checks passed
martyy-code added a commit that referenced this pull request Aug 4, 2026
…stacked-PR learnings

Three process docs under docs/internal/engineering/process/, each
tuned to a persona:

- implementing-an-issue.md  — dev's playbook (read issue, branch, code,
  changesets, push, PR). Companion for anyone picking up an issue.
- releasing-a-new-version.md — release engineer's playbook (build the
  release branch, cherry-pick, push, watch the workflow, verify
  artifacts). Mirrors the conventions we hardened in PRs #39-47.
- pr-authoring.md           — standards for the body of a PR (six
  canonical sections, mandatory code sample when public API
  changes, before/after default, after-only when purely additive).
  Enforces what PR #50 demonstrated: documented the .addNote()
  worked-example as the in-doc template.

Also adds docs/learnings/github/stacked-pr/README.md, notes captured
during PR #39-43 setup around how stacked PRs work in GitHub and how
they apply to a release branch.

No code, no workflow changes. Documentation only.
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