Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions .agents/skills/drawny/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
```markdown
# drawny Development Patterns

> Auto-generated skill from repository analysis

## Overview
This skill provides guidance on contributing to the `drawny` codebase, a TypeScript project without a detected framework. It covers code style conventions, commit patterns, and testing practices, ensuring consistency and maintainability. Use this as a reference for writing, organizing, and testing code, as well as for collaborating through conventional commits.

## Coding Conventions

### File Naming
- Use **camelCase** for file names.
- Example: `drawCanvas.ts`, `userActions.ts`

### Import Style
- Both default and named imports are used.
- Example (default import):
```typescript
import drawny from './drawny'
```
- Example (named import):
```typescript
import { drawShape, clearCanvas } from './canvasUtils'
```

### Export Style
- Both default and named exports are present.
- Example (default export):
```typescript
export default drawny
```
- Example (named export):
```typescript
export function drawShape() { ... }
```

### Commit Patterns
- **Conventional Commits** are used, with a focus on the `fix` prefix.
- Example:
```
fix: resolve canvas resizing issue on window resize
```
- Commit messages are concise (average ~75 characters).

## Workflows

### Conventional Commit Workflow
**Trigger:** When making any commit to the repository
**Command:** `/conventional-commit`

1. Stage your changes.
2. Write a commit message using the conventional format:
- `<type>: <short description>`
- Example: `fix: correct typo in draw function`
3. Commit your changes.

### Testing Workflow
**Trigger:** When adding or modifying code that requires validation
**Command:** `/run-tests`

1. Identify or create a test file matching the `*.test.*` pattern (e.g., `drawny.test.ts`).
2. Write tests for new or updated functionality.
3. Run the tests using your preferred TypeScript test runner (framework not specified).
4. Ensure all tests pass before pushing changes.

## Testing Patterns

- Test files follow the `*.test.*` naming convention.
- Example: `canvasUtils.test.ts`
- The specific testing framework is not defined; use a standard TypeScript-compatible test runner (e.g., Jest, Mocha).
- Place tests alongside the code or in a dedicated test directory as appropriate.

Example test structure:
```typescript
// drawny.test.ts
import { drawShape } from './drawny'

