Pre-unlock wave U1. Non-breaking DRY refactor per CONVERGENCE-PLAN tasks 1/2/4/5/6. Created (5 files): - _blocks/pipeline-5phase-template.md (54 LOC) — shared preamble for ci-scaffold / auth-setup / observability-setup / docs-scaffold / schema-design - _blocks/rule-pure-click-contract.md (42 LOC) — AskUserQuestion contract referenced across 5+ skills - skills/animate/SKILL.md (67 LOC) — gateway router; AskUserQuestion picks scroll / motion / web-effects / ai-animation, hands off to picked skill - skills/competitor-analysis/SKILL.md (35 LOC) — redirect stub to /research --angle=competitors (did not exist; stub documents the preset path per RULE -1 Constructive) - skills/design-inspiration/SKILL.md (38 LOC) — same pattern, --angle=design-refs Deprecation headers added (3 skills): - skills/site-builder/SKILL.md → "use /site-create" (subset) - skills/competitor-analysis/SKILL.md → preset stub - skills/design-inspiration/SKILL.md → preset stub Reference blocks added (5 pipeline skills): - skills/ci-scaffold, auth-setup, observability-setup, docs-scaffold, schema-design — each +4 LOC pointer to pipeline-5phase-template.md - skills/research — +18 LOC --angle presets table LOC saved via shared blocks: ~96 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.7 KiB
1.7 KiB
Pure-Click Contract
Shared rule block — referenced by pipeline and multi-phase skills (ci-scaffold, auth-setup, observability-setup, docs-scaffold, schema-design, self-audit, sleep-on-it, and others).
Rule
Every decision in the skill is made via AskUserQuestion (option-picker UI,
NOT free-text). The ONLY permitted typed input is intake — a one-line or
one-paragraph description — which is immediately classified into options on
the next phase.
What counts as "intake" (typed input allowed)
- Phase 1 one-line description of the target repo / app / service.
- Phase 2 entity list (for
/schema-design) — typed list of table names. - Free-text reason for a user-declared bypass or override.
What MUST be a click (AskUserQuestion)
- Every binary yes/no decision.
- Every "pick one of N" decision (platform, ORM, motion-tier, auth-flow).
- Every "pick subset of N" decision (sections, providers, dashboards).
- Every approve / iterate / switch / abort prompt.
- Every per-finding fix / skip / defer prompt in verify/audit phases.
Why
- Click-driven flows are replayable and auditable — the option taken is in the transcript, not inferred from free-form text.
- Options constrain the decision space to what the skill actually handles, preventing silent scope creep.
AskUserQuestionis the tool the harness renders as a proper picker UI; free-text prompts degrade to plain chat.
Non-compliance
If a skill prompts the user for a value that IS in a closed enum (e.g.
"which framework?") but does NOT use AskUserQuestion, that is a
contract violation. Fix by replacing the prompt with an AskUserQuestion
call whose options array lists the enum values.