@hivehub/rulebook 4.1.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/continue.md +33 -33
- package/.claude/commands/ralph-config.md +112 -112
- package/.claude/commands/ralph-history.md +110 -110
- package/.claude/commands/ralph-init.md +72 -72
- package/.claude/commands/ralph-pause-resume.md +105 -105
- package/.claude/commands/ralph-run.md +101 -101
- package/.claude/commands/ralph-status.md +76 -76
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +67 -67
- package/.claude/commands/rulebook-task-archive.md +70 -70
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +137 -1
- package/dist/cli/commands.d.ts +18 -6
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +727 -406
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/claude-mcp.d.ts +4 -2
- package/dist/core/claude-mcp.d.ts.map +1 -1
- package/dist/core/claude-mcp.js +14 -9
- package/dist/core/claude-mcp.js.map +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +13 -0
- package/dist/core/generator.js.map +1 -1
- package/dist/core/indexer/background-indexer.d.ts.map +1 -1
- package/dist/core/indexer/background-indexer.js +26 -5
- package/dist/core/indexer/background-indexer.js.map +1 -1
- package/dist/core/indexer/file-parser.d.ts.map +1 -1
- package/dist/core/indexer/file-parser.js +1 -1
- package/dist/core/indexer/file-parser.js.map +1 -1
- package/dist/core/indexer/indexer-types.d.ts.map +1 -1
- package/dist/core/workspace/legacy-migrator.d.ts +29 -0
- package/dist/core/workspace/legacy-migrator.d.ts.map +1 -0
- package/dist/core/workspace/legacy-migrator.js +142 -0
- package/dist/core/workspace/legacy-migrator.js.map +1 -0
- package/dist/core/workspace/project-worker.d.ts +49 -0
- package/dist/core/workspace/project-worker.d.ts.map +1 -0
- package/dist/core/workspace/project-worker.js +108 -0
- package/dist/core/workspace/project-worker.js.map +1 -0
- package/dist/core/workspace/workspace-manager.d.ts +90 -0
- package/dist/core/workspace/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace/workspace-manager.js +347 -0
- package/dist/core/workspace/workspace-manager.js.map +1 -0
- package/dist/core/workspace/workspace-types.d.ts +37 -0
- package/dist/core/workspace/workspace-types.d.ts.map +1 -0
- package/dist/core/workspace/workspace-types.js +8 -0
- package/dist/core/workspace/workspace-types.js.map +1 -0
- package/dist/index.js +43 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +367 -100
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/memory-manager.js +2 -2
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-search.js.map +1 -1
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +1 -1
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -21
- package/templates/agents/implementer.md +35 -35
- package/templates/agents/researcher.md +34 -34
- package/templates/agents/team-lead.md +34 -34
- package/templates/agents/tester.md +42 -42
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/OPENCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/core/AGENTS_LEAN.md +25 -25
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +288 -288
- package/templates/core/DAG.md +304 -304
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RALPH.md +471 -471
- package/templates/core/RULEBOOK.md +1935 -1935
- package/templates/core/WORKSPACE.md +69 -0
- package/templates/frameworks/ANGULAR.md +36 -36
- package/templates/frameworks/DJANGO.md +83 -83
- package/templates/frameworks/ELECTRON.md +147 -147
- package/templates/frameworks/FLASK.md +38 -38
- package/templates/frameworks/FLUTTER.md +55 -55
- package/templates/frameworks/JQUERY.md +32 -32
- package/templates/frameworks/LARAVEL.md +38 -38
- package/templates/frameworks/NESTJS.md +43 -43
- package/templates/frameworks/NEXTJS.md +127 -127
- package/templates/frameworks/NUXT.md +40 -40
- package/templates/frameworks/RAILS.md +66 -66
- package/templates/frameworks/REACT.md +38 -38
- package/templates/frameworks/REACT_NATIVE.md +47 -47
- package/templates/frameworks/SPRING.md +39 -39
- package/templates/frameworks/SYMFONY.md +36 -36
- package/templates/frameworks/VUE.md +36 -36
- package/templates/frameworks/ZEND.md +35 -35
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1157 -1157
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT.md +37 -37
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/CURSOR.md +43 -43
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/JETBRAINS_AI.md +35 -35
- package/templates/ides/REPLIT.md +36 -36
- package/templates/ides/TABNINE.md +29 -29
- package/templates/ides/VSCODE.md +40 -40
- package/templates/ides/WINDSURF.md +36 -36
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/ides/ZED.md +32 -32
- package/templates/ides/cursor-mdc/go.mdc +24 -24
- package/templates/ides/cursor-mdc/python.mdc +24 -24
- package/templates/ides/cursor-mdc/quality.mdc +25 -25
- package/templates/ides/cursor-mdc/ralph.mdc +39 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
- package/templates/ides/cursor-mdc/rust.mdc +24 -24
- package/templates/ides/cursor-mdc/typescript.mdc +25 -25
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +156 -156
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/ralph/ralph-history.bat +4 -4
- package/templates/ralph/ralph-history.sh +5 -5
- package/templates/ralph/ralph-init.bat +5 -5
- package/templates/ralph/ralph-init.sh +5 -5
- package/templates/ralph/ralph-pause.bat +5 -5
- package/templates/ralph/ralph-pause.sh +5 -5
- package/templates/ralph/ralph-run.bat +5 -5
- package/templates/ralph/ralph-run.sh +5 -5
- package/templates/ralph/ralph-status.bat +4 -4
- package/templates/ralph/ralph-status.sh +5 -5
- package/templates/services/AZURE_BLOB.md +184 -184
- package/templates/services/CASSANDRA.md +239 -239
- package/templates/services/DATADOG.md +26 -26
- package/templates/services/DOCKER.md +124 -124
- package/templates/services/DOCKER_COMPOSE.md +168 -168
- package/templates/services/DYNAMODB.md +308 -308
- package/templates/services/ELASTICSEARCH.md +347 -347
- package/templates/services/GCS.md +178 -178
- package/templates/services/HELM.md +194 -194
- package/templates/services/INFLUXDB.md +265 -265
- package/templates/services/KAFKA.md +341 -341
- package/templates/services/KUBERNETES.md +208 -208
- package/templates/services/MARIADB.md +183 -183
- package/templates/services/MEMCACHED.md +242 -242
- package/templates/services/MINIO.md +201 -201
- package/templates/services/MONGODB.md +268 -268
- package/templates/services/MYSQL.md +358 -358
- package/templates/services/NEO4J.md +247 -247
- package/templates/services/OPENTELEMETRY.md +25 -25
- package/templates/services/ORACLE.md +290 -290
- package/templates/services/PINO.md +24 -24
- package/templates/services/POSTGRESQL.md +326 -326
- package/templates/services/PROMETHEUS.md +33 -33
- package/templates/services/RABBITMQ.md +286 -286
- package/templates/services/REDIS.md +292 -292
- package/templates/services/S3.md +298 -298
- package/templates/services/SENTRY.md +23 -23
- package/templates/services/SQLITE.md +294 -294
- package/templates/services/SQLSERVER.md +294 -294
- package/templates/services/WINSTON.md +30 -30
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/cli/opencode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/frameworks/angular/SKILL.md +46 -46
- package/templates/skills/frameworks/django/SKILL.md +93 -93
- package/templates/skills/frameworks/electron/SKILL.md +157 -157
- package/templates/skills/frameworks/flask/SKILL.md +48 -48
- package/templates/skills/frameworks/flutter/SKILL.md +65 -65
- package/templates/skills/frameworks/jquery/SKILL.md +42 -42
- package/templates/skills/frameworks/laravel/SKILL.md +48 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
- package/templates/skills/frameworks/rails/SKILL.md +76 -76
- package/templates/skills/frameworks/react/SKILL.md +48 -48
- package/templates/skills/frameworks/react-native/SKILL.md +57 -57
- package/templates/skills/frameworks/spring/SKILL.md +49 -49
- package/templates/skills/frameworks/symfony/SKILL.md +46 -46
- package/templates/skills/frameworks/vue/SKILL.md +46 -46
- package/templates/skills/frameworks/zend/SKILL.md +45 -45
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/skills/services/azure-blob/SKILL.md +194 -194
- package/templates/skills/services/cassandra/SKILL.md +249 -249
- package/templates/skills/services/dynamodb/SKILL.md +318 -318
- package/templates/skills/services/elasticsearch/SKILL.md +357 -357
- package/templates/skills/services/gcs/SKILL.md +188 -188
- package/templates/skills/services/influxdb/SKILL.md +275 -275
- package/templates/skills/services/kafka/SKILL.md +351 -351
- package/templates/skills/services/mariadb/SKILL.md +193 -193
- package/templates/skills/services/memcached/SKILL.md +252 -252
- package/templates/skills/services/minio/SKILL.md +211 -211
- package/templates/skills/services/mongodb/SKILL.md +278 -278
- package/templates/skills/services/mysql/SKILL.md +368 -368
- package/templates/skills/services/neo4j/SKILL.md +257 -257
- package/templates/skills/services/oracle/SKILL.md +300 -300
- package/templates/skills/services/postgresql/SKILL.md +336 -336
- package/templates/skills/services/rabbitmq/SKILL.md +296 -296
- package/templates/skills/services/redis/SKILL.md +302 -302
- package/templates/skills/services/s3/SKILL.md +308 -308
- package/templates/skills/services/sqlite/SKILL.md +304 -304
- package/templates/skills/services/sqlserver/SKILL.md +304 -304
- package/templates/skills/workflows/ralph/SKILL.md +309 -309
- package/templates/skills/workflows/ralph/install.sh +87 -87
- package/templates/skills/workflows/ralph/manifest.json +158 -158
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Lisp"
|
|
3
|
-
description: "Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow)."
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
category: "languages"
|
|
6
|
-
author: "Rulebook"
|
|
7
|
-
tags: ["languages", "language"]
|
|
8
|
-
dependencies: []
|
|
9
|
-
conflicts: []
|
|
10
|
-
---
|
|
11
|
-
<!-- LISP:START -->
|
|
12
|
-
# Common Lisp Project Rules
|
|
13
|
-
|
|
14
|
-
## Agent Automation Commands
|
|
15
|
-
|
|
16
|
-
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Complete quality check sequence:
|
|
20
|
-
sbcl --eval '(ql:quickload :sblint)' --eval '(sblint:run-lint "src/")' # Linting
|
|
21
|
-
sbcl --load tests/run-tests.lisp # All tests
|
|
22
|
-
sbcl --eval '(asdf:make :your-system)' # Build with ASDF
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Common Lisp Configuration
|
|
26
|
-
|
|
27
|
-
**CRITICAL**: Use SBCL 2.3+ or CCL with ASDF3 and modern tooling.
|
|
28
|
-
|
|
29
|
-
- **Implementation**: SBCL 2.3+ (recommended) or CCL
|
|
30
|
-
- **Build System**: ASDF3
|
|
31
|
-
- **Testing**: FiveAM or Prove
|
|
32
|
-
- **Linter**: sblint
|
|
33
|
-
|
|
34
|
-
### System Definition (your-system.asd)
|
|
35
|
-
|
|
36
|
-
```lisp
|
|
37
|
-
(defsystem "your-system"
|
|
38
|
-
:description "Your system description"
|
|
39
|
-
:version "0.1.0"
|
|
40
|
-
:author "Your Name <you@example.com>"
|
|
41
|
-
:license "MIT"
|
|
42
|
-
:depends-on (:alexandria
|
|
43
|
-
:cl-ppcre
|
|
44
|
-
:str)
|
|
45
|
-
:components ((:module "src"
|
|
46
|
-
:components
|
|
47
|
-
((:file "package")
|
|
48
|
-
(:file "main" :depends-on ("package")))))
|
|
49
|
-
:in-order-to ((test-op (test-op "your-system/tests"))))
|
|
50
|
-
|
|
51
|
-
(defsystem "your-system/tests"
|
|
52
|
-
:depends-on ("your-system"
|
|
53
|
-
"fiveam")
|
|
54
|
-
:components ((:module "tests"
|
|
55
|
-
:components
|
|
56
|
-
((:file "package")
|
|
57
|
-
(:file "main-tests" :depends-on ("package")))))
|
|
58
|
-
:perform (test-op (o c) (symbol-call :fiveam :run! :your-system-tests)))
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Code Quality Standards
|
|
62
|
-
|
|
63
|
-
### Mandatory Quality Checks
|
|
64
|
-
|
|
65
|
-
**IMPORTANT**: These commands MUST match your GitHub Actions workflows!
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
# Pre-Commit Checklist (MUST match .github/workflows/*.yml)
|
|
69
|
-
|
|
70
|
-
# 1. Lint (matches workflow)
|
|
71
|
-
sblint your-system.asd
|
|
72
|
-
|
|
73
|
-
# 2. Load system (check for errors - matches workflow)
|
|
74
|
-
sbcl --non-interactive --load your-system.asd \
|
|
75
|
-
--eval '(ql:quickload :your-system)' \
|
|
76
|
-
--eval '(quit)'
|
|
77
|
-
|
|
78
|
-
# 3. Run tests (matches workflow)
|
|
79
|
-
sbcl --non-interactive \
|
|
80
|
-
--eval '(ql:quickload :your-system/tests)' \
|
|
81
|
-
--eval '(asdf:test-system :your-system)' \
|
|
82
|
-
--eval '(quit)'
|
|
83
|
-
|
|
84
|
-
# If ANY fails: ❌ DO NOT COMMIT - Fix first!
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Testing Example (FiveAM)
|
|
88
|
-
|
|
89
|
-
```lisp
|
|
90
|
-
(in-package :your-system/tests)
|
|
91
|
-
|
|
92
|
-
(def-suite your-system-tests
|
|
93
|
-
:description "Main test suite")
|
|
94
|
-
|
|
95
|
-
(in-suite your-system-tests)
|
|
96
|
-
|
|
97
|
-
(test process-data-test
|
|
98
|
-
"Test data processing"
|
|
99
|
-
(is (equal '(2 4 6) (process-data '(1 2 3))))
|
|
100
|
-
(is (null (process-data '())))
|
|
101
|
-
(signals error (process-data nil)))
|
|
102
|
-
|
|
103
|
-
(test validate-input-test
|
|
104
|
-
"Test input validation"
|
|
105
|
-
(is-true (validate-input "test"))
|
|
106
|
-
(is-false (validate-input "")))
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
<!-- LISP:END -->
|
|
110
|
-
|
|
1
|
+
---
|
|
2
|
+
name: "Lisp"
|
|
3
|
+
description: "Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow)."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
category: "languages"
|
|
6
|
+
author: "Rulebook"
|
|
7
|
+
tags: ["languages", "language"]
|
|
8
|
+
dependencies: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
---
|
|
11
|
+
<!-- LISP:START -->
|
|
12
|
+
# Common Lisp Project Rules
|
|
13
|
+
|
|
14
|
+
## Agent Automation Commands
|
|
15
|
+
|
|
16
|
+
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Complete quality check sequence:
|
|
20
|
+
sbcl --eval '(ql:quickload :sblint)' --eval '(sblint:run-lint "src/")' # Linting
|
|
21
|
+
sbcl --load tests/run-tests.lisp # All tests
|
|
22
|
+
sbcl --eval '(asdf:make :your-system)' # Build with ASDF
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Common Lisp Configuration
|
|
26
|
+
|
|
27
|
+
**CRITICAL**: Use SBCL 2.3+ or CCL with ASDF3 and modern tooling.
|
|
28
|
+
|
|
29
|
+
- **Implementation**: SBCL 2.3+ (recommended) or CCL
|
|
30
|
+
- **Build System**: ASDF3
|
|
31
|
+
- **Testing**: FiveAM or Prove
|
|
32
|
+
- **Linter**: sblint
|
|
33
|
+
|
|
34
|
+
### System Definition (your-system.asd)
|
|
35
|
+
|
|
36
|
+
```lisp
|
|
37
|
+
(defsystem "your-system"
|
|
38
|
+
:description "Your system description"
|
|
39
|
+
:version "0.1.0"
|
|
40
|
+
:author "Your Name <you@example.com>"
|
|
41
|
+
:license "MIT"
|
|
42
|
+
:depends-on (:alexandria
|
|
43
|
+
:cl-ppcre
|
|
44
|
+
:str)
|
|
45
|
+
:components ((:module "src"
|
|
46
|
+
:components
|
|
47
|
+
((:file "package")
|
|
48
|
+
(:file "main" :depends-on ("package")))))
|
|
49
|
+
:in-order-to ((test-op (test-op "your-system/tests"))))
|
|
50
|
+
|
|
51
|
+
(defsystem "your-system/tests"
|
|
52
|
+
:depends-on ("your-system"
|
|
53
|
+
"fiveam")
|
|
54
|
+
:components ((:module "tests"
|
|
55
|
+
:components
|
|
56
|
+
((:file "package")
|
|
57
|
+
(:file "main-tests" :depends-on ("package")))))
|
|
58
|
+
:perform (test-op (o c) (symbol-call :fiveam :run! :your-system-tests)))
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Code Quality Standards
|
|
62
|
+
|
|
63
|
+
### Mandatory Quality Checks
|
|
64
|
+
|
|
65
|
+
**IMPORTANT**: These commands MUST match your GitHub Actions workflows!
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Pre-Commit Checklist (MUST match .github/workflows/*.yml)
|
|
69
|
+
|
|
70
|
+
# 1. Lint (matches workflow)
|
|
71
|
+
sblint your-system.asd
|
|
72
|
+
|
|
73
|
+
# 2. Load system (check for errors - matches workflow)
|
|
74
|
+
sbcl --non-interactive --load your-system.asd \
|
|
75
|
+
--eval '(ql:quickload :your-system)' \
|
|
76
|
+
--eval '(quit)'
|
|
77
|
+
|
|
78
|
+
# 3. Run tests (matches workflow)
|
|
79
|
+
sbcl --non-interactive \
|
|
80
|
+
--eval '(ql:quickload :your-system/tests)' \
|
|
81
|
+
--eval '(asdf:test-system :your-system)' \
|
|
82
|
+
--eval '(quit)'
|
|
83
|
+
|
|
84
|
+
# If ANY fails: ❌ DO NOT COMMIT - Fix first!
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Testing Example (FiveAM)
|
|
88
|
+
|
|
89
|
+
```lisp
|
|
90
|
+
(in-package :your-system/tests)
|
|
91
|
+
|
|
92
|
+
(def-suite your-system-tests
|
|
93
|
+
:description "Main test suite")
|
|
94
|
+
|
|
95
|
+
(in-suite your-system-tests)
|
|
96
|
+
|
|
97
|
+
(test process-data-test
|
|
98
|
+
"Test data processing"
|
|
99
|
+
(is (equal '(2 4 6) (process-data '(1 2 3))))
|
|
100
|
+
(is (null (process-data '())))
|
|
101
|
+
(signals error (process-data nil)))
|
|
102
|
+
|
|
103
|
+
(test validate-input-test
|
|
104
|
+
"Test input validation"
|
|
105
|
+
(is-true (validate-input "test"))
|
|
106
|
+
(is-false (validate-input "")))
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
<!-- LISP:END -->
|
|
110
|
+
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Lua"
|
|
3
|
-
description: "Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow)."
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
category: "languages"
|
|
6
|
-
author: "Rulebook"
|
|
7
|
-
tags: ["languages", "language"]
|
|
8
|
-
dependencies: []
|
|
9
|
-
conflicts: []
|
|
10
|
-
---
|
|
11
|
-
<!-- LUA:START -->
|
|
12
|
-
# Lua Project Rules
|
|
13
|
-
|
|
14
|
-
## Agent Automation Commands
|
|
15
|
-
|
|
16
|
-
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Complete quality check sequence:
|
|
20
|
-
stylua --check . # Format check
|
|
21
|
-
luacheck . # Linting
|
|
22
|
-
busted # All tests (100% pass)
|
|
23
|
-
|
|
24
|
-
# No standard security audit for Lua
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Lua Configuration
|
|
28
|
-
|
|
29
|
-
**CRITICAL**: Use Lua 5.4 or LuaJIT with linting.
|
|
30
|
-
|
|
31
|
-
- **Version**: Lua 5.4 or LuaJIT 2.1+
|
|
32
|
-
- **Linter**: luacheck
|
|
33
|
-
- **Formatter**: StyLua
|
|
34
|
-
- **Testing**: busted or luaunit
|
|
35
|
-
|
|
36
|
-
## Code Quality Standards
|
|
37
|
-
|
|
38
|
-
### Mandatory Quality Checks
|
|
39
|
-
|
|
40
|
-
**IMPORTANT**: These commands MUST match your GitHub Actions workflows!
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
# Pre-Commit Checklist (MUST match .github/workflows/*.yml)
|
|
44
|
-
|
|
45
|
-
# 1. Format check (matches workflow)
|
|
46
|
-
stylua --check src/ tests/
|
|
47
|
-
|
|
48
|
-
# 2. Lint (matches workflow)
|
|
49
|
-
luacheck src/ tests/ --std luajit --no-unused-args
|
|
50
|
-
|
|
51
|
-
# 3. Run tests (matches workflow)
|
|
52
|
-
busted tests/
|
|
53
|
-
|
|
54
|
-
# If ANY fails: ❌ DO NOT COMMIT - Fix first!
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
**Why This Matters:**
|
|
58
|
-
- Example: Using `stylua` (writes) locally but `stylua --check` in CI = failure
|
|
59
|
-
|
|
60
|
-
### Testing Example (busted)
|
|
61
|
-
|
|
62
|
-
```lua
|
|
63
|
-
describe("DataProcessor", function()
|
|
64
|
-
local processor
|
|
65
|
-
|
|
66
|
-
before_each(function()
|
|
67
|
-
processor = require("data_processor").new()
|
|
68
|
-
end)
|
|
69
|
-
|
|
70
|
-
it("processes valid input", function()
|
|
71
|
-
local result = processor:process({1, 2, 3})
|
|
72
|
-
assert.are.same({2, 4, 6}, result)
|
|
73
|
-
end)
|
|
74
|
-
|
|
75
|
-
it("handles empty input", function()
|
|
76
|
-
assert.has_no.errors(function()
|
|
77
|
-
processor:process({})
|
|
78
|
-
end)
|
|
79
|
-
end)
|
|
80
|
-
end)
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
<!-- LUA:END -->
|
|
84
|
-
|
|
1
|
+
---
|
|
2
|
+
name: "Lua"
|
|
3
|
+
description: "Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow)."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
category: "languages"
|
|
6
|
+
author: "Rulebook"
|
|
7
|
+
tags: ["languages", "language"]
|
|
8
|
+
dependencies: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
---
|
|
11
|
+
<!-- LUA:START -->
|
|
12
|
+
# Lua Project Rules
|
|
13
|
+
|
|
14
|
+
## Agent Automation Commands
|
|
15
|
+
|
|
16
|
+
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Complete quality check sequence:
|
|
20
|
+
stylua --check . # Format check
|
|
21
|
+
luacheck . # Linting
|
|
22
|
+
busted # All tests (100% pass)
|
|
23
|
+
|
|
24
|
+
# No standard security audit for Lua
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Lua Configuration
|
|
28
|
+
|
|
29
|
+
**CRITICAL**: Use Lua 5.4 or LuaJIT with linting.
|
|
30
|
+
|
|
31
|
+
- **Version**: Lua 5.4 or LuaJIT 2.1+
|
|
32
|
+
- **Linter**: luacheck
|
|
33
|
+
- **Formatter**: StyLua
|
|
34
|
+
- **Testing**: busted or luaunit
|
|
35
|
+
|
|
36
|
+
## Code Quality Standards
|
|
37
|
+
|
|
38
|
+
### Mandatory Quality Checks
|
|
39
|
+
|
|
40
|
+
**IMPORTANT**: These commands MUST match your GitHub Actions workflows!
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Pre-Commit Checklist (MUST match .github/workflows/*.yml)
|
|
44
|
+
|
|
45
|
+
# 1. Format check (matches workflow)
|
|
46
|
+
stylua --check src/ tests/
|
|
47
|
+
|
|
48
|
+
# 2. Lint (matches workflow)
|
|
49
|
+
luacheck src/ tests/ --std luajit --no-unused-args
|
|
50
|
+
|
|
51
|
+
# 3. Run tests (matches workflow)
|
|
52
|
+
busted tests/
|
|
53
|
+
|
|
54
|
+
# If ANY fails: ❌ DO NOT COMMIT - Fix first!
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Why This Matters:**
|
|
58
|
+
- Example: Using `stylua` (writes) locally but `stylua --check` in CI = failure
|
|
59
|
+
|
|
60
|
+
### Testing Example (busted)
|
|
61
|
+
|
|
62
|
+
```lua
|
|
63
|
+
describe("DataProcessor", function()
|
|
64
|
+
local processor
|
|
65
|
+
|
|
66
|
+
before_each(function()
|
|
67
|
+
processor = require("data_processor").new()
|
|
68
|
+
end)
|
|
69
|
+
|
|
70
|
+
it("processes valid input", function()
|
|
71
|
+
local result = processor:process({1, 2, 3})
|
|
72
|
+
assert.are.same({2, 4, 6}, result)
|
|
73
|
+
end)
|
|
74
|
+
|
|
75
|
+
it("handles empty input", function()
|
|
76
|
+
assert.has_no.errors(function()
|
|
77
|
+
processor:process({})
|
|
78
|
+
end)
|
|
79
|
+
end)
|
|
80
|
+
end)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
<!-- LUA:END -->
|
|
84
|
+
|
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Objective-C"
|
|
3
|
-
description: "Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow)."
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
category: "languages"
|
|
6
|
-
author: "Rulebook"
|
|
7
|
-
tags: ["languages", "language"]
|
|
8
|
-
dependencies: []
|
|
9
|
-
conflicts: []
|
|
10
|
-
---
|
|
11
|
-
<!-- OBJECTIVEC:START -->
|
|
12
|
-
# Objective-C Project Rules
|
|
13
|
-
|
|
14
|
-
## Agent Automation Commands
|
|
15
|
-
|
|
16
|
-
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Complete quality check sequence:
|
|
20
|
-
xcodebuild clean build # Build verification
|
|
21
|
-
xcodebuild test -scheme YourScheme # All tests
|
|
22
|
-
# clang static analyzer runs automatically in Xcode builds
|
|
23
|
-
|
|
24
|
-
# Security audit:
|
|
25
|
-
# Use Xcode's built-in analyzer or third-party tools
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Objective-C Configuration
|
|
29
|
-
|
|
30
|
-
**CRITICAL**: Use Modern Objective-C with ARC and strict warnings.
|
|
31
|
-
|
|
32
|
-
- **Version**: Xcode 15+
|
|
33
|
-
- **ARC**: Automatic Reference Counting required
|
|
34
|
-
- **Formatter**: clang-format
|
|
35
|
-
- **Testing**: XCTest
|
|
36
|
-
- **Analyzer**: clang static analyzer
|
|
37
|
-
|
|
38
|
-
## Code Quality Standards
|
|
39
|
-
|
|
40
|
-
### Mandatory Quality Checks
|
|
41
|
-
|
|
42
|
-
**IMPORTANT**: These commands MUST match your GitHub Actions workflows!
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
# Pre-Commit Checklist (MUST match .github/workflows/*.yml)
|
|
46
|
-
|
|
47
|
-
# 1. Format check (matches workflow)
|
|
48
|
-
clang-format --dry-run --Werror **/*.{h,m}
|
|
49
|
-
|
|
50
|
-
# 2. Static analysis (matches workflow)
|
|
51
|
-
xcodebuild analyze -scheme YourScheme -sdk iphonesimulator
|
|
52
|
-
|
|
53
|
-
# 3. Build (matches workflow)
|
|
54
|
-
xcodebuild build -scheme YourScheme -sdk iphonesimulator \
|
|
55
|
-
ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
|
56
|
-
|
|
57
|
-
# 4. Run tests (matches workflow)
|
|
58
|
-
xcodebuild test -scheme YourScheme -sdk iphonesimulator \
|
|
59
|
-
-destination 'platform=iOS Simulator,name=iPhone 15'
|
|
60
|
-
|
|
61
|
-
# If ANY fails: ❌ DO NOT COMMIT - Fix first!
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**Why This Matters:**
|
|
65
|
-
- Example: Using `clang-format -i` locally but `--dry-run` in CI = failure
|
|
66
|
-
|
|
67
|
-
### Testing Example (XCTest)
|
|
68
|
-
|
|
69
|
-
```objective-c
|
|
70
|
-
@import XCTest;
|
|
71
|
-
#import "DataProcessor.h"
|
|
72
|
-
|
|
73
|
-
@interface DataProcessorTests : XCTestCase
|
|
74
|
-
@property (nonatomic, strong) DataProcessor *processor;
|
|
75
|
-
@end
|
|
76
|
-
|
|
77
|
-
@implementation DataProcessorTests
|
|
78
|
-
|
|
79
|
-
- (void)setUp {
|
|
80
|
-
[super setUp];
|
|
81
|
-
self.processor = [[DataProcessor alloc] initWithThreshold:0.5];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
- (void)testProcessValidInput {
|
|
85
|
-
NSArray *input = @[@1, @2, @3];
|
|
86
|
-
NSArray *result = [self.processor process:input];
|
|
87
|
-
|
|
88
|
-
XCTAssertNotNil(result);
|
|
89
|
-
XCTAssertGreaterThan(result.count, 0);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
- (void)testProcessHandlesNil {
|
|
93
|
-
XCTAssertThrows([self.processor process:nil]);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
@end
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
<!-- OBJECTIVEC:END -->
|
|
100
|
-
|
|
1
|
+
---
|
|
2
|
+
name: "Objective-C"
|
|
3
|
+
description: "Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow)."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
category: "languages"
|
|
6
|
+
author: "Rulebook"
|
|
7
|
+
tags: ["languages", "language"]
|
|
8
|
+
dependencies: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
---
|
|
11
|
+
<!-- OBJECTIVEC:START -->
|
|
12
|
+
# Objective-C Project Rules
|
|
13
|
+
|
|
14
|
+
## Agent Automation Commands
|
|
15
|
+
|
|
16
|
+
**CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Complete quality check sequence:
|
|
20
|
+
xcodebuild clean build # Build verification
|
|
21
|
+
xcodebuild test -scheme YourScheme # All tests
|
|
22
|
+
# clang static analyzer runs automatically in Xcode builds
|
|
23
|
+
|
|
24
|
+
# Security audit:
|
|
25
|
+
# Use Xcode's built-in analyzer or third-party tools
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Objective-C Configuration
|
|
29
|
+
|
|
30
|
+
**CRITICAL**: Use Modern Objective-C with ARC and strict warnings.
|
|
31
|
+
|
|
32
|
+
- **Version**: Xcode 15+
|
|
33
|
+
- **ARC**: Automatic Reference Counting required
|
|
34
|
+
- **Formatter**: clang-format
|
|
35
|
+
- **Testing**: XCTest
|
|
36
|
+
- **Analyzer**: clang static analyzer
|
|
37
|
+
|
|
38
|
+
## Code Quality Standards
|
|
39
|
+
|
|
40
|
+
### Mandatory Quality Checks
|
|
41
|
+
|
|
42
|
+
**IMPORTANT**: These commands MUST match your GitHub Actions workflows!
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Pre-Commit Checklist (MUST match .github/workflows/*.yml)
|
|
46
|
+
|
|
47
|
+
# 1. Format check (matches workflow)
|
|
48
|
+
clang-format --dry-run --Werror **/*.{h,m}
|
|
49
|
+
|
|
50
|
+
# 2. Static analysis (matches workflow)
|
|
51
|
+
xcodebuild analyze -scheme YourScheme -sdk iphonesimulator
|
|
52
|
+
|
|
53
|
+
# 3. Build (matches workflow)
|
|
54
|
+
xcodebuild build -scheme YourScheme -sdk iphonesimulator \
|
|
55
|
+
ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
|
56
|
+
|
|
57
|
+
# 4. Run tests (matches workflow)
|
|
58
|
+
xcodebuild test -scheme YourScheme -sdk iphonesimulator \
|
|
59
|
+
-destination 'platform=iOS Simulator,name=iPhone 15'
|
|
60
|
+
|
|
61
|
+
# If ANY fails: ❌ DO NOT COMMIT - Fix first!
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Why This Matters:**
|
|
65
|
+
- Example: Using `clang-format -i` locally but `--dry-run` in CI = failure
|
|
66
|
+
|
|
67
|
+
### Testing Example (XCTest)
|
|
68
|
+
|
|
69
|
+
```objective-c
|
|
70
|
+
@import XCTest;
|
|
71
|
+
#import "DataProcessor.h"
|
|
72
|
+
|
|
73
|
+
@interface DataProcessorTests : XCTestCase
|
|
74
|
+
@property (nonatomic, strong) DataProcessor *processor;
|
|
75
|
+
@end
|
|
76
|
+
|
|
77
|
+
@implementation DataProcessorTests
|
|
78
|
+
|
|
79
|
+
- (void)setUp {
|
|
80
|
+
[super setUp];
|
|
81
|
+
self.processor = [[DataProcessor alloc] initWithThreshold:0.5];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
- (void)testProcessValidInput {
|
|
85
|
+
NSArray *input = @[@1, @2, @3];
|
|
86
|
+
NSArray *result = [self.processor process:input];
|
|
87
|
+
|
|
88
|
+
XCTAssertNotNil(result);
|
|
89
|
+
XCTAssertGreaterThan(result.count, 0);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
- (void)testProcessHandlesNil {
|
|
93
|
+
XCTAssertThrows([self.processor process:nil]);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@end
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
<!-- OBJECTIVEC:END -->
|
|
100
|
+
|