@mytechtoday/augment-extensions 0.2.0 → 0.5.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/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
- package/augment-extensions/workflows/beads-integration/README.md +143 -0
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
- package/augment-extensions/workflows/beads-integration/module.json +75 -0
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/writing-standards/screenplay/README.md +300 -0
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +168 -10
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts +19 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +478 -63
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/types/gui.d.ts +62 -0
- package/cli/dist/types/gui.d.ts.map +1 -0
- package/cli/dist/types/gui.js +30 -0
- package/cli/dist/types/gui.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/gui-helpers.d.ts +23 -0
- package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
- package/cli/dist/utils/gui-helpers.js +159 -0
- package/cli/dist/utils/gui-helpers.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +232 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +900 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +559 -105
- package/package.json +17 -6
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
# Migration Example: Adding Wishlist Feature
|
|
2
|
+
|
|
3
|
+
## Scenario
|
|
4
|
+
|
|
5
|
+
Add a wishlist feature to the e-commerce platform (from schema-design-example.md) that allows users to save products for later.
|
|
6
|
+
|
|
7
|
+
**Requirements**:
|
|
8
|
+
- Users can add/remove products to their wishlist
|
|
9
|
+
- Track when products were added to wishlist
|
|
10
|
+
- Support multiple wishlists per user (e.g., "Birthday", "Holiday")
|
|
11
|
+
- Zero downtime migration
|
|
12
|
+
- Backward compatible with existing code
|
|
13
|
+
|
|
14
|
+
**Constraints**:
|
|
15
|
+
- Production database has 100,000 users
|
|
16
|
+
- Cannot take downtime
|
|
17
|
+
- Existing application code must continue working during migration
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Step 1: Plan the Migration
|
|
22
|
+
|
|
23
|
+
### Schema Changes
|
|
24
|
+
|
|
25
|
+
**New Tables**:
|
|
26
|
+
1. `wishlists` - User wishlists with names
|
|
27
|
+
2. `wishlist_items` - Products in each wishlist
|
|
28
|
+
|
|
29
|
+
**Relationships**:
|
|
30
|
+
- `wishlists.user_id` → `users.id` (many-to-one)
|
|
31
|
+
- `wishlist_items.wishlist_id` → `wishlists.id` (many-to-one)
|
|
32
|
+
- `wishlist_items.product_id` → `products.id` (many-to-one)
|
|
33
|
+
|
|
34
|
+
### Migration Strategy
|
|
35
|
+
|
|
36
|
+
**Approach**: Single-phase migration (low risk, no schema changes to existing tables)
|
|
37
|
+
|
|
38
|
+
**Why Single-Phase**:
|
|
39
|
+
- Adding new tables only (no changes to existing tables)
|
|
40
|
+
- No data migration needed
|
|
41
|
+
- No backward compatibility concerns
|
|
42
|
+
- Can deploy code and schema together
|
|
43
|
+
|
|
44
|
+
**Timeline**:
|
|
45
|
+
1. Create migration scripts (30 minutes)
|
|
46
|
+
2. Test on staging (1 hour)
|
|
47
|
+
3. Execute on production (< 1 minute)
|
|
48
|
+
4. Deploy application code (5 minutes)
|
|
49
|
+
5. Monitor (24 hours)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Step 2: Create Migration Scripts
|
|
54
|
+
|
|
55
|
+
### Up Migration
|
|
56
|
+
|
|
57
|
+
**File**: `migrations/20240128_add_wishlist_feature.sql`
|
|
58
|
+
|
|
59
|
+
```sql
|
|
60
|
+
-- Migration: Add wishlist feature
|
|
61
|
+
-- Date: 2024-01-28
|
|
62
|
+
-- Author: AI Agent
|
|
63
|
+
-- Issue: bd-wishlist.1
|
|
64
|
+
--
|
|
65
|
+
-- Purpose: Add wishlist functionality for users to save products
|
|
66
|
+
--
|
|
67
|
+
-- Breaking Changes: None (new tables only)
|
|
68
|
+
--
|
|
69
|
+
-- Rollback: Safe to rollback; tables will be dropped
|
|
70
|
+
--
|
|
71
|
+
-- Estimated Execution Time: < 5 seconds
|
|
72
|
+
--
|
|
73
|
+
-- Dependencies: None
|
|
74
|
+
|
|
75
|
+
BEGIN;
|
|
76
|
+
|
|
77
|
+
-- Create wishlists table
|
|
78
|
+
CREATE TABLE wishlists (
|
|
79
|
+
id SERIAL PRIMARY KEY,
|
|
80
|
+
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
81
|
+
name VARCHAR(100) NOT NULL DEFAULT 'My Wishlist',
|
|
82
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
83
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
84
|
+
|
|
85
|
+
CONSTRAINT unique_user_wishlist_name UNIQUE (user_id, name)
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
-- Indexes for wishlists
|
|
89
|
+
CREATE INDEX idx_wishlists_user ON wishlists(user_id);
|
|
90
|
+
|
|
91
|
+
-- Comments
|
|
92
|
+
COMMENT ON TABLE wishlists IS 'User wishlists for saving products';
|
|
93
|
+
COMMENT ON COLUMN wishlists.name IS 'User-defined wishlist name (e.g., "Birthday", "Holiday")';
|
|
94
|
+
COMMENT ON CONSTRAINT unique_user_wishlist_name ON wishlists IS 'Prevent duplicate wishlist names per user';
|
|
95
|
+
|
|
96
|
+
-- Create wishlist_items table
|
|
97
|
+
CREATE TABLE wishlist_items (
|
|
98
|
+
id SERIAL PRIMARY KEY,
|
|
99
|
+
wishlist_id INTEGER NOT NULL REFERENCES wishlists(id) ON DELETE CASCADE,
|
|
100
|
+
product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE CASCADE,
|
|
101
|
+
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
102
|
+
notes TEXT,
|
|
103
|
+
|
|
104
|
+
CONSTRAINT unique_wishlist_product UNIQUE (wishlist_id, product_id)
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
-- Indexes for wishlist_items
|
|
108
|
+
CREATE INDEX idx_wishlist_items_wishlist ON wishlist_items(wishlist_id, added_at DESC);
|
|
109
|
+
CREATE INDEX idx_wishlist_items_product ON wishlist_items(product_id);
|
|
110
|
+
|
|
111
|
+
-- Comments
|
|
112
|
+
COMMENT ON TABLE wishlist_items IS 'Products saved in user wishlists';
|
|
113
|
+
COMMENT ON COLUMN wishlist_items.notes IS 'Optional user notes about the product';
|
|
114
|
+
COMMENT ON CONSTRAINT unique_wishlist_product ON wishlist_items IS 'Prevent duplicate products in same wishlist';
|
|
115
|
+
|
|
116
|
+
-- Create function to update wishlist updated_at timestamp
|
|
117
|
+
CREATE OR REPLACE FUNCTION update_wishlist_timestamp()
|
|
118
|
+
RETURNS TRIGGER AS $$
|
|
119
|
+
BEGIN
|
|
120
|
+
UPDATE wishlists SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.wishlist_id;
|
|
121
|
+
RETURN NEW;
|
|
122
|
+
END;
|
|
123
|
+
$$ LANGUAGE plpgsql;
|
|
124
|
+
|
|
125
|
+
-- Create trigger to update wishlist timestamp when items are added/removed
|
|
126
|
+
CREATE TRIGGER trigger_update_wishlist_timestamp
|
|
127
|
+
AFTER INSERT OR UPDATE OR DELETE ON wishlist_items
|
|
128
|
+
FOR EACH ROW EXECUTE FUNCTION update_wishlist_timestamp();
|
|
129
|
+
|
|
130
|
+
COMMIT;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Down Migration (Rollback)
|
|
134
|
+
|
|
135
|
+
**File**: `migrations/20240128_add_wishlist_feature_down.sql`
|
|
136
|
+
|
|
137
|
+
```sql
|
|
138
|
+
-- Rollback: Remove wishlist feature
|
|
139
|
+
-- Date: 2024-01-28
|
|
140
|
+
|
|
141
|
+
BEGIN;
|
|
142
|
+
|
|
143
|
+
-- Drop trigger and function
|
|
144
|
+
DROP TRIGGER IF EXISTS trigger_update_wishlist_timestamp ON wishlist_items;
|
|
145
|
+
DROP FUNCTION IF EXISTS update_wishlist_timestamp();
|
|
146
|
+
|
|
147
|
+
-- Drop tables (cascade will remove foreign key constraints)
|
|
148
|
+
DROP TABLE IF EXISTS wishlist_items CASCADE;
|
|
149
|
+
DROP TABLE IF EXISTS wishlists CASCADE;
|
|
150
|
+
|
|
151
|
+
COMMIT;
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Step 3: Test the Migration
|
|
157
|
+
|
|
158
|
+
### Test on Local Development
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Apply migration
|
|
162
|
+
psql -U postgres -d ecommerce_dev -f migrations/20240128_add_wishlist_feature.sql
|
|
163
|
+
|
|
164
|
+
# Verify tables created
|
|
165
|
+
psql -U postgres -d ecommerce_dev -c "\d wishlists"
|
|
166
|
+
psql -U postgres -d ecommerce_dev -c "\d wishlist_items"
|
|
167
|
+
|
|
168
|
+
# Test rollback
|
|
169
|
+
psql -U postgres -d ecommerce_dev -f migrations/20240128_add_wishlist_feature_down.sql
|
|
170
|
+
|
|
171
|
+
# Verify tables dropped
|
|
172
|
+
psql -U postgres -d ecommerce_dev -c "\d wishlists"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Test on Staging with Production-Like Data
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Restore production snapshot to staging
|
|
179
|
+
pg_restore -U postgres -d ecommerce_staging production_snapshot.dump
|
|
180
|
+
|
|
181
|
+
# Apply migration
|
|
182
|
+
psql -U postgres -d ecommerce_staging -f migrations/20240128_add_wishlist_feature.sql
|
|
183
|
+
|
|
184
|
+
# Verify migration success
|
|
185
|
+
psql -U postgres -d ecommerce_staging -c "
|
|
186
|
+
SELECT
|
|
187
|
+
table_name,
|
|
188
|
+
(SELECT COUNT(*) FROM information_schema.columns WHERE table_name = t.table_name) as column_count
|
|
189
|
+
FROM information_schema.tables t
|
|
190
|
+
WHERE table_name IN ('wishlists', 'wishlist_items');
|
|
191
|
+
"
|
|
192
|
+
|
|
193
|
+
# Test sample data insertion
|
|
194
|
+
psql -U postgres -d ecommerce_staging -c "
|
|
195
|
+
INSERT INTO wishlists (user_id, name) VALUES (1, 'Test Wishlist');
|
|
196
|
+
INSERT INTO wishlist_items (wishlist_id, product_id) VALUES (1, 1);
|
|
197
|
+
SELECT * FROM wishlists;
|
|
198
|
+
SELECT * FROM wishlist_items;
|
|
199
|
+
"
|
|
200
|
+
|
|
201
|
+
# Test rollback
|
|
202
|
+
psql -U postgres -d ecommerce_staging -f migrations/20240128_add_wishlist_feature_down.sql
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Testing Checklist
|
|
206
|
+
|
|
207
|
+
- [x] Migration runs without errors
|
|
208
|
+
- [x] Tables created with correct schema
|
|
209
|
+
- [x] Indexes created successfully
|
|
210
|
+
- [x] Foreign key constraints work correctly
|
|
211
|
+
- [x] Unique constraints prevent duplicates
|
|
212
|
+
- [x] Trigger updates wishlist timestamp
|
|
213
|
+
- [x] Rollback script works correctly
|
|
214
|
+
- [x] No impact on existing tables
|
|
215
|
+
- [x] Execution time < 5 seconds
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Step 4: Execute on Production
|
|
220
|
+
|
|
221
|
+
### Pre-Migration Checklist
|
|
222
|
+
|
|
223
|
+
- [x] Backup database (snapshot created)
|
|
224
|
+
- [x] Rollback script tested on staging
|
|
225
|
+
- [x] Migration tested on production-like data
|
|
226
|
+
- [x] Stakeholders notified
|
|
227
|
+
- [x] Monitoring dashboards prepared
|
|
228
|
+
- [x] Execution window scheduled (low-traffic period)
|
|
229
|
+
|
|
230
|
+
### Execution Steps
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# 1. Create database backup
|
|
234
|
+
pg_dump -U postgres -d ecommerce_prod -F c -f backup_before_wishlist_$(date +%Y%m%d_%H%M%S).dump
|
|
235
|
+
|
|
236
|
+
# 2. Verify backup
|
|
237
|
+
ls -lh backup_before_wishlist_*.dump
|
|
238
|
+
|
|
239
|
+
# 3. Start monitoring
|
|
240
|
+
# - Open database metrics dashboard
|
|
241
|
+
# - Open application error logs
|
|
242
|
+
# - Open APM dashboard
|
|
243
|
+
|
|
244
|
+
# 4. Execute migration
|
|
245
|
+
psql -U postgres -d ecommerce_prod -f migrations/20240128_add_wishlist_feature.sql
|
|
246
|
+
|
|
247
|
+
# 5. Verify migration success
|
|
248
|
+
psql -U postgres -d ecommerce_prod -c "
|
|
249
|
+
SELECT
|
|
250
|
+
schemaname,
|
|
251
|
+
tablename,
|
|
252
|
+
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
|
|
253
|
+
FROM pg_tables
|
|
254
|
+
WHERE tablename IN ('wishlists', 'wishlist_items');
|
|
255
|
+
"
|
|
256
|
+
|
|
257
|
+
# 6. Verify indexes created
|
|
258
|
+
psql -U postgres -d ecommerce_prod -c "
|
|
259
|
+
SELECT indexname, indexdef
|
|
260
|
+
FROM pg_indexes
|
|
261
|
+
WHERE tablename IN ('wishlists', 'wishlist_items');
|
|
262
|
+
"
|
|
263
|
+
|
|
264
|
+
# 7. Test basic operations
|
|
265
|
+
psql -U postgres -d ecommerce_prod -c "
|
|
266
|
+
-- Create test wishlist
|
|
267
|
+
INSERT INTO wishlists (user_id, name) VALUES (1, 'Test Wishlist') RETURNING id;
|
|
268
|
+
|
|
269
|
+
-- Add item to wishlist
|
|
270
|
+
INSERT INTO wishlist_items (wishlist_id, product_id) VALUES (1, 1);
|
|
271
|
+
|
|
272
|
+
-- Verify trigger updated timestamp
|
|
273
|
+
SELECT id, name, created_at, updated_at FROM wishlists WHERE id = 1;
|
|
274
|
+
|
|
275
|
+
-- Clean up test data
|
|
276
|
+
DELETE FROM wishlists WHERE id = 1;
|
|
277
|
+
"
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Post-Migration Verification
|
|
281
|
+
|
|
282
|
+
```sql
|
|
283
|
+
-- Verify table structure
|
|
284
|
+
\d wishlists
|
|
285
|
+
\d wishlist_items
|
|
286
|
+
|
|
287
|
+
-- Verify constraints
|
|
288
|
+
SELECT conname, contype, pg_get_constraintdef(oid)
|
|
289
|
+
FROM pg_constraint
|
|
290
|
+
WHERE conrelid IN ('wishlists'::regclass, 'wishlist_items'::regclass);
|
|
291
|
+
|
|
292
|
+
-- Verify indexes
|
|
293
|
+
SELECT indexname, indexdef
|
|
294
|
+
FROM pg_indexes
|
|
295
|
+
WHERE tablename IN ('wishlists', 'wishlist_items');
|
|
296
|
+
|
|
297
|
+
-- Verify trigger
|
|
298
|
+
SELECT tgname, tgtype, tgenabled
|
|
299
|
+
FROM pg_trigger
|
|
300
|
+
WHERE tgrelid = 'wishlist_items'::regclass;
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Step 5: Deploy Application Code
|
|
306
|
+
|
|
307
|
+
### API Endpoints to Add
|
|
308
|
+
|
|
309
|
+
```javascript
|
|
310
|
+
// POST /api/wishlists - Create wishlist
|
|
311
|
+
app.post('/api/wishlists', async (req, res) => {
|
|
312
|
+
const { userId, name } = req.body;
|
|
313
|
+
|
|
314
|
+
const result = await db.query(
|
|
315
|
+
'INSERT INTO wishlists (user_id, name) VALUES ($1, $2) RETURNING *',
|
|
316
|
+
[userId, name]
|
|
317
|
+
);
|
|
318
|
+
|
|
319
|
+
res.json(result.rows[0]);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
// GET /api/wishlists/:userId - Get user's wishlists
|
|
323
|
+
app.get('/api/wishlists/:userId', async (req, res) => {
|
|
324
|
+
const { userId } = req.params;
|
|
325
|
+
|
|
326
|
+
const result = await db.query(
|
|
327
|
+
`SELECT w.*, COUNT(wi.id) as item_count
|
|
328
|
+
FROM wishlists w
|
|
329
|
+
LEFT JOIN wishlist_items wi ON w.id = wi.wishlist_id
|
|
330
|
+
WHERE w.user_id = $1
|
|
331
|
+
GROUP BY w.id
|
|
332
|
+
ORDER BY w.updated_at DESC`,
|
|
333
|
+
[userId]
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
res.json(result.rows);
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
// POST /api/wishlists/:wishlistId/items - Add item to wishlist
|
|
340
|
+
app.post('/api/wishlists/:wishlistId/items', async (req, res) => {
|
|
341
|
+
const { wishlistId } = req.params;
|
|
342
|
+
const { productId, notes } = req.body;
|
|
343
|
+
|
|
344
|
+
try {
|
|
345
|
+
const result = await db.query(
|
|
346
|
+
'INSERT INTO wishlist_items (wishlist_id, product_id, notes) VALUES ($1, $2, $3) RETURNING *',
|
|
347
|
+
[wishlistId, productId, notes]
|
|
348
|
+
);
|
|
349
|
+
|
|
350
|
+
res.json(result.rows[0]);
|
|
351
|
+
} catch (error) {
|
|
352
|
+
if (error.code === '23505') { // Unique constraint violation
|
|
353
|
+
res.status(409).json({ error: 'Product already in wishlist' });
|
|
354
|
+
} else {
|
|
355
|
+
throw error;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
// GET /api/wishlists/:wishlistId/items - Get wishlist items
|
|
361
|
+
app.get('/api/wishlists/:wishlistId/items', async (req, res) => {
|
|
362
|
+
const { wishlistId } = req.params;
|
|
363
|
+
|
|
364
|
+
const result = await db.query(
|
|
365
|
+
`SELECT
|
|
366
|
+
wi.*,
|
|
367
|
+
p.name as product_name,
|
|
368
|
+
p.price,
|
|
369
|
+
p.inventory_count,
|
|
370
|
+
(SELECT url FROM product_images WHERE product_id = p.id ORDER BY display_order LIMIT 1) as thumbnail
|
|
371
|
+
FROM wishlist_items wi
|
|
372
|
+
JOIN products p ON wi.product_id = p.id
|
|
373
|
+
WHERE wi.wishlist_id = $1
|
|
374
|
+
ORDER BY wi.added_at DESC`,
|
|
375
|
+
[wishlistId]
|
|
376
|
+
);
|
|
377
|
+
|
|
378
|
+
res.json(result.rows);
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
// DELETE /api/wishlists/:wishlistId/items/:productId - Remove item from wishlist
|
|
382
|
+
app.delete('/api/wishlists/:wishlistId/items/:productId', async (req, res) => {
|
|
383
|
+
const { wishlistId, productId } = req.params;
|
|
384
|
+
|
|
385
|
+
await db.query(
|
|
386
|
+
'DELETE FROM wishlist_items WHERE wishlist_id = $1 AND product_id = $2',
|
|
387
|
+
[wishlistId, productId]
|
|
388
|
+
);
|
|
389
|
+
|
|
390
|
+
res.json({ success: true });
|
|
391
|
+
});
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Step 6: Monitor and Validate
|
|
397
|
+
|
|
398
|
+
### Monitoring Metrics
|
|
399
|
+
|
|
400
|
+
**Database Metrics** (first 24 hours):
|
|
401
|
+
- Table sizes: `wishlists` and `wishlist_items`
|
|
402
|
+
- Index usage: Verify indexes are being used
|
|
403
|
+
- Query performance: Monitor wishlist query times
|
|
404
|
+
- Lock contention: Check for blocking queries
|
|
405
|
+
|
|
406
|
+
**Application Metrics**:
|
|
407
|
+
- API endpoint response times
|
|
408
|
+
- Error rates for wishlist operations
|
|
409
|
+
- User adoption (wishlists created, items added)
|
|
410
|
+
|
|
411
|
+
### Validation Queries
|
|
412
|
+
|
|
413
|
+
```sql
|
|
414
|
+
-- Check wishlist growth
|
|
415
|
+
SELECT
|
|
416
|
+
DATE(created_at) as date,
|
|
417
|
+
COUNT(*) as wishlists_created
|
|
418
|
+
FROM wishlists
|
|
419
|
+
GROUP BY DATE(created_at)
|
|
420
|
+
ORDER BY date DESC
|
|
421
|
+
LIMIT 7;
|
|
422
|
+
|
|
423
|
+
-- Check wishlist item growth
|
|
424
|
+
SELECT
|
|
425
|
+
DATE(added_at) as date,
|
|
426
|
+
COUNT(*) as items_added
|
|
427
|
+
FROM wishlist_items
|
|
428
|
+
GROUP BY DATE(added_at)
|
|
429
|
+
ORDER BY date DESC
|
|
430
|
+
LIMIT 7;
|
|
431
|
+
|
|
432
|
+
-- Check most popular wishlist names
|
|
433
|
+
SELECT name, COUNT(*) as count
|
|
434
|
+
FROM wishlists
|
|
435
|
+
GROUP BY name
|
|
436
|
+
ORDER BY count DESC
|
|
437
|
+
LIMIT 10;
|
|
438
|
+
|
|
439
|
+
-- Check index usage
|
|
440
|
+
SELECT
|
|
441
|
+
schemaname,
|
|
442
|
+
tablename,
|
|
443
|
+
indexname,
|
|
444
|
+
idx_scan as index_scans,
|
|
445
|
+
idx_tup_read as tuples_read
|
|
446
|
+
FROM pg_stat_user_indexes
|
|
447
|
+
WHERE tablename IN ('wishlists', 'wishlist_items')
|
|
448
|
+
ORDER BY idx_scan DESC;
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## Rollback Plan (If Needed)
|
|
454
|
+
|
|
455
|
+
### When to Rollback
|
|
456
|
+
|
|
457
|
+
- Migration fails during execution
|
|
458
|
+
- Data integrity issues discovered
|
|
459
|
+
- Performance degradation detected
|
|
460
|
+
- Critical bugs in application code
|
|
461
|
+
|
|
462
|
+
### Rollback Steps
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
# 1. Stop application deployments
|
|
466
|
+
# 2. Execute rollback script
|
|
467
|
+
psql -U postgres -d ecommerce_prod -f migrations/20240128_add_wishlist_feature_down.sql
|
|
468
|
+
|
|
469
|
+
# 3. Verify tables dropped
|
|
470
|
+
psql -U postgres -d ecommerce_prod -c "\d wishlists"
|
|
471
|
+
|
|
472
|
+
# 4. Restore from backup (if needed)
|
|
473
|
+
pg_restore -U postgres -d ecommerce_prod backup_before_wishlist_*.dump
|
|
474
|
+
|
|
475
|
+
# 5. Verify database state
|
|
476
|
+
# 6. Notify stakeholders
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## Key Takeaways
|
|
482
|
+
|
|
483
|
+
1. **Low-Risk Migration**: Adding new tables is safer than modifying existing ones
|
|
484
|
+
2. **No Downtime**: Migration completed in < 5 seconds with no service interruption
|
|
485
|
+
3. **Backward Compatible**: Existing code continued working during migration
|
|
486
|
+
4. **Tested Thoroughly**: Tested on local, staging, and production-like data
|
|
487
|
+
5. **Monitored Closely**: Tracked metrics for 24 hours after deployment
|
|
488
|
+
6. **Rollback Ready**: Tested rollback script before production execution
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## Next Steps
|
|
493
|
+
|
|
494
|
+
- See `optimization-example.md` for optimizing wishlist queries
|
|
495
|
+
- See `../rules/testing-patterns.md` for testing wishlist functionality
|
|
496
|
+
- See `../rules/documentation-standards.md` for documenting the migration
|
|
497
|
+
|
|
498
|
+
|