@hanzlaa/rcode 2.1.0
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/AGENTS.md +120 -0
- package/CLAUDE.md +120 -0
- package/CONTRIBUTING.md +298 -0
- package/README.md +436 -0
- package/cli/config.js +142 -0
- package/cli/context.js +213 -0
- package/cli/dashboard.js +38 -0
- package/cli/digest.js +66 -0
- package/cli/doctor.js +283 -0
- package/cli/github-sync.js +1016 -0
- package/cli/index.js +113 -0
- package/cli/install.js +946 -0
- package/cli/lib/config.cjs +334 -0
- package/cli/lib/fsutil.cjs +76 -0
- package/cli/lib/github.cjs +365 -0
- package/cli/lib/manifest.cjs +240 -0
- package/cli/lib/memory-bank.cjs +348 -0
- package/cli/lib/model-profiles.cjs +169 -0
- package/cli/lib/prompts.cjs +355 -0
- package/cli/postinstall.js +32 -0
- package/cli/set-mode.js +94 -0
- package/cli/set-profile.js +80 -0
- package/cli/show-model.js +82 -0
- package/cli/team.js +35 -0
- package/cli/tiers.js +49 -0
- package/cli/uninstall.js +600 -0
- package/cli/update.js +373 -0
- package/package.json +60 -0
- package/rihal/agents/rihal-advisor-researcher.md +116 -0
- package/rihal/agents/rihal-ahmed.md +66 -0
- package/rihal/agents/rihal-architect.md +79 -0
- package/rihal/agents/rihal-assumptions-analyzer.md +117 -0
- package/rihal/agents/rihal-code-fixer.md +74 -0
- package/rihal/agents/rihal-code-reviewer.md +75 -0
- package/rihal/agents/rihal-codebase-mapper.md +170 -0
- package/rihal/agents/rihal-debugger.md +140 -0
- package/rihal/agents/rihal-deviation-analyzer.md +74 -0
- package/rihal/agents/rihal-docs-auditor.md +77 -0
- package/rihal/agents/rihal-edge-case-hunter.md +75 -0
- package/rihal/agents/rihal-executor.md +113 -0
- package/rihal/agents/rihal-fatima.md +68 -0
- package/rihal/agents/rihal-haitham.md +75 -0
- package/rihal/agents/rihal-hanzla.md +59 -0
- package/rihal/agents/rihal-hussain-pm.md +82 -0
- package/rihal/agents/rihal-integration-checker.md +455 -0
- package/rihal/agents/rihal-khalid.md +59 -0
- package/rihal/agents/rihal-layla.md +57 -0
- package/rihal/agents/rihal-mariam.md +58 -0
- package/rihal/agents/rihal-nasser.md +57 -0
- package/rihal/agents/rihal-noor.md +60 -0
- package/rihal/agents/rihal-nyquist-auditor.md +182 -0
- package/rihal/agents/rihal-omar.md +57 -0
- package/rihal/agents/rihal-phase-researcher.md +84 -0
- package/rihal/agents/rihal-planner.md +176 -0
- package/rihal/agents/rihal-profiler.md +74 -0
- package/rihal/agents/rihal-project-researcher.md +80 -0
- package/rihal/agents/rihal-remediation-planner.md +78 -0
- package/rihal/agents/rihal-research-synthesizer.md +253 -0
- package/rihal/agents/rihal-roadmapper.md +73 -0
- package/rihal/agents/rihal-sadiq.md +72 -0
- package/rihal/agents/rihal-security-adversary.md +82 -0
- package/rihal/agents/rihal-security-auditor.md +78 -0
- package/rihal/agents/rihal-sprint-checker.md +124 -0
- package/rihal/agents/rihal-tech-writer.md +80 -0
- package/rihal/agents/rihal-ui-auditor.md +81 -0
- package/rihal/agents/rihal-ui-designer.md +6 -0
- package/rihal/agents/rihal-ux-designer.md +83 -0
- package/rihal/agents/rihal-verifier.md +124 -0
- package/rihal/agents/rihal-waleed.md +60 -0
- package/rihal/agents/rihal-yousef.md +78 -0
- package/rihal/agents/rihal-zahra.md +62 -0
- package/rihal/agents/rihal-zayd.md +78 -0
- package/rihal/agents/rules/codebase-mapper/detailed-guide.md +615 -0
- package/rihal/agents/rules/debugger/checkpoint-recovery.md +272 -0
- package/rihal/agents/rules/debugger/debug-session-state.md +261 -0
- package/rihal/agents/rules/debugger/hypothesis-templates.md +330 -0
- package/rihal/agents/rules/debugger/investigation-protocol.md +298 -0
- package/rihal/agents/rules/debugger/scientific-method.md +317 -0
- package/rihal/agents/rules/executor/authentication-gates.md +202 -0
- package/rihal/agents/rules/executor/deviation-rules.md +191 -0
- package/rihal/agents/rules/executor/execution-flow.md +116 -0
- package/rihal/agents/rules/executor/self-check.md +241 -0
- package/rihal/agents/rules/executor/stub-detection.md +267 -0
- package/rihal/agents/rules/executor/summary-creation.md +76 -0
- package/rihal/agents/rules/executor/task-commit-protocol.md +283 -0
- package/rihal/agents/rules/executor/tdd-flow.md +294 -0
- package/rihal/agents/rules/phase-researcher/detailed-guide.md +628 -0
- package/rihal/agents/rules/planner/common-patterns.md +373 -0
- package/rihal/agents/rules/planner/dependency-analysis.md +195 -0
- package/rihal/agents/rules/planner/goal-backward-thinking.md +220 -0
- package/rihal/agents/rules/planner/sprint-verification.md +202 -0
- package/rihal/agents/rules/planner/task-templates.md +296 -0
- package/rihal/agents/rules/project-researcher/detailed-guide.md +589 -0
- package/rihal/agents/rules/roadmapper/detailed-guide.md +620 -0
- package/rihal/agents/rules/sprint-checker/dimensions.md +414 -0
- package/rihal/agents/rules/sprint-checker/process.md +377 -0
- package/rihal/agents/rules/verifier/anti-patterns.md +94 -0
- package/rihal/agents/rules/verifier/artifact-verification.md +69 -0
- package/rihal/agents/rules/verifier/behavioral-spot-checks.md +49 -0
- package/rihal/agents/rules/verifier/context-loading.md +84 -0
- package/rihal/agents/rules/verifier/data-flow-trace.md +65 -0
- package/rihal/agents/rules/verifier/gap-output.md +51 -0
- package/rihal/agents/rules/verifier/key-links.md +56 -0
- package/rihal/agents/rules/verifier/requirements-coverage.md +28 -0
- package/rihal/agents/rules/verifier/verification-report.md +131 -0
- package/rihal/bin/lib/code-references.cjs +196 -0
- package/rihal/bin/lib/config.cjs +146 -0
- package/rihal/bin/lib/council-panel.cjs +501 -0
- package/rihal/bin/lib/roadmap.cjs +256 -0
- package/rihal/bin/lib/verify.cjs +118 -0
- package/rihal/bin/rihal-hooks.cjs +204 -0
- package/rihal/bin/rihal-tools.cjs +3554 -0
- package/rihal/brain/README.md +38 -0
- package/rihal/brain/best-practices/no-autonomous-bypass.md +37 -0
- package/rihal/brain/best-practices/research-citation-rule.md +39 -0
- package/rihal/brain/best-practices/state-sync-rule.md +43 -0
- package/rihal/brain/sources.yaml +59 -0
- package/rihal/commands/add-phase.md +18 -0
- package/rihal/commands/add-tests.md +18 -0
- package/rihal/commands/add-todo.md +8 -0
- package/rihal/commands/analyze-dependencies.md +11 -0
- package/rihal/commands/audit-fix.md +14 -0
- package/rihal/commands/audit-milestone.md +12 -0
- package/rihal/commands/audit-uat.md +18 -0
- package/rihal/commands/autonomous.md +19 -0
- package/rihal/commands/brainstorm.md +11 -0
- package/rihal/commands/chain.md +8 -0
- package/rihal/commands/check-implementation-readiness.md +8 -0
- package/rihal/commands/check-todos.md +18 -0
- package/rihal/commands/cleanup.md +18 -0
- package/rihal/commands/code-review-fix.md +14 -0
- package/rihal/commands/code-review.md +14 -0
- package/rihal/commands/complete-milestone.md +12 -0
- package/rihal/commands/config.md +8 -0
- package/rihal/commands/correct-course.md +8 -0
- package/rihal/commands/council.md +25 -0
- package/rihal/commands/create-epics-and-stories.md +8 -0
- package/rihal/commands/create-story.md +8 -0
- package/rihal/commands/dashboard.md +10 -0
- package/rihal/commands/debug.md +8 -0
- package/rihal/commands/decisions.md +10 -0
- package/rihal/commands/dev-story.md +8 -0
- package/rihal/commands/diff.md +10 -0
- package/rihal/commands/discuss-phase-power.md +11 -0
- package/rihal/commands/discuss-phase.md +19 -0
- package/rihal/commands/discuss.md +23 -0
- package/rihal/commands/do.md +22 -0
- package/rihal/commands/docs-update.md +14 -0
- package/rihal/commands/document-project.md +8 -0
- package/rihal/commands/enable-hooks.md +11 -0
- package/rihal/commands/execute-sprint.md +13 -0
- package/rihal/commands/execute.md +19 -0
- package/rihal/commands/explore.md +14 -0
- package/rihal/commands/export-to-github.md +11 -0
- package/rihal/commands/forensics.md +11 -0
- package/rihal/commands/from-template.md +11 -0
- package/rihal/commands/health.md +10 -0
- package/rihal/commands/help.md +8 -0
- package/rihal/commands/import.md +12 -0
- package/rihal/commands/inbox.md +12 -0
- package/rihal/commands/init.md +14 -0
- package/rihal/commands/insert-phase.md +11 -0
- package/rihal/commands/install.md +10 -0
- package/rihal/commands/karpathy-audit.md +12 -0
- package/rihal/commands/list-plans.md +11 -0
- package/rihal/commands/list-workspaces.md +10 -0
- package/rihal/commands/map-codebase.md +14 -0
- package/rihal/commands/milestone-summary.md +11 -0
- package/rihal/commands/new-milestone.md +12 -0
- package/rihal/commands/new-project-research.md +11 -0
- package/rihal/commands/new-project-roadmap.md +11 -0
- package/rihal/commands/new-project.md +13 -0
- package/rihal/commands/new-workspace.md +12 -0
- package/rihal/commands/next.md +19 -0
- package/rihal/commands/note.md +12 -0
- package/rihal/commands/notify-test.md +10 -0
- package/rihal/commands/pause-work.md +8 -0
- package/rihal/commands/plan-milestone-gaps.md +18 -0
- package/rihal/commands/plan.md +19 -0
- package/rihal/commands/plant-seed.md +18 -0
- package/rihal/commands/pr-branch.md +18 -0
- package/rihal/commands/profile-user.md +8 -0
- package/rihal/commands/progress.md +19 -0
- package/rihal/commands/quick.md +14 -0
- package/rihal/commands/remove-phase.md +18 -0
- package/rihal/commands/remove-workspace.md +11 -0
- package/rihal/commands/replay.md +11 -0
- package/rihal/commands/report.md +10 -0
- package/rihal/commands/rerun.md +11 -0
- package/rihal/commands/research-phase.md +18 -0
- package/rihal/commands/resume-work.md +8 -0
- package/rihal/commands/review-adversarial.md +8 -0
- package/rihal/commands/review-edge-case-hunter.md +8 -0
- package/rihal/commands/review.md +18 -0
- package/rihal/commands/scan.md +14 -0
- package/rihal/commands/secure-phase.md +14 -0
- package/rihal/commands/session-report.md +10 -0
- package/rihal/commands/settings.md +8 -0
- package/rihal/commands/ship.md +18 -0
- package/rihal/commands/show.md +10 -0
- package/rihal/commands/sprint-planning.md +20 -0
- package/rihal/commands/sprint-status.md +21 -0
- package/rihal/commands/stats.md +10 -0
- package/rihal/commands/status.md +21 -0
- package/rihal/commands/ui-phase.md +8 -0
- package/rihal/commands/ui-review.md +8 -0
- package/rihal/commands/undo.md +14 -0
- package/rihal/commands/update.md +11 -0
- package/rihal/commands/validate-phase.md +18 -0
- package/rihal/commands/verify-phase.md +18 -0
- package/rihal/commands/verify-work.md +19 -0
- package/rihal/commands/why.md +10 -0
- package/rihal/commands/workstream.md +11 -0
- package/rihal/config/model-profiles.json +226 -0
- package/rihal/config/model-profiles.schema.json +36 -0
- package/rihal/config.yaml +39 -0
- package/rihal/digests/README.md +50 -0
- package/rihal/digests/fatima.md +24 -0
- package/rihal/digests/hussain-pm.md +24 -0
- package/rihal/digests/mariam.md +24 -0
- package/rihal/digests/sadiq.md +24 -0
- package/rihal/digests/waleed.md +24 -0
- package/rihal/modules/core.yaml +101 -0
- package/rihal/modules/discovery.yaml +50 -0
- package/rihal/modules/execution.yaml +66 -0
- package/rihal/references/brain-methods.csv +9 -0
- package/rihal/references/checklist-architect.md +146 -0
- package/rihal/references/checklist-change.md +136 -0
- package/rihal/references/checklist-pm.md +154 -0
- package/rihal/references/checklist-po-master.md +100 -0
- package/rihal/references/checklist-story-dod.md +75 -0
- package/rihal/references/checklist-story-draft.md +53 -0
- package/rihal/references/checkpoints-index.md +53 -0
- package/rihal/references/checkpoints.md +778 -0
- package/rihal/references/codebase-grounding.md +76 -0
- package/rihal/references/command-redirect-format.md +62 -0
- package/rihal/references/commit-conventions.md +125 -0
- package/rihal/references/common-bug-patterns-index.md +44 -0
- package/rihal/references/common-bug-patterns.md +621 -0
- package/rihal/references/context-budget.md +104 -0
- package/rihal/references/continuation-format.md +249 -0
- package/rihal/references/council-protocol.md +91 -0
- package/rihal/references/domain-probes.md +213 -0
- package/rihal/references/elicitation-methods.csv +16 -0
- package/rihal/references/execution-protocol.md +155 -0
- package/rihal/references/gate-prompts.md +212 -0
- package/rihal/references/gates.md +127 -0
- package/rihal/references/git-integration.md +159 -0
- package/rihal/references/git-planning-commit.md +185 -0
- package/rihal/references/karpathy-guidelines.md +79 -0
- package/rihal/references/model-profiles.md +90 -0
- package/rihal/references/no-unauthorized-git-ops.md +73 -0
- package/rihal/references/output-format.md +319 -0
- package/rihal/references/output-realism.md +52 -0
- package/rihal/references/project-types.yaml +270 -0
- package/rihal/references/questioning.md +163 -0
- package/rihal/references/response-style.md +81 -0
- package/rihal/references/state-schema.md +366 -0
- package/rihal/references/tdd.md +263 -0
- package/rihal/references/thinking-models-debug.md +126 -0
- package/rihal/references/thinking-models-planning.md +127 -0
- package/rihal/references/ui-brand.md +254 -0
- package/rihal/references/verification-patterns-index.md +76 -0
- package/rihal/references/verification-patterns.md +612 -0
- package/rihal/references/workstream-flag.md +166 -0
- package/rihal/skills/SKILLS_INDEX.md +114 -0
- package/rihal/skills/_shared/no-autonomous-bypass.md +37 -0
- package/rihal/skills/_shared/research-citation-rule.md +39 -0
- package/rihal/skills/_shared/state-sync-rule.md +43 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/SKILL.md +31 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/domain-steps/step-01-init.md +137 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/domain-steps/step-05-technical-trends.md +234 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/domain-steps/step-06-research-synthesis.md +444 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/research.template.md +29 -0
- package/rihal/skills/actions/1-analysis/research/rihal-domain-research/workflow.md +49 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/SKILL.md +30 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/research.template.md +29 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/steps/step-01-init.md +184 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/steps/step-02-customer-behavior.md +239 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/steps/step-03-customer-pain-points.md +251 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/steps/step-04-customer-decisions.md +261 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/steps/step-05-competitive-analysis.md +173 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/steps/step-06-research-completion.md +478 -0
- package/rihal/skills/actions/1-analysis/research/rihal-market-research/workflow.md +49 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/SKILL.md +31 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/research.template.md +29 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/technical-steps/step-01-init.md +137 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/technical-steps/step-02-technical-overview.md +239 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/technical-steps/step-05-implementation-research.md +233 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/technical-steps/step-06-research-synthesis.md +487 -0
- package/rihal/skills/actions/1-analysis/research/rihal-technical-research/workflow.md +50 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/SKILL.md +30 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/checklist.md +245 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/documentation-requirements.csv +12 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/instructions.md +128 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/templates/deep-dive-template.md +345 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/templates/index-template.md +169 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/templates/project-overview-template.md +103 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/templates/project-scan-report-schema.json +160 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/templates/source-tree-template.md +135 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/workflow.md +27 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/workflows/deep-dive-instructions.md +299 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/workflows/deep-dive-workflow.md +34 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/workflows/full-scan-instructions.md +1107 -0
- package/rihal/skills/actions/1-analysis/rihal-document-project/workflows/full-scan-workflow.md +34 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/SKILL.md +120 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/agents/artifact-analyzer.md +60 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/agents/web-researcher.md +49 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/assets/prfaq-template.md +62 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/references/customer-faq.md +55 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/references/internal-faq.md +51 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/references/press-release.md +60 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/references/verdict.md +79 -0
- package/rihal/skills/actions/1-analysis/rihal-prfaq/rihal-manifest.json +16 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/SKILL.md +112 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/agents/artifact-analyzer.md +60 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/agents/opportunity-reviewer.md +44 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/agents/skeptic-reviewer.md +44 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/agents/web-researcher.md +49 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/prompts/contextual-discovery.md +57 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/prompts/draft-and-review.md +86 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/prompts/finalize.md +75 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/prompts/guided-elicitation.md +70 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/resources/brief-template.md +60 -0
- package/rihal/skills/actions/1-analysis/rihal-product-brief/rihal-manifest.json +17 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/SKILL.md +30 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/steps/step-01-validate-prerequisites.md +255 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/steps/step-02-design-epics.md +212 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/steps/step-04-final-validation.md +131 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/templates/epics-template.md +61 -0
- package/rihal/skills/actions/2-plan/rihal-create-epics-and-stories/workflow.md +54 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/SKILL.md +39 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/README.md +30 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-01-init.md +62 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-02-outcomes.md +64 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-03-sequencing.md +65 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-04-windows.md +60 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-05-kill-criteria.md +59 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-06-phase-stubs.md +56 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-07-backlog.md +44 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-08-write-roadmap.md +58 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-09-state-sync.md +62 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/steps/step-10-complete.md +56 -0
- package/rihal/skills/actions/2-plan/rihal-create-milestone/workflow.md +93 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/SKILL.md +40 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/data/domain-complexity.csv +15 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/data/prd-purpose.md +197 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/data/project-types.csv +11 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-01-init.md +178 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-01b-continue.md +161 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-02-discovery.md +208 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-02b-vision.md +142 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-02c-executive-summary.md +158 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-03-success.md +214 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-04-journeys.md +201 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-05-domain.md +194 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-06-innovation.md +211 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-07-project-type.md +222 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-08-scoping.md +216 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-09-functional.md +219 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-10-nonfunctional.md +230 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-11-polish.md +221 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/steps-c/step-12-complete.md +115 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/templates/prd-template.md +10 -0
- package/rihal/skills/actions/2-plan/rihal-create-prd/workflow.md +64 -0
- package/rihal/skills/actions/2-plan/rihal-create-story/SKILL.md +31 -0
- package/rihal/skills/actions/2-plan/rihal-create-story/checklist.md +357 -0
- package/rihal/skills/actions/2-plan/rihal-create-story/discover-inputs.md +88 -0
- package/rihal/skills/actions/2-plan/rihal-create-story/template.md +49 -0
- package/rihal/skills/actions/2-plan/rihal-create-story/workflow.md +380 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/SKILL.md +31 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-01-init.md +135 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-01b-continue.md +127 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-02-discovery.md +190 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-03-core-experience.md +217 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-04-emotional-response.md +220 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-05-inspiration.md +235 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-06-design-system.md +253 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-07-defining-experience.md +255 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-08-visual-foundation.md +225 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-09-design-directions.md +225 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-10-user-journeys.md +242 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-11-component-strategy.md +249 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-12-ux-patterns.md +238 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-13-responsive-accessibility.md +265 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/steps/step-14-complete.md +171 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/ux-design-template.md +13 -0
- package/rihal/skills/actions/2-plan/rihal-create-ux-design/workflow.md +36 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/SKILL.md +30 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/steps-e/step-e-01-discovery.md +242 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/steps-e/step-e-01b-legacy-conversion.md +204 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/steps-e/step-e-02-review.md +245 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/steps-e/step-e-03-edit.md +250 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/steps-e/step-e-04-complete.md +165 -0
- package/rihal/skills/actions/2-plan/rihal-edit-prd/workflow.md +63 -0
- package/rihal/skills/actions/2-plan/rihal-frontend-design/SKILL.md +169 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/SKILL.md +29 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/data/domain-complexity.csv +15 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/data/prd-purpose.md +197 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/data/project-types.csv +11 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-01-discovery.md +221 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
- package/rihal/skills/actions/2-plan/rihal-validate-prd/workflow.md +62 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/SKILL.md +30 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/steps/step-06-final-assessment.md +126 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/rihal/skills/actions/3-solutioning/rihal-check-implementation-readiness/workflow.md +49 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/SKILL.md +32 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/architecture-decision-template.md +12 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/data/domain-complexity.csv +13 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/data/project-types.csv +7 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-01-init.md +153 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-01b-continue.md +173 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-02-context.md +224 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-03-starter.md +329 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-04-decisions.md +318 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-05-patterns.md +359 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-06-structure.md +379 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-07-validation.md +359 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/steps/step-08-complete.md +76 -0
- package/rihal/skills/actions/3-solutioning/rihal-create-architecture/workflow.md +38 -0
- package/rihal/skills/actions/3-solutioning/rihal-generate-project-context/SKILL.md +31 -0
- package/rihal/skills/actions/3-solutioning/rihal-generate-project-context/project-context-template.md +21 -0
- package/rihal/skills/actions/3-solutioning/rihal-generate-project-context/steps/step-01-discover.md +186 -0
- package/rihal/skills/actions/3-solutioning/rihal-generate-project-context/steps/step-02-generate.md +321 -0
- package/rihal/skills/actions/3-solutioning/rihal-generate-project-context/steps/step-03-complete.md +278 -0
- package/rihal/skills/actions/3-solutioning/rihal-generate-project-context/workflow.md +43 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/SKILL.md +48 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/generate-trail.md +38 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/step-01-orientation.md +105 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/step-02-walkthrough.md +89 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/step-03-detail-pass.md +106 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/step-04-testing.md +74 -0
- package/rihal/skills/actions/4-implementation/rihal-checkpoint-preview/step-05-wrapup.md +24 -0
- package/rihal/skills/actions/4-implementation/rihal-code-review/SKILL.md +31 -0
- package/rihal/skills/actions/4-implementation/rihal-code-review/steps/step-01-gather-context.md +62 -0
- package/rihal/skills/actions/4-implementation/rihal-code-review/steps/step-02-review.md +34 -0
- package/rihal/skills/actions/4-implementation/rihal-code-review/steps/step-03-triage.md +49 -0
- package/rihal/skills/actions/4-implementation/rihal-code-review/steps/step-04-present.md +129 -0
- package/rihal/skills/actions/4-implementation/rihal-code-review/workflow.md +55 -0
- package/rihal/skills/actions/4-implementation/rihal-correct-course/SKILL.md +29 -0
- package/rihal/skills/actions/4-implementation/rihal-correct-course/checklist.md +288 -0
- package/rihal/skills/actions/4-implementation/rihal-correct-course/workflow.md +267 -0
- package/rihal/skills/actions/4-implementation/rihal-dev-story/SKILL.md +36 -0
- package/rihal/skills/actions/4-implementation/rihal-dev-story/checklist.md +80 -0
- package/rihal/skills/actions/4-implementation/rihal-dev-story/workflow.md +450 -0
- package/rihal/skills/actions/4-implementation/rihal-qa-generate-e2e-tests/SKILL.md +31 -0
- package/rihal/skills/actions/4-implementation/rihal-qa-generate-e2e-tests/checklist.md +33 -0
- package/rihal/skills/actions/4-implementation/rihal-qa-generate-e2e-tests/workflow.md +136 -0
- package/rihal/skills/actions/4-implementation/rihal-retrospective/SKILL.md +30 -0
- package/rihal/skills/actions/4-implementation/rihal-retrospective/workflow.md +1479 -0
- package/rihal/skills/actions/4-implementation/rihal-scaffold-project/SKILL.md +77 -0
- package/rihal/skills/actions/4-implementation/rihal-scaffold-project/steps/step-01-target.md +17 -0
- package/rihal/skills/actions/4-implementation/rihal-scaffold-project/steps/step-02-safety.md +35 -0
- package/rihal/skills/actions/4-implementation/rihal-scaffold-project/steps/step-03-clone.md +50 -0
- package/rihal/skills/actions/4-implementation/rihal-scaffold-project/steps/step-04-post-setup.md +44 -0
- package/rihal/skills/actions/4-implementation/rihal-sprint-planning/SKILL.md +35 -0
- package/rihal/skills/actions/4-implementation/rihal-sprint-planning/checklist.md +43 -0
- package/rihal/skills/actions/4-implementation/rihal-sprint-planning/sprint-status-template.yaml +56 -0
- package/rihal/skills/actions/4-implementation/rihal-sprint-planning/workflow.md +284 -0
- package/rihal/skills/actions/4-implementation/rihal-sprint-status/SKILL.md +30 -0
- package/rihal/skills/actions/4-implementation/rihal-sprint-status/workflow.md +261 -0
- package/rihal/skills/agents/ahmed-hassani-director/SKILL.md +121 -0
- package/rihal/skills/agents/fatima-qa/SKILL.md +106 -0
- package/rihal/skills/agents/fatima-qa/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/haitham-frontend/SKILL.md +120 -0
- package/rihal/skills/agents/hanzla-engineer/SKILL.md +109 -0
- package/rihal/skills/agents/hanzla-engineer/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/hussain-pm/SKILL.md +107 -0
- package/rihal/skills/agents/hussain-pm/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/hussain-sm/SKILL.md +104 -0
- package/rihal/skills/agents/hussain-sm/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/layla-designer/SKILL.md +96 -0
- package/rihal/skills/agents/layla-designer/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/majlis-council/SKILL.md +179 -0
- package/rihal/skills/agents/mariam-marketing/SKILL.md +133 -0
- package/rihal/skills/agents/nasser-eng-manager/SKILL.md +125 -0
- package/rihal/skills/agents/noor-writer/SKILL.md +104 -0
- package/rihal/skills/agents/noor-writer/explain-concept.md +20 -0
- package/rihal/skills/agents/noor-writer/mermaid-gen.md +20 -0
- package/rihal/skills/agents/noor-writer/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/noor-writer/validate-doc.md +19 -0
- package/rihal/skills/agents/noor-writer/write-document.md +20 -0
- package/rihal/skills/agents/raees-orchestrator/SKILL.md +154 -0
- package/rihal/skills/agents/sadiq-analyst/SKILL.md +106 -0
- package/rihal/skills/agents/sadiq-analyst/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/waleed-architect/SKILL.md +106 -0
- package/rihal/skills/agents/waleed-architect/skill-manifest.yaml +11 -0
- package/rihal/skills/agents/yousef-backend/SKILL.md +136 -0
- package/rihal/skills/agents/zahra-branding/SKILL.md +141 -0
- package/rihal/skills/agents/zayd-ml/SKILL.md +124 -0
- package/rihal/skills/core/module-help.csv +11 -0
- package/rihal/skills/core/module.yaml +25 -0
- package/rihal/skills/core/rihal-advanced-elicitation/SKILL.md +155 -0
- package/rihal/skills/core/rihal-advanced-elicitation/methods.csv +51 -0
- package/rihal/skills/core/rihal-advanced-elicitation/rihal-advanced-elicitation/SKILL.md +148 -0
- package/rihal/skills/core/rihal-advanced-elicitation/rihal-advanced-elicitation/methods.csv +51 -0
- package/rihal/skills/core/rihal-brainstorming/SKILL.md +82 -0
- package/rihal/skills/core/rihal-brainstorming/brain-methods.csv +62 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-01-session-setup.md +214 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-01b-continue.md +124 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-02a-user-selected.md +229 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-02b-ai-recommended.md +239 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-02c-random-selection.md +211 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-02d-progressive-flow.md +266 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-03-technique-execution.md +401 -0
- package/rihal/skills/core/rihal-brainstorming/steps/step-04-idea-organization.md +305 -0
- package/rihal/skills/core/rihal-brainstorming/template.md +15 -0
- package/rihal/skills/core/rihal-brainstorming/workflow.md +53 -0
- package/rihal/skills/core/rihal-clone-website/SKILL.md +395 -0
- package/rihal/skills/core/rihal-distillator/SKILL.md +205 -0
- package/rihal/skills/core/rihal-distillator/agents/distillate-compressor.md +116 -0
- package/rihal/skills/core/rihal-distillator/agents/round-trip-reconstructor.md +68 -0
- package/rihal/skills/core/rihal-distillator/resources/compression-rules.md +51 -0
- package/rihal/skills/core/rihal-distillator/resources/distillate-format-reference.md +227 -0
- package/rihal/skills/core/rihal-distillator/resources/splitting-strategy.md +78 -0
- package/rihal/skills/core/rihal-distillator/scripts/analyze_sources.py +300 -0
- package/rihal/skills/core/rihal-distillator/scripts/tests/test_analyze_sources.py +204 -0
- package/rihal/skills/core/rihal-editorial-review-prose/SKILL.md +108 -0
- package/rihal/skills/core/rihal-editorial-review-structure/SKILL.md +193 -0
- package/rihal/skills/core/rihal-help/SKILL.md +91 -0
- package/rihal/skills/core/rihal-index-docs/SKILL.md +80 -0
- package/rihal/skills/core/rihal-init/SKILL.md +119 -0
- package/rihal/skills/core/rihal-init/resources/core-module.yaml +25 -0
- package/rihal/skills/core/rihal-init/scripts/rihal_init.py +593 -0
- package/rihal/skills/core/rihal-init/scripts/tests/test_rihal_init.py +329 -0
- package/rihal/skills/core/rihal-party-mode/SKILL.md +77 -0
- package/rihal/skills/core/rihal-party-mode/steps/step-01-agent-loading.md +138 -0
- package/rihal/skills/core/rihal-party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/rihal/skills/core/rihal-party-mode/steps/step-03-graceful-exit.md +167 -0
- package/rihal/skills/core/rihal-party-mode/workflow.md +190 -0
- package/rihal/skills/core/rihal-review-adversarial-general/SKILL.md +55 -0
- package/rihal/skills/core/rihal-review-edge-case-hunter/SKILL.md +81 -0
- package/rihal/skills/core/rihal-shard-doc/SKILL.md +119 -0
- package/rihal/skills/core/rihal-shard-doc/rihal-shard-doc/SKILL.md +122 -0
- package/rihal/team.yaml +343 -0
- package/rihal/templates/UI-SPEC.md +127 -0
- package/rihal/templates/documentation-requirements.csv +11 -0
- package/rihal/templates/github/bug-template.md +53 -0
- package/rihal/templates/github/epic-template.md +57 -0
- package/rihal/templates/github/feature-template.md +55 -0
- package/rihal/templates/github/task-template.md +52 -0
- package/rihal/templates/milestone.md +147 -0
- package/rihal/templates/projects/api-backend/PROJECT.md +37 -0
- package/rihal/templates/projects/api-backend/REQUIREMENTS.md +38 -0
- package/rihal/templates/projects/api-backend/ROADMAP.md +92 -0
- package/rihal/templates/projects/api-backend/template.yaml +17 -0
- package/rihal/templates/projects/mobile-app/PROJECT.md +37 -0
- package/rihal/templates/projects/mobile-app/REQUIREMENTS.md +32 -0
- package/rihal/templates/projects/mobile-app/ROADMAP.md +93 -0
- package/rihal/templates/projects/mobile-app/template.yaml +17 -0
- package/rihal/templates/projects/saas-b2b/PROJECT.md +40 -0
- package/rihal/templates/projects/saas-b2b/REQUIREMENTS.md +38 -0
- package/rihal/templates/projects/saas-b2b/ROADMAP.md +95 -0
- package/rihal/templates/projects/saas-b2b/template.yaml +18 -0
- package/rihal/templates/settings-hooks.json +36 -0
- package/rihal/templates/sprint.md +70 -0
- package/rihal/workflows/add-phase.md +112 -0
- package/rihal/workflows/add-tests.md +351 -0
- package/rihal/workflows/add-todo.md +181 -0
- package/rihal/workflows/analyze-dependencies.md +138 -0
- package/rihal/workflows/audit-fix.md +190 -0
- package/rihal/workflows/audit-milestone.md +155 -0
- package/rihal/workflows/audit-uat.md +109 -0
- package/rihal/workflows/autonomous.md +992 -0
- package/rihal/workflows/brainstorm.md +203 -0
- package/rihal/workflows/chain.md +188 -0
- package/rihal/workflows/check-implementation-readiness.md +193 -0
- package/rihal/workflows/check-todos.md +177 -0
- package/rihal/workflows/cleanup.md +152 -0
- package/rihal/workflows/code-review-fix.md +529 -0
- package/rihal/workflows/code-review.md +566 -0
- package/rihal/workflows/complete-milestone.md +836 -0
- package/rihal/workflows/config.md +105 -0
- package/rihal/workflows/correct-course.md +190 -0
- package/rihal/workflows/council.md +565 -0
- package/rihal/workflows/create-epics-and-stories.md +373 -0
- package/rihal/workflows/create-story.md +297 -0
- package/rihal/workflows/dashboard.md +102 -0
- package/rihal/workflows/debug.md +256 -0
- package/rihal/workflows/decisions.md +107 -0
- package/rihal/workflows/dev-story.md +432 -0
- package/rihal/workflows/diff.md +74 -0
- package/rihal/workflows/discuss-phase-power.md +325 -0
- package/rihal/workflows/discuss-phase.md +1201 -0
- package/rihal/workflows/discuss.md +227 -0
- package/rihal/workflows/do.md +175 -0
- package/rihal/workflows/docs-update.md +261 -0
- package/rihal/workflows/document-project.md +180 -0
- package/rihal/workflows/enable-hooks.md +102 -0
- package/rihal/workflows/execute-sprint.md +514 -0
- package/rihal/workflows/execute.md +1478 -0
- package/rihal/workflows/explore.md +171 -0
- package/rihal/workflows/export-to-github.md +174 -0
- package/rihal/workflows/forensics.md +201 -0
- package/rihal/workflows/from-template.md +173 -0
- package/rihal/workflows/health.md +194 -0
- package/rihal/workflows/help.md +318 -0
- package/rihal/workflows/import.md +306 -0
- package/rihal/workflows/inbox.md +418 -0
- package/rihal/workflows/init.md +245 -0
- package/rihal/workflows/insert-phase.md +116 -0
- package/rihal/workflows/install.md +85 -0
- package/rihal/workflows/karpathy-audit.md +409 -0
- package/rihal/workflows/list-plans.md +146 -0
- package/rihal/workflows/list-workspaces.md +115 -0
- package/rihal/workflows/map-codebase.md +449 -0
- package/rihal/workflows/milestone-summary.md +206 -0
- package/rihal/workflows/new-milestone.md +616 -0
- package/rihal/workflows/new-project-research.md +262 -0
- package/rihal/workflows/new-project-roadmap.md +446 -0
- package/rihal/workflows/new-project.md +1503 -0
- package/rihal/workflows/new-workspace.md +167 -0
- package/rihal/workflows/next.md +162 -0
- package/rihal/workflows/note.md +156 -0
- package/rihal/workflows/notify-test.md +113 -0
- package/rihal/workflows/pause-work.md +243 -0
- package/rihal/workflows/plan-milestone-gaps.md +273 -0
- package/rihal/workflows/plan.md +1262 -0
- package/rihal/workflows/plant-seed.md +169 -0
- package/rihal/workflows/pr-branch.md +129 -0
- package/rihal/workflows/profile-user.md +162 -0
- package/rihal/workflows/progress.md +184 -0
- package/rihal/workflows/quick.md +105 -0
- package/rihal/workflows/remove-phase.md +155 -0
- package/rihal/workflows/remove-workspace.md +158 -0
- package/rihal/workflows/replay.md +160 -0
- package/rihal/workflows/rerun.md +77 -0
- package/rihal/workflows/research-phase.md +82 -0
- package/rihal/workflows/resume-work.md +326 -0
- package/rihal/workflows/review-adversarial.md +180 -0
- package/rihal/workflows/review-edge-case-hunter.md +214 -0
- package/rihal/workflows/review.md +281 -0
- package/rihal/workflows/scan.md +135 -0
- package/rihal/workflows/secure-phase.md +196 -0
- package/rihal/workflows/session-report.md +187 -0
- package/rihal/workflows/settings.md +185 -0
- package/rihal/workflows/ship.md +237 -0
- package/rihal/workflows/show.md +63 -0
- package/rihal/workflows/sprint-planning.md +166 -0
- package/rihal/workflows/sprint-status.md +124 -0
- package/rihal/workflows/stats.md +141 -0
- package/rihal/workflows/status.md +116 -0
- package/rihal/workflows/ui-phase.md +148 -0
- package/rihal/workflows/ui-review.md +130 -0
- package/rihal/workflows/undo.md +426 -0
- package/rihal/workflows/update.md +185 -0
- package/rihal/workflows/validate-phase.md +174 -0
- package/rihal/workflows/verify-phase.md +375 -0
- package/rihal/workflows/verify-work.md +717 -0
- package/rihal/workflows/why.md +130 -0
- package/rihal/workflows/workstream.md +197 -0
- package/server/dashboard.js +632 -0
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
# Common Bug Patterns Catalogue
|
|
2
|
+
|
|
3
|
+
A reference of 15+ patterns that appear repeatedly across codebases. Each pattern shows the manifestation, how to detect it, and a fix template. Use this before forming debugging hypotheses.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ASYNC PATTERNS
|
|
8
|
+
|
|
9
|
+
### Pattern 1: Race Condition in Concurrent Operations
|
|
10
|
+
|
|
11
|
+
**Description:** Two async operations run simultaneously on the same shared state without synchronization, causing unpredictable behavior.
|
|
12
|
+
|
|
13
|
+
**Manifestation:**
|
|
14
|
+
- Test passes once, fails randomly on re-run
|
|
15
|
+
- Behavior depends on network latency or CPU load
|
|
16
|
+
- "Flaky" test that passes sometimes
|
|
17
|
+
- Data gets lost or duplicated sporadically
|
|
18
|
+
|
|
19
|
+
**Detection Signal:**
|
|
20
|
+
- Multiple `Promise.all()` or concurrent callbacks modifying same variable
|
|
21
|
+
- No mutex, lock, or queue between writes to shared state
|
|
22
|
+
- Timestamps show two updates at nearly identical time
|
|
23
|
+
|
|
24
|
+
**Fix Template:**
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
// BAD: Race condition
|
|
28
|
+
let counter = 0;
|
|
29
|
+
async function increment() { counter++; }
|
|
30
|
+
Promise.all([increment(), increment()]) // counter might be 1 or 2
|
|
31
|
+
|
|
32
|
+
// GOOD: Serialized via queue or lock
|
|
33
|
+
let counter = 0;
|
|
34
|
+
const queue = Promise.resolve();
|
|
35
|
+
async function increment() {
|
|
36
|
+
return queue.then(() => { counter++; });
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Grep for:** `Promise.all` + shared variable modification, concurrent `.then()` chains
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Pattern 2: Missing await in Async Chain
|
|
45
|
+
|
|
46
|
+
**Description:** `await` keyword is forgotten, so code continues before the async operation completes.
|
|
47
|
+
|
|
48
|
+
**Manifestation:**
|
|
49
|
+
- Next line uses result from async function but gets `Promise` instead of value
|
|
50
|
+
- "Cannot read property X of undefined"
|
|
51
|
+
- `undefined is not a function`
|
|
52
|
+
- Data appears empty when it shouldn't
|
|
53
|
+
|
|
54
|
+
**Detection Signal:**
|
|
55
|
+
- `const x = fetchData()` (no `await`)
|
|
56
|
+
- Next line: `x.field` or `x.map()`
|
|
57
|
+
- Linter should catch this; check if ESLint is running
|
|
58
|
+
|
|
59
|
+
**Fix Template:**
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
// BAD
|
|
63
|
+
const user = getUserFromDB(id);
|
|
64
|
+
console.log(user.name); // user is a Promise!
|
|
65
|
+
|
|
66
|
+
// GOOD
|
|
67
|
+
const user = await getUserFromDB(id);
|
|
68
|
+
console.log(user.name); // user is resolved
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Grep for:** `= await` in function, check for next line accessing `.property` or `.method()`
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### Pattern 3: Unhandled Promise Rejection
|
|
76
|
+
|
|
77
|
+
**Description:** A promise rejects but there's no `.catch()` or `try-catch`, causing silent failure.
|
|
78
|
+
|
|
79
|
+
**Manifestation:**
|
|
80
|
+
- "UnhandledPromiseRejectionWarning" in logs
|
|
81
|
+
- Process doesn't crash but work is lost
|
|
82
|
+
- Error happens but nobody catches it
|
|
83
|
+
- Silent data loss
|
|
84
|
+
|
|
85
|
+
**Detection Signal:**
|
|
86
|
+
- Promise-based code with no `.catch()`
|
|
87
|
+
- No `try-catch` around `await`
|
|
88
|
+
- Rejection happens inside a callback with no error handler
|
|
89
|
+
|
|
90
|
+
**Fix Template:**
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
// BAD: Silent rejection
|
|
94
|
+
fetchAPI().then(data => processData(data));
|
|
95
|
+
|
|
96
|
+
// GOOD: Catch and handle
|
|
97
|
+
fetchAPI()
|
|
98
|
+
.then(data => processData(data))
|
|
99
|
+
.catch(err => console.error('Failed:', err));
|
|
100
|
+
|
|
101
|
+
// Also GOOD with await
|
|
102
|
+
try {
|
|
103
|
+
const data = await fetchAPI();
|
|
104
|
+
processData(data);
|
|
105
|
+
} catch (err) {
|
|
106
|
+
console.error('Failed:', err);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Grep for:** `.then(` without `.catch(`, `await` without `try-catch` in top-level functions
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## STATE MUTATION PATTERNS
|
|
115
|
+
|
|
116
|
+
### Pattern 4: Shared Reference Bug
|
|
117
|
+
|
|
118
|
+
**Description:** Multiple parts of the code reference the same object. One part mutates it, breaking others' assumptions.
|
|
119
|
+
|
|
120
|
+
**Manifestation:**
|
|
121
|
+
- Changing one thing mysteriously breaks another
|
|
122
|
+
- Array or object is modified and affects distant code
|
|
123
|
+
- "I didn't change this but it changed"
|
|
124
|
+
- State goes out of sync
|
|
125
|
+
|
|
126
|
+
**Detection Signal:**
|
|
127
|
+
- Same object passed to multiple functions
|
|
128
|
+
- One function does `obj.property = newValue`
|
|
129
|
+
- Other code later expects `obj.property` to have the old value
|
|
130
|
+
- No defensive copy
|
|
131
|
+
|
|
132
|
+
**Fix Template:**
|
|
133
|
+
|
|
134
|
+
```javascript
|
|
135
|
+
// BAD: Shared reference
|
|
136
|
+
const data = { name: "alice" };
|
|
137
|
+
function rename(obj) { obj.name = "bob"; } // Mutates the original!
|
|
138
|
+
rename(data);
|
|
139
|
+
console.log(data.name); // "bob" — affected original
|
|
140
|
+
|
|
141
|
+
// GOOD: Defensive copy
|
|
142
|
+
const data = { name: "alice" };
|
|
143
|
+
function rename(obj) {
|
|
144
|
+
const copy = { ...obj }; // Shallow copy
|
|
145
|
+
copy.name = "bob";
|
|
146
|
+
return copy;
|
|
147
|
+
}
|
|
148
|
+
const updated = rename(data);
|
|
149
|
+
console.log(data.name); // "alice" — original safe
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Grep for:** Pass object to function, then function does `param.prop =`, then code uses original object
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### Pattern 5: Closure Over Loop Variable
|
|
157
|
+
|
|
158
|
+
**Description:** Loop variable is captured in a closure. By the time the closure runs, the variable has changed.
|
|
159
|
+
|
|
160
|
+
**Manifestation:**
|
|
161
|
+
- Loop iterates i=0,1,2,3
|
|
162
|
+
- Callback runs later with i=3,3,3,3
|
|
163
|
+
- All closures see the last value of the loop variable
|
|
164
|
+
- Off-by-one or wrong ID passed around
|
|
165
|
+
|
|
166
|
+
**Detection Signal:**
|
|
167
|
+
- Loop with index variable
|
|
168
|
+
- Callback or setTimeout inside loop captures loop variable
|
|
169
|
+
- Callback runs after loop completes
|
|
170
|
+
|
|
171
|
+
**Fix Template:**
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
// BAD: Closure captures loop variable
|
|
175
|
+
for (var i = 0; i < 3; i++) {
|
|
176
|
+
setTimeout(() => console.log(i), 100); // Prints 3,3,3
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// GOOD: Use const in let-scoped block
|
|
180
|
+
for (let i = 0; i < 3; i++) {
|
|
181
|
+
setTimeout(() => console.log(i), 100); // Prints 0,1,2
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Also GOOD: Explicit closure factory
|
|
185
|
+
for (var i = 0; i < 3; i++) {
|
|
186
|
+
(function(idx) {
|
|
187
|
+
setTimeout(() => console.log(idx), 100); // Prints 0,1,2
|
|
188
|
+
})(i);
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Grep for:** `for (var i` + callback inside, `for (var` + `addEventListener`, `for (var` + `setTimeout/setInterval`
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### Pattern 6: Mutating Object Used as Key
|
|
197
|
+
|
|
198
|
+
**Description:** Object is used as a dictionary key, then the object is mutated, breaking the lookup.
|
|
199
|
+
|
|
200
|
+
**Manifestation:**
|
|
201
|
+
- Object stored as key in Map
|
|
202
|
+
- Object properties change
|
|
203
|
+
- Lookup of "same" object fails
|
|
204
|
+
- Can't find data by object reference
|
|
205
|
+
|
|
206
|
+
**Detection Signal:**
|
|
207
|
+
- `map.set(obj, value)` where obj is mutable
|
|
208
|
+
- Later: `map.get(obj)` returns undefined
|
|
209
|
+
- Object identity changed but code assumes it didn't
|
|
210
|
+
|
|
211
|
+
**Fix Template:**
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
// BAD: Mutable object as key
|
|
215
|
+
const cache = new Map();
|
|
216
|
+
const user = { id: 1, name: "alice" };
|
|
217
|
+
cache.set(user, "data");
|
|
218
|
+
user.name = "bob"; // Mutated the key!
|
|
219
|
+
console.log(cache.get(user)); // Still works, but confusing
|
|
220
|
+
|
|
221
|
+
// GOOD: Use ID as key instead
|
|
222
|
+
const cache = new Map();
|
|
223
|
+
const user = { id: 1, name: "alice" };
|
|
224
|
+
cache.set(user.id, "data"); // Key is immutable number
|
|
225
|
+
user.name = "bob"; // Doesn't affect lookup
|
|
226
|
+
console.log(cache.get(user.id)); // ✓ works
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Grep for:** `map.set(` with object, then modify that object, then `map.get(` expecting to find it
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## IMPORT & DEPENDENCY PATTERNS
|
|
234
|
+
|
|
235
|
+
### Pattern 7: Circular Import
|
|
236
|
+
|
|
237
|
+
**Description:** Module A imports Module B, which imports Module A, creating a cycle.
|
|
238
|
+
|
|
239
|
+
**Manifestation:**
|
|
240
|
+
- "Cannot read property X of undefined" when module loads
|
|
241
|
+
- Module exports `undefined` unexpectedly
|
|
242
|
+
- Import order matters
|
|
243
|
+
- Webpack/Rollup bundle size warning about circular deps
|
|
244
|
+
|
|
245
|
+
**Detection Signal:**
|
|
246
|
+
- `import ... from './a'` in module-b.js
|
|
247
|
+
- `import ... from './b'` in module-a.js
|
|
248
|
+
- Or indirect: A → B → C → A
|
|
249
|
+
|
|
250
|
+
**Fix Template:**
|
|
251
|
+
|
|
252
|
+
```javascript
|
|
253
|
+
// BAD: Circular
|
|
254
|
+
// a.js: import { funcB } from './b';
|
|
255
|
+
// b.js: import { funcA } from './a';
|
|
256
|
+
|
|
257
|
+
// GOOD: Break the cycle with a third module
|
|
258
|
+
// shared.js: export both utils
|
|
259
|
+
// a.js: import from './shared'
|
|
260
|
+
// b.js: import from './shared'
|
|
261
|
+
|
|
262
|
+
// Or lazy load one side
|
|
263
|
+
// a.js: import { funcB } from './b'; // at module load
|
|
264
|
+
// becomes:
|
|
265
|
+
// a.js: const funcB = () => require('./b').funcB; // on first use
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**Grep for:** Same module name in both `import from X` and `import from Y` where X imports Y
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
### Pattern 8: Dependency Version Mismatch
|
|
273
|
+
|
|
274
|
+
**Description:** Two packages depend on incompatible versions of a third package.
|
|
275
|
+
|
|
276
|
+
**Manifestation:**
|
|
277
|
+
- "Unexpected token" or "module not found" at runtime
|
|
278
|
+
- Two versions of same package in `node_modules/`
|
|
279
|
+
- Different APIs called unexpectedly
|
|
280
|
+
- `typeof X !== 'function'` when it should be
|
|
281
|
+
|
|
282
|
+
**Detection Signal:**
|
|
283
|
+
- `npm list <package>` shows multiple versions
|
|
284
|
+
- Stack trace references same package twice
|
|
285
|
+
- Works locally, fails in CI or production
|
|
286
|
+
|
|
287
|
+
**Fix Template:**
|
|
288
|
+
|
|
289
|
+
```javascript
|
|
290
|
+
// In package.json:
|
|
291
|
+
// BAD: Loose, conflicting ranges
|
|
292
|
+
{
|
|
293
|
+
"dependencies": {
|
|
294
|
+
"lodash": "^4.0.0",
|
|
295
|
+
"some-lib": "^1.0.0" // might depend on "lodash": "^3.0.0"
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// GOOD: Pin version or use resolutions
|
|
300
|
+
{
|
|
301
|
+
"dependencies": {
|
|
302
|
+
"lodash": "4.17.21",
|
|
303
|
+
"some-lib": "^1.0.0"
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Or in pnpm/yarn:
|
|
308
|
+
{
|
|
309
|
+
"resolutions": {
|
|
310
|
+
"lodash": "4.17.21"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Grep for:** `npm list` showing duplicate package names with different versions
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## TYPE COERCION PATTERNS
|
|
320
|
+
|
|
321
|
+
### Pattern 9: JavaScript == vs === Pitfall
|
|
322
|
+
|
|
323
|
+
**Description:** Using loose equality (`==`) instead of strict (`===`) causes unexpected type coercion.
|
|
324
|
+
|
|
325
|
+
**Manifestation:**
|
|
326
|
+
- `"1" == 1` is true (coercion)
|
|
327
|
+
- `0 == false` is true (coercion)
|
|
328
|
+
- `undefined == null` is true (coercion)
|
|
329
|
+
- Logic produces unexpected results
|
|
330
|
+
|
|
331
|
+
**Detection Signal:**
|
|
332
|
+
- Use of `==` operator
|
|
333
|
+
- Code comparing different types
|
|
334
|
+
- ESLint should flag this
|
|
335
|
+
|
|
336
|
+
**Fix Template:**
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
// BAD: Loose equality
|
|
340
|
+
if (value == 0) { /* runs for 0, false, "", null */ }
|
|
341
|
+
if (str == false) { /* runs when str is "", 0, false, null */ }
|
|
342
|
+
|
|
343
|
+
// GOOD: Strict equality
|
|
344
|
+
if (value === 0) { /* only true if value is exactly 0 */ }
|
|
345
|
+
if (str === false) { /* only true if str is boolean false */ }
|
|
346
|
+
|
|
347
|
+
// Type convert first if needed
|
|
348
|
+
if (Number(str) === 0) { /* convert to number first */ }
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
**Grep for:** `==` (not `===`), especially in conditionals
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
### Pattern 10: undefined vs null Inconsistency
|
|
356
|
+
|
|
357
|
+
**Description:** Code mixes `undefined` and `null`, leading to checks that miss one or the other.
|
|
358
|
+
|
|
359
|
+
**Manifestation:**
|
|
360
|
+
- Check for `if (x === undefined)` misses `null`
|
|
361
|
+
- Check for `if (x === null)` misses `undefined`
|
|
362
|
+
- Default parameters don't work as expected
|
|
363
|
+
- "Cannot read property X of null/undefined"
|
|
364
|
+
|
|
365
|
+
**Detection Signal:**
|
|
366
|
+
- `if (x === undefined)` without also checking `null`
|
|
367
|
+
- `x ?? defaultValue` coalesces both correctly
|
|
368
|
+
- Inconsistent null handling across codebase
|
|
369
|
+
|
|
370
|
+
**Fix Template:**
|
|
371
|
+
|
|
372
|
+
```javascript
|
|
373
|
+
// BAD: Checks only undefined
|
|
374
|
+
if (response === undefined) { /* misses null */ }
|
|
375
|
+
|
|
376
|
+
// GOOD: Checks both
|
|
377
|
+
if (response == null) { /* true for undefined AND null */ }
|
|
378
|
+
|
|
379
|
+
// ALSO GOOD: Nullish coalescing
|
|
380
|
+
const value = response ?? defaultValue; // Coalesces both
|
|
381
|
+
|
|
382
|
+
// AVOID: Falsy checks for null
|
|
383
|
+
if (!response) { /* catches null, undefined, 0, "", false */ } // Too broad
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
**Grep for:** `=== undefined`, `=== null` used separately (should use `== null` or `??`)
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
### Pattern 11: Array.includes() on Falsy Values
|
|
391
|
+
|
|
392
|
+
**Description:** Using `includes()` to find falsy values (`0`, `false`, `""`) works, but loose equality bugs mask it.
|
|
393
|
+
|
|
394
|
+
**Manifestation:**
|
|
395
|
+
- `if (nums.includes(0))` works fine
|
|
396
|
+
- But `if (nums.includes(value))` fails if value is 0 due to nearby `==` bugs
|
|
397
|
+
- NaN in array cannot be found (special case)
|
|
398
|
+
|
|
399
|
+
**Detection Signal:**
|
|
400
|
+
- `arr.includes(0)` not matching when 0 is in array
|
|
401
|
+
- NaN in array and `arr.includes(NaN)` returns false
|
|
402
|
+
|
|
403
|
+
**Fix Template:**
|
|
404
|
+
|
|
405
|
+
```javascript
|
|
406
|
+
// GOOD: includes() works for falsy values
|
|
407
|
+
const nums = [0, 1, 2];
|
|
408
|
+
console.log(nums.includes(0)); // true
|
|
409
|
+
|
|
410
|
+
// GOTCHA: NaN is special
|
|
411
|
+
const vals = [NaN, 1, 2];
|
|
412
|
+
console.log(vals.includes(NaN)); // true (includes uses === for NaN)
|
|
413
|
+
console.log(vals.indexOf(NaN)); // -1 (indexOf uses == for NaN)
|
|
414
|
+
|
|
415
|
+
// WORKAROUND for older code:
|
|
416
|
+
if (arr.some(x => x === value)) { /* works for NaN and falsy */ }
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**Grep for:** `includes(0)` or `includes(false)` that's failing; check for `==` bugs nearby
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## ENVIRONMENT PATTERNS
|
|
424
|
+
|
|
425
|
+
### Pattern 12: Environment Variable Not Loaded
|
|
426
|
+
|
|
427
|
+
**Description:** Code references an env var that's not set at runtime, so it's `undefined`.
|
|
428
|
+
|
|
429
|
+
**Manifestation:**
|
|
430
|
+
- API key is undefined at startup
|
|
431
|
+
- Code behaves differently in dev vs prod
|
|
432
|
+
- "Cannot read property X of undefined" where undefined is the env var
|
|
433
|
+
- Works locally, fails in CI
|
|
434
|
+
|
|
435
|
+
**Detection Signal:**
|
|
436
|
+
- `process.env.SOME_VAR` is undefined
|
|
437
|
+
- `.env` file exists locally but CI doesn't load it
|
|
438
|
+
- Startup error: "API key missing"
|
|
439
|
+
|
|
440
|
+
**Fix Template:**
|
|
441
|
+
|
|
442
|
+
```javascript
|
|
443
|
+
// BAD: Assumes env var is set
|
|
444
|
+
const apiKey = process.env.API_KEY;
|
|
445
|
+
const client = new APIClient(apiKey); // apiKey is undefined!
|
|
446
|
+
|
|
447
|
+
// GOOD: Validate at startup
|
|
448
|
+
const apiKey = process.env.API_KEY;
|
|
449
|
+
if (!apiKey) {
|
|
450
|
+
throw new Error('API_KEY environment variable not set');
|
|
451
|
+
}
|
|
452
|
+
const client = new APIClient(apiKey);
|
|
453
|
+
|
|
454
|
+
// ALSO GOOD: Use dotenv to load .env
|
|
455
|
+
require('dotenv').config();
|
|
456
|
+
const apiKey = process.env.API_KEY;
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Grep for:** `process.env.` references, check if `.env` is loaded via `dotenv.config()`
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
### Pattern 13: Hardcoded Path Assumptions
|
|
464
|
+
|
|
465
|
+
**Description:** Code assumes files are at relative paths that only work in specific directory contexts.
|
|
466
|
+
|
|
467
|
+
**Manifestation:**
|
|
468
|
+
- "ENOENT: no such file or directory" when running from different directory
|
|
469
|
+
- Tests fail with path errors but main code works
|
|
470
|
+
- Works on one machine, fails on another
|
|
471
|
+
- Relative paths like `../../config.json`
|
|
472
|
+
|
|
473
|
+
**Detection Signal:**
|
|
474
|
+
- `fs.readFileSync('../config.json')`
|
|
475
|
+
- `require.resolve('./data')` without validating existence
|
|
476
|
+
- Different behavior based on `process.cwd()`
|
|
477
|
+
|
|
478
|
+
**Fix Template:**
|
|
479
|
+
|
|
480
|
+
```javascript
|
|
481
|
+
// BAD: Assumes current directory
|
|
482
|
+
const config = require('../../config.json'); // Fragile!
|
|
483
|
+
|
|
484
|
+
// GOOD: Use __dirname or module root
|
|
485
|
+
const path = require('path');
|
|
486
|
+
const configPath = path.join(__dirname, '../../config.json');
|
|
487
|
+
const config = require(configPath);
|
|
488
|
+
|
|
489
|
+
// ALSO GOOD: Resolve from package root
|
|
490
|
+
const configPath = require.resolve('config.json'); // Looks in node_modules or package.json#main
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
**Grep for:** `'../', '../../'`, `fs.readFile` with relative paths, test files that change `process.cwd()`
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## TIMING & LIFECYCLE PATTERNS
|
|
498
|
+
|
|
499
|
+
### Pattern 14: Resource Leaked in Error Path
|
|
500
|
+
|
|
501
|
+
**Description:** Code opens a resource (file, connection, socket) but doesn't close it if an error occurs.
|
|
502
|
+
|
|
503
|
+
**Manifestation:**
|
|
504
|
+
- File descriptors keep increasing
|
|
505
|
+
- "EMFILE: too many open files" after running for a while
|
|
506
|
+
- Connections pile up and timeout
|
|
507
|
+
- Memory leaks
|
|
508
|
+
|
|
509
|
+
**Detection Signal:**
|
|
510
|
+
- `open()` or `connect()` followed by code that might throw
|
|
511
|
+
- No `finally` or `try-finally` block
|
|
512
|
+
- No explicit `.close()` or `.destroy()` on error
|
|
513
|
+
|
|
514
|
+
**Fix Template:**
|
|
515
|
+
|
|
516
|
+
```javascript
|
|
517
|
+
// BAD: Leak on error
|
|
518
|
+
const file = fs.openSync('data.txt');
|
|
519
|
+
processData(file); // might throw!
|
|
520
|
+
fs.closeSync(file);
|
|
521
|
+
|
|
522
|
+
// GOOD: Guarantee close
|
|
523
|
+
const file = fs.openSync('data.txt');
|
|
524
|
+
try {
|
|
525
|
+
processData(file);
|
|
526
|
+
} finally {
|
|
527
|
+
fs.closeSync(file); // Always runs
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// ALSO GOOD: Use async with-pattern
|
|
531
|
+
const file = await fs.promises.open('data.txt');
|
|
532
|
+
try {
|
|
533
|
+
await processData(file);
|
|
534
|
+
} finally {
|
|
535
|
+
await file.close();
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
**Grep for:** `open(`, `connect(`, `createConnection(` followed by code without `try-finally` or cleanup
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
### Pattern 15: Event Listener Not Removed
|
|
544
|
+
|
|
545
|
+
**Description:** Event listener is attached but never removed, causing duplicate callbacks on re-initialization.
|
|
546
|
+
|
|
547
|
+
**Manifestation:**
|
|
548
|
+
- Same callback runs multiple times when it should run once
|
|
549
|
+
- Memory grows over time
|
|
550
|
+
- Event listeners pile up on reinitialization
|
|
551
|
+
- "Already listening" or duplicate notifications
|
|
552
|
+
|
|
553
|
+
**Detection Signal:**
|
|
554
|
+
- `addEventListener()` without corresponding `removeEventListener()`
|
|
555
|
+
- Re-initialization code adds listeners without cleanup
|
|
556
|
+
- Tests fail if run twice in sequence
|
|
557
|
+
|
|
558
|
+
**Fix Template:**
|
|
559
|
+
|
|
560
|
+
```javascript
|
|
561
|
+
// BAD: Listener added multiple times
|
|
562
|
+
function init() {
|
|
563
|
+
button.addEventListener('click', handleClick); // Added every time init() runs!
|
|
564
|
+
}
|
|
565
|
+
init(); init(); // Now click fires twice!
|
|
566
|
+
|
|
567
|
+
// GOOD: Remove old listener first
|
|
568
|
+
function init() {
|
|
569
|
+
button.removeEventListener('click', handleClick); // Clean up old
|
|
570
|
+
button.addEventListener('click', handleClick);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// ALSO GOOD: Use { once: true }
|
|
574
|
+
button.addEventListener('click', handleClick, { once: true });
|
|
575
|
+
|
|
576
|
+
// ALSO GOOD: Cleanup function
|
|
577
|
+
let unsubscribe;
|
|
578
|
+
function init() {
|
|
579
|
+
if (unsubscribe) unsubscribe(); // Clean up from previous init
|
|
580
|
+
unsubscribe = () => button.removeEventListener('click', handleClick);
|
|
581
|
+
button.addEventListener('click', handleClick);
|
|
582
|
+
}
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
**Grep for:** `addEventListener` without matching `removeEventListener`, `on(` without `off()`, re-initialization functions
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## PATTERN SUMMARY TABLE
|
|
590
|
+
|
|
591
|
+
| # | Pattern | Symptom | Detection | Fix |
|
|
592
|
+
|----|---------|---------|-----------|-----|
|
|
593
|
+
| 1 | Race condition | Flaky test, random failures | Concurrent Promise.all + shared state | Serialize with queue/lock |
|
|
594
|
+
| 2 | Missing await | "Cannot read X of undefined" | `const x = async()` no await | Add `await` |
|
|
595
|
+
| 3 | Unhandled rejection | Silent failure, UnhandledPromiseRejection | `.then()` no `.catch()` | Add `.catch()` or try-catch |
|
|
596
|
+
| 4 | Shared reference | Unexpected mutation | Object passed to multiple functions | Defensive copy with `{...}` |
|
|
597
|
+
| 5 | Closure loop var | All callbacks see last value | `for (var i` with callback | Use `let` instead of `var` |
|
|
598
|
+
| 6 | Mutable dict key | Map lookup fails | `map.set(obj)` then mutate obj | Use immutable ID as key |
|
|
599
|
+
| 7 | Circular import | "undefined is not a function" | A imports B imports A | Use shared module or lazy load |
|
|
600
|
+
| 8 | Dependency version mismatch | "Unexpected token" | `npm list` shows duplicates | Pin version or use resolutions |
|
|
601
|
+
| 9 | == coercion | Unexpected truthiness | `==` instead of `===` | Use `===` |
|
|
602
|
+
| 10 | undefined vs null | Checks miss one or other | `=== undefined` without null | Use `== null` or `??` |
|
|
603
|
+
| 11 | includes() falsy | includes(0) fails mysteriously | NaN or loose equality issues | Use `.some(x => x ===)` |
|
|
604
|
+
| 12 | Missing env var | "Cannot read X of undefined" | `process.env.VAR` is undefined | Validate at startup or load .env |
|
|
605
|
+
| 13 | Hardcoded paths | ENOENT different directories | `'../../file'` relative paths | Use `__dirname` or `path.join()` |
|
|
606
|
+
| 14 | Resource leak | EMFILE or connection pile-up | `open()` without `.close()` in finally | Use try-finally or async cleanup |
|
|
607
|
+
| 15 | Listener not removed | Callback fires multiple times | `addEventListener` without remove | Call `removeEventListener` first |
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## How to Use This Catalogue
|
|
612
|
+
|
|
613
|
+
1. **Hypothesis formation:** When debugging, scan this list for the symptom
|
|
614
|
+
2. **Detection:** Look for the detection signals in your code
|
|
615
|
+
3. **Fix:** Apply the fix template as a starting point
|
|
616
|
+
4. **Prevention:** Add ESLint rules for patterns 9, 10 (use strict equality by default)
|
|
617
|
+
|
|
618
|
+
**Reference this before running hypotheses:**
|
|
619
|
+
- New bug → scan this list for matching symptom
|
|
620
|
+
- Deploying code → check for patterns 12, 13, 14 (env, paths, cleanup)
|
|
621
|
+
- Refactoring → check for patterns 4, 5, 6 (mutation, closure, keys)
|