xcoder-dna 0.0.0-stage → 1.3.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/LICENSE +21 -0
- package/README.md +87 -2
- package/dist/agents/ai-chat-debate.d.ts +36 -0
- package/dist/agents/ai-chat-debate.js +300 -0
- package/dist/agents/ai-chat-report-writer.d.ts +7 -0
- package/dist/agents/ai-chat-report-writer.js +100 -0
- package/dist/agents/duplicate-detector.d.ts +41 -0
- package/dist/agents/duplicate-detector.js +65 -0
- package/dist/agents/genesis-agent.d.ts +61 -0
- package/dist/agents/genesis-agent.js +340 -0
- package/dist/agents/samurai-agent.d.ts +53 -0
- package/dist/agents/samurai-agent.js +279 -0
- package/dist/agents/sub-agent.d.ts +56 -0
- package/dist/agents/sub-agent.js +353 -0
- package/dist/backlog/backlog-requirement-validator.d.ts +10 -0
- package/dist/backlog/backlog-requirement-validator.js +60 -0
- package/dist/backlog/backlog-store.d.ts +29 -0
- package/dist/backlog/backlog-store.js +148 -0
- package/dist/backlog/po-agent.d.ts +16 -0
- package/dist/backlog/po-agent.js +121 -0
- package/dist/backlog/types.d.ts +25 -0
- package/dist/backlog/types.js +4 -0
- package/dist/bench/run.d.ts +11 -0
- package/dist/bench/run.js +185 -0
- package/dist/bench/types.d.ts +50 -0
- package/dist/bench/types.js +1 -0
- package/dist/cli/swarm.d.ts +10 -0
- package/dist/cli/swarm.js +100 -0
- package/dist/cli/task.d.ts +14 -0
- package/dist/cli/task.js +121 -0
- package/dist/cli/wbc-arg.d.ts +6 -0
- package/dist/cli/wbc-arg.js +40 -0
- package/dist/cli/wbc.d.ts +45 -0
- package/dist/cli/wbc.js +98 -0
- package/dist/commands/license.d.ts +9 -0
- package/dist/commands/license.js +140 -0
- package/dist/commands/release.d.ts +44 -0
- package/dist/commands/release.js +180 -0
- package/dist/commands/test.d.ts +50 -0
- package/dist/commands/test.js +385 -0
- package/dist/config/loadConfig.d.ts +82 -0
- package/dist/config/loadConfig.js +240 -0
- package/dist/config/secure-mode.d.ts +29 -0
- package/dist/config/secure-mode.js +63 -0
- package/dist/config/user-config.d.ts +39 -0
- package/dist/config/user-config.js +202 -0
- package/dist/engine/reasoning-engine.d.ts +21 -0
- package/dist/engine/reasoning-engine.js +59 -0
- package/dist/events/bus.d.ts +22 -0
- package/dist/events/bus.js +18 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.js +77 -0
- package/dist/indexing/ignoreRules.d.ts +1 -0
- package/dist/indexing/ignoreRules.js +53 -0
- package/dist/instance-swarm/instance-swarm-orchestrator.d.ts +57 -0
- package/dist/instance-swarm/instance-swarm-orchestrator.js +204 -0
- package/dist/instance-swarm/protocol-name-resolver.d.ts +23 -0
- package/dist/instance-swarm/protocol-name-resolver.js +64 -0
- package/dist/license/gate.d.ts +31 -0
- package/dist/license/gate.js +188 -0
- package/dist/license/http-client.d.ts +43 -0
- package/dist/license/http-client.js +195 -0
- package/dist/license/manager.d.ts +39 -0
- package/dist/license/manager.js +175 -0
- package/dist/license/receipt.d.ts +27 -0
- package/dist/license/receipt.js +108 -0
- package/dist/license/state-codec.d.ts +72 -0
- package/dist/license/state-codec.js +218 -0
- package/dist/license/state-paths.d.ts +17 -0
- package/dist/license/state-paths.js +64 -0
- package/dist/license/store.d.ts +44 -0
- package/dist/license/store.js +223 -0
- package/dist/license/trust-anchor.d.ts +24 -0
- package/dist/license/trust-anchor.js +74 -0
- package/dist/license/types.d.ts +34 -0
- package/dist/license/types.js +19 -0
- package/dist/llm/budget.d.ts +23 -0
- package/dist/llm/budget.js +58 -0
- package/dist/llm/client.d.ts +53 -0
- package/dist/llm/client.js +122 -0
- package/dist/llm/factory.d.ts +14 -0
- package/dist/llm/factory.js +32 -0
- package/dist/orchestrator/defect-logger.d.ts +31 -0
- package/dist/orchestrator/defect-logger.js +101 -0
- package/dist/orchestrator/defect-manager.d.ts +118 -0
- package/dist/orchestrator/defect-manager.js +338 -0
- package/dist/orchestrator/defect-migration.d.ts +14 -0
- package/dist/orchestrator/defect-migration.js +174 -0
- package/dist/orchestrator/defect-store.d.ts +48 -0
- package/dist/orchestrator/defect-store.js +76 -0
- package/dist/orchestrator/healing.d.ts +14 -0
- package/dist/orchestrator/healing.js +11 -0
- package/dist/orchestrator/interactive-steering.d.ts +64 -0
- package/dist/orchestrator/interactive-steering.js +107 -0
- package/dist/orchestrator/interrupt-handler.d.ts +30 -0
- package/dist/orchestrator/interrupt-handler.js +70 -0
- package/dist/orchestrator/lesson-manager.d.ts +25 -0
- package/dist/orchestrator/lesson-manager.js +122 -0
- package/dist/orchestrator/progress-summary.d.ts +15 -0
- package/dist/orchestrator/progress-summary.js +106 -0
- package/dist/orchestrator/reasoning-score.d.ts +49 -0
- package/dist/orchestrator/reasoning-score.js +117 -0
- package/dist/orchestrator/swarm.d.ts +36 -0
- package/dist/orchestrator/swarm.js +77 -0
- package/dist/orchestrator/task-factory.d.ts +15 -0
- package/dist/orchestrator/task-factory.js +176 -0
- package/dist/orchestrator/validation-gate.d.ts +23 -0
- package/dist/orchestrator/validation-gate.js +155 -0
- package/dist/protocol/react-contract.d.ts +136 -0
- package/dist/protocol/react-contract.js +698 -0
- package/dist/protocol/wks-protocol-manager.d.ts +22 -0
- package/dist/protocol/wks-protocol-manager.js +72 -0
- package/dist/sdlc-runtime/conversation-runner.d.ts +8 -0
- package/dist/sdlc-runtime/conversation-runner.js +64 -0
- package/dist/sdlc-runtime/dag-utils.d.ts +15 -0
- package/dist/sdlc-runtime/dag-utils.js +67 -0
- package/dist/sdlc-runtime/defect-integration.d.ts +7 -0
- package/dist/sdlc-runtime/defect-integration.js +99 -0
- package/dist/sdlc-runtime/execution-loop.d.ts +38 -0
- package/dist/sdlc-runtime/execution-loop.js +274 -0
- package/dist/sdlc-runtime/lesson-recorder.d.ts +9 -0
- package/dist/sdlc-runtime/lesson-recorder.js +27 -0
- package/dist/sdlc-runtime/plan-initializer.d.ts +47 -0
- package/dist/sdlc-runtime/plan-initializer.js +135 -0
- package/dist/sdlc-runtime/progress-persister.d.ts +10 -0
- package/dist/sdlc-runtime/progress-persister.js +34 -0
- package/dist/sdlc-runtime/protocol-loader.d.ts +10 -0
- package/dist/sdlc-runtime/protocol-loader.js +21 -0
- package/dist/sdlc-runtime/reporting.d.ts +24 -0
- package/dist/sdlc-runtime/reporting.js +68 -0
- package/dist/sdlc-runtime/sdlc-orchestrator.d.ts +59 -0
- package/dist/sdlc-runtime/sdlc-orchestrator.js +170 -0
- package/dist/sdlc-runtime/sdlc-skill.d.ts +44 -0
- package/dist/sdlc-runtime/sdlc-skill.js +148 -0
- package/dist/sdlc-runtime/steering-handler.d.ts +14 -0
- package/dist/sdlc-runtime/steering-handler.js +51 -0
- package/dist/sdlc-runtime/trace-recorder.d.ts +10 -0
- package/dist/sdlc-runtime/trace-recorder.js +7 -0
- package/dist/security/index.d.ts +16 -0
- package/dist/security/index.js +12 -0
- package/dist/security/input-screen.d.ts +30 -0
- package/dist/security/input-screen.js +75 -0
- package/dist/security/tool-call-guard.d.ts +16 -0
- package/dist/security/tool-call-guard.js +163 -0
- package/dist/security/untrusted-content.d.ts +34 -0
- package/dist/security/untrusted-content.js +63 -0
- package/dist/skills/advanced-dfir/SKILL.md +85 -0
- package/dist/skills/advanced-pentest-lab/SKILL.md +88 -0
- package/dist/skills/analyst/SKILL.md +55 -0
- package/dist/skills/architect/SKILL.md +54 -0
- package/dist/skills/aws/SKILL.md +92 -0
- package/dist/skills/azure/SKILL.md +90 -0
- package/dist/skills/bylaw-context.d.ts +45 -0
- package/dist/skills/bylaw-context.js +61 -0
- package/dist/skills/bylaw-review.d.ts +20 -0
- package/dist/skills/bylaw-review.js +101 -0
- package/dist/skills/conversation/SKILL.md +29 -0
- package/dist/skills/design-patterns/SKILL.md +190 -0
- package/dist/skills/devops/SKILL.md +55 -0
- package/dist/skills/directives.d.ts +20 -0
- package/dist/skills/directives.js +313 -0
- package/dist/skills/docker/SKILL.md +76 -0
- package/dist/skills/docker-expert/SKILL.md +56 -0
- package/dist/skills/enterprise-systems-analyst/SKILL.md +83 -0
- package/dist/skills/enterprise-systems-analyst/references/crm.md +41 -0
- package/dist/skills/enterprise-systems-analyst/references/erp.md +40 -0
- package/dist/skills/enterprise-systems-analyst/references/financial-systems.md +35 -0
- package/dist/skills/enterprise-systems-analyst/references/hcm.md +38 -0
- package/dist/skills/enterprise-systems-analyst/references/mrp.md +37 -0
- package/dist/skills/enterprise-systems-analyst/references/scm.md +32 -0
- package/dist/skills/ethical-hacking-methodology/SKILL.md +119 -0
- package/dist/skills/externalSkillLoader.d.ts +25 -0
- package/dist/skills/externalSkillLoader.js +65 -0
- package/dist/skills/externalSkillRegistry.d.ts +33 -0
- package/dist/skills/externalSkillRegistry.js +94 -0
- package/dist/skills/filesystem-management/SKILL.md +61 -0
- package/dist/skills/first-run-seed.d.ts +26 -0
- package/dist/skills/first-run-seed.js +75 -0
- package/dist/skills/git-vcs/SKILL.md +84 -0
- package/dist/skills/kafka/SKILL.md +89 -0
- package/dist/skills/kubernetes/SKILL.md +93 -0
- package/dist/skills/kubernetes-expert/SKILL.md +54 -0
- package/dist/skills/openshift/SKILL.md +93 -0
- package/dist/skills/pentester/SKILL.md +59 -0
- package/dist/skills/performance-tester/SKILL.md +57 -0
- package/dist/skills/playwright-ui-tester/SKILL.md +67 -0
- package/dist/skills/programmer/SKILL.md +58 -0
- package/dist/skills/project-scaffolding/SKILL.md +133 -0
- package/dist/skills/qa-engineer/SKILL.md +91 -0
- package/dist/skills/rca/SKILL.md +58 -0
- package/dist/skills/redhat/SKILL.md +92 -0
- package/dist/skills/rosa/SKILL.md +80 -0
- package/dist/skills/scrum-framework/SKILL.md +74 -0
- package/dist/skills/scrum-framework/references/artifacts_and_quality.md +79 -0
- package/dist/skills/scrum-framework/references/roles_and_events.md +105 -0
- package/dist/skills/scrum-master-agent/SKILL.md +74 -0
- package/dist/skills/scrum-master-agent/references/behaviors.md +56 -0
- package/dist/skills/sdlc-skill.d.ts +1 -0
- package/dist/skills/sdlc-skill.js +4 -0
- package/dist/skills/secops/SKILL.md +52 -0
- package/dist/skills/secure-architect.bylaws.d.ts +68 -0
- package/dist/skills/secure-architect.bylaws.js +525 -0
- package/dist/skills/seed-skills.d.ts +48 -0
- package/dist/skills/seed-skills.js +213 -0
- package/dist/skills/skill-authoring/SKILL.md +123 -0
- package/dist/skills/skill-header.d.ts +51 -0
- package/dist/skills/skill-header.js +163 -0
- package/dist/skills/skill-path-guard.d.ts +41 -0
- package/dist/skills/skill-path-guard.js +95 -0
- package/dist/skills/skillRouter.d.ts +51 -0
- package/dist/skills/skillRouter.js +90 -0
- package/dist/skills/skills-root.d.ts +64 -0
- package/dist/skills/skills-root.js +168 -0
- package/dist/skills/software-architect/SKILL.md +77 -0
- package/dist/skills/software-engineer/SKILL.md +74 -0
- package/dist/skills/solid-principles/SKILL.md +94 -0
- package/dist/skills/task-planning/SKILL.md +115 -0
- package/dist/skills/tester/SKILL.md +54 -0
- package/dist/skills/ubuntu/SKILL.md +87 -0
- package/dist/skills/ui-ux-design/SKILL.md +114 -0
- package/dist/skills/workspace-context/SKILL.md +103 -0
- package/dist/sprint/controller.d.ts +37 -0
- package/dist/sprint/controller.js +220 -0
- package/dist/sprint/dag-builder.d.ts +14 -0
- package/dist/sprint/dag-builder.js +105 -0
- package/dist/sprint/reporter.d.ts +11 -0
- package/dist/sprint/reporter.js +97 -0
- package/dist/sprint/state-store.d.ts +10 -0
- package/dist/sprint/state-store.js +71 -0
- package/dist/sprint/types.d.ts +24 -0
- package/dist/sprint/types.js +4 -0
- package/dist/store/file-version-store.d.ts +24 -0
- package/dist/store/file-version-store.js +73 -0
- package/dist/store/task-store.d.ts +90 -0
- package/dist/store/task-store.js +166 -0
- package/dist/task-ingest/architect-detailer.d.ts +43 -0
- package/dist/task-ingest/architect-detailer.js +141 -0
- package/dist/task-ingest/detail-schema.d.ts +9 -0
- package/dist/task-ingest/detail-schema.js +195 -0
- package/dist/task-ingest/detailed-run.d.ts +36 -0
- package/dist/task-ingest/detailed-run.js +108 -0
- package/dist/task-ingest/extract-id.d.ts +9 -0
- package/dist/task-ingest/extract-id.js +24 -0
- package/dist/task-ingest/index.d.ts +23 -0
- package/dist/task-ingest/index.js +14 -0
- package/dist/task-ingest/ingest.d.ts +45 -0
- package/dist/task-ingest/ingest.js +163 -0
- package/dist/task-ingest/list-ingested.d.ts +13 -0
- package/dist/task-ingest/list-ingested.js +30 -0
- package/dist/task-ingest/pending-filter.d.ts +30 -0
- package/dist/task-ingest/pending-filter.js +59 -0
- package/dist/task-ingest/scanner.d.ts +56 -0
- package/dist/task-ingest/scanner.js +216 -0
- package/dist/task-ingest/source-reader.d.ts +25 -0
- package/dist/task-ingest/source-reader.js +93 -0
- package/dist/task-ingest/spec-builder.d.ts +34 -0
- package/dist/task-ingest/spec-builder.js +89 -0
- package/dist/task-ingest/wbs-extract.d.ts +50 -0
- package/dist/task-ingest/wbs-extract.js +226 -0
- package/dist/task-ingest/wbs-parser.d.ts +36 -0
- package/dist/task-ingest/wbs-parser.js +170 -0
- package/dist/tools/apiTestTool.d.ts +37 -0
- package/dist/tools/apiTestTool.js +128 -0
- package/dist/tools/ast-tools.d.ts +183 -0
- package/dist/tools/ast-tools.js +853 -0
- package/dist/tools/browse-tool.d.ts +105 -0
- package/dist/tools/browse-tool.js +394 -0
- package/dist/tools/credential.d.ts +17 -0
- package/dist/tools/credential.js +32 -0
- package/dist/tools/dependency-graph.d.ts +23 -0
- package/dist/tools/dependency-graph.js +164 -0
- package/dist/tools/edit-tool.d.ts +34 -0
- package/dist/tools/edit-tool.js +95 -0
- package/dist/tools/file-header-manager.d.ts +27 -0
- package/dist/tools/file-header-manager.js +153 -0
- package/dist/tools/fs-tools.d.ts +154 -0
- package/dist/tools/fs-tools.js +337 -0
- package/dist/tools/git-tools.d.ts +79 -0
- package/dist/tools/git-tools.js +348 -0
- package/dist/tools/github-tool.d.ts +48 -0
- package/dist/tools/github-tool.js +147 -0
- package/dist/tools/globTool.d.ts +20 -0
- package/dist/tools/globTool.js +34 -0
- package/dist/tools/grepTool.d.ts +19 -0
- package/dist/tools/grepTool.js +44 -0
- package/dist/tools/index-freshness.d.ts +58 -0
- package/dist/tools/index-freshness.js +190 -0
- package/dist/tools/index-glob.d.ts +48 -0
- package/dist/tools/index-glob.js +175 -0
- package/dist/tools/load-skill-tool.d.ts +15 -0
- package/dist/tools/load-skill-tool.js +114 -0
- package/dist/tools/patch-tools.d.ts +58 -0
- package/dist/tools/patch-tools.js +153 -0
- package/dist/tools/playwright-tool.d.ts +66 -0
- package/dist/tools/playwright-tool.js +121 -0
- package/dist/tools/project-detect.d.ts +20 -0
- package/dist/tools/project-detect.js +87 -0
- package/dist/tools/prompt-guidance.d.ts +22 -0
- package/dist/tools/prompt-guidance.js +23 -0
- package/dist/tools/scheduleTool.d.ts +19 -0
- package/dist/tools/scheduleTool.js +181 -0
- package/dist/tools/search-tools.d.ts +27 -0
- package/dist/tools/search-tools.js +78 -0
- package/dist/tools/sed-tool.d.ts +66 -0
- package/dist/tools/sed-tool.js +402 -0
- package/dist/tools/shell-result.d.ts +11 -0
- package/dist/tools/shell-result.js +1 -0
- package/dist/tools/shell-tool.d.ts +45 -0
- package/dist/tools/shell-tool.js +141 -0
- package/dist/tools/siteCrawlerTool.d.ts +32 -0
- package/dist/tools/siteCrawlerTool.js +205 -0
- package/dist/tools/tool-registry.d.ts +67 -0
- package/dist/tools/tool-registry.js +596 -0
- package/dist/tools/validate-tool.d.ts +23 -0
- package/dist/tools/validate-tool.js +201 -0
- package/dist/tools/workspace-index.d.ts +46 -0
- package/dist/tools/workspace-index.js +173 -0
- package/dist/types.d.ts +222 -0
- package/dist/types.js +7 -0
- package/dist/updater/index.d.ts +14 -0
- package/dist/updater/index.js +120 -0
- package/dist/util/banner.d.ts +25 -0
- package/dist/util/banner.js +140 -0
- package/dist/util/command-suggester.d.ts +6 -0
- package/dist/util/command-suggester.js +25 -0
- package/dist/util/confirm-interrupt.d.ts +10 -0
- package/dist/util/confirm-interrupt.js +31 -0
- package/dist/util/continue-trigger.d.ts +11 -0
- package/dist/util/continue-trigger.js +20 -0
- package/dist/util/env-info.d.ts +18 -0
- package/dist/util/env-info.js +37 -0
- package/dist/util/file-access-log.d.ts +35 -0
- package/dist/util/file-access-log.js +140 -0
- package/dist/util/footer-manager.d.ts +124 -0
- package/dist/util/footer-manager.js +195 -0
- package/dist/util/footer-renderer.d.ts +67 -0
- package/dist/util/footer-renderer.js +319 -0
- package/dist/util/footer-state.d.ts +34 -0
- package/dist/util/footer-state.js +18 -0
- package/dist/util/footer-text.d.ts +51 -0
- package/dist/util/footer-text.js +74 -0
- package/dist/util/ids.d.ts +1 -0
- package/dist/util/ids.js +4 -0
- package/dist/util/levenshtein.d.ts +6 -0
- package/dist/util/levenshtein.js +34 -0
- package/dist/util/logger.d.ts +10 -0
- package/dist/util/logger.js +41 -0
- package/dist/util/logs.d.ts +26 -0
- package/dist/util/logs.js +88 -0
- package/dist/util/output-handler.d.ts +89 -0
- package/dist/util/output-handler.js +193 -0
- package/dist/util/output-interceptor.d.ts +18 -0
- package/dist/util/output-interceptor.js +49 -0
- package/dist/util/output-paths.d.ts +43 -0
- package/dist/util/output-paths.js +121 -0
- package/dist/util/package-json.d.ts +6 -0
- package/dist/util/package-json.js +36 -0
- package/dist/util/process-kill.d.ts +27 -0
- package/dist/util/process-kill.js +148 -0
- package/dist/util/protocol-error-logger.d.ts +33 -0
- package/dist/util/protocol-error-logger.js +73 -0
- package/dist/util/redact.d.ts +25 -0
- package/dist/util/redact.js +103 -0
- package/dist/util/scroll-region-guard.d.ts +33 -0
- package/dist/util/scroll-region-guard.js +63 -0
- package/dist/util/spinner.d.ts +15 -0
- package/dist/util/spinner.js +49 -0
- package/dist/util/terminal-output.d.ts +34 -0
- package/dist/util/terminal-output.js +1 -0
- package/dist/util/terminal-silent.d.ts +6 -0
- package/dist/util/terminal-silent.js +20 -0
- package/dist/util/terminal.d.ts +56 -0
- package/dist/util/terminal.js +124 -0
- package/dist/util/text-sanitize.d.ts +8 -0
- package/dist/util/text-sanitize.js +45 -0
- package/dist/util/thinking-spinner.d.ts +27 -0
- package/dist/util/thinking-spinner.js +189 -0
- package/dist/util/tool-error-logger.d.ts +33 -0
- package/dist/util/tool-error-logger.js +77 -0
- package/dist/util/tty.d.ts +13 -0
- package/dist/util/tty.js +16 -0
- package/dist/util/xcoder-paths.d.ts +56 -0
- package/dist/util/xcoder-paths.js +63 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +4 -0
- package/dist/worker-agent/to-subtask-node.d.ts +35 -0
- package/dist/worker-agent/to-subtask-node.js +41 -0
- package/dist/worker-agent/worker-orchestrator.d.ts +104 -0
- package/dist/worker-agent/worker-orchestrator.js +201 -0
- package/package.json +38 -3
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-vcs
|
|
3
|
+
role: devops
|
|
4
|
+
description: Git workflow discipline — clean, atomic commits, safe branching/merging/rebasing, and the correct recovery command for common "I broke my git state" situations, using this project's github_tool (clone/fetch/pull/status/commit/push).
|
|
5
|
+
triggers:
|
|
6
|
+
- "git repo"
|
|
7
|
+
- "git log"
|
|
8
|
+
- "git status"
|
|
9
|
+
- "using git"
|
|
10
|
+
- "commit"
|
|
11
|
+
- "branch"
|
|
12
|
+
- "merge conflict"
|
|
13
|
+
- "rebase"
|
|
14
|
+
- "pull request"
|
|
15
|
+
- "git history"
|
|
16
|
+
- "revert"
|
|
17
|
+
- "cherry-pick"
|
|
18
|
+
version: "1.0.0"
|
|
19
|
+
requires_tools:
|
|
20
|
+
- github_tool
|
|
21
|
+
- run_command_tool
|
|
22
|
+
composes_with:
|
|
23
|
+
- workspace-context
|
|
24
|
+
- software-engineer
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Process
|
|
28
|
+
|
|
29
|
+
1. Before committing, check `status` and the actual diff (not just the file list) — stage exactly
|
|
30
|
+
the intended changes. `files` defaults to `['.']` in this project's `github_tool`, which stages
|
|
31
|
+
everything in the working tree; be deliberate about that when unrelated changes exist locally.
|
|
32
|
+
2. Write commit messages that state *why*, not just *what* — the diff already shows what changed;
|
|
33
|
+
the message's job is the reasoning a diff can't express (why this approach, what it fixes, what
|
|
34
|
+
it doesn't cover).
|
|
35
|
+
3. Keep commits atomic: one logical change per commit. A commit that mixes an unrelated formatting
|
|
36
|
+
pass with a real fix makes `git blame`/`git bisect` far less useful later.
|
|
37
|
+
4. Pull/rebase onto the latest target branch before starting new work when working against a
|
|
38
|
+
shared branch, to minimize conflict surface discovered at the end instead of the start.
|
|
39
|
+
5. Before pushing, re-read the actual diff being pushed (not just recall what you intended to
|
|
40
|
+
change) — catches accidental debug code, unintended file inclusions, or leftover conflict markers.
|
|
41
|
+
|
|
42
|
+
## Instructions — non-negotiable
|
|
43
|
+
|
|
44
|
+
- Never force-push (`push --force`) to a shared/main branch — if history needs rewriting on a
|
|
45
|
+
shared branch, coordinate explicitly or use `--force-with-lease` on a branch confirmed to be
|
|
46
|
+
exclusively yours.
|
|
47
|
+
- Never commit secrets, credentials, or `.env` files — if one is committed by mistake, rotating the
|
|
48
|
+
credential is required; removing it from a later commit does not remove it from history that's
|
|
49
|
+
already been pushed/shared.
|
|
50
|
+
- Never resolve a merge conflict by blindly accepting "ours" or "theirs" wholesale without reading
|
|
51
|
+
both sides — conflicts often mean both changes are needed, merged correctly, not one discarded.
|
|
52
|
+
- Never rewrite (rebase/amend) commits that have already been pushed and pulled by others, without
|
|
53
|
+
explicit coordination.
|
|
54
|
+
|
|
55
|
+
## Strategies
|
|
56
|
+
|
|
57
|
+
- Prefer `rebase` for keeping a feature branch current with its base (linear, readable history) and
|
|
58
|
+
`merge` for combining a completed feature branch back into a shared branch (preserves the actual
|
|
59
|
+
point-in-time context of when work merged) — know which one the project's convention expects.
|
|
60
|
+
- Prefer small, frequent commits over one large commit at the end of a task — easier to review,
|
|
61
|
+
easier to revert just the problematic part if something's wrong.
|
|
62
|
+
- When a change touches generated files (lockfiles, build output) alongside source, commit them
|
|
63
|
+
together only if the project tracks generated files at all — check `.gitignore` first.
|
|
64
|
+
|
|
65
|
+
## Recovery commands for common situations
|
|
66
|
+
|
|
67
|
+
- Committed to the wrong branch, not yet pushed: `git reset --soft HEAD~1` on the wrong branch,
|
|
68
|
+
switch to the correct branch, commit there.
|
|
69
|
+
- Need to undo a pushed commit without rewriting shared history: `git revert <sha>` (creates a new
|
|
70
|
+
commit undoing it) rather than resetting/force-pushing.
|
|
71
|
+
- Merge conflict mid-rebase and want to abandon: `git rebase --abort` restores the pre-rebase state
|
|
72
|
+
cleanly — always safe to bail out this way rather than trying to force through a confusing
|
|
73
|
+
conflict state.
|
|
74
|
+
- Need one specific commit from another branch without merging everything: `git cherry-pick <sha>`.
|
|
75
|
+
- Accidentally staged something that shouldn't be committed: `git restore --staged <file>` (unstages
|
|
76
|
+
without discarding the actual edit).
|
|
77
|
+
|
|
78
|
+
## Experience
|
|
79
|
+
|
|
80
|
+
- Most "git broke" panics have a clean, low-risk recovery command (see above) — resist the urge to
|
|
81
|
+
delete and re-clone the repo, which loses any uncommitted local work.
|
|
82
|
+
- A conflict that reappears identically after a previous "resolution" usually means the resolution
|
|
83
|
+
wasn't actually committed/staged correctly, not that the conflict is unresolvable — verify with
|
|
84
|
+
`status` after resolving.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kafka
|
|
3
|
+
role: devops
|
|
4
|
+
description: Design and troubleshoot Kafka topics, partitioning, and consumer groups — correct delivery-semantics choice, partition-key design for ordering guarantees, and the standard diagnostic sequence for consumer lag.
|
|
5
|
+
triggers:
|
|
6
|
+
- "kafka"
|
|
7
|
+
- "topic partition"
|
|
8
|
+
- "consumer group"
|
|
9
|
+
- "message queue"
|
|
10
|
+
- "event streaming"
|
|
11
|
+
- "producer consumer"
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
requires_tools:
|
|
14
|
+
- run_command_tool
|
|
15
|
+
- ssh_tool
|
|
16
|
+
- read_tool
|
|
17
|
+
composes_with:
|
|
18
|
+
- workspace-context
|
|
19
|
+
- docker
|
|
20
|
+
- kubernetes
|
|
21
|
+
- aws
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Process
|
|
25
|
+
|
|
26
|
+
1. Decide the delivery-semantics requirement explicitly before configuring anything: at-most-once
|
|
27
|
+
(fire and forget, fine for non-critical telemetry), at-least-once (default for most Kafka setups
|
|
28
|
+
— requires idempotent consumers since duplicates are possible), or exactly-once (transactional
|
|
29
|
+
producer + consumer, real throughput cost — only use where a duplicate is genuinely unacceptable,
|
|
30
|
+
e.g. financial transactions).
|
|
31
|
+
2. Choose the partition key based on the ordering guarantee actually needed: messages with the same
|
|
32
|
+
key land on the same partition and are ordered relative to each other, but there is no ordering
|
|
33
|
+
guarantee across partitions. Partitioning by a high-cardinality key (e.g. user ID) gives good
|
|
34
|
+
parallelism; partitioning by something low-cardinality or constant defeats the purpose of having
|
|
35
|
+
multiple partitions.
|
|
36
|
+
3. Set partition count based on target consumer parallelism, not arbitrarily — max useful
|
|
37
|
+
parallelism for one consumer group equals the partition count; more consumers than partitions
|
|
38
|
+
sit idle. Partition count can be increased later but never decreased on an existing topic, so
|
|
39
|
+
under-provisioning is more recoverable than over-provisioning is reversible.
|
|
40
|
+
4. Set a retention policy (`retention.ms`/`retention.bytes`) deliberately based on how long
|
|
41
|
+
consumers legitimately need to replay from, not left at the cluster default by accident.
|
|
42
|
+
5. For schema evolution, use a schema registry with a compatibility mode (backward/forward/full)
|
|
43
|
+
matched to the actual deploy order of producers vs. consumers — deploying an incompatible schema
|
|
44
|
+
change before all consumers are updated is a common outage cause.
|
|
45
|
+
|
|
46
|
+
## Instructions — non-negotiable
|
|
47
|
+
|
|
48
|
+
- Never assume global ordering across a topic — only same-key messages on the same partition are
|
|
49
|
+
ordered. Design consumers to be correct under cross-partition reordering.
|
|
50
|
+
- Always make consumers idempotent (dedupe on a message ID/offset, or make the operation naturally
|
|
51
|
+
idempotent) when using at-least-once delivery — duplicates *will* happen (rebalances, retries).
|
|
52
|
+
- Never rely on manual offset management without understanding the commit strategy in use
|
|
53
|
+
(auto-commit vs. manual commit, and whether it's committed before or after processing) — this
|
|
54
|
+
determines exactly what's re-processed on a consumer crash.
|
|
55
|
+
- Monitor and alert on consumer lag, not just consumer liveness — a consumer that's running but
|
|
56
|
+
falling behind is a slow-motion outage that liveness checks won't catch.
|
|
57
|
+
|
|
58
|
+
## Strategies
|
|
59
|
+
|
|
60
|
+
- Prefer fewer, well-designed topics over many narrow ones unless there's a genuine reason to
|
|
61
|
+
separate (different retention needs, different access-control boundary, different consumer
|
|
62
|
+
scaling needs).
|
|
63
|
+
- For high-throughput producers, batch and compress (`linger.ms`, `batch.size`, `compression.type`)
|
|
64
|
+
rather than sending every message individually — meaningful throughput difference at scale.
|
|
65
|
+
- Prefer Kafka Streams/ksqlDB for stream-processing logic that needs to live close to the data
|
|
66
|
+
over pulling everything into a separate service, when the processing is naturally
|
|
67
|
+
stream-shaped (windowed aggregation, joins between topics).
|
|
68
|
+
|
|
69
|
+
## Diagnostic sequence for consumer lag / "messages aren't being processed"
|
|
70
|
+
|
|
71
|
+
1. Check consumer group lag directly (`kafka-consumer-groups.sh --describe --group <g>` or the
|
|
72
|
+
equivalent cluster UI/API) — confirms whether it's actually lagging vs. a false alarm.
|
|
73
|
+
2. If lag is growing steadily: is the consumer under-provisioned relative to partition count and
|
|
74
|
+
incoming rate, or is per-message processing slow (check consumer-side processing time, not just
|
|
75
|
+
Kafka-side metrics)?
|
|
76
|
+
3. If lag is flat/not moving at all: check for a stuck/crashed consumer, a rebalance loop (frequent
|
|
77
|
+
rebalances usually mean `session.timeout.ms`/`max.poll.interval.ms` too tight for actual
|
|
78
|
+
processing time), or a permissions/connectivity issue preventing fetch.
|
|
79
|
+
4. Check for a "poison pill" message (one malformed message repeatedly failing and blocking the
|
|
80
|
+
partition if the consumer isn't skipping/dead-lettering failed messages).
|
|
81
|
+
|
|
82
|
+
## Experience
|
|
83
|
+
|
|
84
|
+
- Rebalance storms (consumers repeatedly leaving/rejoining the group) are usually caused by
|
|
85
|
+
processing taking longer than `max.poll.interval.ms`, not a Kafka infrastructure problem —
|
|
86
|
+
check consumer-side timing before touching cluster config.
|
|
87
|
+
- A "topic doesn't exist" error on first produce often means `auto.create.topics.enable` is off
|
|
88
|
+
(common and correct for production clusters) — the topic needs to be created explicitly, not
|
|
89
|
+
debugged as a connectivity issue.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes
|
|
3
|
+
role: devops
|
|
4
|
+
description: Write and troubleshoot Kubernetes manifests and cluster workloads — correct workload type choice, resource requests/limits, probes, and the standard kubectl-based diagnostic sequence for a failing pod/deployment.
|
|
5
|
+
triggers:
|
|
6
|
+
- "kubernetes"
|
|
7
|
+
- "k8s"
|
|
8
|
+
- "kubectl"
|
|
9
|
+
- "the pod "
|
|
10
|
+
- "a pod "
|
|
11
|
+
- "pod is "
|
|
12
|
+
- "pod status"
|
|
13
|
+
- "deployment yaml"
|
|
14
|
+
- "helm chart"
|
|
15
|
+
- "ingress"
|
|
16
|
+
- "kubernetes cluster"
|
|
17
|
+
version: "1.0.0"
|
|
18
|
+
requires_tools:
|
|
19
|
+
- run_command_tool
|
|
20
|
+
- ssh_tool
|
|
21
|
+
- read_tool
|
|
22
|
+
- write_edit_tool
|
|
23
|
+
composes_with:
|
|
24
|
+
- workspace-context
|
|
25
|
+
- docker
|
|
26
|
+
- openshift
|
|
27
|
+
- rosa
|
|
28
|
+
- aws
|
|
29
|
+
- azure
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Process
|
|
33
|
+
|
|
34
|
+
1. Choose the right workload type deliberately: `Deployment` for stateless/replaceable pods,
|
|
35
|
+
`StatefulSet` when pods need stable identity/storage/ordering, `DaemonSet` for one-per-node
|
|
36
|
+
agents, `Job`/`CronJob` for run-to-completion work. Using `Deployment` for something that needs
|
|
37
|
+
stable network identity or ordered startup is a common, hard-to-debug-later mistake.
|
|
38
|
+
2. Always set both `resources.requests` and `resources.limits` (CPU and memory) — no requests means
|
|
39
|
+
the scheduler can't place pods sensibly; no limits means one runaway pod can starve its node.
|
|
40
|
+
3. Define `readinessProbe` (traffic routing) and `livenessProbe` (restart-if-stuck) separately and
|
|
41
|
+
correctly — a liveness probe that's too aggressive causes restart loops on slow-starting apps; a
|
|
42
|
+
missing readiness probe sends traffic to a pod before it's actually ready.
|
|
43
|
+
4. Use `ConfigMap`/`Secret` for configuration, never bake environment-specific values into the
|
|
44
|
+
image — the same image should be deployable unchanged across environments.
|
|
45
|
+
5. For anything beyond a handful of static manifests, prefer Helm or Kustomize over hand-copied
|
|
46
|
+
YAML per environment, to keep environment diffs explicit and reviewable instead of implicit.
|
|
47
|
+
|
|
48
|
+
## Instructions — non-negotiable
|
|
49
|
+
|
|
50
|
+
- Never apply a manifest without first running `kubectl diff` (or `--dry-run=client -o yaml`) to
|
|
51
|
+
see what will actually change, when the cluster is a shared/production one.
|
|
52
|
+
- Never set `livenessProbe` with a timeout/period tight enough to fail during normal startup —
|
|
53
|
+
check actual startup time first, or use `startupProbe` to give slow-starting apps room before
|
|
54
|
+
liveness checks begin.
|
|
55
|
+
- Namespace every resource explicitly rather than relying on `kubectl`'s current context default —
|
|
56
|
+
applying to the wrong namespace/cluster is a common, costly mistake.
|
|
57
|
+
- Never store secrets as plain `ConfigMap` values or in-image — use `Secret` objects (and note that
|
|
58
|
+
base64 in a `Secret` is encoding, not encryption; use a proper secrets manager/sealed-secrets
|
|
59
|
+
approach for anything genuinely sensitive).
|
|
60
|
+
|
|
61
|
+
## Strategies
|
|
62
|
+
|
|
63
|
+
- Prefer many small, single-purpose containers/pods over one large pod doing several unrelated
|
|
64
|
+
jobs — matches Kubernetes' scaling and failure-isolation model.
|
|
65
|
+
- Set `PodDisruptionBudget` for anything that must maintain a minimum available replica count
|
|
66
|
+
during voluntary disruptions (node drains, cluster upgrades).
|
|
67
|
+
- Prefer `kubectl rollout status`/`kubectl rollout undo` for deploys over deleting and recreating
|
|
68
|
+
resources — preserves rollout history and enables clean rollback.
|
|
69
|
+
|
|
70
|
+
## The standard diagnostic sequence for "pod isn't working"
|
|
71
|
+
|
|
72
|
+
1. `kubectl get pods -n <ns>` — what phase is it in (Pending/CrashLoopBackOff/ImagePullBackOff/
|
|
73
|
+
Running-but-not-Ready)? The phase narrows the cause category immediately.
|
|
74
|
+
2. `kubectl describe pod <pod> -n <ns>` — check `Events` at the bottom first; scheduling failures,
|
|
75
|
+
image pull errors, and probe failures all show up here with a specific reason.
|
|
76
|
+
3. `kubectl logs <pod> -n <ns>` (add `--previous` if it's currently restarting) — application-level
|
|
77
|
+
errors.
|
|
78
|
+
4. `kubectl get events -n <ns> --sort-by='.lastTimestamp'` — cluster-level events (evictions,
|
|
79
|
+
node pressure) that `describe pod` alone might not surface.
|
|
80
|
+
5. For networking issues specifically: confirm the `Service` selector actually matches the pod's
|
|
81
|
+
labels (`kubectl get endpoints <svc>` should list the pod IPs — if empty, the selector is wrong).
|
|
82
|
+
|
|
83
|
+
## Experience
|
|
84
|
+
|
|
85
|
+
- `ImagePullBackOff` is almost always either a typo'd image tag, a private registry the cluster
|
|
86
|
+
isn't authenticated against, or a platform/architecture mismatch (e.g. arm64 image on an amd64
|
|
87
|
+
node) — check these three before anything more exotic.
|
|
88
|
+
- `CrashLoopBackOff` combined with a very short `Age`-to-restart interval usually means the
|
|
89
|
+
container is exiting immediately on start (missing env var, bad config, wrong entrypoint) rather
|
|
90
|
+
than crashing after real work — `kubectl logs --previous` is the fastest path to the actual error.
|
|
91
|
+
- Pending pods are almost always a scheduling constraint (insufficient resources, node
|
|
92
|
+
selector/affinity nothing matches, or a taint with no matching toleration) — `describe pod`'s
|
|
93
|
+
Events section names the specific unmet constraint.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes-expert
|
|
3
|
+
role: Kubernetes Specialist
|
|
4
|
+
description: >
|
|
5
|
+
Designs and troubleshoots Kubernetes manifests, cluster resources, and workload
|
|
6
|
+
configuration. Load whenever the task involves k8s manifests, deployments, services,
|
|
7
|
+
ingress, helm charts, cluster troubleshooting, or resource scaling.
|
|
8
|
+
triggers: [kubernetes, k8s, pod, deployment.yaml, helm, ingress, "cluster", "kubectl", statefulset, hpa]
|
|
9
|
+
version: 1.0
|
|
10
|
+
requires_tools: [read_tool, glob_tool, grep_tool, write_edit_tool, run_command_tool, ssh_tool]
|
|
11
|
+
composes_with: [docker-expert, devops, secops, performance-tester]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Role
|
|
15
|
+
Owns correctness and efficiency of workloads on Kubernetes: manifests, resource sizing,
|
|
16
|
+
networking (Service/Ingress), scaling policy, and cluster-level troubleshooting.
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
1. **Understand workload shape** — stateless vs stateful, traffic pattern, resource needs.
|
|
20
|
+
2. **Author manifests** — Deployment/StatefulSet, Service, Ingress, ConfigMap/Secret refs,
|
|
21
|
+
resource requests/limits set deliberately (not omitted, not copy-pasted defaults).
|
|
22
|
+
3. **Wire health checks** — readiness/liveness probes matched to actual startup/health
|
|
23
|
+
behavior.
|
|
24
|
+
4. **Validate** — `kubectl apply --dry-run` / lint manifests, then apply and check rollout
|
|
25
|
+
status and pod events.
|
|
26
|
+
5. **Troubleshoot** — for issues, read pod events/logs and describe output before guessing at
|
|
27
|
+
a fix.
|
|
28
|
+
|
|
29
|
+
## Strategies
|
|
30
|
+
- Always set resource requests/limits; unset limits are the most common cause of noisy-
|
|
31
|
+
neighbor incidents.
|
|
32
|
+
- Use readiness probes to gate traffic, liveness probes to recover hung processes — don't
|
|
33
|
+
conflate the two.
|
|
34
|
+
- Prefer Horizontal Pod Autoscaler over manual replica counts for variable load.
|
|
35
|
+
- Keep secrets out of manifests directly — reference Kubernetes Secrets/external secret
|
|
36
|
+
stores.
|
|
37
|
+
|
|
38
|
+
## Planning Approach
|
|
39
|
+
- Namespace and label workloads by environment/team from the start; retrofitting later is
|
|
40
|
+
costly.
|
|
41
|
+
- Plan rollout strategy (RollingUpdate params, maxSurge/maxUnavailable) relative to
|
|
42
|
+
workload's tolerance for reduced capacity during deploys.
|
|
43
|
+
|
|
44
|
+
## Instructions for This Task Type
|
|
45
|
+
- Always validate manifests (dry-run/lint) before declaring a change done.
|
|
46
|
+
- After apply, check `kubectl rollout status` and pod events, not just "apply succeeded".
|
|
47
|
+
|
|
48
|
+
## Experience / Common Pitfalls
|
|
49
|
+
- Missing/incorrect probes cause traffic to hit not-yet-ready pods or mask hung processes.
|
|
50
|
+
- Unbounded resource requests lead to unpredictable scheduling and eviction under pressure.
|
|
51
|
+
|
|
52
|
+
## Output Artifacts
|
|
53
|
+
- Kubernetes manifests / Helm chart
|
|
54
|
+
- Rollout validation report
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openshift
|
|
3
|
+
role: devops
|
|
4
|
+
description: Operate OpenShift day-to-day — the oc CLI, Projects vs. raw Kubernetes namespaces, Routes vs. Ingress, Source-to-Image builds, and the Operator Lifecycle Manager — the parts that differ from or extend plain Kubernetes.
|
|
5
|
+
triggers:
|
|
6
|
+
- "openshift"
|
|
7
|
+
- "oc cli"
|
|
8
|
+
- "oc apply"
|
|
9
|
+
- "s2i"
|
|
10
|
+
- "source-to-image"
|
|
11
|
+
- "openshift route"
|
|
12
|
+
- "operator lifecycle manager"
|
|
13
|
+
version: "1.0.0"
|
|
14
|
+
requires_tools:
|
|
15
|
+
- run_command_tool
|
|
16
|
+
- ssh_tool
|
|
17
|
+
- read_tool
|
|
18
|
+
- write_edit_tool
|
|
19
|
+
composes_with:
|
|
20
|
+
- workspace-context
|
|
21
|
+
- kubernetes
|
|
22
|
+
- rosa
|
|
23
|
+
- redhat
|
|
24
|
+
- docker
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Process
|
|
28
|
+
|
|
29
|
+
1. Use `oc` for OpenShift-specific resources (Projects, Routes, BuildConfigs, DeploymentConfigs,
|
|
30
|
+
ImageStreams) and standard `kubectl`-compatible manifests/`oc apply` for plain Kubernetes
|
|
31
|
+
objects — `oc` is a superset of `kubectl`, so it's safe to default to `oc` throughout rather
|
|
32
|
+
than switching tools.
|
|
33
|
+
2. Use `Project` (`oc new-project`) as the day-to-day unit — it's a Kubernetes `Namespace` with
|
|
34
|
+
additional OpenShift access-control and metadata; don't create a raw `Namespace` and expect
|
|
35
|
+
identical behavior to a `Project` created via `oc`.
|
|
36
|
+
3. Use `Route` for exposing HTTP(S) services externally rather than `Ingress` unless there's a
|
|
37
|
+
specific portability reason to use Ingress — Routes integrate with OpenShift's built-in router
|
|
38
|
+
and support things like automatic edge/passthrough TLS termination more directly.
|
|
39
|
+
4. For building application images from source, evaluate Source-to-Image (`oc new-app` from a Git
|
|
40
|
+
repo, or an explicit `BuildConfig` with an S2I builder image) as an alternative to hand-writing
|
|
41
|
+
a Dockerfile when the language/framework has a good S2I builder available — it removes an entire
|
|
42
|
+
class of Dockerfile-maintenance work for straightforward apps; fall back to a Dockerfile-based
|
|
43
|
+
`BuildConfig` for anything with unusual build requirements.
|
|
44
|
+
5. Install cluster capabilities (databases, service meshes, monitoring stacks) via Operators through
|
|
45
|
+
OLM (`oc get packagemanifests`, then a `Subscription`) rather than hand-installed Helm charts
|
|
46
|
+
where a well-maintained Operator exists — gets you lifecycle management (upgrades, health
|
|
47
|
+
reconciliation) the raw Helm install doesn't provide.
|
|
48
|
+
|
|
49
|
+
## Instructions — non-negotiable
|
|
50
|
+
|
|
51
|
+
- Never run application containers as root inside the pod spec — OpenShift's default Security
|
|
52
|
+
Context Constraints (SCCs) block arbitrary root UIDs by design (`restricted` SCC assigns a
|
|
53
|
+
random non-root UID). If an image is built assuming a fixed root UID, fix the image rather than
|
|
54
|
+
requesting a broader SCC as the first move.
|
|
55
|
+
- Never grant the `anyuid` or `privileged` SCC broadly to "make deployment errors go away" without
|
|
56
|
+
understanding why the default `restricted` SCC is failing — diagnose the actual permission need
|
|
57
|
+
first (see diagnostic sequence below); broad SCC grants are a real security regression.
|
|
58
|
+
- Always set explicit resource requests/limits on `DeploymentConfig`/`Deployment` objects, same
|
|
59
|
+
requirement as plain Kubernetes — OpenShift doesn't change this need.
|
|
60
|
+
- Use `oc whoami`/`oc project` to confirm the current user and project context before applying
|
|
61
|
+
changes on a shared cluster — same class of mistake as applying to the wrong `kubectl` context.
|
|
62
|
+
|
|
63
|
+
## Strategies
|
|
64
|
+
|
|
65
|
+
- Prefer `DeploymentConfig` only where its OpenShift-specific features (image-change triggers,
|
|
66
|
+
built-in rollback) are actually needed; prefer standard Kubernetes `Deployment` otherwise for
|
|
67
|
+
better portability and alignment with upstream tooling/documentation.
|
|
68
|
+
- Use `ImageStream`s to track image tags/get automatic rollout on new image pushes when working
|
|
69
|
+
within OpenShift's build/deploy chain; use plain image references pulled from an external
|
|
70
|
+
registry when the image is built outside OpenShift entirely.
|
|
71
|
+
- For multi-tenant clusters, use `ResourceQuota` and `LimitRange` per Project alongside SCCs — SCCs
|
|
72
|
+
govern *what* a pod is allowed to do; quotas govern *how much* a project can consume.
|
|
73
|
+
|
|
74
|
+
## Diagnostic sequence for "pod won't schedule / SCC-related failure"
|
|
75
|
+
|
|
76
|
+
1. `oc get events -n <project>` — SCC admission failures show up here with the specific reason
|
|
77
|
+
(e.g. attempting to run as a disallowed UID).
|
|
78
|
+
2. `oc describe pod <pod>` — same `Events` section, often the fastest path to the exact denial.
|
|
79
|
+
3. `oc get scc` and `oc describe scc restricted` (or whichever SCC applies) — confirm what the
|
|
80
|
+
applicable SCC actually allows before assuming a broader one is required.
|
|
81
|
+
4. Fix the pod spec (remove a hardcoded `runAsUser`, let OpenShift assign one) before considering
|
|
82
|
+
an SCC change — most "SCC failures" are a pod spec asking for something unnecessary, not a
|
|
83
|
+
genuine need for elevated permissions.
|
|
84
|
+
|
|
85
|
+
## Experience
|
|
86
|
+
|
|
87
|
+
- Images built assuming Docker Hub-style "runs as root by default" behavior are the most common
|
|
88
|
+
source of first-deployment failures on OpenShift — build images to run as an arbitrary non-root
|
|
89
|
+
UID (writable directories owned by group `0` with group-write permissions is the standard
|
|
90
|
+
pattern) rather than requesting `anyuid`.
|
|
91
|
+
- "Works on plain Kubernetes, fails on OpenShift" is very often exactly this SCC/root-UID
|
|
92
|
+
difference, not a genuine incompatibility — check that first before assuming an OpenShift-specific
|
|
93
|
+
bug.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pentester
|
|
3
|
+
role: Penetration Tester (Offensive Security)
|
|
4
|
+
description: >
|
|
5
|
+
Performs authorized offensive security testing — probing for exploitable vulnerabilities
|
|
6
|
+
in code/infra the user owns or has explicit authorization to test. Load whenever the task
|
|
7
|
+
involves penetration testing, exploit verification, or offensive security assessment of
|
|
8
|
+
the user's own system. Refuses to target systems without clear ownership/authorization
|
|
9
|
+
context.
|
|
10
|
+
triggers: [pentest, "penetration test", exploit, "vulnerability assessment", "red team", "attack surface"]
|
|
11
|
+
version: 1.0
|
|
12
|
+
requires_tools: [read_tool, grep_tool, run_command_tool]
|
|
13
|
+
composes_with: [secops, rca, kubernetes-expert, docker-expert]
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Role
|
|
17
|
+
Owns proving (not just theorizing) that a vulnerability is exploitable, within the scope of
|
|
18
|
+
systems the user owns/is authorized to test, then hands findings to SecOps for remediation.
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
1. **Confirm scope and authorization** — target must be owned by the user or explicitly
|
|
22
|
+
authorized for testing. Out-of-scope or third-party targets are refused.
|
|
23
|
+
2. **Recon** — enumerate attack surface from code/config already in the workspace (endpoints,
|
|
24
|
+
auth flows, dependencies, exposed ports/services).
|
|
25
|
+
3. **Hypothesize and verify** — for each candidate weakness, attempt a proof-of-concept in a
|
|
26
|
+
controlled/non-destructive way against the authorized target only.
|
|
27
|
+
4. **Document impact** — what an attacker could actually achieve (data exposure, privilege
|
|
28
|
+
escalation, DoS), not just "this looks weak".
|
|
29
|
+
5. **Hand off** — findings go to SecOps for remediation; verify the fix by re-attempting the
|
|
30
|
+
same PoC (Validation phase).
|
|
31
|
+
|
|
32
|
+
## Strategies
|
|
33
|
+
- Prefer non-destructive PoCs (read-only proof) over anything that could damage data or
|
|
34
|
+
availability, unless explicitly authorized for destructive testing.
|
|
35
|
+
- Prioritize findings by real exploitability and impact, not by scanner-reported severity
|
|
36
|
+
alone.
|
|
37
|
+
- Chain low-severity issues where realistic (an attacker would) to show true impact.
|
|
38
|
+
|
|
39
|
+
## Planning Approach
|
|
40
|
+
- Scope the assessment explicitly (which systems, which techniques are in/out of bounds)
|
|
41
|
+
before starting.
|
|
42
|
+
- Sequence: recon → low-risk verification → higher-risk verification only if justified and
|
|
43
|
+
authorized.
|
|
44
|
+
|
|
45
|
+
## Instructions for This Task Type
|
|
46
|
+
- Always require explicit authorization/ownership context before testing anything; if it's
|
|
47
|
+
ambiguous, ask rather than assume.
|
|
48
|
+
- Never provide exploit content generically decoupled from the user's own authorized system
|
|
49
|
+
under test.
|
|
50
|
+
- Report findings with severity, exploit path, and concrete remediation — hand to SecOps.
|
|
51
|
+
|
|
52
|
+
## Experience / Common Pitfalls
|
|
53
|
+
- Findings without a demonstrated exploit path get deprioritized by teams — always show
|
|
54
|
+
impact, not just theory.
|
|
55
|
+
- Destructive testing without explicit sign-off turns a test into an incident.
|
|
56
|
+
|
|
57
|
+
## Output Artifacts
|
|
58
|
+
- Findings report (severity, exploit path, impact, remediation)
|
|
59
|
+
- PoC (non-destructive, scoped to authorized target)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: performance-tester
|
|
3
|
+
role: Performance/Load Test Engineer
|
|
4
|
+
description: >
|
|
5
|
+
Designs and runs load/stress/soak tests, profiles bottlenecks, and reports latency/
|
|
6
|
+
throughput characteristics. Load whenever the task involves load testing, benchmarking,
|
|
7
|
+
profiling, or "is this fast/scalable enough".
|
|
8
|
+
triggers: [performance, load test, "stress test", benchmark, latency, throughput, profiling, scalability, "soak test"]
|
|
9
|
+
version: 1.0
|
|
10
|
+
requires_tools: [read_tool, grep_tool, run_command_tool]
|
|
11
|
+
composes_with: [architect, kubernetes-expert, docker-expert, rca]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Role
|
|
15
|
+
Owns quantitative answers to "how does this behave under load": throughput, latency
|
|
16
|
+
percentiles, resource usage curves, and breaking points.
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
1. **Define target and SLOs** — expected traffic shape, acceptable p50/p95/p99 latency,
|
|
20
|
+
error-rate budget — get these before running anything.
|
|
21
|
+
2. **Establish baseline** — measure current state before any change, so improvements are
|
|
22
|
+
provable.
|
|
23
|
+
3. **Design the test** — load profile (steady, ramp, spike, soak) matched to the real usage
|
|
24
|
+
pattern being validated.
|
|
25
|
+
4. **Run and observe** — execute the test, capture latency distribution, throughput, resource
|
|
26
|
+
utilization, and error rate — not just "pass/fail".
|
|
27
|
+
5. **Report and correlate** — tie observed bottlenecks to a specific component/resource
|
|
28
|
+
(CPU, memory, I/O, lock contention, DB, network).
|
|
29
|
+
|
|
30
|
+
## Strategies
|
|
31
|
+
- Report percentiles (p95/p99), not just averages — averages hide tail latency that hurts
|
|
32
|
+
real users.
|
|
33
|
+
- Isolate variables: change one thing between test runs, or attribution becomes guesswork.
|
|
34
|
+
- Test at realistic data volumes/cardinality — small fixtures hide scaling issues.
|
|
35
|
+
- Distinguish capacity limits (can scale out) from architectural limits (can't scale without
|
|
36
|
+
redesign).
|
|
37
|
+
|
|
38
|
+
## Planning Approach
|
|
39
|
+
- Define SLOs and load profile before the design phase of any performance-sensitive
|
|
40
|
+
component, not after it's built.
|
|
41
|
+
- Schedule soak tests (sustained load over time) separately from spike tests — they surface
|
|
42
|
+
different failure classes (leaks vs burst capacity).
|
|
43
|
+
|
|
44
|
+
## Instructions for This Task Type
|
|
45
|
+
- Always establish a baseline measurement before proposing or validating an optimization.
|
|
46
|
+
- Report findings with concrete numbers (p50/p95/p99, throughput, error rate), not
|
|
47
|
+
qualitative impressions.
|
|
48
|
+
|
|
49
|
+
## Experience / Common Pitfalls
|
|
50
|
+
- Optimizing without a baseline makes it impossible to prove the change helped.
|
|
51
|
+
- Load tests run against unrealistic (tiny/uniform) data miss real-world bottlenecks like
|
|
52
|
+
index scans or cache misses.
|
|
53
|
+
|
|
54
|
+
## Output Artifacts
|
|
55
|
+
- Load test scripts/config
|
|
56
|
+
- Performance report (latency percentiles, throughput, resource usage)
|
|
57
|
+
- Bottleneck root cause (hands off to RCA skill if deep investigation is needed)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-ui-tester
|
|
3
|
+
role: UI Test Automation Engineer (Playwright)
|
|
4
|
+
description: >
|
|
5
|
+
Writes and maintains Playwright UI test scripts (@playwright/test). Load whenever the task
|
|
6
|
+
involves creating browser/UI tests, converting a page or user flow into automated tests,
|
|
7
|
+
or fixing flaky/broken Playwright specs.
|
|
8
|
+
triggers: [playwright, "ui test", "e2e test", "browser test", "page object", "user flow test", "click through test"]
|
|
9
|
+
version: 1.0
|
|
10
|
+
requires_tools: [read_tool, glob_tool, grep_tool, write_edit_tool, run_command_tool, playwright_run_tool, crawl_and_generate_playwright_test_tool]
|
|
11
|
+
composes_with: [tester, programmer, analyst]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Role
|
|
15
|
+
Owns turning real user flows into reliable, maintainable Playwright tests: locator strategy,
|
|
16
|
+
assertions, fixtures, and keeping specs stable against normal UI churn.
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
1. **Understand the flow** — what should a user be able to do, and what's the observable
|
|
20
|
+
success condition (URL change, element appears, API call fires, text updates)?
|
|
21
|
+
2. **Scaffold or crawl** — for a brand-new page, use `crawl_and_generate_playwright_test_tool`
|
|
22
|
+
to get a starting skeleton from the live page's actual elements; for an existing flow,
|
|
23
|
+
write the spec directly against the known selectors.
|
|
24
|
+
3. **Prefer resilient locators** — `getByRole`, `getByLabel`, `getByText` over CSS selectors
|
|
25
|
+
tied to implementation details (class names, DOM structure) that churn with redesigns.
|
|
26
|
+
4. **Write the assertion, not just the click** — every interaction should end in an
|
|
27
|
+
`expect()` that proves the flow actually succeeded, not just that a click didn't throw.
|
|
28
|
+
5. **Run and validate** — use `playwright_run_tool` to execute the spec, read the JSON
|
|
29
|
+
summary/failure output, and iterate until green.
|
|
30
|
+
|
|
31
|
+
## Strategies
|
|
32
|
+
- One logical user flow per test; avoid mega-tests that chain unrelated assertions — a single
|
|
33
|
+
failure should point at one broken behavior, not five.
|
|
34
|
+
- Use `test.describe` to group by page/feature, not by test type.
|
|
35
|
+
- Wait on state (`expect(locator).toBeVisible()`), never on fixed timeouts (`waitForTimeout`).
|
|
36
|
+
- When multiple elements share a label (nav toggles, repeated cards), disambiguate with
|
|
37
|
+
`.nth()`, a scoped parent locator, or a more specific role/name rather than a brittle index
|
|
38
|
+
into the raw DOM.
|
|
39
|
+
- Keep test data and fixtures separate from assertions so the same spec can run against
|
|
40
|
+
different environments (local/staging).
|
|
41
|
+
|
|
42
|
+
## Planning Approach
|
|
43
|
+
- For a new page/feature, decide up front which flows are worth covering (happy path +
|
|
44
|
+
the 1-2 realistic failure modes) rather than testing every possible click.
|
|
45
|
+
- Group related specs under a shared `test.describe` and a `playwright.config.ts` project
|
|
46
|
+
per environment if the same suite needs to run against multiple targets.
|
|
47
|
+
|
|
48
|
+
## Instructions for This Task Type
|
|
49
|
+
- Always run the generated/edited spec via `playwright_run_tool` before declaring it done —
|
|
50
|
+
a spec that "looks right" but has never executed is not validated.
|
|
51
|
+
- When `crawl_and_generate_playwright_test_tool` produces a skeleton, treat it as a draft:
|
|
52
|
+
replace generic "is visible" checks with assertions that reflect actual desired behavior
|
|
53
|
+
(form submission results, navigation outcomes, state changes) before shipping it.
|
|
54
|
+
- Flag any test that depends on external network state (third-party pages, live data) as
|
|
55
|
+
potentially flaky and prefer mocking/fixtures where the framework being tested supports it.
|
|
56
|
+
|
|
57
|
+
## Experience / Common Pitfalls
|
|
58
|
+
- Duplicate accessible names (e.g. two "Toggle navigation" buttons) generate duplicate test
|
|
59
|
+
titles if scripted mechanically — always dedupe/disambiguate generated test names.
|
|
60
|
+
- CSS-selector-heavy specs break on every minor markup change; role/label-based locators
|
|
61
|
+
survive redesigns far better.
|
|
62
|
+
- Tests that pass locally but fail in CI are usually a timing issue (missing an `expect`-based
|
|
63
|
+
wait) — never paper over this with `waitForTimeout`.
|
|
64
|
+
|
|
65
|
+
## Output Artifacts
|
|
66
|
+
- Playwright spec file(s) (`*.spec.ts`)
|
|
67
|
+
- Run/validation report (pass/fail counts, failure details)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: programmer
|
|
3
|
+
role: Software Engineer
|
|
4
|
+
description: >
|
|
5
|
+
Writes and edits code implementing a new feature or component from a design/spec, across
|
|
6
|
+
languages/frameworks. Load this skill whenever the task involves implementing a feature,
|
|
7
|
+
writing a function, a class, or producing runnable code from a spec. NOTE: for fixing an
|
|
8
|
+
existing defect in a minimal, non-redesigning way, prefer Xcoder SDLC's own "refactorer" Role
|
|
9
|
+
directive instead (see src/skills/directives.ts) — this skill's "new implementation" framing
|
|
10
|
+
can otherwise nudge a refactor task toward broader scope than that Role intends.
|
|
11
|
+
triggers: [implement, "new feature", function, class, api, script, "write code", "from scratch"]
|
|
12
|
+
version: 1.0
|
|
13
|
+
requires_tools: [read_tool, glob_tool, grep_tool, write_edit_tool, run_command_tool, github_tool]
|
|
14
|
+
composes_with: [architect, tester, devops]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Role
|
|
18
|
+
Turns a specification or bug report into correct, minimal, idiomatic code, and leaves the
|
|
19
|
+
codebase in a state that passes validation (see Re Act Validation phase).
|
|
20
|
+
|
|
21
|
+
## Process
|
|
22
|
+
1. **Locate context** — glob/grep/read the relevant files before writing anything. Never
|
|
23
|
+
guess at existing conventions.
|
|
24
|
+
2. **Confirm contract** — inputs/outputs, error cases, edge cases. If solution design.md or
|
|
25
|
+
blueprint.md exists for this component, read it first.
|
|
26
|
+
3. **Implement smallest correct change** — prefer editing existing patterns over introducing
|
|
27
|
+
new ones unless asked.
|
|
28
|
+
4. **Self-validate** — run the test suite / linter / type-checker (Validation phase). Treat
|
|
29
|
+
failures as new Observations and loop back into Search → Action.
|
|
30
|
+
5. **Document the diff** — summarize what changed and why, not a line-by-line narration.
|
|
31
|
+
|
|
32
|
+
## Strategies
|
|
33
|
+
- Match existing naming/style conventions found via grep before inventing new ones.
|
|
34
|
+
- Prefer composition over inheritance unless the codebase already leans OOP-heavy.
|
|
35
|
+
- Isolate side effects; keep pure logic testable independently of I/O.
|
|
36
|
+
- When a fix touches shared code, grep for all call sites before editing.
|
|
37
|
+
- Never silently swallow exceptions — log via sys.log or rethrow with context.
|
|
38
|
+
|
|
39
|
+
## Planning Approach
|
|
40
|
+
- Break work into atomic, independently testable units (mirrors wbs.md granularity).
|
|
41
|
+
- Sequence changes so the codebase is runnable after every step, not just at the end.
|
|
42
|
+
|
|
43
|
+
## Instructions for This Task Type
|
|
44
|
+
- If a test runner is available, write/extend a test before or alongside the fix (regression
|
|
45
|
+
proof for bugs; contract proof for features).
|
|
46
|
+
- If no test runner is configured, at minimum re-run the exact repro steps.
|
|
47
|
+
- Flag any change that requires a migration, config change, or breaking API change explicitly.
|
|
48
|
+
|
|
49
|
+
## Experience / Common Pitfalls
|
|
50
|
+
- "Guess and hope" (editing without re-checking) is the most common failure mode — always
|
|
51
|
+
close the loop with a Validation step.
|
|
52
|
+
- Large diffs that mix refactor + feature are hard to review — separate them when feasible.
|
|
53
|
+
- Silent scope creep (fixing unrelated things while in the file) causes review friction.
|
|
54
|
+
|
|
55
|
+
## Output Artifacts
|
|
56
|
+
- Code diff/changeset
|
|
57
|
+
- Updated/added tests
|
|
58
|
+
- Short change summary
|