diff --git a/.agents/skills/refined-github-projects/SKILL.md b/.agents/skills/refined-github-projects/SKILL.md new file mode 100644 index 0000000..89464ef --- /dev/null +++ b/.agents/skills/refined-github-projects/SKILL.md @@ -0,0 +1,76 @@ +```markdown +# refined-github-projects Development Patterns + +> Auto-generated skill from repository analysis + +## Overview +This skill teaches the core development patterns and conventions used in the `refined-github-projects` TypeScript codebase. You'll learn how to structure files, write imports and exports, follow commit conventions, and organize tests. This guide also provides suggested commands for common workflows, making it easy to contribute effectively. + +## Coding Conventions + +### File Naming +- Use **kebab-case** for all filenames. + - **Example:** + ``` + project-list.ts + github-api-client.ts + ``` + +### Import Style +- Use **alias imports** for modules. + - **Example:** + ```typescript + import { fetchProjects } from '@/api/github-api-client'; + ``` + +### Export Style +- Use **named exports** for functions, constants, and types. + - **Example:** + ```typescript + export function fetchProjects() { ... } + export const PROJECT_LIMIT = 10; + export type Project = { ... }; + ``` + +### Commit Messages +- Follow the **Conventional Commits** format. +- Use the `feat` prefix for new features. +- Keep commit messages concise (average ~70 characters). + - **Example:** + ``` + feat: add filtering by project status + ``` + +## Workflows + +_No automated workflows detected in this repository._ + +## Testing Patterns + +- Test files are named using the `*.test.*` pattern. + - **Example:** + ``` + project-list.test.ts + ``` +- The testing framework is not specified in the repository. +- Place test files alongside the modules they test or in a dedicated test directory. + + **Example test file:** + ```typescript + import { fetchProjects } from './project-list'; + + describe('fetchProjects', () => { + it('returns a list of projects', () => { + // test implementation + }); + }); + ``` + +## Commands + +| Command | Purpose | +|---------|---------| +| /new-feature | Start a new feature (use `feat` in commit messages) | +| /test | Run all test files matching `*.test.*` | +| /lint | Lint the codebase according to project conventions | +``` \ No newline at end of file diff --git a/.agents/skills/refined-github-projects/agents/openai.yaml b/.agents/skills/refined-github-projects/agents/openai.yaml new file mode 100644 index 0000000..674159d --- /dev/null +++ b/.agents/skills/refined-github-projects/agents/openai.yaml @@ -0,0 +1,6 @@ +interface: + display_name: "Refined Github Projects" + short_description: "Repo-specific patterns and workflows for refined-github-projects" + default_prompt: "Use the refined-github-projects repo skill to follow existing architecture, testing, and workflow conventions." +policy: + allow_implicit_invocation: true \ No newline at end of file diff --git a/.claude/ecc-tools.json b/.claude/ecc-tools.json new file mode 100644 index 0000000..1822ce1 --- /dev/null +++ b/.claude/ecc-tools.json @@ -0,0 +1,227 @@ +{ + "version": "1.3", + "schemaVersion": "1.0", + "generatedBy": "ecc-tools", + "generatedAt": "2026-07-18T23:49:40.015Z", + "repo": "https://github.com/fathiraz/refined-github-projects", + "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/refined-github-projects/SKILL.md", + ".agents/skills/refined-github-projects/SKILL.md", + ".agents/skills/refined-github-projects/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/refined-github-projects-instincts.yaml" + ], + "packageFiles": { + "runtime-core": [ + ".claude/skills/refined-github-projects/SKILL.md", + ".agents/skills/refined-github-projects/SKILL.md", + ".agents/skills/refined-github-projects/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/refined-github-projects-instincts.yaml" + ] + }, + "moduleFiles": { + "runtime-core": [ + ".claude/skills/refined-github-projects/SKILL.md", + ".agents/skills/refined-github-projects/SKILL.md", + ".agents/skills/refined-github-projects/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/refined-github-projects-instincts.yaml" + ] + }, + "files": [ + { + "moduleId": "runtime-core", + "path": ".claude/skills/refined-github-projects/SKILL.md", + "description": "Repository-specific Claude Code skill generated from git history." + }, + { + "moduleId": "runtime-core", + "path": ".agents/skills/refined-github-projects/SKILL.md", + "description": "Codex-facing copy of the generated repository skill." + }, + { + "moduleId": "runtime-core", + "path": ".agents/skills/refined-github-projects/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/refined-github-projects-instincts.yaml", + "description": "Continuous-learning instincts derived from repository patterns." + } + ], + "workflows": [], + "adapters": { + "claudeCode": { + "skillPath": ".claude/skills/refined-github-projects/SKILL.md", + "identityPath": ".claude/identity.json", + "commandPaths": [] + }, + "codex": { + "configPath": ".codex/config.toml", + "agentsGuidePath": ".codex/AGENTS.md", + "skillPath": ".agents/skills/refined-github-projects/SKILL.md" + } + } +} \ No newline at end of file diff --git a/.claude/homunculus/instincts/inherited/refined-github-projects-instincts.yaml b/.claude/homunculus/instincts/inherited/refined-github-projects-instincts.yaml new file mode 100644 index 0000000..f059593 --- /dev/null +++ b/.claude/homunculus/instincts/inherited/refined-github-projects-instincts.yaml @@ -0,0 +1,337 @@ +# Instincts generated from https://github.com/fathiraz/refined-github-projects +# Generated: 2026-07-18T23:49:49.681Z +# Version: 2.0 +# NOTE: This file supplements (does not replace) any existing curated instincts. +# High-confidence manually curated instincts should be preserved alongside these. + +--- +id: refined-github-projects-commit-conventional +trigger: "when writing a commit message" +confidence: 0.85 +domain: git +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Commit Conventional + +## Action + +Use conventional commit format with prefixes: feat + +## Evidence + +- 1 commits analyzed +- Detected conventional commit pattern +- Examples: feat(create-issue): stage project custom fields in native Create modal + +--- +id: refined-github-projects-commit-length +trigger: "when writing a commit message" +confidence: 0.6 +domain: git +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Commit Length + +## Action + +Write moderate-length commit messages (~70 characters) + +## Evidence + +- Average commit message length: 70 chars +- Based on 1 commits + +--- +id: refined-github-projects-naming-files +trigger: "when creating a new file" +confidence: 0.8 +domain: code-style +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Naming Files + +## Action + +Use kebab-case naming convention + +## Evidence + +- Analyzed file naming patterns in repository +- Dominant pattern: kebab-case + +--- +id: refined-github-projects-import-alias +trigger: "when importing modules" +confidence: 0.85 +domain: code-style +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Import Alias + +## Action + +Use path aliases (@/, ~/) instead of relative imports + +## Evidence + +- Import analysis shows alias pattern +- Example: import { x } from '@/lib/x' + +--- +id: refined-github-projects-export-style +trigger: "when exporting from a module" +confidence: 0.7 +domain: code-style +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Export Style + +## Action + +Prefer named exports + +## Evidence + +- Export pattern analysis +- Dominant style: named + +--- +id: refined-github-projects-arch-type-based +trigger: "when adding new code" +confidence: 0.8 +domain: architecture +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Arch Type Based + +## Action + +Place code in the appropriate type folder (components/, services/, utils/, etc.) + +## Evidence + +- Type-based module organization detected +- Folders: entries, features, lib + +--- +id: refined-github-projects-test-colocate +trigger: "when writing tests" +confidence: 0.85 +domain: testing +source: repo-analysis +source_repo: https://github.com/fathiraz/refined-github-projects +--- + +# Refined Github Projects Test Colocate + +## Action + +Place test file next to the source file (e.g., Button.test.tsx next to Button.tsx) + +## Evidence + +- Colocated test pattern detected +- Tests live alongside source files + +--- +id: refined-github-projects-instinct-file-naming +trigger: "When creating a new file in the codebase" +confidence: 0.9 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct File Naming + +## Action + +Name the file using kebab-case + +## Evidence + +- Pattern in files: src/features/create-issue.ts, src/lib/utils.ts + +--- +id: refined-github-projects-instinct-function-naming +trigger: "When defining a new function" +confidence: 0.9 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Function Naming + +## Action + +Use camelCase for the function name + +## Evidence + +- Pattern in files: src/lib/utils.ts + +--- +id: refined-github-projects-instinct-class-naming +trigger: "When declaring a new class" +confidence: 0.9 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Class Naming + +## Action + +Use PascalCase for the class name + +## Evidence + +- Pattern in files: src/features/project/ProjectManager.ts + +--- +id: refined-github-projects-instinct-constant-naming +trigger: "When defining a constant" +confidence: 0.8 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Constant Naming + +## Action + +Use SCREAMING_SNAKE_CASE for the constant name + +## Evidence + +- Pattern in files: src/lib/constants.ts + +--- +id: refined-github-projects-instinct-import-style +trigger: "When importing modules" +confidence: 0.8 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Import Style + +## Action + +Use alias import paths + +## Evidence + +- Pattern in files: src/features/create-issue.ts + +--- +id: refined-github-projects-instinct-export-style +trigger: "When exporting modules or functions" +confidence: 0.8 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Export Style + +## Action + +Use named exports + +## Evidence + +- Pattern in files: src/lib/utils.ts + +--- +id: refined-github-projects-instinct-test-location +trigger: "When adding tests for a module" +confidence: 0.9 +domain: testing +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Test Location + +## Action + +Co-locate the test file with the source file + +## Evidence + +- Pattern in files: src/features/create-issue.test.ts next to src/features/create-issue.ts + +--- +id: refined-github-projects-instinct-commit-format +trigger: "When writing a commit message" +confidence: 0.9 +domain: git +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Commit Format + +## Action + +Use the conventional commit format with a 'feat' prefix for features + +## Evidence + +- Seen in commit: feat(create-issue): stage project custom fields in native Create modal + +--- +id: refined-github-projects-instinct-commit-length +trigger: "When writing a commit message" +confidence: 0.7 +domain: git +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Commit Length + +## Action + +Keep the commit message around 70 characters on average + +## Evidence + +- Pattern: average commit length is 70 characters + +--- +id: refined-github-projects-instinct-error-handling +trigger: "When handling errors in code" +confidence: 0.8 +domain: code-style +source: repo-analysis +source_repo: fathiraz/refined-github-projects +--- + +# Refined Github Projects Instinct Error Handling + +## Action + +Use try-catch blocks for error handling + +## Evidence + +- Pattern in files: src/lib/api.ts + diff --git a/.claude/identity.json b/.claude/identity.json new file mode 100644 index 0000000..72f4c4a --- /dev/null +++ b/.claude/identity.json @@ -0,0 +1,14 @@ +{ + "version": "2.0", + "technicalLevel": "technical", + "preferredStyle": { + "verbosity": "detailed", + "codeComments": true, + "explanations": true + }, + "domains": [ + "typescript" + ], + "suggestedBy": "ecc-tools-repo-analysis", + "createdAt": "2026-07-18T23:49:49.681Z" +} \ No newline at end of file diff --git a/.claude/skills/refined-github-projects/SKILL.md b/.claude/skills/refined-github-projects/SKILL.md new file mode 100644 index 0000000..89464ef --- /dev/null +++ b/.claude/skills/refined-github-projects/SKILL.md @@ -0,0 +1,76 @@ +```markdown +# refined-github-projects Development Patterns + +> Auto-generated skill from repository analysis + +## Overview +This skill teaches the core development patterns and conventions used in the `refined-github-projects` TypeScript codebase. You'll learn how to structure files, write imports and exports, follow commit conventions, and organize tests. This guide also provides suggested commands for common workflows, making it easy to contribute effectively. + +## Coding Conventions + +### File Naming +- Use **kebab-case** for all filenames. + - **Example:** + ``` + project-list.ts + github-api-client.ts + ``` + +### Import Style +- Use **alias imports** for modules. + - **Example:** + ```typescript + import { fetchProjects } from '@/api/github-api-client'; + ``` + +### Export Style +- Use **named exports** for functions, constants, and types. + - **Example:** + ```typescript + export function fetchProjects() { ... } + export const PROJECT_LIMIT = 10; + export type Project = { ... }; + ``` + +### Commit Messages +- Follow the **Conventional Commits** format. +- Use the `feat` prefix for new features. +- Keep commit messages concise (average ~70 characters). + - **Example:** + ``` + feat: add filtering by project status + ``` + +## Workflows + +_No automated workflows detected in this repository._ + +## Testing Patterns + +- Test files are named using the `*.test.*` pattern. + - **Example:** + ``` + project-list.test.ts + ``` +- The testing framework is not specified in the repository. +- Place test files alongside the modules they test or in a dedicated test directory. + + **Example test file:** + ```typescript + import { fetchProjects } from './project-list'; + + describe('fetchProjects', () => { + it('returns a list of projects', () => { + // test implementation + }); + }); + ``` + +## Commands + +| Command | Purpose | +|---------|---------| +| /new-feature | Start a new feature (use `feat` in commit messages) | +| /test | Run all test files matching `*.test.*` | +| /lint | Lint the codebase according to project conventions | +``` \ No newline at end of file diff --git a/.codex/AGENTS.md b/.codex/AGENTS.md new file mode 100644 index 0000000..39e43db --- /dev/null +++ b/.codex/AGENTS.md @@ -0,0 +1,26 @@ +# ECC for Codex CLI + +This supplements the root `AGENTS.md` with a repo-local ECC baseline. + +## Repo Skill + +- Repo-generated Codex skill: `.agents/skills/refined-github-projects/SKILL.md` +- Claude-facing companion skill: `.claude/skills/refined-github-projects/SKILL.md` +- Keep user-specific credentials and private MCPs in `~/.codex/config.toml`, not in this repo. + +## MCP Baseline + +Treat `.codex/config.toml` as the default ECC-safe baseline for work in this repository. +The generated baseline enables GitHub, Context7, Exa, Memory, Playwright, and Sequential Thinking. + +## Multi-Agent Support + +- Explorer: read-only evidence gathering +- Reviewer: correctness, security, and regression review +- Docs researcher: API and release-note verification + +## Workflow Files + +- No dedicated workflow command files were generated for this repo. + +Use these workflow files as reusable task scaffolds when the detected repository workflows recur. \ No newline at end of file diff --git a/.codex/agents/docs-researcher.toml b/.codex/agents/docs-researcher.toml new file mode 100644 index 0000000..0daae57 --- /dev/null +++ b/.codex/agents/docs-researcher.toml @@ -0,0 +1,9 @@ +model = "gpt-5.4" +model_reasoning_effort = "medium" +sandbox_mode = "read-only" + +developer_instructions = """ +Verify APIs, framework behavior, and release-note claims against primary documentation before changes land. +Cite the exact docs or file paths that support each claim. +Do not invent undocumented behavior. +""" \ No newline at end of file diff --git a/.codex/agents/explorer.toml b/.codex/agents/explorer.toml new file mode 100644 index 0000000..732df7a --- /dev/null +++ b/.codex/agents/explorer.toml @@ -0,0 +1,9 @@ +model = "gpt-5.4" +model_reasoning_effort = "medium" +sandbox_mode = "read-only" + +developer_instructions = """ +Stay in exploration mode. +Trace the real execution path, cite files and symbols, and avoid proposing fixes unless the parent agent asks for them. +Prefer targeted search and file reads over broad scans. +""" \ No newline at end of file diff --git a/.codex/agents/reviewer.toml b/.codex/agents/reviewer.toml new file mode 100644 index 0000000..b13ed9c --- /dev/null +++ b/.codex/agents/reviewer.toml @@ -0,0 +1,9 @@ +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" + +developer_instructions = """ +Review like an owner. +Prioritize correctness, security, behavioral regressions, and missing tests. +Lead with concrete findings and avoid style-only feedback unless it hides a real bug. +""" \ No newline at end of file diff --git a/.codex/config.toml b/.codex/config.toml new file mode 100644 index 0000000..bc1ee67 --- /dev/null +++ b/.codex/config.toml @@ -0,0 +1,48 @@ +#:schema https://developers.openai.com/codex/config-schema.json + +# ECC Tools generated Codex baseline +approval_policy = "on-request" +sandbox_mode = "workspace-write" +web_search = "live" + +[mcp_servers.github] +command = "npx" +args = ["-y", "@modelcontextprotocol/server-github"] + +[mcp_servers.context7] +command = "npx" +args = ["-y", "@upstash/context7-mcp@latest"] + +[mcp_servers.exa] +url = "https://mcp.exa.ai/mcp" + +[mcp_servers.memory] +command = "npx" +args = ["-y", "@modelcontextprotocol/server-memory"] + +[mcp_servers.playwright] +command = "npx" +args = ["-y", "@playwright/mcp@latest", "--extension"] + +[mcp_servers.sequential-thinking] +command = "npx" +args = ["-y", "@modelcontextprotocol/server-sequential-thinking"] + +[features] +multi_agent = true + +[agents] +max_threads = 6 +max_depth = 1 + +[agents.explorer] +description = "Read-only codebase explorer for gathering evidence before changes are proposed." +config_file = "agents/explorer.toml" + +[agents.reviewer] +description = "PR reviewer focused on correctness, security, and missing tests." +config_file = "agents/reviewer.toml" + +[agents.docs_researcher] +description = "Documentation specialist that verifies APIs, framework behavior, and release notes." +config_file = "agents/docs-researcher.toml" \ No newline at end of file