feat(skills): ship system skill updates users can review, merge or rename - #1073
Draft
janburzinski wants to merge 4 commits into
Draft
janburzinski wants to merge 4 commits into
janburzinski wants to merge 4 commits into
Conversation
System skills are now published to a global system_skill_versions registry. Org copies remember the version they are based on, so Notra can ship improvements: untouched copies upgrade automatically, edited copies show an update the user can review, merge or discard in the dashboard. - registry, publish on API boot and hourly cron, backfill + auto-upgrade - upstream status, upgrade (discard/keep/merge) and three-way merge util - dashboard update dialog with pierre diffs, skills addressed by id - system skills can be renamed; they keep following their registry name - public API upgrade and system-skill routes, docs 🤖 Generated with [Claude Code](https://claude.com/claude-code)
…upgrade-merge-plan # Conflicts: # packages/db/migrations/meta/0085_snapshot.json # packages/db/migrations/meta/_journal.json # packages/utils/package.json
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
React Doctor found 1 new issue in 1 file · 1 warning · score 86 / 100 (Great) · 3 fixed · vs Reviewed by React Doctor for commit |
- derive the reset dialog state instead of closing it from an effect - lift the merge text into the update dialog; no parent sync effect - split the update dialog footer, create dialog and editor state hook - reuse the existing unsaved-changes toast hook on the skill page - restore .agents/skills/humanizer/SKILL.md from main - remove the skill, hash, upstream and three-way merge test files 🤖 Generated with [Claude Code](https://claude.com/claude-code)
| definition.description, | ||
| definition.content | ||
| ); | ||
| const latest = await getLatestSystemSkill(tx, definition.name); |
There was a problem hiding this comment.
React Doctor · react-doctor/async-await-in-loop (warning)
This makes the for…of loop slow because each await runs one after another, so collect the independent calls & run them together with await Promise.all(items.map(...))
Fix → Collect the items, then use await Promise.all(items.map(...)) so independent work runs at the same time
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When we improve a built-in skill today, organizations never get it: every org keeps the copy it was seeded with, and users who edited a skill have no way to see or take our changes.
System skills are now published as versions to a global registry. Copies nobody touched move to the new version automatically; edited copies show "Update available" in the dashboard, where the user reviews a diff and either merges our change into theirs or discards their edits. System skills can also be renamed now and still keep receiving updates.
Overview
system_skill_versions(migration0089),skills.system_skill_version_idas the base. Published on API boot and by an hourly dashboard cron; backfill + auto-upgrade for unmodified copies. "Modified" is derived, never stored.@notra/ai/skills): upstream status,upgradeSkill(discard / keep / merge), a line-based three-way merge in@notra/utils, and runtime lookups (humanizer,getSkillByName) that follow the registry name so renames don't break them.@pierre/diffswith a conflict resolver, Edit/Diff selector, list ↔ detail view transition. Skill pages are now addressed by id (/skills/<id>), so a rename doesn't change the URL.upstreamon skill responses (incl.systemName),POST /v1/skills/{name}/upgrade,GET /v1/system-skills[/{name}[/versions/{version}]];PATCHnow allows renaming system skills.Notes
0089_system_skill_versionsis not applied to production. The dev DB already has these tables from an earlier local0085of this branch, sodb:migratethere will need that entry reconciled./skills/<name>now 404; API paths stay name-based.turbo check-types(17/17), knip and oxlint clean; react-doctor findings addressed. Rename flow verified against the dev DB.🤖 Generated with Claude Code
Summary by cubic
System skills now ship as versions in a global registry, so organizations receive improvements to built-in skills instead of keeping the copy they were seeded with forever. Unmodified copies move to the new version automatically; edited copies show an "Update available" action in the dashboard where the user reviews a diff and merges or discards their edits, and system skills can be renamed without losing future updates.
Migration
0089_system_skill_versionsis not applied to production.db:migratethere needs that entry reconciled.Breaking changes
/skills/<name>links 404.Written for commit 05b7b5d. Summary will update on new commits.