Skip to content

v0.5.0: unified ~/.forge graduation layer (T-207..T-213)#42

Merged
tonmoy007 merged 11 commits into
developfrom
feat/v0.5.0-graduation-layer
Jun 22, 2026
Merged

v0.5.0: unified ~/.forge graduation layer (T-207..T-213)#42
tonmoy007 merged 11 commits into
developfrom
feat/v0.5.0-graduation-layer

Conversation

@tonmoy007

Copy link
Copy Markdown
Owner

Unified ~/.forge graduation 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:graduate skill + CLI. Behavior-preserving for lessons (byte-identical global-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

tonmoy007 and others added 11 commits June 22, 2026 06:10
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
@tonmoy007
tonmoy007 merged commit d4b11a6 into develop Jun 22, 2026
@tonmoy007
tonmoy007 deleted the feat/v0.5.0-graduation-layer branch June 22, 2026 08:58
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