Dotforge update-practices
Process the practices inbox, evaluate, incorporate into dotforge, and suggest propagation to projects.
install
source · Clone the upstream repo
git clone https://github.com/luiseiman/dotforge
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/luiseiman/dotforge "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/update-practices" ~/.claude/skills/luiseiman-dotforge-update-practices && rm -rf "$T"
manifest:
skills/update-practices/SKILL.mdsource content
Update Practices
3-phase pipeline to keep dotforge up to date with discovered practices.
Practice sources:
- Post-session hook (
) → automaticdetect-claude-changes.sh - Manual capture (
) → user/forge capture - For manual web search: research and then use
with the findings/forge capture
Phase 1: EVALUATE — Process inbox
Read all files in
$DOTFORGE_DIR/practices/inbox/.
For each practice:
Acceptance criteria
- Is it actionable? — Can be translated into a concrete change in dotforge
- Is it new? — Does not duplicate something already in
practices/active/ - Is it generalizable? — Applies to >1 project (not project-specific)
- Does it prevent a specific error? — If yes, annotate
and error description for tracking in metrics.ymlerror_type
Classify
- Accept → move to
, note proposed concrete changepractices/evaluating/ - Reject → remove from inbox with a note explaining why
- Defer → leave in inbox with tag
needs-more-info
Priority
- Security (vulnerabilities, permissions)
- Breaking changes (APIs that changed)
- New features that simplify something existing
- Patterns validated in >1 project
- Minor optimizations
Show summary:
═══ INBOX EVALUATION ═══ {{N}} practices in inbox ✅ ACCEPT: {{title}} → {{proposed change}} ❌ REJECT: {{title}} → {{reason}} ⏸️ DEFER: {{title}} → {{what is missing}} Proceed with accepted? (yes/no/select)
Phase 2: INCORPORATE — Apply changes to dotforge
For each accepted practice in
evaluating/:
Determine impact
| Change type | Affected files | Version bump |
|---|---|---|
| New/modified rule | template/rules/, stacks/*/rules/ | minor |
| New/modified hook | template/hooks/, stacks/*/hooks/ | minor |
| Documentation | docs/*.md | patch |
| Modified template | template/*.tmpl | minor |
| Security fix | any | patch |
Apply
- Show proposed diff to the user and ask for confirmation
- Modify the corresponding dotforge files
- If the practice warrants a new rule: generate a
file in.md
ortemplate/rules/
with properstacks/*/rules/
(eager) orglobs:
+paths:
(lazy) frontmatter. Only create a rule if the practice is a repeatable constraint (not a one-time fix). Use existing rules as format reference.alwaysApply: false - Move practice from
toevaluating/
withactive/
updatedincorporated_in: - Set frontmatter fields:
(oreffectiveness: monitoring
if no error targeted),not-applicable
matching CLAUDE_ERRORS.md typeserror_type - Register in
:$DOTFORGE_DIR/practices/metrics.yml
: description of the error this practice prevents (null if not error-targeted)error_targeted
: syntax | logic | integration | config | security | nullerror_type
: today's dateactivated
: monitoring (or not-applicable)status
: 0recurrence_checks
: 5recurrence_target
- Update
docs/changelog.md - Bump
according to typeVERSION
Phase 3: PROPAGATE — Suggest project updates
- Read
$DOTFORGE_DIR/registry/projects.yml - For each project, show what changed since its last sync:
═══ SUGGESTED PROPAGATION ═══ project-a (last sync: {{date or "never"}}) → {{N}} rules updated project-b (last sync: {{date or "never"}}) → {{N}} rules updated To propagate: run /forge sync in each project.
DO NOT propagate automatically. Inform only.
Phase 4: VERIFY — Recurrence check for active practices
For each entry in
$DOTFORGE_DIR/practices/metrics.yml where status: monitoring:
- Read
from each project in registry where the practice is appliedCLAUDE_ERRORS.md - Check if any error matching
+error_type
description was logged AFTER theerror_targeted
dateactivated - Increment
by 1, updaterecurrence_checks
to todaylast_checked - If error recurred: set
,recurred: truestatus: failed - If
andrecurrence_checks >= recurrence_target
: setrecurred: falsestatus: validated - Update
field in the practice's frontmatter file to matcheffectiveness
Report:
═══ EFFECTIVENESS CHECK ═══ {{practice title}} — {{status}} ({{recurrence_checks}}/{{recurrence_target}} checks) {{if failed: "⚠ Error recurred — practice needs revision"}} {{if validated: "✅ No recurrence after {{N}} checks"}} {{if monitoring: "🔍 {{remaining}} checks remaining"}}
Skip practices with
status: not-applicable or status: validated.
Final report
═══ UPDATE REPORT ═══ Date: {{YYYY-MM-DD}} Evaluated: {{N}} ({{accepted}} accepted, {{rejected}} rejected, {{deferred}} deferred) Incorporated: {{N}} into dotforge Propagation suggested: {{N}} projects ── EFFECTIVENESS ── Monitoring: {{N}} practices Validated: {{N}} (no recurrence after {{target}} checks) Failed: {{N}} (need revision) VERSION: {{old}} → {{new}}