devflow-kit 1.8.3 → 2.0.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/CHANGELOG.md +183 -6
- package/LICENSE +1 -1
- package/README.md +139 -219
- package/dist/cli/agents-view/index.js +9 -0
- package/dist/cli/agents-view/render.js +310 -0
- package/dist/cli/agents-view/state.js +423 -0
- package/dist/cli/agents-view/terminal.js +179 -0
- package/dist/cli/commands/agents.js +585 -0
- package/dist/cli/commands/ambient.js +231 -0
- package/dist/cli/commands/capture.js +133 -0
- package/dist/cli/commands/compliance-prompts.js +174 -0
- package/dist/cli/commands/compliance.js +337 -0
- package/dist/cli/commands/context.js +66 -0
- package/dist/cli/commands/debug.js +122 -0
- package/dist/cli/commands/flags.js +119 -0
- package/dist/cli/commands/hud.js +229 -0
- package/dist/cli/commands/init-seed.js +226 -0
- package/dist/cli/commands/init.js +1786 -0
- package/dist/cli/commands/knowledge/index.js +25 -0
- package/dist/cli/commands/knowledge/list.js +115 -0
- package/dist/cli/commands/knowledge/toggle.js +84 -0
- package/dist/cli/commands/learning.js +311 -0
- package/dist/cli/commands/legacy-hooks.js +40 -0
- package/dist/cli/commands/memory.js +349 -0
- package/dist/cli/commands/proxy.js +1435 -0
- package/dist/cli/commands/rules.js +334 -0
- package/dist/cli/commands/safe-delete.js +140 -0
- package/dist/cli/commands/security.js +179 -0
- package/dist/cli/commands/skills.js +140 -0
- package/dist/cli/commands/uninstall.js +1214 -0
- package/dist/cli.js +35 -10
- package/dist/commands/bug-analysis.md +400 -0
- package/dist/commands/code-review.md +403 -0
- package/dist/commands/debug.md +282 -0
- package/dist/commands/dynamic-build.md +972 -0
- package/dist/commands/dynamic-plan.md +383 -0
- package/dist/commands/dynamic-profile.md +206 -0
- package/dist/commands/dynamic-tickets.md +583 -0
- package/dist/commands/explore.md +208 -0
- package/dist/commands/implement.md +590 -0
- package/dist/commands/plan.md +570 -0
- package/dist/commands/release.md +206 -0
- package/dist/commands/research.md +212 -0
- package/dist/commands/resolve.md +731 -0
- package/dist/commands/self-review.md +251 -0
- package/dist/core/agent-frontmatter.js +209 -0
- package/dist/core/agent-models.js +556 -0
- package/dist/core/agent-state.js +44 -0
- package/dist/core/assets.js +39 -0
- package/dist/core/cache.js +205 -0
- package/dist/core/codex-auth-inspect.js +128 -0
- package/dist/core/compliance-compose.js +458 -0
- package/dist/core/compliance.js +165 -0
- package/dist/core/external-models.js +76 -0
- package/dist/core/feature-config.js +125 -0
- package/dist/core/flags.js +309 -0
- package/dist/core/fs-atomic.js +74 -0
- package/dist/core/git.js +61 -0
- package/dist/core/learning-queue-cleanup.js +92 -0
- package/dist/core/learning-tuning-config.js +78 -0
- package/dist/core/manifest.js +171 -0
- package/dist/core/migrations.js +330 -0
- package/dist/core/model-discovery.js +655 -0
- package/dist/core/observation-io.js +50 -0
- package/dist/core/observations.js +109 -0
- package/dist/core/orphan-sweep.js +92 -0
- package/dist/core/paths.js +48 -0
- package/dist/core/plugins.js +525 -0
- package/dist/core/project-paths.js +159 -0
- package/dist/core/proxy-log.js +165 -0
- package/dist/core/proxy-state.js +305 -0
- package/dist/core/safe-delete-install.js +191 -0
- package/dist/core/teammate-mode-cleanup.js +33 -0
- package/dist/hud/colors.js +13 -2
- package/dist/hud/components/config-counts.js +2 -2
- package/dist/hud/components/context-usage.js +2 -2
- package/dist/hud/components/learning-counts.js +92 -0
- package/dist/hud/components/session-cost.js +10 -2
- package/dist/hud/components/usage-quota.js +43 -8
- package/dist/hud/components/version-badge.js +14 -4
- package/dist/hud/config.js +4 -2
- package/dist/hud/cost-history.js +281 -0
- package/dist/hud/git.js +112 -71
- package/dist/hud/index.js +47 -4
- package/dist/hud/render.js +8 -20
- package/dist/hud/transcript.js +5 -6
- package/dist/targets/claude-code/claude-paths.js +106 -0
- package/dist/targets/claude-code/compliance-install.js +305 -0
- package/dist/targets/claude-code/hooks.js +9 -0
- package/dist/targets/claude-code/installer.js +458 -0
- package/dist/targets/claude-code/legacy.js +239 -0
- package/dist/targets/claude-code/post-install.js +971 -0
- package/package.json +23 -17
- package/src/assets/agents/code.md +244 -0
- package/src/assets/agents/design.md +113 -0
- package/src/assets/agents/diagnose.md +210 -0
- package/src/assets/agents/evaluate.md +117 -0
- package/src/assets/agents/git.md +938 -0
- package/src/assets/agents/knowledge.md +89 -0
- package/src/assets/agents/learning.md +203 -0
- package/src/assets/agents/research.md +134 -0
- package/src/assets/agents/review.md +220 -0
- package/src/assets/agents/scrutinize.md +95 -0
- package/src/assets/agents/simplify.md +108 -0
- package/src/assets/agents/skim.md +136 -0
- package/src/assets/agents/synthesize.md +402 -0
- package/src/assets/agents/test.md +155 -0
- package/src/assets/agents/triage.md +141 -0
- package/src/assets/agents/validate.md +103 -0
- package/src/assets/commands/_partials/_compliance.mds +5 -0
- package/src/assets/commands/_partials/_decisions.mds +20 -0
- package/src/assets/commands/_partials/_engine.mds +244 -0
- package/src/assets/commands/_partials/_factory.mds +216 -0
- package/src/assets/commands/_partials/_knowledge.mds +95 -0
- package/src/assets/commands/_partials/_plan_contract.mds +51 -0
- package/src/assets/commands/_partials/_preamble.mds +82 -0
- package/src/assets/commands/_partials/_publication.mds +7 -0
- package/src/assets/commands/_partials/_roster.mds +31 -0
- package/src/assets/commands/_partials/_ticket_template.mds +59 -0
- package/src/assets/commands/_partials/_wave.mds +123 -0
- package/src/assets/commands/bug-analysis.mds +353 -0
- package/src/assets/commands/code-review.mds +355 -0
- package/src/assets/commands/debug.mds +224 -0
- package/src/assets/commands/dynamic-build.mds +534 -0
- package/src/assets/commands/dynamic-plan.mds +244 -0
- package/src/assets/commands/dynamic-profile.mds +132 -0
- package/src/assets/commands/dynamic-tickets.mds +226 -0
- package/src/assets/commands/explore.mds +150 -0
- package/src/assets/commands/implement.mds +496 -0
- package/src/assets/commands/plan.mds +523 -0
- package/src/assets/commands/release.md +206 -0
- package/src/assets/commands/research.mds +164 -0
- package/src/assets/commands/resolve.mds +636 -0
- package/src/assets/commands/self-review.mds +156 -0
- package/src/assets/rules/accessibility.md +11 -0
- package/src/assets/rules/compliance.md +15 -0
- package/src/assets/rules/engineering.md +13 -0
- package/src/assets/rules/go.md +12 -0
- package/src/assets/rules/java.md +12 -0
- package/src/assets/rules/python.md +12 -0
- package/src/assets/rules/quality.md +14 -0
- package/src/assets/rules/react.md +11 -0
- package/src/assets/rules/reliability.md +12 -0
- package/src/assets/rules/rust.md +12 -0
- package/src/assets/rules/security.md +12 -0
- package/src/assets/rules/typescript.md +12 -0
- package/src/assets/rules/ui-design.md +11 -0
- package/src/assets/scripts/hooks/assets/orchestrator-charter.md +21 -0
- package/src/assets/scripts/hooks/background-memory-update +460 -0
- package/src/assets/scripts/hooks/capture-prompt +87 -0
- package/src/assets/scripts/hooks/capture-question +153 -0
- package/src/assets/scripts/hooks/capture-turn +105 -0
- package/src/assets/scripts/hooks/debug-trace +75 -0
- package/src/assets/scripts/hooks/decisions-usage-scan.cjs +131 -0
- package/src/assets/scripts/hooks/ensure-devflow-init +39 -0
- package/src/assets/scripts/hooks/ensure-proxy +294 -0
- package/src/assets/scripts/hooks/ensure-root-gitignore +116 -0
- package/src/assets/scripts/hooks/get-mtime +23 -0
- package/src/assets/scripts/hooks/git-marker +16 -0
- package/src/assets/scripts/hooks/hook-bootstrap +25 -0
- package/src/assets/scripts/hooks/hook-log-init +41 -0
- package/src/assets/scripts/hooks/json-helper.cjs +725 -0
- package/src/assets/scripts/hooks/json-parse +243 -0
- package/src/assets/scripts/hooks/learning-lock +44 -0
- package/src/assets/scripts/hooks/lib/decisions-format.cjs +301 -0
- package/src/assets/scripts/hooks/lib/mkdir-lock.cjs +106 -0
- package/src/assets/scripts/hooks/lib/project-paths.cjs +230 -0
- package/src/assets/scripts/hooks/lib/render-decisions.cjs +398 -0
- package/src/assets/scripts/hooks/lib/safe-path.cjs +29 -0
- package/src/assets/scripts/hooks/log-paths +24 -0
- package/src/assets/scripts/hooks/memory-worker +101 -0
- package/src/assets/scripts/hooks/pre-compact-memory +126 -0
- package/src/assets/scripts/hooks/preamble +77 -0
- package/src/assets/scripts/hooks/queue-append +120 -0
- package/src/assets/scripts/hooks/resolve-project-root +37 -0
- package/src/assets/scripts/hooks/run-hook +31 -0
- package/src/assets/scripts/hooks/session-start-context +180 -0
- package/src/assets/scripts/hooks/session-start-memory +318 -0
- package/src/assets/scripts/hooks/session-start-orchestrator +54 -0
- package/src/assets/scripts/hud.sh +5 -0
- package/src/assets/scripts/redact-secrets.cjs +410 -0
- package/src/assets/skills/accessibility/SKILL.md +145 -0
- package/src/assets/skills/accessibility/references/patterns.md +398 -0
- package/src/assets/skills/accessibility/references/sources.md +26 -0
- package/src/assets/skills/accessibility/references/violations.md +358 -0
- package/src/assets/skills/apply-decisions/SKILL.md +100 -0
- package/src/assets/skills/apply-feature-knowledge/SKILL.md +69 -0
- package/src/assets/skills/architecture/SKILL.md +138 -0
- package/src/assets/skills/architecture/references/patterns.md +378 -0
- package/src/assets/skills/architecture/references/sources.md +41 -0
- package/src/assets/skills/architecture/references/violations.md +314 -0
- package/src/assets/skills/boundary-validation/SKILL.md +119 -0
- package/src/assets/skills/boundary-validation/references/detection.md +283 -0
- package/src/assets/skills/boundary-validation/references/patterns.md +283 -0
- package/src/assets/skills/boundary-validation/references/sources.md +41 -0
- package/src/assets/skills/boundary-validation/references/violations.md +211 -0
- package/src/assets/skills/complexity/SKILL.md +150 -0
- package/src/assets/skills/compliance/SKILL.md +121 -0
- package/src/assets/skills/compliance/frameworks/gdpr/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/gdpr/reference.md +50 -0
- package/src/assets/skills/compliance/frameworks/hipaa/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/hipaa/reference.md +44 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/reference.md +45 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/reference.md +55 -0
- package/src/assets/skills/compliance/frameworks/soc2/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/soc2/reference.md +53 -0
- package/src/assets/skills/compliance/frameworks/sox/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/sox/reference.md +67 -0
- package/src/assets/skills/compliance/references/detection.md +108 -0
- package/src/assets/skills/compliance/references/sources.md +28 -0
- package/src/assets/skills/consistency/SKILL.md +140 -0
- package/src/assets/skills/database/SKILL.md +134 -0
- package/src/assets/skills/dependencies/SKILL.md +141 -0
- package/src/assets/skills/dependency-research/SKILL.md +133 -0
- package/src/assets/skills/dependency-research/references/evaluation-criteria.md +101 -0
- package/src/assets/skills/design-review/SKILL.md +155 -0
- package/src/assets/skills/design-review/references/anti-patterns.md +207 -0
- package/src/assets/skills/docs-framework/SKILL.md +190 -0
- package/src/assets/skills/docs-framework/references/patterns.md +381 -0
- package/src/assets/skills/docs-framework/references/violations.md +221 -0
- package/src/assets/skills/documentation/SKILL.md +126 -0
- package/src/assets/skills/feature-knowledge/SKILL.md +341 -0
- package/src/assets/skills/gap-analysis/SKILL.md +151 -0
- package/src/assets/skills/gap-analysis/references/check-layers.md +125 -0
- package/src/assets/skills/git/SKILL.md +287 -0
- package/src/assets/skills/git/references/github-api.md +666 -0
- package/src/assets/skills/git/references/patterns.md +324 -0
- package/src/assets/skills/git/references/sources.md +16 -0
- package/src/assets/skills/git/references/violations.md +128 -0
- package/src/assets/skills/go/SKILL.md +147 -0
- package/src/assets/skills/go/references/concurrency.md +335 -0
- package/src/assets/skills/go/references/patterns.md +278 -0
- package/src/assets/skills/go/references/sources.md +41 -0
- package/src/assets/skills/go/references/violations.md +262 -0
- package/src/assets/skills/java/SKILL.md +148 -0
- package/src/assets/skills/java/references/modern-java.md +335 -0
- package/src/assets/skills/java/references/patterns.md +311 -0
- package/src/assets/skills/java/references/sources.md +44 -0
- package/src/assets/skills/java/references/violations.md +257 -0
- package/src/assets/skills/patterns/SKILL.md +162 -0
- package/src/assets/skills/performance/SKILL.md +135 -0
- package/src/assets/skills/performance/references/patterns.md +516 -0
- package/src/assets/skills/performance/references/sources.md +41 -0
- package/src/assets/skills/performance/references/violations.md +417 -0
- package/src/assets/skills/python/SKILL.md +156 -0
- package/src/assets/skills/python/references/async.md +255 -0
- package/src/assets/skills/python/references/patterns.md +280 -0
- package/src/assets/skills/python/references/sources.md +41 -0
- package/src/assets/skills/python/references/violations.md +272 -0
- package/src/assets/skills/qa/SKILL.md +136 -0
- package/src/assets/skills/qa/references/browser-testing.md +97 -0
- package/src/assets/skills/qa/references/patterns.md +118 -0
- package/src/assets/skills/qa/references/scenario-templates.md +102 -0
- package/src/assets/skills/qa/references/sources.md +30 -0
- package/src/assets/skills/qa/references/violations.md +98 -0
- package/src/assets/skills/quality-gates/SKILL.md +152 -0
- package/src/assets/skills/quality-gates/references/stub-detection.md +135 -0
- package/src/assets/skills/react/SKILL.md +143 -0
- package/src/assets/skills/react/references/error-handling.md +179 -0
- package/src/assets/skills/react/references/forms.md +214 -0
- package/src/assets/skills/react/references/hooks.md +193 -0
- package/src/assets/skills/react/references/patterns.md +1336 -0
- package/src/assets/skills/react/references/sources.md +35 -0
- package/src/assets/skills/react/references/violations.md +570 -0
- package/src/assets/skills/regression/SKILL.md +146 -0
- package/src/assets/skills/reliability/SKILL.md +153 -0
- package/src/assets/skills/reliability/references/detection.md +66 -0
- package/src/assets/skills/reliability/references/patterns.md +151 -0
- package/src/assets/skills/reliability/references/sources.md +27 -0
- package/src/assets/skills/reliability/references/violations.md +125 -0
- package/src/assets/skills/research-codebase/SKILL.md +135 -0
- package/src/assets/skills/research-competitor/SKILL.md +145 -0
- package/src/assets/skills/research-external/SKILL.md +141 -0
- package/src/assets/skills/research-market/SKILL.md +145 -0
- package/src/assets/skills/research-technology/SKILL.md +180 -0
- package/src/assets/skills/review-methodology/SKILL.md +121 -0
- package/src/assets/skills/review-methodology/references/patterns.md +186 -0
- package/src/assets/skills/review-methodology/references/report-template.md +142 -0
- package/src/assets/skills/review-methodology/references/violations.md +125 -0
- package/src/assets/skills/rust/SKILL.md +148 -0
- package/src/assets/skills/rust/references/ownership.md +278 -0
- package/src/assets/skills/rust/references/patterns.md +247 -0
- package/src/assets/skills/rust/references/sources.md +46 -0
- package/src/assets/skills/rust/references/violations.md +252 -0
- package/src/assets/skills/security/SKILL.md +121 -0
- package/src/assets/skills/security/references/patterns.md +271 -0
- package/src/assets/skills/security/references/sources.md +41 -0
- package/src/assets/skills/security/references/violations.md +241 -0
- package/src/assets/skills/software-design/SKILL.md +143 -0
- package/src/assets/skills/software-design/references/checklist.md +259 -0
- package/src/assets/skills/software-design/references/code-smell-violations.md +189 -0
- package/src/assets/skills/software-design/references/patterns.md +359 -0
- package/src/assets/skills/software-design/references/sources.md +41 -0
- package/src/assets/skills/software-design/references/violations.md +341 -0
- package/src/assets/skills/test-driven-development/SKILL.md +197 -0
- package/src/assets/skills/testing/SKILL.md +139 -0
- package/src/assets/skills/testing/references/patterns.md +346 -0
- package/src/assets/skills/testing/references/sources.md +53 -0
- package/src/assets/skills/testing/references/violations.md +322 -0
- package/src/assets/skills/typescript/SKILL.md +150 -0
- package/src/assets/skills/typescript/references/async.md +333 -0
- package/src/assets/skills/typescript/references/patterns.md +440 -0
- package/src/assets/skills/typescript/references/sources.md +41 -0
- package/src/assets/skills/typescript/references/type-guards.md +333 -0
- package/src/assets/skills/typescript/references/utility-types.md +255 -0
- package/src/assets/skills/typescript/references/violations.md +285 -0
- package/src/assets/skills/ui-design/SKILL.md +144 -0
- package/src/assets/skills/ui-design/references/patterns.md +341 -0
- package/src/assets/skills/ui-design/references/sources.md +41 -0
- package/src/assets/skills/ui-design/references/violations.md +312 -0
- package/src/assets/skills/worktree-support/SKILL.md +92 -0
- package/src/targets/claude-code/templates/claudeignore.template +188 -0
- package/src/targets/claude-code/templates/settings.json +86 -0
- package/dist/cli.d.ts +0 -3
- package/dist/commands/ambient.d.ts +0 -18
- package/dist/commands/ambient.js +0 -137
- package/dist/commands/hud.d.ts +0 -22
- package/dist/commands/hud.js +0 -180
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +0 -738
- package/dist/commands/list.d.ts +0 -24
- package/dist/commands/list.js +0 -89
- package/dist/commands/memory.d.ts +0 -22
- package/dist/commands/memory.js +0 -175
- package/dist/commands/skills.d.ts +0 -11
- package/dist/commands/skills.js +0 -116
- package/dist/commands/uninstall.d.ts +0 -22
- package/dist/commands/uninstall.js +0 -558
- package/dist/hud/cache.d.ts +0 -14
- package/dist/hud/cache.js +0 -54
- package/dist/hud/colors.d.ts +0 -23
- package/dist/hud/components/config-counts.d.ts +0 -8
- package/dist/hud/components/context-usage.d.ts +0 -8
- package/dist/hud/components/diff-stats.d.ts +0 -3
- package/dist/hud/components/directory.d.ts +0 -3
- package/dist/hud/components/git-ahead-behind.d.ts +0 -3
- package/dist/hud/components/git-branch.d.ts +0 -3
- package/dist/hud/components/model.d.ts +0 -3
- package/dist/hud/components/release-info.d.ts +0 -3
- package/dist/hud/components/session-cost.d.ts +0 -3
- package/dist/hud/components/session-duration.d.ts +0 -3
- package/dist/hud/components/todo-progress.d.ts +0 -3
- package/dist/hud/components/usage-quota.d.ts +0 -3
- package/dist/hud/components/version-badge.d.ts +0 -3
- package/dist/hud/components/worktree-count.d.ts +0 -3
- package/dist/hud/config.d.ts +0 -10
- package/dist/hud/credentials.d.ts +0 -17
- package/dist/hud/credentials.js +0 -99
- package/dist/hud/git.d.ts +0 -7
- package/dist/hud/index.d.ts +0 -2
- package/dist/hud/render.d.ts +0 -7
- package/dist/hud/stdin.d.ts +0 -6
- package/dist/hud/transcript.d.ts +0 -7
- package/dist/hud/types.d.ts +0 -116
- package/dist/hud/usage-api.d.ts +0 -7
- package/dist/hud/usage-api.js +0 -84
- package/dist/plugins.d.ts +0 -46
- package/dist/plugins.js +0 -233
- package/dist/utils/cli.d.ts +0 -5
- package/dist/utils/cli.js +0 -14
- package/dist/utils/git.d.ts +0 -11
- package/dist/utils/git.js +0 -36
- package/dist/utils/installer.d.ts +0 -41
- package/dist/utils/installer.js +0 -195
- package/dist/utils/manifest.d.ts +0 -46
- package/dist/utils/manifest.js +0 -100
- package/dist/utils/paths.d.ts +0 -42
- package/dist/utils/paths.js +0 -106
- package/dist/utils/post-install.d.ts +0 -87
- package/dist/utils/post-install.js +0 -546
- package/dist/utils/safe-delete-install.d.ts +0 -29
- package/dist/utils/safe-delete-install.js +0 -191
- package/dist/utils/safe-delete.d.ts +0 -12
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-accessibility/skills/accessibility/SKILL.md +0 -229
- package/plugins/devflow-accessibility/skills/accessibility/references/patterns.md +0 -670
- package/plugins/devflow-accessibility/skills/accessibility/references/violations.md +0 -419
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +0 -33
- package/plugins/devflow-ambient/README.md +0 -68
- package/plugins/devflow-ambient/agents/coder.md +0 -135
- package/plugins/devflow-ambient/agents/reviewer.md +0 -165
- package/plugins/devflow-ambient/agents/scrutinizer.md +0 -82
- package/plugins/devflow-ambient/agents/shepherd.md +0 -108
- package/plugins/devflow-ambient/agents/simplifier.md +0 -102
- package/plugins/devflow-ambient/agents/skimmer.md +0 -143
- package/plugins/devflow-ambient/agents/validator.md +0 -86
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +0 -145
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +0 -74
- package/plugins/devflow-ambient/skills/debug-orchestration/SKILL.md +0 -69
- package/plugins/devflow-ambient/skills/implementation-orchestration/SKILL.md +0 -92
- package/plugins/devflow-ambient/skills/plan-orchestration/SKILL.md +0 -71
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +0 -19
- package/plugins/devflow-audit-claude/README.md +0 -46
- package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +0 -134
- package/plugins/devflow-audit-claude/commands/audit-claude.md +0 -89
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +0 -38
- package/plugins/devflow-code-review/README.md +0 -73
- package/plugins/devflow-code-review/agents/git.md +0 -277
- package/plugins/devflow-code-review/agents/reviewer.md +0 -165
- package/plugins/devflow-code-review/agents/synthesizer.md +0 -211
- package/plugins/devflow-code-review/commands/code-review-teams.md +0 -285
- package/plugins/devflow-code-review/commands/code-review.md +0 -163
- package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +0 -153
- package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +0 -873
- package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +0 -575
- package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +0 -143
- package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +0 -140
- package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +0 -134
- package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +0 -141
- package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +0 -125
- package/plugins/devflow-code-review/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-code-review/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +0 -154
- package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +0 -503
- package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +0 -354
- package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +0 -146
- package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +0 -119
- package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +0 -186
- package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +0 -142
- package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +0 -125
- package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +0 -31
- package/plugins/devflow-core-skills/README.md +0 -50
- package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +0 -143
- package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +0 -346
- package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +0 -221
- package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +0 -158
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +0 -115
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +0 -77
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +0 -127
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +0 -96
- package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +0 -153
- package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +0 -572
- package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +0 -298
- package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +0 -148
- package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +0 -283
- package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +0 -361
- package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +0 -224
- package/plugins/devflow-core-skills/skills/search-first/SKILL.md +0 -133
- package/plugins/devflow-core-skills/skills/search-first/references/evaluation-criteria.md +0 -101
- package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +0 -137
- package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +0 -149
- package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +0 -108
- package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-debug/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-debug/README.md +0 -65
- package/plugins/devflow-debug/agents/git.md +0 -277
- package/plugins/devflow-debug/agents/synthesizer.md +0 -211
- package/plugins/devflow-debug/commands/debug-teams.md +0 -245
- package/plugins/devflow-debug/commands/debug.md +0 -174
- package/plugins/devflow-debug/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-debug/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-debug/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-debug/skills/git-safety/references/detection.md +0 -290
- package/plugins/devflow-debug/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-debug/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-debug/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-debug/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-frontend-design/skills/frontend-design/SKILL.md +0 -254
- package/plugins/devflow-frontend-design/skills/frontend-design/references/patterns.md +0 -511
- package/plugins/devflow-frontend-design/skills/frontend-design/references/violations.md +0 -453
- package/plugins/devflow-go/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-go/skills/go/SKILL.md +0 -187
- package/plugins/devflow-go/skills/go/references/concurrency.md +0 -312
- package/plugins/devflow-go/skills/go/references/patterns.md +0 -232
- package/plugins/devflow-go/skills/go/references/violations.md +0 -205
- package/plugins/devflow-implement/.claude-plugin/plugin.json +0 -35
- package/plugins/devflow-implement/README.md +0 -71
- package/plugins/devflow-implement/agents/coder.md +0 -135
- package/plugins/devflow-implement/agents/git.md +0 -277
- package/plugins/devflow-implement/agents/scrutinizer.md +0 -82
- package/plugins/devflow-implement/agents/shepherd.md +0 -108
- package/plugins/devflow-implement/agents/simplifier.md +0 -102
- package/plugins/devflow-implement/agents/skimmer.md +0 -143
- package/plugins/devflow-implement/agents/synthesizer.md +0 -211
- package/plugins/devflow-implement/agents/validator.md +0 -86
- package/plugins/devflow-implement/commands/implement-teams.md +0 -620
- package/plugins/devflow-implement/commands/implement.md +0 -430
- package/plugins/devflow-implement/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-implement/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-implement/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-implement/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-implement/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-java/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-java/skills/java/SKILL.md +0 -183
- package/plugins/devflow-java/skills/java/references/modern-java.md +0 -270
- package/plugins/devflow-java/skills/java/references/patterns.md +0 -235
- package/plugins/devflow-java/skills/java/references/violations.md +0 -213
- package/plugins/devflow-python/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-python/skills/python/SKILL.md +0 -188
- package/plugins/devflow-python/skills/python/references/async.md +0 -220
- package/plugins/devflow-python/skills/python/references/patterns.md +0 -226
- package/plugins/devflow-python/skills/python/references/violations.md +0 -204
- package/plugins/devflow-react/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-react/skills/react/SKILL.md +0 -276
- package/plugins/devflow-react/skills/react/references/patterns.md +0 -1331
- package/plugins/devflow-react/skills/react/references/violations.md +0 -565
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +0 -29
- package/plugins/devflow-resolve/README.md +0 -65
- package/plugins/devflow-resolve/agents/git.md +0 -277
- package/plugins/devflow-resolve/agents/resolver.md +0 -131
- package/plugins/devflow-resolve/agents/simplifier.md +0 -102
- package/plugins/devflow-resolve/commands/resolve-teams.md +0 -307
- package/plugins/devflow-resolve/commands/resolve.md +0 -246
- package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +0 -1063
- package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +0 -483
- package/plugins/devflow-resolve/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-resolve/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +0 -287
- package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-rust/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-rust/skills/rust/SKILL.md +0 -193
- package/plugins/devflow-rust/skills/rust/references/ownership.md +0 -242
- package/plugins/devflow-rust/skills/rust/references/patterns.md +0 -210
- package/plugins/devflow-rust/skills/rust/references/violations.md +0 -191
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-self-review/README.md +0 -38
- package/plugins/devflow-self-review/agents/scrutinizer.md +0 -82
- package/plugins/devflow-self-review/agents/simplifier.md +0 -102
- package/plugins/devflow-self-review/agents/validator.md +0 -86
- package/plugins/devflow-self-review/commands/self-review.md +0 -132
- package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +0 -303
- package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-self-review/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-self-review/skills/self-review/references/patterns.md +0 -405
- package/plugins/devflow-self-review/skills/self-review/references/report-template.md +0 -253
- package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-self-review/skills/self-review/references/violations.md +0 -308
- package/plugins/devflow-specify/.claude-plugin/plugin.json +0 -25
- package/plugins/devflow-specify/README.md +0 -46
- package/plugins/devflow-specify/agents/skimmer.md +0 -143
- package/plugins/devflow-specify/agents/synthesizer.md +0 -211
- package/plugins/devflow-specify/commands/specify-teams.md +0 -321
- package/plugins/devflow-specify/commands/specify.md +0 -186
- package/plugins/devflow-specify/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-specify/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-typescript/skills/typescript/SKILL.md +0 -176
- package/plugins/devflow-typescript/skills/typescript/references/patterns.md +0 -1105
- package/plugins/devflow-typescript/skills/typescript/references/violations.md +0 -433
- package/scripts/hooks/ambient-prompt +0 -50
- package/scripts/hooks/background-memory-update +0 -257
- package/scripts/hooks/ensure-memory-gitignore +0 -17
- package/scripts/hooks/pre-compact-memory +0 -87
- package/scripts/hooks/run-hook +0 -23
- package/scripts/hooks/session-start-memory +0 -165
- package/scripts/hooks/stop-update-memory +0 -85
- package/scripts/hud/cache.d.ts +0 -14
- package/scripts/hud/cache.d.ts.map +0 -1
- package/scripts/hud/cache.js +0 -54
- package/scripts/hud/cache.js.map +0 -1
- package/scripts/hud/colors.d.ts +0 -23
- package/scripts/hud/colors.d.ts.map +0 -1
- package/scripts/hud/colors.js +0 -62
- package/scripts/hud/colors.js.map +0 -1
- package/scripts/hud/components/config-counts.d.ts +0 -8
- package/scripts/hud/components/config-counts.d.ts.map +0 -1
- package/scripts/hud/components/config-counts.js +0 -91
- package/scripts/hud/components/config-counts.js.map +0 -1
- package/scripts/hud/components/context-usage.d.ts +0 -8
- package/scripts/hud/components/context-usage.d.ts.map +0 -1
- package/scripts/hud/components/context-usage.js +0 -49
- package/scripts/hud/components/context-usage.js.map +0 -1
- package/scripts/hud/components/diff-stats.d.ts +0 -3
- package/scripts/hud/components/diff-stats.d.ts.map +0 -1
- package/scripts/hud/components/diff-stats.js +0 -36
- package/scripts/hud/components/diff-stats.js.map +0 -1
- package/scripts/hud/components/directory.d.ts +0 -3
- package/scripts/hud/components/directory.d.ts.map +0 -1
- package/scripts/hud/components/directory.js +0 -10
- package/scripts/hud/components/directory.js.map +0 -1
- package/scripts/hud/components/git-ahead-behind.d.ts +0 -3
- package/scripts/hud/components/git-ahead-behind.d.ts.map +0 -1
- package/scripts/hud/components/git-ahead-behind.js +0 -16
- package/scripts/hud/components/git-ahead-behind.js.map +0 -1
- package/scripts/hud/components/git-branch.d.ts +0 -3
- package/scripts/hud/components/git-branch.d.ts.map +0 -1
- package/scripts/hud/components/git-branch.js +0 -14
- package/scripts/hud/components/git-branch.js.map +0 -1
- package/scripts/hud/components/model.d.ts +0 -3
- package/scripts/hud/components/model.d.ts.map +0 -1
- package/scripts/hud/components/model.js +0 -21
- package/scripts/hud/components/model.js.map +0 -1
- package/scripts/hud/components/release-info.d.ts +0 -3
- package/scripts/hud/components/release-info.d.ts.map +0 -1
- package/scripts/hud/components/release-info.js +0 -9
- package/scripts/hud/components/release-info.js.map +0 -1
- package/scripts/hud/components/session-cost.d.ts +0 -3
- package/scripts/hud/components/session-cost.d.ts.map +0 -1
- package/scripts/hud/components/session-cost.js +0 -9
- package/scripts/hud/components/session-cost.js.map +0 -1
- package/scripts/hud/components/session-duration.d.ts +0 -3
- package/scripts/hud/components/session-duration.d.ts.map +0 -1
- package/scripts/hud/components/session-duration.js +0 -18
- package/scripts/hud/components/session-duration.js.map +0 -1
- package/scripts/hud/components/todo-progress.d.ts +0 -3
- package/scripts/hud/components/todo-progress.d.ts.map +0 -1
- package/scripts/hud/components/todo-progress.js +0 -11
- package/scripts/hud/components/todo-progress.js.map +0 -1
- package/scripts/hud/components/usage-quota.d.ts +0 -3
- package/scripts/hud/components/usage-quota.d.ts.map +0 -1
- package/scripts/hud/components/usage-quota.js +0 -45
- package/scripts/hud/components/usage-quota.js.map +0 -1
- package/scripts/hud/components/version-badge.d.ts +0 -3
- package/scripts/hud/components/version-badge.d.ts.map +0 -1
- package/scripts/hud/components/version-badge.js +0 -80
- package/scripts/hud/components/version-badge.js.map +0 -1
- package/scripts/hud/components/worktree-count.d.ts +0 -3
- package/scripts/hud/components/worktree-count.d.ts.map +0 -1
- package/scripts/hud/components/worktree-count.js +0 -8
- package/scripts/hud/components/worktree-count.js.map +0 -1
- package/scripts/hud/config.d.ts +0 -10
- package/scripts/hud/config.d.ts.map +0 -1
- package/scripts/hud/config.js +0 -55
- package/scripts/hud/config.js.map +0 -1
- package/scripts/hud/credentials.d.ts +0 -17
- package/scripts/hud/credentials.d.ts.map +0 -1
- package/scripts/hud/credentials.js +0 -99
- package/scripts/hud/credentials.js.map +0 -1
- package/scripts/hud/git.d.ts +0 -7
- package/scripts/hud/git.d.ts.map +0 -1
- package/scripts/hud/git.js +0 -153
- package/scripts/hud/git.js.map +0 -1
- package/scripts/hud/index.d.ts +0 -2
- package/scripts/hud/index.d.ts.map +0 -1
- package/scripts/hud/index.js +0 -81
- package/scripts/hud/index.js.map +0 -1
- package/scripts/hud/render.d.ts +0 -7
- package/scripts/hud/render.d.ts.map +0 -1
- package/scripts/hud/render.js +0 -111
- package/scripts/hud/render.js.map +0 -1
- package/scripts/hud/stdin.d.ts +0 -6
- package/scripts/hud/stdin.d.ts.map +0 -1
- package/scripts/hud/stdin.js +0 -25
- package/scripts/hud/stdin.js.map +0 -1
- package/scripts/hud/transcript.d.ts +0 -7
- package/scripts/hud/transcript.d.ts.map +0 -1
- package/scripts/hud/transcript.js +0 -130
- package/scripts/hud/transcript.js.map +0 -1
- package/scripts/hud/types.d.ts +0 -116
- package/scripts/hud/types.d.ts.map +0 -1
- package/scripts/hud/types.js +0 -2
- package/scripts/hud/types.js.map +0 -1
- package/scripts/hud/usage-api.d.ts +0 -7
- package/scripts/hud/usage-api.d.ts.map +0 -1
- package/scripts/hud/usage-api.js +0 -84
- package/scripts/hud/usage-api.js.map +0 -1
- package/scripts/hud.sh +0 -5
- package/shared/agents/coder.md +0 -135
- package/shared/agents/git.md +0 -277
- package/shared/agents/resolver.md +0 -131
- package/shared/agents/reviewer.md +0 -165
- package/shared/agents/scrutinizer.md +0 -82
- package/shared/agents/shepherd.md +0 -108
- package/shared/agents/simplifier.md +0 -102
- package/shared/agents/skimmer.md +0 -143
- package/shared/agents/synthesizer.md +0 -211
- package/shared/agents/validator.md +0 -86
- package/shared/skills/accessibility/SKILL.md +0 -229
- package/shared/skills/accessibility/references/detection.md +0 -171
- package/shared/skills/accessibility/references/patterns.md +0 -670
- package/shared/skills/accessibility/references/violations.md +0 -419
- package/shared/skills/agent-teams/SKILL.md +0 -124
- package/shared/skills/agent-teams/references/cleanup.md +0 -104
- package/shared/skills/agent-teams/references/communication.md +0 -122
- package/shared/skills/agent-teams/references/team-patterns.md +0 -217
- package/shared/skills/ambient-router/SKILL.md +0 -145
- package/shared/skills/ambient-router/references/skill-catalog.md +0 -74
- package/shared/skills/architecture-patterns/SKILL.md +0 -153
- package/shared/skills/architecture-patterns/references/detection.md +0 -337
- package/shared/skills/architecture-patterns/references/patterns.md +0 -873
- package/shared/skills/architecture-patterns/references/violations.md +0 -575
- package/shared/skills/complexity-patterns/SKILL.md +0 -143
- package/shared/skills/complexity-patterns/references/detection.md +0 -264
- package/shared/skills/complexity-patterns/references/patterns.md +0 -487
- package/shared/skills/complexity-patterns/references/violations.md +0 -361
- package/shared/skills/consistency-patterns/SKILL.md +0 -140
- package/shared/skills/consistency-patterns/references/detection.md +0 -207
- package/shared/skills/consistency-patterns/references/patterns.md +0 -202
- package/shared/skills/consistency-patterns/references/violations.md +0 -213
- package/shared/skills/core-patterns/SKILL.md +0 -162
- package/shared/skills/core-patterns/references/checklist.md +0 -276
- package/shared/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/shared/skills/core-patterns/references/detection.md +0 -303
- package/shared/skills/core-patterns/references/patterns.md +0 -576
- package/shared/skills/core-patterns/references/violations.md +0 -369
- package/shared/skills/database-patterns/SKILL.md +0 -134
- package/shared/skills/database-patterns/references/detection.md +0 -208
- package/shared/skills/database-patterns/references/patterns.md +0 -394
- package/shared/skills/database-patterns/references/violations.md +0 -332
- package/shared/skills/debug-orchestration/SKILL.md +0 -69
- package/shared/skills/dependencies-patterns/SKILL.md +0 -141
- package/shared/skills/dependencies-patterns/references/detection.md +0 -181
- package/shared/skills/dependencies-patterns/references/patterns.md +0 -225
- package/shared/skills/dependencies-patterns/references/violations.md +0 -247
- package/shared/skills/docs-framework/SKILL.md +0 -143
- package/shared/skills/docs-framework/references/patterns.md +0 -346
- package/shared/skills/docs-framework/references/violations.md +0 -221
- package/shared/skills/documentation-patterns/SKILL.md +0 -125
- package/shared/skills/documentation-patterns/references/detection.md +0 -190
- package/shared/skills/documentation-patterns/references/patterns.md +0 -189
- package/shared/skills/documentation-patterns/references/violations.md +0 -163
- package/shared/skills/frontend-design/SKILL.md +0 -254
- package/shared/skills/frontend-design/references/detection.md +0 -184
- package/shared/skills/frontend-design/references/patterns.md +0 -511
- package/shared/skills/frontend-design/references/violations.md +0 -453
- package/shared/skills/git-safety/SKILL.md +0 -122
- package/shared/skills/git-safety/references/detection.md +0 -290
- package/shared/skills/git-safety/references/patterns.md +0 -289
- package/shared/skills/git-safety/references/violations.md +0 -18
- package/shared/skills/git-workflow/SKILL.md +0 -158
- package/shared/skills/git-workflow/references/commit-patterns.md +0 -115
- package/shared/skills/git-workflow/references/commit-violations.md +0 -77
- package/shared/skills/git-workflow/references/pr-patterns.md +0 -127
- package/shared/skills/git-workflow/references/pr-violations.md +0 -96
- package/shared/skills/github-patterns/SKILL.md +0 -153
- package/shared/skills/github-patterns/references/patterns.md +0 -572
- package/shared/skills/github-patterns/references/violations.md +0 -298
- package/shared/skills/go/SKILL.md +0 -187
- package/shared/skills/go/references/concurrency.md +0 -312
- package/shared/skills/go/references/detection.md +0 -129
- package/shared/skills/go/references/patterns.md +0 -232
- package/shared/skills/go/references/violations.md +0 -205
- package/shared/skills/implementation-orchestration/SKILL.md +0 -92
- package/shared/skills/implementation-patterns/SKILL.md +0 -162
- package/shared/skills/implementation-patterns/references/patterns.md +0 -1063
- package/shared/skills/implementation-patterns/references/violations.md +0 -483
- package/shared/skills/input-validation/SKILL.md +0 -148
- package/shared/skills/input-validation/references/detection.md +0 -283
- package/shared/skills/input-validation/references/patterns.md +0 -361
- package/shared/skills/input-validation/references/violations.md +0 -224
- package/shared/skills/java/SKILL.md +0 -183
- package/shared/skills/java/references/detection.md +0 -120
- package/shared/skills/java/references/modern-java.md +0 -270
- package/shared/skills/java/references/patterns.md +0 -235
- package/shared/skills/java/references/violations.md +0 -213
- package/shared/skills/knowledge-persistence/SKILL.md +0 -128
- package/shared/skills/knowledge-persistence/references/examples.md +0 -44
- package/shared/skills/performance-patterns/SKILL.md +0 -154
- package/shared/skills/performance-patterns/references/detection.md +0 -351
- package/shared/skills/performance-patterns/references/patterns.md +0 -503
- package/shared/skills/performance-patterns/references/violations.md +0 -354
- package/shared/skills/plan-orchestration/SKILL.md +0 -71
- package/shared/skills/python/SKILL.md +0 -188
- package/shared/skills/python/references/async.md +0 -220
- package/shared/skills/python/references/detection.md +0 -128
- package/shared/skills/python/references/patterns.md +0 -226
- package/shared/skills/python/references/violations.md +0 -204
- package/shared/skills/react/SKILL.md +0 -276
- package/shared/skills/react/references/patterns.md +0 -1331
- package/shared/skills/react/references/violations.md +0 -565
- package/shared/skills/regression-patterns/SKILL.md +0 -146
- package/shared/skills/regression-patterns/references/detection.md +0 -237
- package/shared/skills/regression-patterns/references/patterns.md +0 -226
- package/shared/skills/regression-patterns/references/violations.md +0 -225
- package/shared/skills/review-methodology/SKILL.md +0 -119
- package/shared/skills/review-methodology/references/patterns.md +0 -186
- package/shared/skills/review-methodology/references/report-template.md +0 -142
- package/shared/skills/review-methodology/references/violations.md +0 -125
- package/shared/skills/rust/SKILL.md +0 -193
- package/shared/skills/rust/references/detection.md +0 -131
- package/shared/skills/rust/references/ownership.md +0 -242
- package/shared/skills/rust/references/patterns.md +0 -210
- package/shared/skills/rust/references/violations.md +0 -191
- package/shared/skills/search-first/SKILL.md +0 -133
- package/shared/skills/search-first/references/evaluation-criteria.md +0 -101
- package/shared/skills/security-patterns/SKILL.md +0 -156
- package/shared/skills/security-patterns/references/detection.md +0 -287
- package/shared/skills/security-patterns/references/patterns.md +0 -507
- package/shared/skills/security-patterns/references/violations.md +0 -237
- package/shared/skills/self-review/SKILL.md +0 -149
- package/shared/skills/self-review/references/patterns.md +0 -405
- package/shared/skills/self-review/references/report-template.md +0 -253
- package/shared/skills/self-review/references/stub-detection.md +0 -135
- package/shared/skills/self-review/references/violations.md +0 -308
- package/shared/skills/test-driven-development/SKILL.md +0 -137
- package/shared/skills/test-driven-development/references/rationalization-prevention.md +0 -111
- package/shared/skills/test-patterns/SKILL.md +0 -183
- package/shared/skills/test-patterns/references/detection.md +0 -149
- package/shared/skills/test-patterns/references/patterns.md +0 -220
- package/shared/skills/test-patterns/references/report-template.md +0 -108
- package/shared/skills/test-patterns/references/violations.md +0 -221
- package/shared/skills/typescript/SKILL.md +0 -176
- package/shared/skills/typescript/references/patterns.md +0 -1105
- package/shared/skills/typescript/references/violations.md +0 -433
- package/src/templates/claudeignore.template +0 -188
- package/src/templates/settings.json +0 -59
- /package/dist/{utils → core}/safe-delete.js +0 -0
- /package/{plugins/devflow-accessibility → src/assets}/skills/accessibility/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/architecture-patterns → src/assets/skills/architecture}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/violations.md +0 -0
- /package/{plugins/devflow-core-skills/skills/git-safety → src/assets/skills/git}/references/detection.md +0 -0
- /package/{plugins/devflow-go → src/assets}/skills/go/references/detection.md +0 -0
- /package/{plugins/devflow-java → src/assets}/skills/java/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/performance-patterns → src/assets/skills/performance}/references/detection.md +0 -0
- /package/{plugins/devflow-python → src/assets}/skills/python/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/report-template.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/violations.md +0 -0
- /package/{plugins/devflow-rust → src/assets}/skills/rust/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/security-patterns → src/assets/skills/security}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills/skills/core-patterns → src/assets/skills/software-design}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills → src/assets}/skills/test-driven-development/references/rationalization-prevention.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/report-template.md +0 -0
- /package/{plugins/devflow-frontend-design/skills/frontend-design → src/assets/skills/ui-design}/references/detection.md +0 -0
- /package/src/{templates → targets/claude-code/templates}/managed-settings.json +0 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# Modern Java Features (17-21+)
|
|
2
|
+
|
|
3
|
+
Deep-dive on modern Java language features with JEP and literature citations.
|
|
4
|
+
Reference from main SKILL.md.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Records (Java 16+) [4]
|
|
9
|
+
|
|
10
|
+
Records are transparent carriers of immutable data. The compiler auto-generates
|
|
11
|
+
`equals`, `hashCode`, `toString`, and an accessor method per component. Compact
|
|
12
|
+
constructors validate fields before the record is constructed. — JEP 395 [4]
|
|
13
|
+
|
|
14
|
+
"Records model the situation where a class's primary purpose is to hold data."
|
|
15
|
+
— Brian Goetz, Data Oriented Programming in Java [9]
|
|
16
|
+
|
|
17
|
+
### Basic Record [4]
|
|
18
|
+
|
|
19
|
+
```java
|
|
20
|
+
// Immutable data carrier with auto-generated equals, hashCode, toString [4]
|
|
21
|
+
public record Point(double x, double y) {}
|
|
22
|
+
|
|
23
|
+
// Usage
|
|
24
|
+
var p = new Point(3.0, 4.0);
|
|
25
|
+
double x = p.x(); // Accessor method, not getX() [4]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Compact Constructor (Validation) [4]
|
|
29
|
+
|
|
30
|
+
```java
|
|
31
|
+
// Validation before component fields are sealed [4]
|
|
32
|
+
public record Email(String value) {
|
|
33
|
+
public Email {
|
|
34
|
+
Objects.requireNonNull(value, "email must not be null");
|
|
35
|
+
if (!value.contains("@")) {
|
|
36
|
+
throw new IllegalArgumentException("Invalid email: " + value);
|
|
37
|
+
}
|
|
38
|
+
value = value.toLowerCase().strip(); // Normalize before assignment [4]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Record with Custom Methods [4][1, Item 17]
|
|
44
|
+
|
|
45
|
+
Records can have instance methods; they cannot have mutable state. Return new
|
|
46
|
+
records for "updates" — the immutability contract is preserved. [1, Item 17]
|
|
47
|
+
|
|
48
|
+
```java
|
|
49
|
+
public record Range(int start, int end) {
|
|
50
|
+
public Range {
|
|
51
|
+
if (start > end) throw new IllegalArgumentException("start must be <= end");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public int length() { return end - start; }
|
|
55
|
+
public boolean contains(int value) { return value >= start && value <= end; }
|
|
56
|
+
public Range overlap(Range other) {
|
|
57
|
+
int newStart = Math.max(start, other.start);
|
|
58
|
+
int newEnd = Math.min(end, other.end);
|
|
59
|
+
return newStart <= newEnd ? new Range(newStart, newEnd) : null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Records as Local Classes [4][9]
|
|
65
|
+
|
|
66
|
+
Local records are useful for intermediate computation shapes inside a method —
|
|
67
|
+
they scope the type to where it is needed. [9]
|
|
68
|
+
|
|
69
|
+
```java
|
|
70
|
+
public List<String> processOrders(List<Order> orders) {
|
|
71
|
+
// Local record for intermediate computation [4]
|
|
72
|
+
record OrderTotal(String orderId, Money total) {}
|
|
73
|
+
|
|
74
|
+
return orders.stream()
|
|
75
|
+
.map(o -> new OrderTotal(o.id(), o.calculateTotal()))
|
|
76
|
+
.filter(ot -> ot.total().isGreaterThan(Money.of(100)))
|
|
77
|
+
.map(OrderTotal::orderId)
|
|
78
|
+
.toList();
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Sealed Classes (Java 17+) [5]
|
|
85
|
+
|
|
86
|
+
Sealed types close the subtype hierarchy: only `permits`-listed subtypes may
|
|
87
|
+
implement/extend. This enables exhaustive pattern matching — the compiler verifies
|
|
88
|
+
all cases are handled without a `default` branch. — JEP 409 [5]
|
|
89
|
+
|
|
90
|
+
"Sealed classes expose the constraint that a domain model is closed." — Goetz [9]
|
|
91
|
+
|
|
92
|
+
### Sealed Interface [5]
|
|
93
|
+
|
|
94
|
+
```java
|
|
95
|
+
// Closed hierarchy — compiler knows all subtypes [5]
|
|
96
|
+
public sealed interface Shape permits Circle, Rectangle, Triangle {
|
|
97
|
+
double area();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public record Circle(double radius) implements Shape {
|
|
101
|
+
public double area() { return Math.PI * radius * radius; }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
public record Rectangle(double width, double height) implements Shape {
|
|
105
|
+
public double area() { return width * height; }
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public record Triangle(double base, double height) implements Shape {
|
|
109
|
+
public double area() { return 0.5 * base * height; }
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Sealed Class with Abstract Methods [5]
|
|
114
|
+
|
|
115
|
+
```java
|
|
116
|
+
public sealed abstract class Payment permits CreditCard, BankTransfer, Crypto {
|
|
117
|
+
abstract Money amount();
|
|
118
|
+
abstract String reference();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
public final class CreditCard extends Payment { /* ... */ }
|
|
122
|
+
public final class BankTransfer extends Payment { /* ... */ }
|
|
123
|
+
public final class Crypto extends Payment { /* ... */ }
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Pattern Matching (Java 21+) [6]
|
|
129
|
+
|
|
130
|
+
Pattern matching for `switch` combines type testing, binding, and guarded conditions
|
|
131
|
+
in one expression. Sealed types make the switch exhaustive — no `default` needed. — JEP 441 [6]
|
|
132
|
+
|
|
133
|
+
### Switch with Patterns [6]
|
|
134
|
+
|
|
135
|
+
```java
|
|
136
|
+
// Exhaustive — compiler verifies all Shape subtypes covered [5][6]
|
|
137
|
+
public String describe(Shape shape) {
|
|
138
|
+
return switch (shape) {
|
|
139
|
+
case Circle c -> "Circle with radius %.2f".formatted(c.radius());
|
|
140
|
+
case Rectangle r -> "Rectangle %s x %s".formatted(r.width(), r.height());
|
|
141
|
+
case Triangle t -> "Triangle with base %.2f".formatted(t.base());
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Guarded Patterns [6]
|
|
147
|
+
|
|
148
|
+
```java
|
|
149
|
+
// when-guards refine pattern match conditions [6]
|
|
150
|
+
public String classifyTemperature(Object obj) {
|
|
151
|
+
return switch (obj) {
|
|
152
|
+
case Integer i when i < 0 -> "Freezing";
|
|
153
|
+
case Integer i when i < 15 -> "Cold";
|
|
154
|
+
case Integer i when i < 25 -> "Comfortable";
|
|
155
|
+
case Integer i -> "Hot";
|
|
156
|
+
case Double d when d < 0.0 -> "Freezing";
|
|
157
|
+
case Double d -> "Warm-ish (%.1f)".formatted(d);
|
|
158
|
+
case String s -> "Not a temperature: " + s;
|
|
159
|
+
case null -> "No reading";
|
|
160
|
+
default -> "Unknown type";
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Record Patterns (Destructuring) [6][4]
|
|
166
|
+
|
|
167
|
+
Record patterns decompose record components inline in the pattern. Nested destructuring
|
|
168
|
+
collapses what would otherwise be multi-step instanceof + field access. [6]
|
|
169
|
+
|
|
170
|
+
```java
|
|
171
|
+
// Nested destructuring — components bound directly in pattern [6][4]
|
|
172
|
+
record Address(String city, String country) {}
|
|
173
|
+
record Person(String name, Address address) {}
|
|
174
|
+
|
|
175
|
+
public String greet(Object obj) {
|
|
176
|
+
return switch (obj) {
|
|
177
|
+
case Person(var name, Address(var city, _)) ->
|
|
178
|
+
"Hello %s from %s".formatted(name, city);
|
|
179
|
+
default -> "Hello stranger";
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Text Blocks (Java 15+) [3]
|
|
187
|
+
|
|
188
|
+
Text blocks preserve indentation relative to the closing delimiter. Use `formatted()`
|
|
189
|
+
for interpolation — avoids escape sequences entirely.
|
|
190
|
+
|
|
191
|
+
```java
|
|
192
|
+
// Multi-line strings with proper indentation [3]
|
|
193
|
+
String json = """
|
|
194
|
+
{
|
|
195
|
+
"name": "%s",
|
|
196
|
+
"email": "%s",
|
|
197
|
+
"active": true
|
|
198
|
+
}
|
|
199
|
+
""".formatted(user.name(), user.email());
|
|
200
|
+
|
|
201
|
+
String sql = """
|
|
202
|
+
SELECT u.id, u.name, u.email
|
|
203
|
+
FROM users u
|
|
204
|
+
JOIN orders o ON o.user_id = u.id
|
|
205
|
+
WHERE u.active = true
|
|
206
|
+
AND o.created_at > ?
|
|
207
|
+
ORDER BY u.name
|
|
208
|
+
""";
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Virtual Threads (Java 21+) [7]
|
|
214
|
+
|
|
215
|
+
Virtual threads are lightweight JVM-managed threads that do not pin a platform thread
|
|
216
|
+
during blocking I/O. Enables thread-per-request style with the efficiency of async. — JEP 444 [7]
|
|
217
|
+
|
|
218
|
+
"Virtual threads are not faster threads — they are cheaper threads. They allow you
|
|
219
|
+
to write blocking code that scales like async code." — JEP 444 [7]
|
|
220
|
+
|
|
221
|
+
### Basic Virtual Thread [7]
|
|
222
|
+
|
|
223
|
+
```java
|
|
224
|
+
// Lightweight thread — does not pin platform thread during I/O [7]
|
|
225
|
+
Thread.startVirtualThread(() -> {
|
|
226
|
+
var result = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
|
|
227
|
+
process(result.body());
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Structured Concurrency (Preview) [7][28]
|
|
232
|
+
|
|
233
|
+
Structured concurrency treats a group of concurrent tasks as a single unit of work:
|
|
234
|
+
all succeed, or all are cancelled. Prevents thread leaks and orphaned tasks. [28]
|
|
235
|
+
|
|
236
|
+
```java
|
|
237
|
+
// All subtasks complete or cancel together [28]
|
|
238
|
+
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
|
|
239
|
+
Subtask<User> userTask = scope.fork(() -> fetchUser(userId));
|
|
240
|
+
Subtask<List<Order>> ordersTask = scope.fork(() -> fetchOrders(userId));
|
|
241
|
+
|
|
242
|
+
scope.join().throwIfFailed();
|
|
243
|
+
|
|
244
|
+
return new UserDashboard(userTask.get(), ordersTask.get());
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### ExecutorService with Virtual Threads [7][1, Item 80]
|
|
249
|
+
|
|
250
|
+
Prefer executors over raw threads. `newVirtualThreadPerTaskExecutor` spawns one
|
|
251
|
+
virtual thread per submitted task. — Effective Java, Item 80 [1, Item 80]
|
|
252
|
+
|
|
253
|
+
```java
|
|
254
|
+
// Process thousands of concurrent I/O tasks [7][1, Item 80]
|
|
255
|
+
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
|
|
256
|
+
List<Future<Response>> futures = urls.stream()
|
|
257
|
+
.map(url -> executor.submit(() -> httpClient.send(
|
|
258
|
+
HttpRequest.newBuilder(URI.create(url)).build(),
|
|
259
|
+
HttpResponse.BodyHandlers.ofString()
|
|
260
|
+
)))
|
|
261
|
+
.toList();
|
|
262
|
+
|
|
263
|
+
List<Response> responses = futures.stream()
|
|
264
|
+
.map(f -> {
|
|
265
|
+
try { return f.get(); }
|
|
266
|
+
catch (Exception e) { throw new RuntimeException(e); }
|
|
267
|
+
})
|
|
268
|
+
.toList();
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Other Modern Features
|
|
275
|
+
|
|
276
|
+
### Enhanced instanceof (Java 16+) [3]
|
|
277
|
+
|
|
278
|
+
Pattern variable binding eliminates explicit cast — the variable is scoped to the
|
|
279
|
+
branch where the type is guaranteed.
|
|
280
|
+
|
|
281
|
+
```java
|
|
282
|
+
// Pattern variable binding eliminates explicit cast [3]
|
|
283
|
+
if (obj instanceof String s && s.length() > 5) {
|
|
284
|
+
System.out.println(s.toUpperCase());
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Works with negation [3]
|
|
288
|
+
if (!(obj instanceof String s)) {
|
|
289
|
+
throw new IllegalArgumentException("Expected String");
|
|
290
|
+
}
|
|
291
|
+
// s is in scope here — type proven by earlier check
|
|
292
|
+
process(s);
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Helpful NullPointerExceptions (Java 14+) [3]
|
|
296
|
+
|
|
297
|
+
The JVM now identifies exactly which reference was null in the exception message.
|
|
298
|
+
Enabled by default since Java 17.
|
|
299
|
+
|
|
300
|
+
```java
|
|
301
|
+
// JVM now tells you exactly which reference was null:
|
|
302
|
+
// java.lang.NullPointerException: Cannot invoke "String.length()"
|
|
303
|
+
// because the return value of "User.name()" is null
|
|
304
|
+
// Enable with: -XX:+ShowCodeDetailsInExceptionMessages (default since Java 17) [3]
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Stream Gatherers (Java 22+ Preview) [3]
|
|
308
|
+
|
|
309
|
+
Custom intermediate stream operations via the `Gatherers` API — enables sliding
|
|
310
|
+
windows, batch processing, and other stateful operations.
|
|
311
|
+
|
|
312
|
+
```java
|
|
313
|
+
// Custom intermediate stream operations [3]
|
|
314
|
+
var windowedAverages = temperatures.stream()
|
|
315
|
+
.gather(Gatherers.windowSliding(5))
|
|
316
|
+
.map(window -> window.stream().mapToDouble(d -> d).average().orElse(0))
|
|
317
|
+
.toList();
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Data Oriented Programming Summary [9]
|
|
323
|
+
|
|
324
|
+
Brian Goetz's Data Oriented Programming model combines four features into a
|
|
325
|
+
unified paradigm for modeling immutable data: [9]
|
|
326
|
+
|
|
327
|
+
| Feature | Role | JEP |
|
|
328
|
+
|---------|------|-----|
|
|
329
|
+
| Records | Immutable data carrier | [4] |
|
|
330
|
+
| Sealed classes | Closed type hierarchies | [5] |
|
|
331
|
+
| Pattern matching | Exhaustive dispatch | [6] |
|
|
332
|
+
| Local records | Scoped intermediate types | [4] |
|
|
333
|
+
|
|
334
|
+
"Data orientation separates the 'what' (data as records) from the 'how'
|
|
335
|
+
(behavior in functions), leading to simpler, more testable code." — Goetz [9]
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# Extended Java Patterns
|
|
2
|
+
|
|
3
|
+
Correct patterns for Java development with literature citations. Reference from main SKILL.md.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Builder Pattern (Type-Safe) [1, Item 2]
|
|
8
|
+
|
|
9
|
+
Use when constructors would have many optional parameters. Records with a nested `Builder`
|
|
10
|
+
class provide compile-time validation of required fields. — Effective Java, Item 2 [1]
|
|
11
|
+
|
|
12
|
+
```java
|
|
13
|
+
// Compile-time enforcement of required fields [1, Item 2]
|
|
14
|
+
public record EmailMessage(String to, String subject, String body, List<String> cc) {
|
|
15
|
+
|
|
16
|
+
public static Builder builder() { return new Builder(); }
|
|
17
|
+
|
|
18
|
+
public static class Builder {
|
|
19
|
+
private String to;
|
|
20
|
+
private String subject;
|
|
21
|
+
private String body;
|
|
22
|
+
private List<String> cc = List.of();
|
|
23
|
+
|
|
24
|
+
public Builder to(String to) { this.to = Objects.requireNonNull(to); return this; }
|
|
25
|
+
public Builder subject(String subject) { this.subject = Objects.requireNonNull(subject); return this; }
|
|
26
|
+
public Builder body(String body) { this.body = Objects.requireNonNull(body); return this; }
|
|
27
|
+
public Builder cc(List<String> cc) { this.cc = List.copyOf(cc); return this; }
|
|
28
|
+
|
|
29
|
+
public EmailMessage build() {
|
|
30
|
+
Objects.requireNonNull(to, "to is required");
|
|
31
|
+
Objects.requireNonNull(subject, "subject is required");
|
|
32
|
+
Objects.requireNonNull(body, "body is required");
|
|
33
|
+
return new EmailMessage(to, subject, body, cc);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Usage
|
|
39
|
+
var email = EmailMessage.builder()
|
|
40
|
+
.to("user@example.com")
|
|
41
|
+
.subject("Welcome")
|
|
42
|
+
.body("Hello!")
|
|
43
|
+
.build();
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Strategy via Interfaces [14]
|
|
49
|
+
|
|
50
|
+
Define behavior as a functional interface. Implementations can be lambdas or classes.
|
|
51
|
+
Compose strategies as constructor arguments — no subclassing. — GoF Strategy [14]
|
|
52
|
+
|
|
53
|
+
```java
|
|
54
|
+
// Define strategy as functional interface [14]
|
|
55
|
+
@FunctionalInterface
|
|
56
|
+
public interface PricingStrategy {
|
|
57
|
+
Money calculatePrice(Order order);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Implementations as lambdas [10]
|
|
61
|
+
PricingStrategy standard = order -> order.subtotal();
|
|
62
|
+
PricingStrategy discounted = order -> order.subtotal().multiply(0.9);
|
|
63
|
+
PricingStrategy tiered = order -> {
|
|
64
|
+
if (order.itemCount() > 10) return order.subtotal().multiply(0.8);
|
|
65
|
+
if (order.itemCount() > 5) return order.subtotal().multiply(0.9);
|
|
66
|
+
return order.subtotal();
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// Inject strategy — composition over inheritance [1, Item 18]
|
|
70
|
+
public class OrderService {
|
|
71
|
+
private final PricingStrategy pricing;
|
|
72
|
+
|
|
73
|
+
public OrderService(PricingStrategy pricing) {
|
|
74
|
+
this.pricing = pricing;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public Money calculateTotal(Order order) {
|
|
78
|
+
return pricing.calculatePrice(order);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Repository Pattern [1, Item 64]
|
|
86
|
+
|
|
87
|
+
Refer to objects by their interfaces — Item 64. [1, Item 64] Implementations are
|
|
88
|
+
swappable (JPA, JDBC, in-memory for tests) without changing callers.
|
|
89
|
+
|
|
90
|
+
```java
|
|
91
|
+
// Interface — callers depend on abstraction, not implementation [1, Item 64]
|
|
92
|
+
public interface UserRepository {
|
|
93
|
+
Optional<User> findById(String id);
|
|
94
|
+
List<User> findByEmail(String email);
|
|
95
|
+
User save(User user);
|
|
96
|
+
void deleteById(String id);
|
|
97
|
+
boolean existsById(String id);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Implementation with constructor injection [1, Item 18]
|
|
101
|
+
public class JpaUserRepository implements UserRepository {
|
|
102
|
+
private final EntityManager em;
|
|
103
|
+
|
|
104
|
+
public JpaUserRepository(EntityManager em) {
|
|
105
|
+
this.em = em;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@Override
|
|
109
|
+
public Optional<User> findById(String id) {
|
|
110
|
+
return Optional.ofNullable(em.find(User.class, id));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@Override
|
|
114
|
+
public User save(User user) {
|
|
115
|
+
return em.merge(user);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Value Objects [1, Item 17][4]
|
|
123
|
+
|
|
124
|
+
Immutable value objects with validation in compact constructors. Records are the idiomatic
|
|
125
|
+
Java 16+ choice — `equals`/`hashCode` are value-based automatically. [4][1, Item 17]
|
|
126
|
+
|
|
127
|
+
```java
|
|
128
|
+
// Value object as record with compact constructor validation [4][1, Item 17]
|
|
129
|
+
public record Money(BigDecimal amount, Currency currency) {
|
|
130
|
+
public Money {
|
|
131
|
+
Objects.requireNonNull(amount, "amount must not be null");
|
|
132
|
+
Objects.requireNonNull(currency, "currency must not be null");
|
|
133
|
+
if (amount.scale() > currency.getDefaultFractionDigits()) {
|
|
134
|
+
throw new IllegalArgumentException("Scale exceeds currency precision");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
public Money add(Money other) {
|
|
139
|
+
requireSameCurrency(other);
|
|
140
|
+
return new Money(amount.add(other.amount), currency); // new object [1, Item 17]
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public Money multiply(double factor) {
|
|
144
|
+
return new Money(
|
|
145
|
+
amount.multiply(BigDecimal.valueOf(factor))
|
|
146
|
+
.setScale(currency.getDefaultFractionDigits(), RoundingMode.HALF_UP),
|
|
147
|
+
currency
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private void requireSameCurrency(Money other) {
|
|
152
|
+
if (!currency.equals(other.currency)) {
|
|
153
|
+
throw new IllegalArgumentException(
|
|
154
|
+
"Cannot combine %s and %s".formatted(currency, other.currency)
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Event-Driven Pattern with Sealed Interfaces [5][6][9]
|
|
164
|
+
|
|
165
|
+
Domain events as sealed interfaces with record subtypes enable exhaustive switch handling.
|
|
166
|
+
No `instanceof` chains, no default fallback, compiler enforces completeness. [5][6]
|
|
167
|
+
|
|
168
|
+
```java
|
|
169
|
+
// Domain event hierarchy — sealed + records [5][9]
|
|
170
|
+
public sealed interface OrderEvent permits OrderCreated, OrderShipped, OrderCancelled {
|
|
171
|
+
String orderId();
|
|
172
|
+
Instant occurredAt();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public record OrderCreated(String orderId, Instant occurredAt, List<LineItem> items)
|
|
176
|
+
implements OrderEvent {}
|
|
177
|
+
|
|
178
|
+
public record OrderShipped(String orderId, Instant occurredAt, String trackingNumber)
|
|
179
|
+
implements OrderEvent {}
|
|
180
|
+
|
|
181
|
+
public record OrderCancelled(String orderId, Instant occurredAt, String reason)
|
|
182
|
+
implements OrderEvent {}
|
|
183
|
+
|
|
184
|
+
// Exhaustive pattern matching — no default needed [6]
|
|
185
|
+
public class OrderEventHandler {
|
|
186
|
+
public void handle(OrderEvent event) {
|
|
187
|
+
switch (event) {
|
|
188
|
+
case OrderCreated e -> notifyWarehouse(e.items());
|
|
189
|
+
case OrderShipped e -> sendTrackingEmail(e.trackingNumber());
|
|
190
|
+
case OrderCancelled e -> processRefund(e.orderId(), e.reason());
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Stream Pipelines [10][26]
|
|
199
|
+
|
|
200
|
+
Declarative, composable collection processing. Prefer `.toList()` (Java 16+) over
|
|
201
|
+
`collect(Collectors.toList())`. Use `Collectors.groupingBy` for aggregations. [10][1, Item 46]
|
|
202
|
+
|
|
203
|
+
```java
|
|
204
|
+
// Declarative collection processing [10]
|
|
205
|
+
public List<String> getActiveUserEmails(List<User> users) {
|
|
206
|
+
return users.stream()
|
|
207
|
+
.filter(User::isActive)
|
|
208
|
+
.map(User::email)
|
|
209
|
+
.filter(email -> email.contains("@"))
|
|
210
|
+
.sorted()
|
|
211
|
+
.toList(); // Unmodifiable list (Java 16+) [26]
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Grouping and aggregation [10]
|
|
215
|
+
public Map<Department, Long> countByDepartment(List<Employee> employees) {
|
|
216
|
+
return employees.stream()
|
|
217
|
+
.collect(Collectors.groupingBy(Employee::department, Collectors.counting()));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Reducing to summary [10]
|
|
221
|
+
public record OrderSummary(int count, Money total) {}
|
|
222
|
+
|
|
223
|
+
public OrderSummary summarize(List<Order> orders) {
|
|
224
|
+
return orders.stream()
|
|
225
|
+
.reduce(
|
|
226
|
+
new OrderSummary(0, Money.ZERO),
|
|
227
|
+
(summary, order) -> new OrderSummary(
|
|
228
|
+
summary.count() + 1,
|
|
229
|
+
summary.total().add(order.total())
|
|
230
|
+
),
|
|
231
|
+
(a, b) -> new OrderSummary(a.count() + b.count(), a.total().add(b.total()))
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Concurrency: Thread-Safe Patterns [2][7]
|
|
239
|
+
|
|
240
|
+
Use `ConcurrentHashMap` for shared state, virtual threads for I/O concurrency,
|
|
241
|
+
`StructuredTaskScope` for fan-out/fan-in. — Java Concurrency in Practice [2]
|
|
242
|
+
|
|
243
|
+
```java
|
|
244
|
+
// Thread-safe shared state [2, Ch. 5]
|
|
245
|
+
private final Map<String, Session> sessions = new ConcurrentHashMap<>();
|
|
246
|
+
|
|
247
|
+
public void addSession(String id, Session s) {
|
|
248
|
+
sessions.put(id, s); // Thread-safe
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Virtual threads for I/O concurrency — JEP 444 [7]
|
|
252
|
+
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
|
|
253
|
+
List<Future<Response>> futures = urls.stream()
|
|
254
|
+
.map(url -> executor.submit(() -> fetch(url)))
|
|
255
|
+
.toList();
|
|
256
|
+
return futures.stream().map(f -> uncheck(f::get)).toList();
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Structured concurrency: all subtasks complete or cancel together [28]
|
|
260
|
+
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
|
|
261
|
+
Subtask<User> userTask = scope.fork(() -> fetchUser(userId));
|
|
262
|
+
Subtask<List<Order>> orders = scope.fork(() -> fetchOrders(userId));
|
|
263
|
+
scope.join().throwIfFailed();
|
|
264
|
+
return new UserDashboard(userTask.get(), orders.get());
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Dependency Injection (Manual Composition Root) [1, Item 18]
|
|
271
|
+
|
|
272
|
+
Wire all dependencies at the entry point. Inner components receive collaborators
|
|
273
|
+
through constructors — no `new` calls buried in business logic. [1, Item 18]
|
|
274
|
+
|
|
275
|
+
```java
|
|
276
|
+
// Composition root wires everything together [1, Item 18]
|
|
277
|
+
public class Application {
|
|
278
|
+
public static void main(String[] args) {
|
|
279
|
+
var config = Config.load();
|
|
280
|
+
var dataSource = createDataSource(config);
|
|
281
|
+
var userRepo = new JpaUserRepository(dataSource);
|
|
282
|
+
var eventBus = new InMemoryEventBus();
|
|
283
|
+
var userService = new UserService(userRepo, eventBus);
|
|
284
|
+
var userController = new UserController(userService);
|
|
285
|
+
|
|
286
|
+
startServer(config.port(), userController);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Bean Validation (JSR 380) [11]
|
|
294
|
+
|
|
295
|
+
Annotation-based validation at API boundaries. Pair with `@Valid` on controller method
|
|
296
|
+
parameters for automatic enforcement. [11]
|
|
297
|
+
|
|
298
|
+
```java
|
|
299
|
+
public record CreateUserRequest(
|
|
300
|
+
@NotBlank @Size(max = 100) String name,
|
|
301
|
+
@Email @Size(max = 255) String email,
|
|
302
|
+
@Min(0) @Max(150) int age
|
|
303
|
+
) {}
|
|
304
|
+
|
|
305
|
+
// Spring MVC: @Valid triggers constraint evaluation [11]
|
|
306
|
+
@PostMapping("/users")
|
|
307
|
+
public ResponseEntity<UserDTO> create(@Valid @RequestBody CreateUserRequest req) {
|
|
308
|
+
// req is guaranteed valid here — ConstraintViolationException thrown if not
|
|
309
|
+
return ResponseEntity.ok(userService.create(req));
|
|
310
|
+
}
|
|
311
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Java — Sources
|
|
2
|
+
|
|
3
|
+
## Primary References
|
|
4
|
+
|
|
5
|
+
| # | Source | Author(s) | Year | Access | Topics |
|
|
6
|
+
|---|--------|-----------|------|--------|--------|
|
|
7
|
+
| 1 | "Effective Java" 3rd Ed. | Joshua Bloch | 2018 | Purchase | Items 1–90: APIs, generics, lambdas, concurrency, serialization — core Java best practices |
|
|
8
|
+
| 2 | "Java Concurrency in Practice" | Goetz, Peierls, Bloch, Bowbeer, Holmes, Lea | 2006 | Purchase | Thread safety, concurrent collections, executors, atomic variables, memory model |
|
|
9
|
+
| 3 | Java Language Specification (JLS 21) | Oracle | 2024 | [Free](https://docs.oracle.com/javase/specs/) | Definitive language semantics: types, expressions, execution, memory model |
|
|
10
|
+
| 4 | JEP 395: Records | OpenJDK | 2021 | [Free](https://openjdk.org/jeps/395) | Immutable data carriers, compact constructors, auto-generated accessors/equals/hashCode/toString |
|
|
11
|
+
| 5 | JEP 409: Sealed Classes | OpenJDK | 2021 | [Free](https://openjdk.org/jeps/409) | Algebraic data types, restricted class hierarchies, exhaustive pattern matching |
|
|
12
|
+
| 6 | JEP 441: Pattern Matching for switch | OpenJDK | 2023 | [Free](https://openjdk.org/jeps/441) | Exhaustive switch on sealed types, guarded patterns, null handling in switch |
|
|
13
|
+
| 7 | JEP 444: Virtual Threads | OpenJDK | 2023 | [Free](https://openjdk.org/jeps/444) | Lightweight concurrency, structured concurrency, loom project goals |
|
|
14
|
+
| 8 | Google Java Style Guide | Google | 2024 | [Free](https://google.github.io/styleguide/javaguide.html) | Formatting, naming conventions, programming practices |
|
|
15
|
+
| 9 | "Data Oriented Programming in Java" | Brian Goetz | 2022 | [Free](https://inside.java/2022/03/09/data-oriented-programming-in-java/) | Records + sealed classes + pattern matching as a programming model |
|
|
16
|
+
| 10 | "Modern Java in Action" 2nd Ed. | Urma, Fusco, Mycroft | 2018 | Purchase | Streams, lambdas, Optional, CompletableFuture, reactive programming |
|
|
17
|
+
| 11 | JSR 380: Bean Validation 2.0 | JCP | 2017 | [Free](https://beanvalidation.org/2.0/spec/) | Annotation-based validation, constraint composition, programmatic validation |
|
|
18
|
+
| 12 | "The JSR-133 Cookbook for Compiler Writers" | Doug Lea | 2004 | [Free](https://gee.cs.oswego.edu/dl/jmm/cookbook.html) | Java Memory Model: happens-before, volatile, synchronization mechanics |
|
|
19
|
+
| 13 | Baeldung Java Guides | Baeldung | 2024 | [Free](https://www.baeldung.com) | Practical tutorials: Spring, streams, testing, concurrency |
|
|
20
|
+
| 14 | "Design Patterns: Elements of Reusable OO Software" | Gamma, Helm, Johnson, Vlissides (GoF) | 1994 | Purchase | Strategy, Observer, Factory, Decorator, Composite — classic patterns |
|
|
21
|
+
| 15 | JEP 430: String Templates (Preview) | OpenJDK | 2023 | [Free](https://openjdk.org/jeps/430) | Type-safe string interpolation, template processors |
|
|
22
|
+
|
|
23
|
+
## Effective Java Item Index
|
|
24
|
+
|
|
25
|
+
| # | Item | Bloch | Topic |
|
|
26
|
+
|---|------|-------|-------|
|
|
27
|
+
| 16 | Item 18 | [1] | "Favor composition over inheritance" — Iron Law citation |
|
|
28
|
+
| 17 | Item 17 | [1] | "Minimize mutability" — immutable class design |
|
|
29
|
+
| 18 | Item 1 | [1] | "Consider static factory methods over constructors" |
|
|
30
|
+
| 19 | Item 15 | [1] | "Minimize mutability" companion — limit accessibility |
|
|
31
|
+
| 20 | Item 64 | [1] | "Refer to objects by their interfaces" |
|
|
32
|
+
| 21 | Item 43 | [1] | "Prefer method references to lambdas" |
|
|
33
|
+
| 22 | Item 55 | [1] | "Return optionals judiciously" |
|
|
34
|
+
| 23 | Item 78 | [1] | "Synchronize access to shared mutable data" |
|
|
35
|
+
| 24 | Item 80 | [1] | "Prefer executors, tasks, and streams to threads" |
|
|
36
|
+
|
|
37
|
+
## API References
|
|
38
|
+
|
|
39
|
+
| # | Source | Org | Access | Topics |
|
|
40
|
+
|---|--------|-----|--------|--------|
|
|
41
|
+
| 25 | Optional Javadoc | Oracle | [Free](https://docs.oracle.com/en/java/docs/api/java.base/java/util/Optional.html) | Optional usage patterns, API contract, when not to use |
|
|
42
|
+
| 26 | Stream API Javadoc | Oracle | [Free](https://docs.oracle.com/en/java/docs/api/java.base/java/util/stream/Stream.html) | Functional pipeline, collectors, parallel streams |
|
|
43
|
+
| 27 | CompletableFuture Javadoc | Oracle | [Free](https://docs.oracle.com/en/java/docs/api/java.base/java/util/concurrent/CompletableFuture.html) | Async composition, exception handling, combining futures |
|
|
44
|
+
| 28 | StructuredTaskScope Javadoc | Oracle | [Free](https://docs.oracle.com/en/java/docs/api/java.base/java/util/concurrent/StructuredTaskScope.html) | Structured concurrency: fan-out/fan-in, failure policies |
|