v0.5.0: unified ~/.forge graduation layer (T-207..T-213)#42
Merged
Conversation
chore: release workflow → main (unblock v0.4.1 tag/release)
Release close-out: v0.4.1 released-state progress.md (develop → main)
Plan v0.5.0: generalize the T-022 lesson promoter into one tier-agnostic ~/.forge graduation core, then add skills + workflows tiers behind per-tier gates (breadth for lessons; quality+approval for skills; validates + events.jsonl success-count for workflows), recalled with project-wins. Skill recall = symlink (ADR-009); new /forge:graduate skill; automatic, silent, fail-soft at session-start. T-207..T-213. Re-sequenced ahead of the engine "made real" trio (now >= v0.5.1/v0.6). Ref: T-207..T-213 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGk5zhaDPKsUygpQcDBnCW
…ssons adapter Extract registry, atomic IO, TTL, Tier protocol, and the fail-soft graduate() driver into scripts/_graduation.py. Re-express promote-lessons over it as LessonTier; legacy promote() CLI + global-lessons.yaml output + the 46 existing tests are unchanged (REQ-NF-036). The --register CLI branch still eagerly scaffolds global-lessons.yaml, so the lessons CLI is observably unchanged. Ref: T-207 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGk5zhaDPKsUygpQcDBnCW
…ecall SkillTier over the graduation core: gate on approved + ExpeL weight>0 + use>=2, promote skill dirs to ~/.forge/skills/<slug>/ + global-skills.yaml index, recall by symlink into the plugin skills path with project/plugin-wins (ADR-009). Ref: T-208 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGk5zhaDPKsUygpQcDBnCW
…earch-path recall WorkflowTier over the graduation core: gate on validates-clean AND >=2 successful workflow_run records in .forge/events.jsonl, promote the YAML to ~/.forge/workflows/<name>.yaml + global-workflows.yaml index (projects union, runs authoritative-on-rescan for idempotence), recall via workflow_loader.resolve_workflows (project-wins on name, TTL-filtered). Never-raises, stdlib+PyYAML, atomic writes. Ref: T-209 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc
…ded, fail-soft) Replace the lessons-only subprocess promote in _register_and_promote with an in-process register_project + graduate() over all three tiers (lessons + skills + workflows); graduate()'s per-tier recall lands skill symlinks. FORGE_NO_GRADUATE escape hatch; entire body guarded so an import or tier fault degrades to a silent no-op and never raises into the hook. Behavior-preserving for lessons. Ref: T-210 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc
Replace _graduation.py's import-only stub with a real argparse CLI (default scan, --dry-run preview, list view, --global-dir) that reuses graduate() — no second promotion path; tiers assembled lazily inside main(). New skills/forge-graduate SKILL.md (name: graduate). Adds a lessons.md entry: a `: ` inside an unquoted multi-line SKILL.md description breaks YAML frontmatter and validate-plugin (which only checks plugin.json) won't catch it. Ref: T-211 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc
…P/progress ADR-008 (unified graduation layer: shared core + per-tier gates + project-wins) and ADR-009 (skill recall = symlink over copy, project/plugin-wins, copy fallback), both Accepted. New references/graduation-layer.md documents the three tiers, gates, ~/.forge layout, /forge:graduate surface, project-wins, and 30-day TTL; README links it. progress.md + ROADMAP + decisions updated for v0.5.0 (T-207..T-212 done, T-213 next). Ref: T-212 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc
bump-version 0.5.0 (plugin.json + marketplace.json); CHANGELOG [0.5.0]; progress.md marks v0.5.0 released. Pre-release gate green: 1737 unit tests, validate-plugin 0, full-pipeline 12/12 + traceability. Banner/social evergreen (no refresh). Tag + two-remote mirror + GitHub releases follow. Ref: T-213 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc
…k descriptions Both SKILL.md files had an unquoted `: ` (colon-space) inside a multi-line YAML `description:` — forge-why's "...when a gate fails: a user..." and forge-health-check's "`health.auto_disable_hooks: true`" — which YAML parses as a nested mapping and rejects. validate-plugin.py only validates plugin.json, so these shipped green while the skill loader would choke. Rewritten (em dash / config-flag phrasing); all 34 skill frontmatters now parse. Pre-existing, unrelated to the graduation layer. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc
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.
Unified
~/.forgegraduation layer: generalizes the lesson promoter into one tier-agnostic core (scripts/_graduation.py) + skills and workflows tiers behind per-tier gates, with project-wins recall in every tier. Silent fail-soft graduation at session-start; new/forge:graduateskill + CLI. Behavior-preserving for lessons (byte-identicalglobal-lessons.yaml). ADR-008 + ADR-009.Also fixes 2 pre-existing broken SKILL.md frontmatters (
forge-why,forge-health-check).Pre-release gate green: 1737 unit tests, validate-plugin 0, full-pipeline 12/12 + traceability; all 34 skill frontmatters parse.
🤖 Generated with Claude Code
https://claude.ai/code/session_01UctTinZ6GU892PT77gv2Rc