Skip to content

feat(changelog): follow the project's course, not the account's grants - #85

Merged
psmyrdek merged 2 commits into
masterfrom
feat/changelog-project-course
Oct 6, 2026
Merged

psmyrdek merged 2 commits into
masterfrom
feat/changelog-project-course

Conversation

@psmyrdek

@psmyrdek psmyrdek commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

10x changelog listed every release the account can access, so in a 10xDevs 3.0 project an account with both courses saw 4.0-only releases that sync can never deliver there. It now follows the project's course, the same one get / sync use.

Scope (highest first): --course <course> → the project's course (.10x-cli.json, else a tool manifest, via inspectProjectCourse) → outside a project, every granted course. Grants only authorize.

Project \ grants 3.0 only 4.0 only both
3.0 project 3.0 releases 403: no access to 10xdevs3 3.0 releases (was: 4.0)
4.0 project 403 4.0 releases 4.0 releases
no project 3.0 4.0 all (= 4.0)
conflicting manifests course_binding_conflict (as get/sync) ← ←
  • Sends ?course=; the header names it (This 10xdevs3 project is on toolkit …), JSON adds course (null outside a project).
  • 403 for the project's course explains which course; an unknown --course is a usage error (exit 2). A course_not_found 404 isn't mistaken for an old backend.
  • sync / get record the newest release of the course they pulled, and clear a stored version when that course has none (a 1.27–1.29 record is account-wide and can name a release the project never got).
  • Regenerated api-types.ts from the companion backend: https://github.com/przeprogramowani/10x-toolkit/pull/117. Merge this first.

Against the current production API (no course param yet) the param is ignored, so behaviour stays as before until the backend deploys.

Test plan

  • bun test — 1017 pass (3 failing Stop-hook tests are the known local bash 3.2 failures); new: binding-file scope, --course override + blank, no-project null, conflict, 403 naming the course, unknown course, stale-record clearing vs. kept on failure
  • generate-types --check against the backend branch's OpenAPI
  • typecheck, lint, build, binary build, validate:cli-skills
  • Live from a 3.0 project: request carries course: "10xdevs3"

🤖 Generated with Claude Code

psmyrdek and others added 2 commits October 6, 2026 12:44
10x changelog resolves its course like get/sync: --course, else the
project's course (.10x-cli.json or a tool manifest; a conflict stops
with course_binding_conflict), else every granted course. It passes
?course= so a 3.0 project never lists 4.0-only releases for an account
holding both, names the course in the header and JSON, and explains a
403 for the project's course. sync/get record the newest release of the
course they pulled, and clear a stored (account-wide) version when that
course has no published release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@psmyrdek
psmyrdek merged commit e42ca18 into master Oct 6, 2026
8 checks passed
mkczarkowski added a commit that referenced this pull request Oct 6, 2026
Takes master's 1.30.0, already on npm; the stale 1.29.1 bump from the
prepare-version bot is dropped and the bot recomputes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mrk1nt2Ky21Thcv4PxrAzm
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