spec-compliance-validator
8
总安装量
8
周安装量
#35675
全站排名
安装命令
npx skills add https://github.com/knowlet/skills --skill spec-compliance-validator
Agent 安装分布
claude-code
6
gemini-cli
5
opencode
5
codex
5
antigravity
4
trae
4
Skill 文档
Spec Compliance Validator Skill
è§¸ç¼ææ©
- æ°è¦æ ¼æªæ¡åµå»ºå¾
- è¦æ ¼ä¿®æ¹å¾çé©è
- é²å ¥éç¼é段åçåè³ªéæª»
- è
multi-model-reviewerå使
æ ¸å¿ä»»å
- çµæ§å®æ´æ§ï¼é©èè¦æ ¼ç®éçµæ§
- æ ¼å¼åè¦æ§ï¼YAML æ ¼å¼è schema é©è
- è¿½æº¯æ§æª¢æ¥ï¼Frame Concerns â Acceptance Criteria â Tests
- è·¨è¦æ ¼ä¸è´æ§ï¼æ¨æºå¼ç¨ãå½åæ £ä¾
é©èé ç®
1. ç®éçµæ§æª¢æ¥
structure_checks:
required_files:
- name: "frame.yaml"
description: "Problem Frame å®ç¾©"
required: true
- name: "acceptance.yaml"
description: "驿¶æ¨æº (æ ¹ç®é)"
required: true
- name: "requirements/*.yaml"
description: "éæ±è¦æ ¼"
required: true
min_count: 1
- name: "machine/machine.yaml"
description: "Machine å®ç¾©"
required: true
- name: "machine/use-case.yaml"
description: "Use Case è¦æ ¼ (CBF)"
required_if: "frame_type == 'CBF'"
- name: "machine/query.yaml"
description: "Query è¦æ ¼ (IDF)"
required_if: "frame_type == 'IDF'"
- name: "controlled-domain/aggregate.yaml"
description: "Aggregate å®ç¾©"
required: true
2. Frame å®ç¾©é©è
frame_checks:
- id: FR1
name: "Frame Type ææ"
rule: "frame_type â {CBF, IDF, RIF, WPF, TF}"
- id: FR2
name: "Frame Concerns 宿´"
rule: "æ¯å concern å¿
é æ satisfied_by é£çµ"
- id: FR3
name: "Phenomena å®ç¾©"
rule: "input/output phenomena å¿
é å®ç¾©"
- id: FR4
name: "Cross-Context èå¥"
rule: "cross_context_dependencies 妿åå¿
é æå°æ ACL"
3. Acceptance Criteria é©è
acceptance_checks:
- id: AC1
name: "æ ¼å¼åè¦"
rule: "ä½¿ç¨ acceptance_criteria æ ¼å¼ (éèç scenarios)"
expected_format: |
acceptance_criteria:
- id: AC1
given: "åç½®æ¢ä»¶"
when: "觸ç¼åä½"
then: "é æçµæ"
trace: "requirements/req.yaml#REQ1"
- id: AC2
name: "追溯æ§å®æ´"
rule: "æ¯å AC å¿
é æ trace é£çµå° requirement"
- id: AC3
name: "Tests Anchor"
rule: "æå®ç¾© tests_anchor æåæ¸¬è©¦æªæ¡"
4. Domain Event æ¨æºé©è
domain_event_checks:
- id: DE1
name: "æ¨æºå¼ç¨"
rule: "domain_events æå
å« includes_standard å standard_ref"
expected: |
domain_events:
includes_standard: true
standard_ref: "../../../../shared/domain-event-standard.yaml"
- id: DE2
name: "Metadata 屬æ§"
rule: "ä½¿ç¨æ¨æºæä¸ééè¤å®ç¾© id, occurredOn"
- id: DE3
name: "å±¬æ§æåº"
rule: "ä¸»è¦ ID æçºç¬¬ä¸å屬æ§"
5. Invariant é©è
invariant_checks:
- id: INV1
name: "Enforced ä½ç½®"
rule: "æ¯å invariant å¿
é æ enforced_in ä½ç½®"
- id: INV2
name: "測試é£çµ"
rule: "invariant ææå°æçé忏¬è©¦"
- id: INV3
name: "å
±äº«æ¨æº"
rule: "å
±å invariants ææ½åå° shared/invariants.yaml"
è¼¸åºæ ¼å¼
é©èå ±å
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â SPEC COMPLIANCE VALIDATION REPORT â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â Spec Directory: docs/specs/create-workflow/ â
â Frame Type: CBF (Command-Behavior Frame) â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â â
â ð STRUCTURE â
â âââ â
frame.yaml EXISTS â
â âââ â
acceptance.yaml EXISTS â
â âââ â
requirements/cbf-req-1-create-workflow.yaml â
â âââ â
machine/machine.yaml EXISTS â
â âââ â
machine/use-case.yaml EXISTS â
â âââ â
controlled-domain/aggregate.yaml EXISTS â
â â
â ð FRAME DEFINITION â
â âââ â
FR1: Frame Type Valid PASS â
â âââ â
FR2: Frame Concerns Complete PASS â
â âââ â
FR3: Phenomena Defined PASS â
â âââ â ï¸ FR4: Cross-Context Identified WARNING â
â ââ AuthorizationContext referenced but no ACL defined â
â â
â ð ACCEPTANCE CRITERIA â
â âââ â
AC1: Format Compliant PASS â
â âââ â
AC2: Traceability Complete PASS â
â âââ â
AC3: Tests Anchor Defined PASS â
â â
â ð¯ DOMAIN EVENTS â
â âââ â
DE1: Standard Reference PASS â
â âââ â
DE2: No Duplicate Metadata PASS â
â âââ â
DE3: Property Ordering PASS â
â â
â ð INVARIANTS â
â âââ â
INV1: Enforced Location PASS â
â âââ â ï¸ INV2: Violation Tests WARNING â
â â ââ 2/5 invariants missing violation tests â
â âââ â
INV3: Shared Standards PASS â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
â TOTAL: 14/16 PASS, 2 WARNINGS, 0 ERRORS â
â STATUS: â ï¸ CONDITIONAL PASS â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
åé¡è©³æ
validation_issues:
- id: SCV-001
check: FR4
severity: warning
location: "frame.yaml#cross_context_dependencies"
message: "AuthorizationContext referenced but no ACL specification found"
current: |
cross_context_dependencies:
- context: AuthorizationContext
dependency_type: query
expected: |
# Should have corresponding file:
cross-context/authorization.yaml
suggestion: |
Run: analyze-frame --add-acl AuthorizationContext
- id: SCV-002
check: INV2
severity: warning
location: "controlled-domain/aggregate.yaml#invariants"
message: "Invariants missing violation tests"
missing_tests:
- invariant: "workflow_name_unique_in_board"
expected_test: "should reject duplicate workflow name"
- invariant: "max_stages_limit"
expected_test: "should reject when exceeding max stages"
èå ¶ä» Skills åä½
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Validation Pipeline â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â â
â âââââââââââââââââââââââââââ â
â â spec-compliance- â âââ æ¬ Skill (第ä¸éé²ç·) â
â â validator â â
â â (è¦æ ¼å®æ´æ§é©è) â â
â âââââââââââââ¬ââââââââââââââ â
â â Spec 宿´ â
â â¼ â
â âââââââââââââââââââââââââââ â
â â code-reviewer â â
â â (ç¨å¼ç¢¼å¯©æ¥) â â
â âââââââââââââ¬ââââââââââââââ â
â â Code 符åè¦æ ¼ â
â â¼ â
â âââââââââââââââââââââââââââ â
â â multi-model-reviewer â â
â â (夿¨¡å交åé©è) â â
â âââââââââââââ¬ââââââââââââââ â
â â ä¸è§é©èéé â
â â¼ â
â â
Ready for PR â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
å½ä»¤è¡å·¥å ·
# é©èå®ä¸è¦æ ¼ç®é
python ~/.claude/skills/spec-compliance-validator/scripts/validate.py \
docs/specs/create-workflow/
# é©èææè¦æ ¼
python ~/.claude/skills/spec-compliance-validator/scripts/validate.py \
docs/specs/ --recursive
# å¿«éæª¢æ¥ (åªæª¢æ¥çµæ§)
python ~/.claude/skills/spec-compliance-validator/scripts/validate.py \
docs/specs/create-workflow/ --quick
# çæä¿®å¾©å»ºè°
python ~/.claude/skills/spec-compliance-validator/scripts/validate.py \
docs/specs/create-workflow/ --fix-suggestions
# JSON 輸åº
python ~/.claude/skills/spec-compliance-validator/scripts/validate.py \
docs/specs/create-workflow/ --format json
æ¨æºåèæªæ¡
å ±ç¨æ¨æºä½ç½®
shared_standards:
domain_events: "shared/domain-event-standard.yaml"
invariants: "shared/invariants-standard.yaml"
metadata: "shared/metadata-standard.yaml"
domain-event-standard.yaml ç¯ä¾
# shared/domain-event-standard.yaml
standard:
name: "Domain Event Standard"
version: "1.0"
base_properties:
- name: id
type: EventId
description: "äºä»¶å¯ä¸èå¥ç¢¼"
- name: occurredOn
type: Instant
description: "äºä»¶ç¼çæé"
- name: metadata
type: EventMetadata
description: "äºä»¶å
è³æ (correlationId, causationId, userId)"
usage:
includes_standard: true
standard_ref: "path/to/domain-event-standard.yaml"
# ä½¿ç¨æ¨æºå¾ï¼åªéå®ç¾©ç¹å®å±¬æ§ï¼base_properties èªåç¹¼æ¿
é ç½®æªæ¡
.spec-validator.yaml
version: "1.0"
structure:
strict: true
required_dirs:
- requirements
- machine
- controlled-domain
format:
acceptance: "acceptance_criteria" # new format
allow_legacy: false # reject old 'scenarios' format
traceability:
require_trace: true
require_tests_anchor: true
standards:
domain_events:
require_standard_ref: true
standard_path: "shared/domain-event-standard.yaml"
invariants:
require_enforced_in: true
require_violation_tests: true
ignore:
paths:
- "**/_draft/**"
- "**/_deprecated/**"