@event4u/agent-config 14.23.0 → 15.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +198 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/agent-handoff.md +8 -7
- package/dist/agent-src/commands/agents/init.md +1 -1
- package/dist/agent-src/commands/agents/user/accept.md +4 -4
- package/dist/agent-src/commands/agents/user/delete.md +2 -2
- package/dist/agent-src/commands/agents/user/init.md +3 -3
- package/dist/agent-src/commands/agents/user/review.md +3 -3
- package/dist/agent-src/commands/agents/user/show.md +3 -3
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +6 -6
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +2 -2
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +5 -5
- package/dist/agent-src/commands/analyze/incident.md +3 -3
- package/dist/agent-src/commands/analyze/near-miss.md +3 -3
- package/dist/agent-src/commands/analyze/postmortem.md +4 -4
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/analyze.md +2 -2
- package/dist/agent-src/commands/bug/fix.md +1 -1
- package/dist/agent-src/commands/bug/investigate.md +2 -2
- package/dist/agent-src/commands/cost/profile.md +3 -3
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +2 -2
- package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/show.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +9 -9
- package/dist/agent-src/commands/humanize.md +6 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/judge/solo.md +1 -1
- package/dist/agent-src/commands/judge.md +1 -1
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +2 -2
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/add.md +3 -3
- package/dist/agent-src/commands/memory/load.md +4 -4
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +4 -4
- package/dist/agent-src/commands/memory/propose.md +2 -2
- package/dist/agent-src/commands/mode.md +5 -5
- package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
- package/dist/agent-src/commands/post-as/me.md +7 -7
- package/dist/agent-src/commands/pr/create.md +1 -1
- package/dist/agent-src/commands/pr/merge.md +1 -1
- package/dist/agent-src/commands/profile/activate.md +1 -1
- package/dist/agent-src/commands/profile/show.md +1 -1
- package/dist/agent-src/commands/research/deep.md +2 -2
- package/dist/agent-src/commands/research/report.md +2 -2
- package/dist/agent-src/commands/review/changes.md +1 -1
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +2 -2
- package/dist/agent-src/commands/roadmap/next.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +2 -2
- package/dist/agent-src/commands/security-audit-config.md +3 -3
- package/dist/agent-src/commands/skill/preview.md +1 -1
- package/dist/agent-src/commands/skills/discover.md +1 -1
- package/dist/agent-src/commands/sync/agent-settings.md +2 -2
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
- package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
- package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
- package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
- package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
- package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
- package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
- package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
- package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
- package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
- package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
- package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
- package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
- package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
- package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
- package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
- package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
- package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
- package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
- package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
- package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
- package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
- package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
- package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
- package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
- package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
- package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
- package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
- package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
- package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
- package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
- package/dist/agent-src/guidelines/code-clarity.md +350 -0
- package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
- package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
- package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
- package/dist/agent-src/guidelines/design-canon.md +63 -0
- package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
- package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
- package/dist/agent-src/guidelines/design-modes.md +143 -0
- package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
- package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
- package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
- package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
- package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
- package/dist/agent-src/guidelines/php/api-design.md +115 -0
- package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
- package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
- package/dist/agent-src/guidelines/php/controllers.md +90 -0
- package/dist/agent-src/guidelines/php/database.md +194 -0
- package/dist/agent-src/guidelines/php/eloquent.md +208 -0
- package/dist/agent-src/guidelines/php/flux.md +80 -0
- package/dist/agent-src/guidelines/php/general.md +207 -0
- package/dist/agent-src/guidelines/php/git.md +164 -0
- package/dist/agent-src/guidelines/php/jobs.md +111 -0
- package/dist/agent-src/guidelines/php/livewire.md +71 -0
- package/dist/agent-src/guidelines/php/logging.md +79 -0
- package/dist/agent-src/guidelines/php/naming.md +89 -0
- package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
- package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
- package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
- package/dist/agent-src/guidelines/php/patterns.md +28 -0
- package/dist/agent-src/guidelines/php/performance.md +92 -0
- package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
- package/dist/agent-src/guidelines/php/resources.md +100 -0
- package/dist/agent-src/guidelines/php/security.md +110 -0
- package/dist/agent-src/guidelines/php/sql.md +97 -0
- package/dist/agent-src/guidelines/php/validations.md +119 -0
- package/dist/agent-src/guidelines/php/websocket.md +100 -0
- package/dist/agent-src/guidelines/prompt-templates.md +189 -0
- package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
- package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
- package/dist/agent-src/personas/README.md +1 -1
- package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
- package/dist/agent-src/personas/product-owner.md +1 -1
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
- package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
- package/dist/agent-src/rules/code-comment-discipline.md +2 -2
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/content-quoting-floor.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/cross-source-consistency.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +36 -46
- package/dist/agent-src/rules/direct-answers.md +2 -2
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/icon-consistency.md +5 -1
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/language-and-tone.md +3 -3
- package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +2 -2
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/role-mode-adherence.md +2 -2
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +2 -2
- package/dist/agent-src/rules/think-before-action.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +7 -5
- package/dist/agent-src/rules/ui-audit-gate.md +3 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
- package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
- package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
- package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
- package/dist/agent-src/skills/code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
- package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
- package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
- package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
- package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
- package/dist/agent-src/skills/design-review/SKILL.md +4 -4
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
- package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
- package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
- package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
- package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
- package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
- package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
- package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
- package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
- package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +3 -3
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
- package/dist/agent-src/skills/org-design/SKILL.md +1 -1
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
- package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
- package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
- package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
- package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
- package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
- package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
- package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +6 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +2 -2
- package/dist/agent-src/user-types/_template/user-type.md +1 -1
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
- package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
- package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
- package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
- package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
- package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +4 -4
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +3 -3
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +1 -1
- package/dist/cli-delegate/cmd_settings_get.js +15 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +41 -11
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +22 -75
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +5 -7
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +4 -6
- package/dist/hooks/dispatch.js +8607 -8930
- package/dist/install/install.mjs +35 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1433 -1342
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +73 -0
- package/dist/scripts/_lib/agent_src.js +20 -0
- package/dist/scripts/_lib/guidelines_lane.js +158 -0
- package/dist/scripts/condense.js +2 -5
- package/dist/server/io/yamlIO.js +125 -17
- package/dist/server/schemas/settings.js +18 -4
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/contracts/settings-classes.md +18 -9
- package/docs/guidelines/abstraction-thresholds.md +35 -0
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
- package/docs/guidelines/agent-infra/false-green.md +2 -2
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
- package/docs/guidelines/design-fidelity-mechanics.md +4 -0
- package/docs/guidelines/design-fidelity-routing.md +78 -0
- package/docs/guidelines/design-reconciliation.md +172 -0
- package/docs/guidelines/gtm-handoff.md +2 -2
- package/docs/guidelines/wing4-handoff.md +2 -2
- package/package.json +7 -3
- package/src/config/agent-settings.template.yml +55 -8
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +4 -32
- package/src/config/gate-coverage.yml +31 -8
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/hook-token-budget.json +1 -1
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- package/src/config/platform-anchor.json +47 -0
- package/src/config/preamble-payload-budget.json +2 -3
- package/src/config/publish-surface.json +4 -2
- package/src/config/ratification-policy.json +7 -0
- package/src/config/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- package/src/scripts/_lib/agent_settings.ts +85 -0
- package/src/scripts/_lib/agent_src.ts +21 -0
- package/src/scripts/_lib/artifact_maturity.ts +242 -0
- package/src/scripts/_lib/conformance_report.ts +403 -0
- package/src/scripts/_lib/continuity_writer.ts +72 -13
- package/src/scripts/_lib/design_system_import.ts +20 -0
- package/src/scripts/_lib/design_tolerance.ts +281 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_index_trust.ts +42 -1
- package/src/scripts/_lib/standing_bound_ratchet.ts +103 -37
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/autonomy_friction_traffic.ts +379 -0
- package/src/scripts/check_kernel_edit_ratified.ts +462 -0
- package/src/scripts/check_loss_class_declared.ts +793 -46
- package/src/scripts/check_platform_anchor.ts +390 -0
- package/src/scripts/check_preamble_payload_budget.ts +292 -4
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/code_graph/cli.ts +6 -0
- package/src/scripts/condense.ts +2 -6
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +35 -27
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/session_eol_hook.ts +68 -154
- package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hot_context_hook.ts +41 -401
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/session_memory_index.ts +5 -0
- package/src/scripts/sync_agent_settings.ts +270 -10
- package/src/server/io/yamlIO.ts +127 -17
- package/src/server/schemas/settings.ts +25 -5
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Augment Portability
|
|
2
|
+
|
|
3
|
+
> Editing or creating files inside .augment/ directory — skills, rules, commands, templates, contexts must be project-agnostic
|
|
4
|
+
|
|
5
|
+
_Origin: migrated from `.agent-src.uncondensed/rules/augment-portability.md` per P4.2 of `road-to-kernel-and-router.md`._
|
|
6
|
+
|
|
7
|
+
# Package Portability
|
|
8
|
+
|
|
9
|
+
Everything that ships with the `event4u/agent-config` package MUST be
|
|
10
|
+
**project-agnostic**. That includes:
|
|
11
|
+
|
|
12
|
+
- Everything inside `.augment/` (skills, rules, commands, guidelines,
|
|
13
|
+
templates, contexts)
|
|
14
|
+
- The package repo's own root `AGENTS.md`
|
|
15
|
+
- The package repo's own `.github/copilot-instructions.md`
|
|
16
|
+
|
|
17
|
+
All three are either installed into consumer projects (`.augment/` via
|
|
18
|
+
`install.sh`) or read by AI tools when working on the package itself
|
|
19
|
+
(`AGENTS.md`, `copilot-instructions.md`). Leaking consumer-specific
|
|
20
|
+
content into any of them pollutes downstream projects or misleads agents.
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
- NEVER reference a specific consumer project, repo name, domain, or tech
|
|
25
|
+
stack directly. The package repo itself (`event4u/agent-config`) MAY be
|
|
26
|
+
named inside its own root `AGENTS.md` and `copilot-instructions.md` —
|
|
27
|
+
that is meta about the package, not a leak.
|
|
28
|
+
- NEVER hardcode consumer-project paths, class names, or conventions.
|
|
29
|
+
- Write content so it works as a **reusable package** across any project.
|
|
30
|
+
- Project-specific behavior belongs in the **consumer's** `.agent-settings.yml`,
|
|
31
|
+
`AGENTS.md`, or `agents/` — never in files shipped by this package.
|
|
32
|
+
- If a skill or rule needs project-specific input, read it from
|
|
33
|
+
`.agent-settings.yml` or accept it as a parameter.
|
|
34
|
+
- When reviewing or editing package files, always ask: "Would this still
|
|
35
|
+
make sense in a completely different project?"
|
|
36
|
+
|
|
37
|
+
## Runtime invocations — no `task` commands
|
|
38
|
+
|
|
39
|
+
Skills, rules, commands, guidelines, personas, and context docs run in
|
|
40
|
+
**consumer projects**, which may not have Task installed. **Never**
|
|
41
|
+
reference a `task <something>` invocation inside any artefact file
|
|
42
|
+
under `.agent-src.uncondensed/{skills,rules,commands,guidelines,personas,contexts}/`
|
|
43
|
+
(and therefore also not in the condensed mirror under `dist/agent-src/`).
|
|
44
|
+
Use direct script invocations instead.
|
|
45
|
+
|
|
46
|
+
## Consumer CLI — `./agent-config`
|
|
47
|
+
|
|
48
|
+
A subset of package scripts is exposed through a project-local CLI
|
|
49
|
+
wrapper `./agent-config` (written into the project root by the
|
|
50
|
+
installer, gitignored). Artefacts MUST prefer the CLI over raw
|
|
51
|
+
`./scripts-run src/scripts/…` paths for every command the CLI already covers.
|
|
52
|
+
|
|
53
|
+
## Translation tables — see mechanics
|
|
54
|
+
|
|
55
|
+
The full `task`-to-script translation table, the `./agent-config`
|
|
56
|
+
CLI mapping, and the rationale (Task absence on consumers,
|
|
57
|
+
maintainer-vs-artefact split) are **in this file**.
|
|
58
|
+
|
|
59
|
+
> **Corrected 2026-08-26** (`road-to-contract-review-deadlines` 4.2): this
|
|
60
|
+
> paragraph used to point at a `rules-auto` mechanics file under the contexts
|
|
61
|
+
> tree, which exists nowhere in it. The pointer described a split that was never
|
|
62
|
+
> made; the material it names was already here.
|
|
63
|
+
|
|
64
|
+
## Enforcement
|
|
65
|
+
|
|
66
|
+
`scripts/check_portability.ts` scans `.augment/`, `.agent-src.uncondensed/`,
|
|
67
|
+
and the package repo's root `AGENTS.md` + `.github/copilot-instructions.md`
|
|
68
|
+
for forbidden identifiers, for any `task <name>` invocation inside
|
|
69
|
+
artefact files, and for direct script invocations that bypass the
|
|
70
|
+
`./agent-config` CLI. It runs in CI and must pass before any PR.
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# Code Clarity
|
|
2
|
+
|
|
3
|
+
> Cross-language coding-clarity conventions. Cited by language-specific
|
|
4
|
+
> guidelines (`php/general.md`, `php/php-coding-patterns.md`, …) so
|
|
5
|
+
> consumers in any stack get the same baseline.
|
|
6
|
+
|
|
7
|
+
Applies to PHP, JavaScript / TypeScript, Python, Go, Ruby, and any
|
|
8
|
+
other language the package guides. Language-specific files reference
|
|
9
|
+
this one — they don't duplicate it.
|
|
10
|
+
|
|
11
|
+
## Don't assign single-use values to a variable
|
|
12
|
+
|
|
13
|
+
If a value is used **exactly once**, pass the expression directly.
|
|
14
|
+
Don't bind it to a temporary variable just to feed it into the next
|
|
15
|
+
call.
|
|
16
|
+
|
|
17
|
+
The named variable buys nothing — it adds a line, an identifier the
|
|
18
|
+
reader has to track, and a false signal that the value will be reused.
|
|
19
|
+
|
|
20
|
+
```php
|
|
21
|
+
// ❌ Avoid — $db is referenced exactly once.
|
|
22
|
+
$db = db::getInstance();
|
|
23
|
+
$this->columnExists($db, 'table', 'column');
|
|
24
|
+
|
|
25
|
+
// ✅ Prefer — value flows directly to the call.
|
|
26
|
+
$this->columnExists(db::getInstance(), 'table', 'column');
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
// ❌ Avoid
|
|
31
|
+
const user = await getCurrentUser();
|
|
32
|
+
return renderProfile(user);
|
|
33
|
+
|
|
34
|
+
// ✅ Prefer
|
|
35
|
+
return renderProfile(await getCurrentUser());
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
# ❌ Avoid
|
|
40
|
+
config = load_config()
|
|
41
|
+
return Worker(config)
|
|
42
|
+
|
|
43
|
+
# ✅ Prefer
|
|
44
|
+
return Worker(load_config())
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Carve-outs — keep the variable when
|
|
48
|
+
|
|
49
|
+
The rule is "single use, no extra meaning". Bind to a variable when
|
|
50
|
+
**any** of these hold:
|
|
51
|
+
|
|
52
|
+
| Carve-out | Why |
|
|
53
|
+
|---|---|
|
|
54
|
+
| **Used 2 or more times** | Inlining duplicates the expression — re-evaluation, repeated side effects, more diff churn. |
|
|
55
|
+
| **Expression has side effects** | A network call, a write, an `INSERT`, a counter bump must run exactly once and be visible to the reader as such. |
|
|
56
|
+
| **The name carries domain meaning** | `$activeMembership = …; allow($activeMembership)` — the identifier documents intent the call site can't. |
|
|
57
|
+
| **Inlining pushes past the line-length budget** | A 130-char single line is harder to read than two named lines. Match the project's formatter. |
|
|
58
|
+
| **Used inside a loop body** | Hoist the invariant out of the loop; keep the binding. |
|
|
59
|
+
| **Debugger / breakpoint affordance** | Stepping through a named value is materially easier than inspecting an expression mid-call. Prefer the variable in code paths under active investigation. |
|
|
60
|
+
| **Type-narrowing assertion** | `const x: Foo = maybeFoo!; …` where the binding pins the type for the type-checker. |
|
|
61
|
+
|
|
62
|
+
When in doubt — and the expression is short, side-effect-free, and
|
|
63
|
+
used once — inline it.
|
|
64
|
+
|
|
65
|
+
## Why this matters
|
|
66
|
+
|
|
67
|
+
- **Smaller diffs — by removing indirection, never by compression.** Two lines
|
|
68
|
+
(`$x = ...; f($x)`) become one (`f(...)`) because the naming step carried no
|
|
69
|
+
information, not because one line is a goal in itself. **Simple is not the
|
|
70
|
+
same as short:** a flat form one line *longer* beats a dense clever one, and a
|
|
71
|
+
nested ternary or a long optional-call chain that shrinks the diff while
|
|
72
|
+
raising the cost of every future read is a regression here, not a win. The
|
|
73
|
+
shape axis in
|
|
74
|
+
[`agent-interaction-and-decision-quality` § 8b-shape](agent-infra/agent-interaction-and-decision-quality.md)
|
|
75
|
+
states the same distinction from the scope side.
|
|
76
|
+
- **Less cognitive load.** Readers don't track an identifier whose
|
|
77
|
+
whole purpose is "the next line".
|
|
78
|
+
- **Honest signals.** A named variable says "this value is reusable
|
|
79
|
+
or worth labeling". Single-use bindings break that contract and
|
|
80
|
+
train readers to ignore names.
|
|
81
|
+
- **Faster refactor.** Renaming the call site doesn't drag a now-stale
|
|
82
|
+
variable name with it.
|
|
83
|
+
|
|
84
|
+
## Anti-patterns this rule rejects
|
|
85
|
+
|
|
86
|
+
- **"Variable for the debugger."** If the file is not under active
|
|
87
|
+
debugging, drop the binding. Don't ship debug scaffolding.
|
|
88
|
+
- **"Variable to align line lengths."** Use the formatter, not a
|
|
89
|
+
fake intermediate.
|
|
90
|
+
- **"Variable so I have somewhere to put the type."** Modern type
|
|
91
|
+
inference makes this redundant in PHP 8+, TS, Python 3.10+, Go,
|
|
92
|
+
Rust, etc. Annotate the parameter or return type instead.
|
|
93
|
+
|
|
94
|
+
## Comment discipline — state a constraint, not a narration
|
|
95
|
+
|
|
96
|
+
A code comment earns its place only by stating a constraint the code
|
|
97
|
+
itself can't show — a non-obvious invariant, a workaround for a specific
|
|
98
|
+
bug, a hidden dependency. It never narrates:
|
|
99
|
+
|
|
100
|
+
- **Provenance** — "added for the X feature", "per ticket #123". That
|
|
101
|
+
belongs in the commit message or PR description, not the code; it rots
|
|
102
|
+
the moment the feature or ticket is forgotten.
|
|
103
|
+
- **What the next line does** — well-named identifiers already say it.
|
|
104
|
+
A comment repeating the code is noise the reader skips past.
|
|
105
|
+
- **Why the change is correct** — that's a message to the reviewer, not
|
|
106
|
+
to the next person reading the file after it's merged.
|
|
107
|
+
|
|
108
|
+
Test: would removing the comment leave a future reader confused about a
|
|
109
|
+
non-obvious constraint? If yes, keep it — tightened to the constraint
|
|
110
|
+
alone. If the comment only restates what identifiers already convey, or
|
|
111
|
+
explains the change's history rather than the code's behavior, cut it.
|
|
112
|
+
|
|
113
|
+
This is the canonical long-form behind the
|
|
114
|
+
[`code-comment-discipline`](../rules/code-comment-discipline.md)
|
|
115
|
+
rule (whose body is merged here per P4 of `road-to-kernel-and-router.md`).
|
|
116
|
+
External consensus in one line each: comments explain **why, never
|
|
117
|
+
what** (competent readers get the what from the code); Google's style
|
|
118
|
+
guides (C++/Go/Python/TS) ban stating the obvious — Go: prefer
|
|
119
|
+
self-describing names over redundant comments; Python: "never describe
|
|
120
|
+
the code"; modern PHP (framework-mainstream since PHP 8 typing) drops
|
|
121
|
+
docblocks that only restate native type hints; TSDoc/JSDoc type
|
|
122
|
+
annotations are redundant in typed TypeScript.
|
|
123
|
+
|
|
124
|
+
### Banned comment classes
|
|
125
|
+
|
|
126
|
+
| Banned | Example | Instead |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| What-narration | `// increment the counter` above `counter++` | Nothing — the code says it |
|
|
129
|
+
| Signature-mirroring docblock | `@param string $name The name` on `string $name` | Nothing — the typehint says it |
|
|
130
|
+
| Redundant `@return` | `@return bool` on `): bool` | Nothing |
|
|
131
|
+
| Banner / section divider | `// ---------- Helpers ----------` | Structure the file; extract a class |
|
|
132
|
+
| Change-log comment | `// added for the export feature`, `// per ticket #123` | Commit message / PR description |
|
|
133
|
+
| Reviewer-directed justification | `// this is safe because my change …` | PR description |
|
|
134
|
+
| Redundant property docblock | `/** @var LoggerInterface */` on a typed property | Nothing — the property type says it |
|
|
135
|
+
| Type-restating JSDoc in typed TS | `/** @param {string} id */` on `id: string` | Nothing — TS carries the type |
|
|
136
|
+
| Obvious docstring | `"""Return the user."""` on `get_user()` | Nothing, or a real contract note |
|
|
137
|
+
| Commented-out code | dead code kept "for reference" | Delete — git history is the tombstone |
|
|
138
|
+
|
|
139
|
+
### Carve-out — machine-relevant precision docblocks STAY
|
|
140
|
+
|
|
141
|
+
A docblock that carries type information the native type system cannot express is **not** redundant — static analyzers and IDEs consume it. Keep (and write) these:
|
|
142
|
+
|
|
143
|
+
- PHP generics / array shapes for PHPStan/Psalm: `@return Collection<int, Post>`, `@param array<string, User> $usersByEmail`, `@template T`, `@phpstan-type`.
|
|
144
|
+
- Union/shape refinements the language can't express natively.
|
|
145
|
+
- Tool-consumed markers: `@deprecated` (with the successor), `@internal`, `@throws` for checked flows the caller must handle.
|
|
146
|
+
- Python typing that only a docstring/stub can carry in the project's toolchain.
|
|
147
|
+
|
|
148
|
+
The line: the docblock must add information **beyond** the native signature. `@param array<int, Order> $orders` earns its place; `@param array $orders` does not.
|
|
149
|
+
|
|
150
|
+
### Public-API carve-out — `code_style.docblocks`
|
|
151
|
+
|
|
152
|
+
Read `code_style.docblocks` from `.agent-settings.yml` (missing → `minimal`):
|
|
153
|
+
|
|
154
|
+
- `minimal` (default) — the full discipline above; exported/public symbols get no summary docblock unless one of the five legitimate jobs applies.
|
|
155
|
+
- `full` — the **exported public surface of a library package** (published API consumers see in their IDE) MAY carry a one-line summary docblock per symbol. The redundancy ban still holds in `full`: no `@param`/`@return` lines that mirror the signature, ever.
|
|
156
|
+
|
|
157
|
+
### Per-language keep/drop tables
|
|
158
|
+
|
|
159
|
+
Docblocks earn their place only with **machine-relevant precision** the
|
|
160
|
+
native type system cannot carry, or genuine why-context. Per language:
|
|
161
|
+
|
|
162
|
+
#### PHP / PHPDoc
|
|
163
|
+
|
|
164
|
+
| Keep | Drop |
|
|
165
|
+
|---|---|
|
|
166
|
+
| `@return Collection<int, Post>` — generic the native type can't carry | `@return bool` on `): bool` |
|
|
167
|
+
| `@param array<string, User> $usersByEmail` — array shape for PHPStan/Psalm | `@param string $name The name.` on `string $name` |
|
|
168
|
+
| `@template T`, `@phpstan-type`, `@phpstan-assert` | `/** @var LoggerInterface */` on a natively-typed property |
|
|
169
|
+
| `@throws PaymentDeclined` where callers must handle it | `/** Constructor. */` |
|
|
170
|
+
| `@deprecated use X instead` — tool-consumed | Method summary that re-words the method name |
|
|
171
|
+
|
|
172
|
+
```php
|
|
173
|
+
// ❌ Drop — five lines, zero information beyond the signature
|
|
174
|
+
/**
|
|
175
|
+
* Deactivate the user.
|
|
176
|
+
*
|
|
177
|
+
* @param User $user The user to deactivate.
|
|
178
|
+
* @return void
|
|
179
|
+
*/
|
|
180
|
+
public function deactivate(User $user): void
|
|
181
|
+
|
|
182
|
+
// ✅ Keep — the docblock carries what PHP's type system cannot
|
|
183
|
+
/** @param array<int, OrderLine> $lines */
|
|
184
|
+
public function totalCents(array $lines): int
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
#### TypeScript / JSDoc-TSDoc
|
|
188
|
+
|
|
189
|
+
| Keep | Drop |
|
|
190
|
+
|---|---|
|
|
191
|
+
| A why: `// half-up to match the invoice renderer; Intl default is half-even` | `@param {string} id` on `id: string` |
|
|
192
|
+
| `@deprecated` with the successor named | `@returns the formatted price` on `: string` |
|
|
193
|
+
| `@internal` when the build strips internals | Restating a type the compiler already enforces |
|
|
194
|
+
| Non-obvious unit/contract: `/** epoch millis, NOT seconds */` | `// call the API` above `await api.call()` |
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
// ❌ Drop — TS carries every fact stated here
|
|
198
|
+
/**
|
|
199
|
+
* Formats the price.
|
|
200
|
+
* @param amount - the amount to format
|
|
201
|
+
* @returns the formatted string
|
|
202
|
+
*/
|
|
203
|
+
export function formatPrice(amount: number): string
|
|
204
|
+
|
|
205
|
+
// ✅ Keep — constraint the signature can't show
|
|
206
|
+
// Rounds half-up to match the invoice PDF renderer; Intl default is half-even.
|
|
207
|
+
export function formatPrice(amount: number): string
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
#### Python / docstrings
|
|
211
|
+
|
|
212
|
+
| Keep | Drop |
|
|
213
|
+
|---|---|
|
|
214
|
+
| Contract detail: raises, units, side effects a caller must know | `"""Return the user."""` on `get_user()` |
|
|
215
|
+
| Public-API docstring where the toolchain renders it (Sphinx/mkdocs) | Args section restating annotated params |
|
|
216
|
+
| Type info only expressible in a docstring in this project's toolchain | `# loop over items` above a comprehension |
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
# ❌ Drop
|
|
220
|
+
def get_user(user_id: int) -> User | None:
|
|
221
|
+
"""Get the user by id and return it or None."""
|
|
222
|
+
|
|
223
|
+
# ✅ Keep — behavior the signature can't show
|
|
224
|
+
def get_user(user_id: int) -> User | None:
|
|
225
|
+
"""Reads through the request-local cache; never hits the DB twice per request."""
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
#### Go / doc comments
|
|
229
|
+
|
|
230
|
+
| Keep | Drop |
|
|
231
|
+
|---|---|
|
|
232
|
+
| Exported-symbol doc comment (`godoc` renders it) — one sentence, adds intent | Doc comment that re-words the function name |
|
|
233
|
+
| A why on non-obvious concurrency/ordering | `// increment i` |
|
|
234
|
+
|
|
235
|
+
Go is the one ecosystem where exported symbols conventionally carry a
|
|
236
|
+
doc comment — keep the convention, but the comment still must say
|
|
237
|
+
something the name doesn't.
|
|
238
|
+
|
|
239
|
+
### Redundancy self-check (any language)
|
|
240
|
+
|
|
241
|
+
Before emitting a comment or docblock, all three must be true:
|
|
242
|
+
|
|
243
|
+
1. It states something **beyond** the names and native types.
|
|
244
|
+
2. It will still be true after the next refactor of the lines below it.
|
|
245
|
+
3. It addresses the future reader of the file — not the reviewer of the diff.
|
|
246
|
+
|
|
247
|
+
One "no" → drop it. When in doubt: no comment.
|
|
248
|
+
|
|
249
|
+
Those three conditions are the code-comment instance of a wider test. The
|
|
250
|
+
generalised form — five questions covering comments, docblocks, labels, hints,
|
|
251
|
+
tooltips, placeholders, badges and empty states alike — is the Information Delta
|
|
252
|
+
Test in [`redundancy-taxonomy`](redundancy-taxonomy.md), together with the
|
|
253
|
+
representation classes that name what a redundant surface *is*. Reach for it
|
|
254
|
+
whenever the surface is not a code comment, and whenever a reduction would touch
|
|
255
|
+
the semantic channel: an accessibility name is required information, so it is a
|
|
256
|
+
hard guard and never a deletion candidate. The rule is not "less text" — it is
|
|
257
|
+
that if removing the text loses no information in any required channel, remove
|
|
258
|
+
it, and if the information is required, express it once, in the strongest native
|
|
259
|
+
form available.
|
|
260
|
+
|
|
261
|
+
The same document carries the **naming** half, which fires earlier than any of
|
|
262
|
+
this: before introducing a term for a concept, search for the term the tree
|
|
263
|
+
already uses. A second word for an existing concept costs a reader more than a
|
|
264
|
+
redundant sentence does — a redundant sentence is skipped, a second name makes
|
|
265
|
+
them check whether they are looking at one thing or two.
|
|
266
|
+
|
|
267
|
+
### Additional worked examples
|
|
268
|
+
|
|
269
|
+
(The TypeScript `formatPrice` pair above is the canonical TS example; these
|
|
270
|
+
cover the remaining shapes.)
|
|
271
|
+
|
|
272
|
+
```php
|
|
273
|
+
// ❌ Redundant — every line restates the signature
|
|
274
|
+
/**
|
|
275
|
+
* Get the user by id.
|
|
276
|
+
*
|
|
277
|
+
* @param int $id The user id.
|
|
278
|
+
* @return User|null The user or null.
|
|
279
|
+
*/
|
|
280
|
+
public function getUserById(int $id): ?User
|
|
281
|
+
|
|
282
|
+
// ✅ Nothing to add — the signature is the documentation
|
|
283
|
+
public function getUserById(int $id): ?User
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
```php
|
|
287
|
+
// ✅ Docblock KEPT — the generic is machine-relevant (PHPStan), the native type can't carry it
|
|
288
|
+
/** @return Collection<int, Post> */
|
|
289
|
+
public function publishedPosts(): Collection
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
```python
|
|
293
|
+
# ❌ Narration
|
|
294
|
+
# loop over the items and sum the totals
|
|
295
|
+
total = sum(item.total for item in items)
|
|
296
|
+
|
|
297
|
+
# ✅ A why that survives
|
|
298
|
+
# Stripe amounts are integer cents; convert once at the boundary, never downstream.
|
|
299
|
+
total_cents = sum(item.total_cents for item in items)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Scope boundary
|
|
303
|
+
|
|
304
|
+
The comment discipline governs **new and edited code only**. It is never a
|
|
305
|
+
license to strip comments from untouched code —
|
|
306
|
+
[`minimal-safe-diff`](../rules/minimal-safe-diff.md) wins on diff shape
|
|
307
|
+
("no docstrings/comments on untouched code" cuts both ways: don't add, don't
|
|
308
|
+
remove). Sweeping a file's existing comments is a separate,
|
|
309
|
+
explicitly-requested cleanup task.
|
|
310
|
+
|
|
311
|
+
### Fixtures
|
|
312
|
+
|
|
313
|
+
Behavioral baseline: `tests/code-comments/eval-fixtures.md`
|
|
314
|
+
(`ccd-php-class-generation`, `ccd-ts-module-generation`,
|
|
315
|
+
`ccd-untouched-preservation`, `ccd-explicit-teaching-override`); the decidable
|
|
316
|
+
criteria are proven by `tests/scripts/code_comment_fixtures.test.ts`.
|
|
317
|
+
|
|
318
|
+
### Evidence belongs in the roadmap that asked for it
|
|
319
|
+
|
|
320
|
+
Measured 2026-09-02 in a consumer repository: **509 German comment lines** and
|
|
321
|
+
**21 report- or provenance-shaped comments** across **41 of 45** changed source
|
|
322
|
+
files, the worst a 101-line colour-analysis report inside a CSS file. The cause
|
|
323
|
+
was a roadmap requiring proof for every checked step: the run read that as
|
|
324
|
+
*evidence should be documented* and wrote the measurements into the source too,
|
|
325
|
+
where the roadmap already carried them.
|
|
326
|
+
|
|
327
|
+
The provenance of a value is not a WHY, and a roadmap cannot license a comment
|
|
328
|
+
the rule forbids.
|
|
329
|
+
|
|
330
|
+
Two enforcers carry this because neither rule could fire on a write:
|
|
331
|
+
`code-comment-discipline` matches prompt keywords, and `language-and-tone`'s
|
|
332
|
+
English-comment clause named a `.md`-only validator. `lint_code_comments`
|
|
333
|
+
refuses on the diff; the `comment-discipline` concern reports on the text as
|
|
334
|
+
written. Neither replaces the discipline.
|
|
335
|
+
|
|
336
|
+
## See also
|
|
337
|
+
|
|
338
|
+
- Language-specific anchors that link to this guideline:
|
|
339
|
+
- PHP: `docs/guidelines/php/general.md` § Variables
|
|
340
|
+
- PHP: `docs/guidelines/php/php-coding-patterns.md` § Variables
|
|
341
|
+
- `code-comment-discipline` rule — the always-loaded enforcement surface
|
|
342
|
+
for the comment-discipline clause above.
|
|
343
|
+
- `minimal-safe-diff` rule — orthogonal but aligned: smallest change
|
|
344
|
+
that solves the stated problem; also owns "no comment additions or
|
|
345
|
+
removals on untouched code".
|
|
346
|
+
- `direct-answers` rule — same spirit at the prose level: shortest
|
|
347
|
+
version that fully answers the question.
|
|
348
|
+
- [`redundancy-taxonomy`](redundancy-taxonomy.md) — the shared classes,
|
|
349
|
+
verdicts and Information Delta Test this section instantiates for code
|
|
350
|
+
comments; also cited by the review and refactoring skills.
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Component-Oriented & Object-Oriented Development
|
|
2
|
+
|
|
3
|
+
> Cross-cutting development standard: **think in reusable units, and — in an
|
|
4
|
+
> object-oriented / class-based codebase — treat object-oriented design as a
|
|
5
|
+
> high-priority default where it reduces complexity.** Split by surface below
|
|
6
|
+
> (frontend / backend), each pointing to the stack-specific carve-outs rather
|
|
7
|
+
> than restating them. Framework-neutral by construction — React / Storybook /
|
|
8
|
+
> Laravel / Symfony specifics live in their own skills, never here.
|
|
9
|
+
|
|
10
|
+
## Paradigm-appropriate first — detect, then apply
|
|
11
|
+
|
|
12
|
+
**Reuse is universal; OOP is paradigm-scoped.** Detect the codebase's paradigm
|
|
13
|
+
before applying the object-oriented half: class-based / OO code (PHP, Java, C#,
|
|
14
|
+
typical TS/React service layers) → this standard's OOP guidance is the
|
|
15
|
+
high-priority default. A **functional / pipeline / actor-model** codebase
|
|
16
|
+
(Elixir/Phoenix, Clojure, Haskell, Go-idiomatic, heavy FP-in-TS) → apply *that*
|
|
17
|
+
paradigm's principles (immutability, pure functions, pattern-matching,
|
|
18
|
+
composition of functions), and read the OOP bullets as "the same rigor, its
|
|
19
|
+
paradigm's shape." **Never impose classes on functional code to satisfy this
|
|
20
|
+
standard** — consistency with the codebase's chosen paradigm wins over OOP
|
|
21
|
+
advocacy, always.
|
|
22
|
+
|
|
23
|
+
## The standard, in one breath
|
|
24
|
+
|
|
25
|
+
- **Reuse before you build** (every paradigm). Compose from units that already
|
|
26
|
+
exist — audit first, reuse the design system / shared abstractions, extract a
|
|
27
|
+
new unit only when the same shape repeats.
|
|
28
|
+
- **Object-oriented where it fits** (in an OO codebase). Encapsulation, single
|
|
29
|
+
responsibility, composition over inheritance, and behavior-rich objects are
|
|
30
|
+
the high-priority default *when they reduce complexity* — not a quota to hit,
|
|
31
|
+
and not imposed on a codebase that has chosen a different paradigm.
|
|
32
|
+
|
|
33
|
+
## The load-bearing caveat — reuse/OOP is a tool, never a mandate to abstract
|
|
34
|
+
|
|
35
|
+
This standard **never** authorizes speculative abstraction. It is bounded by the
|
|
36
|
+
package's restraint posture and defers to it on every conflict:
|
|
37
|
+
|
|
38
|
+
- [`minimal-safe-diff`](../rules/minimal-safe-diff.md) (+ its
|
|
39
|
+
anti-over-engineering mechanics) — smallest change; no premature abstraction,
|
|
40
|
+
no speculative feature, no rewrite for taste.
|
|
41
|
+
- [`senior-engineering-discipline`](../rules/senior-engineering-discipline.md)
|
|
42
|
+
— reuse the *existing* abstraction; generalize, don't overfit; never invent an
|
|
43
|
+
API to look object-oriented.
|
|
44
|
+
- [`improve-before-implement`](../rules/improve-before-implement.md) —
|
|
45
|
+
"does it fit the existing architecture?" before adding structure.
|
|
46
|
+
- **When NOT to use a pattern** ([`php/patterns.md`](php/patterns.md) §) — KISS &
|
|
47
|
+
YAGNI trump pattern purity: no interface for a single implementation, no
|
|
48
|
+
pattern for a five-line function, no class where a function is clearer.
|
|
49
|
+
|
|
50
|
+
Rule of thumb: **two real repetitions (or a genuine second axis of change)
|
|
51
|
+
before you extract a code-level abstraction.** One occurrence is not a
|
|
52
|
+
component; one branch is not a Strategy. A reviewer should be able to name the
|
|
53
|
+
concrete duplication or the concrete change-axis the abstraction removes.
|
|
54
|
+
UI extractions carry deliberately higher, scoped bars (shell 3+ · stateful
|
|
55
|
+
component ~4 + real state) — the per-class canon is
|
|
56
|
+
[`abstraction-thresholds`](abstraction-thresholds.md); this file does not
|
|
57
|
+
restate it.
|
|
58
|
+
|
|
59
|
+
**Precedence (explicit): `minimal-safe-diff` / YAGNI always trump OOP
|
|
60
|
+
advocacy.** When "prefer OO shape" and "smallest change" conflict, the smallest
|
|
61
|
+
change wins — this standard adds a *consideration*, never a competing objective
|
|
62
|
+
that pressures preemptive abstraction. The review lens (below) may flag OO shape
|
|
63
|
+
only where the duplication or the growing branch is **already present in the
|
|
64
|
+
diff**, never as "this could grow later."
|
|
65
|
+
|
|
66
|
+
## Frontend — think in reusable components
|
|
67
|
+
|
|
68
|
+
Component-first is the default mindset, not an afterthought: decompose a screen
|
|
69
|
+
into composable units, reuse the project's primitives, and extract shared shells
|
|
70
|
+
when they repeat. Depth and mechanics already live in dedicated skills — consult
|
|
71
|
+
them, don't duplicate:
|
|
72
|
+
|
|
73
|
+
- [`fe-design`](../skills/fe-design/SKILL.md) § Component Architecture —
|
|
74
|
+
the stack-agnostic "kind, not framework" taxonomy, granularity, and the
|
|
75
|
+
UI-shell bar (per [`abstraction-thresholds`](abstraction-thresholds.md)).
|
|
76
|
+
- [`ui-component-architect`](../skills/ui-component-architect/SKILL.md) —
|
|
77
|
+
how to *shape* a reusable component: composition over inheritance, slot
|
|
78
|
+
contracts, prop-API caps, controlled/uncontrolled, the stateful-component
|
|
79
|
+
bar (repeat **and** real state, per the same canon).
|
|
80
|
+
- [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md) — the
|
|
81
|
+
reuse-before-invent gate: inventory existing components/tokens/primitives
|
|
82
|
+
first (enforced by [`ui-audit-gate`](../rules/ui-audit-gate.md)).
|
|
83
|
+
- [`design-tokens`](../skills/design-tokens/SKILL.md) /
|
|
84
|
+
[`design-system-capture`](../skills/design-system-capture/SKILL.md) —
|
|
85
|
+
the shared token/design-system layer components draw from.
|
|
86
|
+
|
|
87
|
+
**Component workshop (Storybook et al.) — when the project is large enough.**
|
|
88
|
+
For a project with a real, growing shared-component library, isolating and
|
|
89
|
+
documenting each reusable component in a component workshop (Storybook or the
|
|
90
|
+
ecosystem equivalent) pays for itself — it makes components discoverable,
|
|
91
|
+
reviewable in isolation, and reused instead of re-invented. It is **not** worth
|
|
92
|
+
the setup for a small surface with a handful of one-off components. The
|
|
93
|
+
framework-specific setup is a carve-out, not a generic mandate — React /
|
|
94
|
+
Storybook specifics: [`react-shadcn-ui`](../skills/react-shadcn-ui/SKILL.md)
|
|
95
|
+
§ Component workshop.
|
|
96
|
+
|
|
97
|
+
Framework carve-outs (never restated here): React →
|
|
98
|
+
[`react-shadcn-ui`](../skills/react-shadcn-ui/SKILL.md); Next.js
|
|
99
|
+
server/client component boundary →
|
|
100
|
+
[`nextjs-patterns`](../skills/nextjs-patterns/SKILL.md); Laravel FE →
|
|
101
|
+
[`blade-ui`](../skills/blade-ui/SKILL.md) /
|
|
102
|
+
[`livewire`](../skills/livewire/SKILL.md) /
|
|
103
|
+
[`flux`](../skills/flux/SKILL.md); styling →
|
|
104
|
+
[`tailwind-engineer`](../skills/tailwind-engineer/SKILL.md).
|
|
105
|
+
|
|
106
|
+
## Backend — object-oriented where it reduces complexity
|
|
107
|
+
|
|
108
|
+
The structural half — thin handlers, business logic in services / use-cases,
|
|
109
|
+
behavior-rich domain models, validation at the boundary — is owned by
|
|
110
|
+
[`architecture`](../rules/architecture.md) and holds across paradigms. In
|
|
111
|
+
an **object-oriented / class-based** service layer, layer the OO principles below
|
|
112
|
+
on top of it, each applied only where it earns its place. In a **functional /
|
|
113
|
+
pipeline** codebase, apply that paradigm's equivalent (pure functions +
|
|
114
|
+
composition instead of behavior-rich objects; a dispatch map / pattern-match
|
|
115
|
+
instead of a Strategy class) — the goal (encapsulate change, one responsibility,
|
|
116
|
+
compose don't duplicate) is paradigm-independent; only its *shape* is OO here:
|
|
117
|
+
|
|
118
|
+
- **Encapsulation** — objects own their data + the behavior over it; no anemic
|
|
119
|
+
bags mutated from the outside.
|
|
120
|
+
- **Single responsibility** — one class, one reason to change; no god services.
|
|
121
|
+
- **Composition over inheritance** — inject collaborators; reach for a base
|
|
122
|
+
class only for genuine is-a substitutability, not code sharing.
|
|
123
|
+
- **Behavior-rich domain objects** — push rules into the model, keep services
|
|
124
|
+
orchestration-thin.
|
|
125
|
+
- **Patterns where they earn their place** — a Strategy when a branch on a
|
|
126
|
+
discriminator will grow (`if-else` chain → polymorphism); a Factory when
|
|
127
|
+
construction is non-trivial; DI on an abstraction when there is a *real*
|
|
128
|
+
second implementation. Not before.
|
|
129
|
+
|
|
130
|
+
Language / framework carve-outs (never restated here): PHP →
|
|
131
|
+
[`php-coding-patterns`](php/php-coding-patterns.md) +
|
|
132
|
+
[`patterns.md`](php/patterns.md) (+ `php/patterns/strategy.md`,
|
|
133
|
+
`php/patterns/dependency-injection.md`, `php/patterns/factory.md`,
|
|
134
|
+
`php/patterns/service-layer.md`)
|
|
135
|
+
+ skills [`php-coder`](../skills/php-coder/SKILL.md) /
|
|
136
|
+
[`php-service`](../skills/php-service/SKILL.md); Laravel →
|
|
137
|
+
[`laravel`](../skills/laravel/SKILL.md); Symfony →
|
|
138
|
+
[`symfony-workflow`](../skills/symfony-workflow/SKILL.md); Next.js / TS →
|
|
139
|
+
[`nextjs-patterns`](../skills/nextjs-patterns/SKILL.md); cross-language
|
|
140
|
+
clean-code baseline → [`code-clarity`](code-clarity.md).
|
|
141
|
+
|
|
142
|
+
## Enums over scattered literals
|
|
143
|
+
|
|
144
|
+
A field with two or more non-boolean states is an enum, not a bare string /
|
|
145
|
+
magic number — the small OO move that keeps a codebase greppable and safe to
|
|
146
|
+
change. Full rule + the defer-and-ask flow for pre-existing literals:
|
|
147
|
+
[`prefer-enums-over-literals`](../rules/prefer-enums-over-literals.md).
|
|
148
|
+
|
|
149
|
+
## How this is reviewed
|
|
150
|
+
|
|
151
|
+
"Reuse existing components + object-oriented shape (where it reduces
|
|
152
|
+
complexity)" is a check on the code-quality review lens
|
|
153
|
+
([`judge-code-quality`](../skills/judge-code-quality/SKILL.md)), so it
|
|
154
|
+
reaches `/review-changes`, `/judge`, the subagent judge modes, and team-mode's
|
|
155
|
+
fallback review frame. It fires **only where the duplication or the growing
|
|
156
|
+
branch is already present in the diff** — never "this could grow later" — and
|
|
157
|
+
in the **codebase's own paradigm** (it will not tell a functional service to
|
|
158
|
+
grow a class). It stays a human-judgment call that defers to the codebase's own
|
|
159
|
+
conventions — never a generic SOLID dogma imposed over a project that has chosen
|
|
160
|
+
differently.
|
|
161
|
+
|
|
162
|
+
## Council review (2026-07-15)
|
|
163
|
+
|
|
164
|
+
Deep debate, 3 rounds, cross-vendor (`anthropic/claude-sonnet-4-5` +
|
|
165
|
+
`openai/gpt-4o`), $0.16. Split verdict; the load-bearing (anthropic) critique —
|
|
166
|
+
that an "OOP-supreme default" over-indexes on OOP for a multi-paradigm consumer
|
|
167
|
+
base and can conflict with `minimal-safe-diff` — was applied, bounded by this
|
|
168
|
+
standard's stated purpose (OOP *is* a deliberate high priority for the operator):
|
|
169
|
+
|
|
170
|
+
- **Paradigm-appropriate framing** — OOP is the high-priority default *within an
|
|
171
|
+
OO / class-based codebase*; detect and defer to a functional / pipeline /
|
|
172
|
+
actor paradigm; never impose classes on functional code (§ Paradigm-appropriate).
|
|
173
|
+
- **Explicit precedence** — `minimal-safe-diff` / YAGNI win on conflict; the
|
|
174
|
+
review lens flags only *already-present* duplication / complexity, never
|
|
175
|
+
preemptive (§ caveat, § How this is reviewed).
|
|
176
|
+
|
|
177
|
+
Divergence held: the frontend section stays (an intentional FE / backend
|
|
178
|
+
entry-point + carve-out index, per the operator's explicit "split by FE /
|
|
179
|
+
backend" ask) — against the anthropic "delete as redundant"; it is a cohesive
|
|
180
|
+
index of the existing FE surfaces, not a claim of novel guidance. The trace is
|
|
181
|
+
the 2026-07-15 session above, not a path: council output is gitignored and
|
|
182
|
+
auto-pruned, and this guideline is a stable artifact that must not carry a link
|
|
183
|
+
which rots (`no-roadmap-references`).
|
|
184
|
+
|
|
185
|
+
## See also
|
|
186
|
+
|
|
187
|
+
- [`architecture`](../rules/architecture.md) — the structural home this layers onto.
|
|
188
|
+
- [`code-clarity`](code-clarity.md) — the cross-language clean-code baseline.
|
|
189
|
+
- [`minimal-safe-diff`](../rules/minimal-safe-diff.md) · [`senior-engineering-discipline`](../rules/senior-engineering-discipline.md) — the restraint anchors this standard is bounded by.
|