Draft and normalize Rune Weaver patterns through a three-stage process: candidate identification, draft creation, and admission validation.
Use this skill to turn a candidate mechanic, tutorial fragment, or system idea into a Rune Weaver pattern proposal through a three-stage sequential process:
PatternCandidatePatternDraftAdmissionChecklistThis skill does not write directly into the catalog. It produces a draft that is ready for admission review.
Read before starting:
/D:/Rune Weaver/docs/PATTERN-MODEL.md/D:/Rune Weaver/docs/PATTERN-SPEC.md/D:/Rune Weaver/docs/PATTERN-PIPELINE.md/D:/Rune Weaver/docs/PATTERN-AUTHORING-GUIDE.md/D:/Rune Weaver/PATTERN-BACKLOG.md/D:/Rune Weaver/skills/pattern-author/references/pattern-draft-checklist.mdRead when needed:
/D:/Rune Weaver/docs/HOST-INTEGRATION-DOTA2.md/D:/Rune Weaver/docs/SCHEMA.md/D:/Rune Weaver/docs/UI-PATTERN-STRATEGY.md/D:/Rune Weaver/knowledge/dota2-host/api/README.mdparameters, nonGoals, and hostBindings are hard requirements.hostBindings, not in the semantic core.Identify whether the input is a real candidate worth drafting.
PatternCandidate:
proposedId: "effect.dash"
repeatedMechanic: "parameterized displacement"
likelyCategory: "effect"
sourceRefs:
- "references/dota2/docs/moddota_scripting_typescript.md"
backlogFit: "strong" # strong | partial | weak
candidateNotes:
whyMechanic: "Solves a repeatable displacement mechanic, not a single ability skin."
domainSkin: "dash / blink / leap may be different skins over related movement mechanics."
similarPatterns:
- "effect.modifier_applier"
goNoGo: "go" # go | revise | reject
rejectionReason: null
You must reject or revise if any of these fail:
proposedId should follow current project naming, such as:
effect.dashui.resource_barrule.selection_flowWrite the complete pattern draft following current Rune Weaver rules.
PatternDraft:
id: "effect.dash"
category: "effect"
summary: "Provide parameterized displacement with host-bindable movement behavior."
responsibilities:
- "Compute displacement direction and movement envelope."
- "Expose configurable movement parameters for assembly."
nonGoals:
- "Does not implement every ability around the dash."
- "Does not encode domain-specific hero rules."
parameters:
- name: "distance"
type: "number"
required: true
description: "Maximum movement distance."
- name: "duration"
type: "number"
required: true
description: "Movement duration in seconds."
dependencies:
- "input.key_binding (optional upstream trigger)"
validationHints:
- "distance > 0"
- "duration > 0"
hostBindings:
- hostType: "dota2-x-template"
targetArea: "game/scripts/src/rune_weaver/generated/server"
implementationNotes:
- "Generated as RW-owned server file."
examples:
- "Short combat dash"
- "Long traversal dash"
The draft must contain:
idsummaryresponsibilitiesnonGoalsparametershostBindingsnonGoals must be explicit.parameters must express the main variations.hostBindings must use the current host model, not legacy vscripts-first paths.Check whether the draft is ready for catalog admission.
AdmissionChecklist:
draftId: "effect.dash"
overallVerdict: "accept" # accept | revise | reject
checks:
- item: "Is a reusable mechanic rather than a domain skin"
status: "pass"
notes: "Dash remains reusable across multiple movement scenarios."
- item: "Not duplicate of existing catalog entry"
status: "pass"
notes: "No existing pattern fully covers parameterized displacement."
- item: "Has required fields"
status: "pass"
notes: "id, summary, responsibilities, nonGoals, parameters, hostBindings present."
- item: "Host binding matches current host model"
status: "pass"
notes: "Uses rune_weaver generated areas."
revisionNeeded: []
admissionReady: true
reviewerNotes: "Ready for catalog review."
accept: ready for catalog admissionrevise: valid direction but needs fixesreject: not suitable as a patternReject or revise candidates that are:
ui.talent_screenThis skill currently remains a single skill with a three-stage output flow.
That is intentional:
If the project later needs large-scale candidate mining or independent expert review, the flow can be split into:
But not yet.