KeiSeiKit-1.0/_blocks/rule-pure-click-contract.md
Parfii-bot 1afb4bafa3 feat(convergence/u1): shared blocks + 3 skill deprecations + /animate gateway
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>
2026-04-23 03:43:40 +08:00

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.
  • AskUserQuestion is 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.