test('drawShape draws a rectangle', () => {
// ...test implementation...
})
```

## Commands
| Command | Purpose |
|-----------------------|-----------------------------------------------------|
| /conventional-commit | Format your commit message using conventional style |
| /run-tests | Run all test files matching `*.test.*` |
```
6 changes: 6 additions & 0 deletions .agents/skills/drawny/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
interface:
display_name: "Drawny"
short_description: "Repo-specific patterns and workflows for drawny"
default_prompt: "Use the drawny repo skill to follow existing architecture, testing, and workflow conventions."
policy:
allow_implicit_invocation: true
227 changes: 227 additions & 0 deletions .claude/ecc-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
{
"version": "1.3",
"schemaVersion": "1.0",
"generatedBy": "ecc-tools",
"generatedAt": "2026-05-31T19:29:39.282Z",
"repo": "https://github.com/bugdisclose/drawny",
"referenceSetReadiness": {
"score": 0,
"present": 0,
"total": 7,
"items": [
{
"id": "deep-analyzer-corpus",
"label": "Deep analyzer corpus",
"status": "missing",
"evidence": [],
"recommendation": "Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions."
},
{
"id": "rag-evaluator",
"label": "RAG/evaluator comparison",
"status": "missing",
"evidence": [],
"recommendation": "Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior."
},
{
"id": "pr-salvage",
"label": "PR salvage/review corpus",
"status": "missing",
"evidence": [],
"recommendation": "Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation."
},
{
"id": "discussion-triage",
"label": "Discussion triage corpus",
"status": "missing",
"evidence": [],
"recommendation": "Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications."
},
{
"id": "harness-compatibility",
"label": "Harness compatibility",
"status": "missing",
"evidence": [],
"recommendation": "Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces."
},
{
"id": "security-evidence",
"label": "Security evidence",
"status": "missing",
"evidence": [],
"recommendation": "Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs."
},
{
"id": "ci-failure-mode",
"label": "CI failure-mode evidence",
"status": "missing",
"evidence": [],
"recommendation": "Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes."
}
]
},
"profiles": {
"requested": "core",
"recommended": "core",
"effective": "core",
"requestedAlias": "core",
"recommendedAlias": "core",
"effectiveAlias": "core"
},
"requestedProfile": "core",
"profile": "core",
"recommendedProfile": "core",
"effectiveProfile": "core",
"tier": "free",
"requestedComponents": [
"repo-baseline"
],
"selectedComponents": [
"repo-baseline"
],
"requestedAddComponents": [],
"requestedRemoveComponents": [],
"blockedRemovalComponents": [],
"tierFilteredComponents": [],
"requestedRootPackages": [
"runtime-core"
],
"selectedRootPackages": [
"runtime-core"
],
"requestedPackages": [
"runtime-core"
],
"requestedAddPackages": [],
"requestedRemovePackages": [],
"selectedPackages": [
"runtime-core"
],
"packages": [
"runtime-core"
],
"blockedRemovalPackages": [],
"tierFilteredRootPackages": [],
"tierFilteredPackages": [],
"conflictingPackages": [],
"dependencyGraph": {
"runtime-core": []
},
"resolutionOrder": [
"runtime-core"
],
"requestedModules": [
"runtime-core"
],
"selectedModules": [
"runtime-core"
],
"modules": [
"runtime-core"
],
"managedFiles": [
".claude/skills/drawny/SKILL.md",
".agents/skills/drawny/SKILL.md",
".agents/skills/drawny/agents/openai.yaml",
".claude/identity.json",
".codex/config.toml",
".codex/AGENTS.md",
".codex/agents/explorer.toml",
".codex/agents/reviewer.toml",
".codex/agents/docs-researcher.toml",
".claude/homunculus/instincts/inherited/drawny-instincts.yaml"
],
"packageFiles": {
"runtime-core": [
".claude/skills/drawny/SKILL.md",
".agents/skills/drawny/SKILL.md",
".agents/skills/drawny/agents/openai.yaml",
".claude/identity.json",
".codex/config.toml",
".codex/AGENTS.md",
".codex/agents/explorer.toml",
".codex/agents/reviewer.toml",
".codex/agents/docs-researcher.toml",
".claude/homunculus/instincts/inherited/drawny-instincts.yaml"
]
},
"moduleFiles": {
"runtime-core": [
".claude/skills/drawny/SKILL.md",
".agents/skills/drawny/SKILL.md",
".agents/skills/drawny/agents/openai.yaml",
".claude/identity.json",
".codex/config.toml",
".codex/AGENTS.md",
".codex/agents/explorer.toml",
".codex/agents/reviewer.toml",
".codex/agents/docs-researcher.toml",
".claude/homunculus/instincts/inherited/drawny-instincts.yaml"
]
},
"files": [
{
"moduleId": "runtime-core",
"path": ".claude/skills/drawny/SKILL.md",
"description": "Repository-specific Claude Code skill generated from git history."
},
{
"moduleId": "runtime-core",
"path": ".agents/skills/drawny/SKILL.md",
"description": "Codex-facing copy of the generated repository skill."
},
{
"moduleId": "runtime-core",
"path": ".agents/skills/drawny/agents/openai.yaml",
"description": "Codex skill metadata so the repo skill appears cleanly in the skill interface."
},
{
"moduleId": "runtime-core",
"path": ".claude/identity.json",
"description": "Suggested identity.json baseline derived from repository conventions."
},
{
"moduleId": "runtime-core",
"path": ".codex/config.toml",
"description": "Repo-local Codex MCP and multi-agent baseline aligned with ECC defaults."
},
{
"moduleId": "runtime-core",
"path": ".codex/AGENTS.md",
"description": "Codex usage guide that points at the generated repo skill and workflow bundle."
},
{
"moduleId": "runtime-core",
"path": ".codex/agents/explorer.toml",
"description": "Read-only explorer role config for Codex multi-agent work."
},
{
"moduleId": "runtime-core",
"path": ".codex/agents/reviewer.toml",
"description": "Read-only reviewer role config focused on correctness and security."
},
{
"moduleId": "runtime-core",
"path": ".codex/agents/docs-researcher.toml",
"description": "Read-only docs researcher role config for API verification."
},
{
"moduleId": "runtime-core",
"path": ".claude/homunculus/instincts/inherited/drawny-instincts.yaml",
"description": "Continuous-learning instincts derived from repository patterns."
}
],
"workflows": [],
"adapters": {
"claudeCode": {
"skillPath": ".claude/skills/drawny/SKILL.md",
"identityPath": ".claude/identity.json",
"commandPaths": []
},
"codex": {
"configPath": ".codex/config.toml",
"agentsGuidePath": ".codex/AGENTS.md",
"skillPath": ".agents/skills/drawny/SKILL.md"
}
}
}
Loading