@stacksjs/defaults 0.75.109 → 0.75.110
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/ai/AGENTS.md +36 -1
- package/ai/README.md +39 -1
- package/ai/skills/stacks-actions/SKILL.md +64 -6
- package/ai/skills/stacks-ai/SKILL.md +36 -10
- package/ai/skills/stacks-alias/SKILL.md +40 -85
- package/ai/skills/stacks-analytics/SKILL.md +23 -3
- package/ai/skills/stacks-arrays/SKILL.md +35 -9
- package/ai/skills/stacks-audio/SKILL.md +34 -0
- package/ai/skills/stacks-auth/ACCOUNT-WORKFLOWS.md +113 -0
- package/ai/skills/stacks-auth/SKILL.md +90 -57
- package/ai/skills/stacks-auto-imports/SKILL.md +80 -138
- package/ai/skills/stacks-browser/SKILL.md +82 -138
- package/ai/skills/stacks-browser-extension/SKILL.md +40 -0
- package/ai/skills/stacks-buddy/SKILL.md +2 -0
- package/ai/skills/stacks-build/SKILL.md +42 -23
- package/ai/skills/stacks-cache/SKILL.md +75 -115
- package/ai/skills/stacks-calendar/SKILL.md +61 -97
- package/ai/skills/stacks-charts/SKILL.md +34 -0
- package/ai/skills/stacks-chat/SKILL.md +18 -2
- package/ai/skills/stacks-chief-of-staff/LICENSE +21 -0
- package/ai/skills/stacks-chief-of-staff/NOTICE.md +10 -0
- package/ai/skills/stacks-chief-of-staff/PLAYBOOK.md +42 -0
- package/ai/skills/stacks-chief-of-staff/SKILL.md +28 -0
- package/ai/skills/stacks-cli/SKILL.md +23 -7
- package/ai/skills/stacks-cloud/SKILL.md +37 -20
- package/ai/skills/stacks-cms/PAGES.md +70 -0
- package/ai/skills/stacks-cms/SKILL.md +30 -18
- package/ai/skills/stacks-codebase-design/LICENSE +21 -0
- package/ai/skills/stacks-codebase-design/NOTICE.md +10 -0
- package/ai/skills/stacks-codebase-design/SKILL.md +10 -0
- package/ai/skills/stacks-collections/SKILL.md +25 -8
- package/ai/skills/stacks-commerce/SKILL.md +25 -1
- package/ai/skills/stacks-composables/BROWSER.md +97 -0
- package/ai/skills/stacks-composables/SKILL.md +87 -181
- package/ai/skills/stacks-config/SKILL.md +108 -162
- package/ai/skills/stacks-cron/SKILL.md +27 -13
- package/ai/skills/stacks-crosswind/SKILL.md +62 -167
- package/ai/skills/stacks-dashboard/SKILL.md +8 -0
- package/ai/skills/stacks-database/SKILL.md +98 -68
- package/ai/skills/stacks-datetime/SKILL.md +21 -5
- package/ai/skills/stacks-deploy/SKILL.md +17 -1
- package/ai/skills/stacks-design-brutalist/SKILL.md +1 -1
- package/ai/skills/stacks-design-minimalist/SKILL.md +17 -3
- package/ai/skills/stacks-design-soft/SKILL.md +16 -4
- package/ai/skills/stacks-design-taste/SKILL.md +55 -35
- package/ai/skills/stacks-design-taste-codex/SKILL.md +5 -5
- package/ai/skills/stacks-desktop/SKILL.md +22 -16
- package/ai/skills/stacks-development/SKILL.md +19 -8
- package/ai/skills/stacks-dns/SKILL.md +72 -139
- package/ai/skills/stacks-domain-modeling/ADR-FORMAT.md +47 -0
- package/ai/skills/stacks-domain-modeling/GLOSSARY-FORMAT.md +60 -0
- package/ai/skills/stacks-domain-modeling/LICENSE +21 -0
- package/ai/skills/stacks-domain-modeling/NOTICE.md +10 -0
- package/ai/skills/stacks-domain-modeling/SKILL.md +11 -0
- package/ai/skills/stacks-email/DELIVERY-CONTROLS.md +84 -0
- package/ai/skills/stacks-email/SKILL.md +18 -2
- package/ai/skills/stacks-enums/SKILL.md +28 -81
- package/ai/skills/stacks-env/SKILL.md +23 -15
- package/ai/skills/stacks-error-handling/SKILL.md +68 -121
- package/ai/skills/stacks-events/SKILL.md +83 -264
- package/ai/skills/stacks-faker/SKILL.md +28 -13
- package/ai/skills/stacks-feature-flags/SKILL.md +41 -0
- package/ai/skills/stacks-features/SKILL.md +46 -0
- package/ai/skills/stacks-flow/ENGINEERING.md +84 -0
- package/ai/skills/stacks-flow/LICENSE +21 -0
- package/ai/skills/stacks-flow/NOTICE.md +10 -0
- package/ai/skills/stacks-flow/SKILL.md +32 -0
- package/ai/skills/stacks-flow/upstream-skills.json +726 -0
- package/ai/skills/stacks-forms/SKILL.md +44 -0
- package/ai/skills/stacks-git/LICENSE +21 -0
- package/ai/skills/stacks-git/NOTICE.md +10 -0
- package/ai/skills/stacks-git/SKILL.md +11 -0
- package/ai/skills/stacks-grill-with-docs/LICENSE +21 -0
- package/ai/skills/stacks-grill-with-docs/NOTICE.md +10 -0
- package/ai/skills/stacks-grill-with-docs/PLAYBOOK.md +4 -0
- package/ai/skills/stacks-grill-with-docs/SKILL.md +24 -0
- package/ai/skills/stacks-grilling/LICENSE +21 -0
- package/ai/skills/stacks-grilling/NOTICE.md +17 -0
- package/ai/skills/stacks-grilling/SKILL.md +7 -0
- package/ai/skills/stacks-guard/LICENSE +21 -0
- package/ai/skills/stacks-guard/NOTICE.md +10 -0
- package/ai/skills/stacks-guard/SKILL.md +6 -0
- package/ai/skills/stacks-handoff/LICENSE +21 -0
- package/ai/skills/stacks-handoff/NOTICE.md +17 -0
- package/ai/skills/stacks-handoff/SKILL.md +8 -0
- package/ai/skills/stacks-http/SKILL.md +64 -297
- package/ai/skills/stacks-humanizer/LICENSE +21 -0
- package/ai/skills/stacks-humanizer/NOTICE.md +19 -0
- package/ai/skills/stacks-humanizer/SKILL.md +85 -0
- package/ai/skills/stacks-humanizer/references/patterns.md +350 -0
- package/ai/skills/stacks-i18n/SKILL.md +33 -8
- package/ai/skills/stacks-image/SKILL.md +37 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +11 -6
- package/ai/skills/stacks-implement/LICENSE +21 -0
- package/ai/skills/stacks-implement/NOTICE.md +10 -0
- package/ai/skills/stacks-implement/PLAYBOOK.md +14 -0
- package/ai/skills/stacks-implement/SKILL.md +24 -0
- package/ai/skills/stacks-implement-spec/LICENSE +21 -0
- package/ai/skills/stacks-implement-spec/NOTICE.md +10 -0
- package/ai/skills/stacks-implement-spec/PLAYBOOK.md +37 -0
- package/ai/skills/stacks-implement-spec/SKILL.md +24 -0
- package/ai/skills/stacks-improve-codebase-architecture/HTML-REPORT.md +126 -0
- package/ai/skills/stacks-improve-codebase-architecture/LICENSE +21 -0
- package/ai/skills/stacks-improve-codebase-architecture/NOTICE.md +10 -0
- package/ai/skills/stacks-improve-codebase-architecture/PLAYBOOK.md +68 -0
- package/ai/skills/stacks-improve-codebase-architecture/SKILL.md +24 -0
- package/ai/skills/stacks-investigate/LICENSE +21 -0
- package/ai/skills/stacks-investigate/NOTICE.md +10 -0
- package/ai/skills/stacks-investigate/SKILL.md +6 -0
- package/ai/skills/stacks-jobs/SKILL.md +29 -8
- package/ai/skills/stacks-listeners/SKILL.md +13 -5
- package/ai/skills/stacks-logging/SKILL.md +71 -68
- package/ai/skills/stacks-loop/LICENSE +21 -0
- package/ai/skills/stacks-loop/NOTICE.md +10 -0
- package/ai/skills/stacks-loop/PLAYBOOK.md +28 -0
- package/ai/skills/stacks-loop/SKILL.md +28 -0
- package/ai/skills/stacks-mail/SKILL.md +46 -7
- package/ai/skills/stacks-marketing/CATALOG.md +60 -0
- package/ai/skills/stacks-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing/NOTICE.md +5 -0
- package/ai/skills/stacks-marketing/SKILL.md +27 -0
- package/ai/skills/stacks-marketing/WORKFLOW.md +83 -0
- package/ai/skills/stacks-marketing-ab-testing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ab-testing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ab-testing/PLAYBOOK.md +352 -0
- package/ai/skills/stacks-marketing-ab-testing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ab-testing/evals/evals.json +116 -0
- package/ai/skills/stacks-marketing-ab-testing/references/sample-size-guide.md +263 -0
- package/ai/skills/stacks-marketing-ab-testing/references/test-templates.md +277 -0
- package/ai/skills/stacks-marketing-ad-creative/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ad-creative/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ad-creative/PLAYBOOK.md +434 -0
- package/ai/skills/stacks-marketing-ad-creative/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ad-creative/assets/creative-review-template.html +432 -0
- package/ai/skills/stacks-marketing-ad-creative/evals/evals.json +280 -0
- package/ai/skills/stacks-marketing-ad-creative/references/awareness-headlines.md +54 -0
- package/ai/skills/stacks-marketing-ad-creative/references/creative-review-page.md +109 -0
- package/ai/skills/stacks-marketing-ad-creative/references/creative-roadmap.md +118 -0
- package/ai/skills/stacks-marketing-ad-creative/references/generative-tools.md +613 -0
- package/ai/skills/stacks-marketing-ad-creative/references/hook-system.md +115 -0
- package/ai/skills/stacks-marketing-ad-creative/references/imessage-video-ads.md +197 -0
- package/ai/skills/stacks-marketing-ad-creative/references/meta-creative-formats.md +114 -0
- package/ai/skills/stacks-marketing-ad-creative/references/motion-video-ads.md +126 -0
- package/ai/skills/stacks-marketing-ad-creative/references/platform-specs.md +213 -0
- package/ai/skills/stacks-marketing-ad-creative/references/short-form-video-specs.md +213 -0
- package/ai/skills/stacks-marketing-ad-creative/references/static-ad-templates.md +308 -0
- package/ai/skills/stacks-marketing-ads/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ads/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ads/PLAYBOOK.md +464 -0
- package/ai/skills/stacks-marketing-ads/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ads/evals/evals.json +192 -0
- package/ai/skills/stacks-marketing-ads/references/abm-playbook.md +101 -0
- package/ai/skills/stacks-marketing-ads/references/ad-copy-templates.md +207 -0
- package/ai/skills/stacks-marketing-ads/references/audience-targeting.md +243 -0
- package/ai/skills/stacks-marketing-ads/references/audit-guardrails.md +83 -0
- package/ai/skills/stacks-marketing-ads/references/b2b-paid-playbook.md +115 -0
- package/ai/skills/stacks-marketing-ads/references/conversion-tracking.md +361 -0
- package/ai/skills/stacks-marketing-ads/references/creative-research-automation.md +103 -0
- package/ai/skills/stacks-marketing-ads/references/google-ads-audit-checklist.md +84 -0
- package/ai/skills/stacks-marketing-ads/references/google-search-playbook.md +120 -0
- package/ai/skills/stacks-marketing-ads/references/linkedin-b2b-playbook.md +107 -0
- package/ai/skills/stacks-marketing-ads/references/meta-andromeda-playbook.md +44 -0
- package/ai/skills/stacks-marketing-ads/references/meta-decision-system.md +176 -0
- package/ai/skills/stacks-marketing-ads/references/payback-period.md +73 -0
- package/ai/skills/stacks-marketing-ads/references/platform-setup-checklists.md +277 -0
- package/ai/skills/stacks-marketing-ads/references/reading-google-ads-data.md +121 -0
- package/ai/skills/stacks-marketing-ads/references/rsa-output-spec.md +88 -0
- package/ai/skills/stacks-marketing-ai-seo/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ai-seo/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ai-seo/PLAYBOOK.md +494 -0
- package/ai/skills/stacks-marketing-ai-seo/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ai-seo/evals/evals.json +163 -0
- package/ai/skills/stacks-marketing-ai-seo/references/agent-readiness.md +66 -0
- package/ai/skills/stacks-marketing-ai-seo/references/citations-vs-recommendations.md +89 -0
- package/ai/skills/stacks-marketing-ai-seo/references/content-patterns.md +287 -0
- package/ai/skills/stacks-marketing-ai-seo/references/content-types.md +82 -0
- package/ai/skills/stacks-marketing-ai-seo/references/format-volatility.md +95 -0
- package/ai/skills/stacks-marketing-ai-seo/references/linkedin-ai-citations.md +131 -0
- package/ai/skills/stacks-marketing-ai-seo/references/okf.md +104 -0
- package/ai/skills/stacks-marketing-ai-seo/references/platform-ranking-factors.md +167 -0
- package/ai/skills/stacks-marketing-ai-seo/references/positioning-and-consensus.md +102 -0
- package/ai/skills/stacks-marketing-ai-seo/references/youtube-ai-citations.md +66 -0
- package/ai/skills/stacks-marketing-analytics/LICENSE +21 -0
- package/ai/skills/stacks-marketing-analytics/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-analytics/PLAYBOOK.md +307 -0
- package/ai/skills/stacks-marketing-analytics/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-analytics/evals/evals.json +117 -0
- package/ai/skills/stacks-marketing-analytics/references/event-library.md +260 -0
- package/ai/skills/stacks-marketing-analytics/references/ga4-implementation.md +304 -0
- package/ai/skills/stacks-marketing-analytics/references/gtm-implementation.md +396 -0
- package/ai/skills/stacks-marketing-aso/LICENSE +21 -0
- package/ai/skills/stacks-marketing-aso/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-aso/PLAYBOOK.md +310 -0
- package/ai/skills/stacks-marketing-aso/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-aso/evals/evals.json +104 -0
- package/ai/skills/stacks-marketing-aso/references/apple-specs.md +107 -0
- package/ai/skills/stacks-marketing-aso/references/benchmarks.md +131 -0
- package/ai/skills/stacks-marketing-aso/references/google-play-specs.md +135 -0
- package/ai/skills/stacks-marketing-aso/references/report-template.md +213 -0
- package/ai/skills/stacks-marketing-aso/references/scoring-criteria.md +213 -0
- package/ai/skills/stacks-marketing-attribution/LICENSE +21 -0
- package/ai/skills/stacks-marketing-attribution/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-attribution/PLAYBOOK.md +223 -0
- package/ai/skills/stacks-marketing-attribution/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-attribution/evals/evals.json +128 -0
- package/ai/skills/stacks-marketing-attribution/references/attribution-models.md +74 -0
- package/ai/skills/stacks-marketing-attribution/references/by-business-type.md +54 -0
- package/ai/skills/stacks-marketing-attribution/references/first-party-tracking.md +253 -0
- package/ai/skills/stacks-marketing-attribution/references/measurement-paradigms.md +85 -0
- package/ai/skills/stacks-marketing-churn-prevention/LICENSE +21 -0
- package/ai/skills/stacks-marketing-churn-prevention/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-churn-prevention/PLAYBOOK.md +420 -0
- package/ai/skills/stacks-marketing-churn-prevention/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-churn-prevention/evals/evals.json +107 -0
- package/ai/skills/stacks-marketing-churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/ai/skills/stacks-marketing-churn-prevention/references/dunning-playbook.md +413 -0
- package/ai/skills/stacks-marketing-co-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-co-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-co-marketing/PLAYBOOK.md +306 -0
- package/ai/skills/stacks-marketing-co-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-co-marketing/evals/evals.json +98 -0
- package/ai/skills/stacks-marketing-co-marketing/references/partnership-types.md +100 -0
- package/ai/skills/stacks-marketing-cold-email/LICENSE +21 -0
- package/ai/skills/stacks-marketing-cold-email/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-cold-email/PLAYBOOK.md +210 -0
- package/ai/skills/stacks-marketing-cold-email/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-cold-email/evals/evals.json +137 -0
- package/ai/skills/stacks-marketing-cold-email/references/benchmarks.md +87 -0
- package/ai/skills/stacks-marketing-cold-email/references/deliverability.md +111 -0
- package/ai/skills/stacks-marketing-cold-email/references/follow-up-sequences.md +81 -0
- package/ai/skills/stacks-marketing-cold-email/references/frameworks.md +90 -0
- package/ai/skills/stacks-marketing-cold-email/references/linkedin-outreach.md +91 -0
- package/ai/skills/stacks-marketing-cold-email/references/multichannel-cadence.md +79 -0
- package/ai/skills/stacks-marketing-cold-email/references/outbound-plays.md +88 -0
- package/ai/skills/stacks-marketing-cold-email/references/personalization.md +90 -0
- package/ai/skills/stacks-marketing-cold-email/references/reply-handling.md +65 -0
- package/ai/skills/stacks-marketing-cold-email/references/subject-lines.md +53 -0
- package/ai/skills/stacks-marketing-community-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-community-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-community-marketing/PLAYBOOK.md +171 -0
- package/ai/skills/stacks-marketing-community-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-community-marketing/evals/evals.json +103 -0
- package/ai/skills/stacks-marketing-community-marketing/references/community-models.md +63 -0
- package/ai/skills/stacks-marketing-competitor-profiling/LICENSE +21 -0
- package/ai/skills/stacks-marketing-competitor-profiling/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-competitor-profiling/PLAYBOOK.md +436 -0
- package/ai/skills/stacks-marketing-competitor-profiling/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-competitor-profiling/evals/evals.json +97 -0
- package/ai/skills/stacks-marketing-competitor-profiling/references/templates.md +167 -0
- package/ai/skills/stacks-marketing-competitor-profiling/references/tool-reference.md +314 -0
- package/ai/skills/stacks-marketing-competitors/LICENSE +21 -0
- package/ai/skills/stacks-marketing-competitors/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-competitors/PLAYBOOK.md +283 -0
- package/ai/skills/stacks-marketing-competitors/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-competitors/evals/evals.json +119 -0
- package/ai/skills/stacks-marketing-competitors/references/content-architecture.md +277 -0
- package/ai/skills/stacks-marketing-competitors/references/templates.md +226 -0
- package/ai/skills/stacks-marketing-content-strategy/LICENSE +21 -0
- package/ai/skills/stacks-marketing-content-strategy/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-content-strategy/PLAYBOOK.md +437 -0
- package/ai/skills/stacks-marketing-content-strategy/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-content-strategy/evals/evals.json +116 -0
- package/ai/skills/stacks-marketing-content-strategy/references/content-distribution.md +83 -0
- package/ai/skills/stacks-marketing-content-strategy/references/headless-cms.md +194 -0
- package/ai/skills/stacks-marketing-copy-editing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-copy-editing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-copy-editing/PLAYBOOK.md +485 -0
- package/ai/skills/stacks-marketing-copy-editing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-copy-editing/evals/evals.json +117 -0
- package/ai/skills/stacks-marketing-copy-editing/references/checklist.md +77 -0
- package/ai/skills/stacks-marketing-copy-editing/references/content-refresh.md +71 -0
- package/ai/skills/stacks-marketing-copy-editing/references/plain-english-alternatives.md +394 -0
- package/ai/skills/stacks-marketing-copywriting/LICENSE +21 -0
- package/ai/skills/stacks-marketing-copywriting/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-copywriting/PLAYBOOK.md +282 -0
- package/ai/skills/stacks-marketing-copywriting/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-copywriting/evals/evals.json +140 -0
- package/ai/skills/stacks-marketing-copywriting/references/ai-tells.md +261 -0
- package/ai/skills/stacks-marketing-copywriting/references/copy-frameworks.md +432 -0
- package/ai/skills/stacks-marketing-copywriting/references/natural-transitions.md +256 -0
- package/ai/skills/stacks-marketing-council/LICENSE +21 -0
- package/ai/skills/stacks-marketing-council/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-council/PLAYBOOK.md +157 -0
- package/ai/skills/stacks-marketing-council/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-council/evals/evals.json +70 -0
- package/ai/skills/stacks-marketing-council/references/advisor-template.md +51 -0
- package/ai/skills/stacks-marketing-council/references/advisors/alex-hormozi.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/ann-handley.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/april-dunford.md +41 -0
- package/ai/skills/stacks-marketing-council/references/advisors/byron-sharp.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/claude-hopkins.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/david-ogilvy.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/eugene-schwartz.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/gary-halbert.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/gary-vaynerchuk.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/rory-sutherland.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/russell-brunson.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/seth-godin.md +43 -0
- package/ai/skills/stacks-marketing-cro/LICENSE +21 -0
- package/ai/skills/stacks-marketing-cro/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-cro/PLAYBOOK.md +194 -0
- package/ai/skills/stacks-marketing-cro/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-cro/evals/evals.json +111 -0
- package/ai/skills/stacks-marketing-cro/references/experiments.md +248 -0
- package/ai/skills/stacks-marketing-cro/references/form.md +422 -0
- package/ai/skills/stacks-marketing-customer-research/LICENSE +21 -0
- package/ai/skills/stacks-marketing-customer-research/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-customer-research/PLAYBOOK.md +304 -0
- package/ai/skills/stacks-marketing-customer-research/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-customer-research/evals/evals.json +176 -0
- package/ai/skills/stacks-marketing-customer-research/references/interviews-and-surveys.md +155 -0
- package/ai/skills/stacks-marketing-customer-research/references/source-guides.md +401 -0
- package/ai/skills/stacks-marketing-directory-submissions/LICENSE +21 -0
- package/ai/skills/stacks-marketing-directory-submissions/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-directory-submissions/PLAYBOOK.md +397 -0
- package/ai/skills/stacks-marketing-directory-submissions/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-directory-submissions/evals/evals.json +121 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/directory-list.md +545 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/positioning-variations.md +232 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/submission-tracker-template.csv +272 -0
- package/ai/skills/stacks-marketing-emails/LICENSE +21 -0
- package/ai/skills/stacks-marketing-emails/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-emails/PLAYBOOK.md +336 -0
- package/ai/skills/stacks-marketing-emails/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-emails/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-emails/references/copy-guidelines.md +113 -0
- package/ai/skills/stacks-marketing-emails/references/email-types.md +515 -0
- package/ai/skills/stacks-marketing-emails/references/sequence-templates.md +168 -0
- package/ai/skills/stacks-marketing-events/LICENSE +21 -0
- package/ai/skills/stacks-marketing-events/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-events/PLAYBOOK.md +127 -0
- package/ai/skills/stacks-marketing-events/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-events/evals/evals.json +92 -0
- package/ai/skills/stacks-marketing-events/references/event-portfolio-strategy.md +80 -0
- package/ai/skills/stacks-marketing-events/references/speaking.md +49 -0
- package/ai/skills/stacks-marketing-events/references/sponsorship-roi.md +57 -0
- package/ai/skills/stacks-marketing-events/references/webinar-funnel.md +88 -0
- package/ai/skills/stacks-marketing-free-tools/LICENSE +21 -0
- package/ai/skills/stacks-marketing-free-tools/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-free-tools/PLAYBOOK.md +186 -0
- package/ai/skills/stacks-marketing-free-tools/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-free-tools/evals/evals.json +103 -0
- package/ai/skills/stacks-marketing-free-tools/references/tool-benchmarks.md +35 -0
- package/ai/skills/stacks-marketing-free-tools/references/tool-types.md +217 -0
- package/ai/skills/stacks-marketing-ideas/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ideas/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ideas/PLAYBOOK.md +167 -0
- package/ai/skills/stacks-marketing-ideas/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ideas/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-ideas/references/guerrilla-marketing.md +56 -0
- package/ai/skills/stacks-marketing-ideas/references/ideas-by-category.md +366 -0
- package/ai/skills/stacks-marketing-image/LICENSE +21 -0
- package/ai/skills/stacks-marketing-image/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-image/PLAYBOOK.md +336 -0
- package/ai/skills/stacks-marketing-image/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-image/evals/evals.json +89 -0
- package/ai/skills/stacks-marketing-image/references/ai-image-prompting.md +229 -0
- package/ai/skills/stacks-marketing-influencer-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-influencer-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-influencer-marketing/PLAYBOOK.md +198 -0
- package/ai/skills/stacks-marketing-influencer-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-influencer-marketing/evals/evals.json +89 -0
- package/ai/skills/stacks-marketing-influencer-marketing/references/ugc-creator-program.md +91 -0
- package/ai/skills/stacks-marketing-launch/LICENSE +21 -0
- package/ai/skills/stacks-marketing-launch/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-launch/PLAYBOOK.md +381 -0
- package/ai/skills/stacks-marketing-launch/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-launch/evals/evals.json +135 -0
- package/ai/skills/stacks-marketing-launch/references/shipped-changes.md +84 -0
- package/ai/skills/stacks-marketing-launch/references/site-launch-qa.md +57 -0
- package/ai/skills/stacks-marketing-lead-magnets/LICENSE +21 -0
- package/ai/skills/stacks-marketing-lead-magnets/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-lead-magnets/PLAYBOOK.md +308 -0
- package/ai/skills/stacks-marketing-lead-magnets/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-lead-magnets/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/benchmarks.md +129 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-corpus-design.md +89 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-release.md +71 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill.md +109 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/format-guide.md +196 -0
- package/ai/skills/stacks-marketing-loops/LICENSE +21 -0
- package/ai/skills/stacks-marketing-loops/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-loops/PLAYBOOK.md +111 -0
- package/ai/skills/stacks-marketing-loops/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-loops/evals/evals.json +133 -0
- package/ai/skills/stacks-marketing-loops/references/loop-catalog.md +796 -0
- package/ai/skills/stacks-marketing-loops/references/loop-guardrails.md +73 -0
- package/ai/skills/stacks-marketing-loops/references/loop-orchestration.md +71 -0
- package/ai/skills/stacks-marketing-loops/references/loop-state.md +67 -0
- package/ai/skills/stacks-marketing-loops/references/loop-template.md +79 -0
- package/ai/skills/stacks-marketing-loops/references/outbound-operator.md +86 -0
- package/ai/skills/stacks-marketing-loops/references/seo-operator.md +110 -0
- package/ai/skills/stacks-marketing-offers/LICENSE +21 -0
- package/ai/skills/stacks-marketing-offers/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-offers/PLAYBOOK.md +151 -0
- package/ai/skills/stacks-marketing-offers/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-offers/evals/evals.json +21 -0
- package/ai/skills/stacks-marketing-offers/references/bonus-stacking.md +150 -0
- package/ai/skills/stacks-marketing-offers/references/examples.md +215 -0
- package/ai/skills/stacks-marketing-offers/references/guarantee-design.md +172 -0
- package/ai/skills/stacks-marketing-offers/references/offer-anatomy.md +203 -0
- package/ai/skills/stacks-marketing-offers/references/offer-formats.md +240 -0
- package/ai/skills/stacks-marketing-offers/references/saas-offers.md +116 -0
- package/ai/skills/stacks-marketing-offers/references/scarcity-urgency.md +175 -0
- package/ai/skills/stacks-marketing-offers/references/value-equation.md +134 -0
- package/ai/skills/stacks-marketing-onboarding/LICENSE +21 -0
- package/ai/skills/stacks-marketing-onboarding/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-onboarding/PLAYBOOK.md +257 -0
- package/ai/skills/stacks-marketing-onboarding/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-onboarding/evals/evals.json +108 -0
- package/ai/skills/stacks-marketing-onboarding/references/activation-models.md +57 -0
- package/ai/skills/stacks-marketing-onboarding/references/experiments.md +258 -0
- package/ai/skills/stacks-marketing-onboarding/references/minimum-path-to-value.md +49 -0
- package/ai/skills/stacks-marketing-paywalls/LICENSE +21 -0
- package/ai/skills/stacks-marketing-paywalls/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-paywalls/PLAYBOOK.md +223 -0
- package/ai/skills/stacks-marketing-paywalls/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-paywalls/evals/evals.json +93 -0
- package/ai/skills/stacks-marketing-paywalls/references/experiments.md +164 -0
- package/ai/skills/stacks-marketing-plan/LICENSE +21 -0
- package/ai/skills/stacks-marketing-plan/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-plan/PLAYBOOK.md +300 -0
- package/ai/skills/stacks-marketing-plan/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-plan/evals/evals.json +140 -0
- package/ai/skills/stacks-marketing-plan/references/aarrr-framework.md +180 -0
- package/ai/skills/stacks-marketing-plan/references/budget-planning.md +177 -0
- package/ai/skills/stacks-marketing-plan/references/client-types.md +373 -0
- package/ai/skills/stacks-marketing-plan/references/current-state-rubric.md +255 -0
- package/ai/skills/stacks-marketing-plan/references/example-quietude.md +972 -0
- package/ai/skills/stacks-marketing-plan/references/funding-stage-unlocks.md +230 -0
- package/ai/skills/stacks-marketing-plan/references/growth-patterns.md +190 -0
- package/ai/skills/stacks-marketing-plan/references/idea-cross-reference.md +265 -0
- package/ai/skills/stacks-marketing-plan/references/market-sizing.md +166 -0
- package/ai/skills/stacks-marketing-plan/references/measurement-framework.md +213 -0
- package/ai/skills/stacks-marketing-plan/references/methodology.md +365 -0
- package/ai/skills/stacks-marketing-plan/references/ops-stack-mapping.md +197 -0
- package/ai/skills/stacks-marketing-plan/references/plan-template.md +494 -0
- package/ai/skills/stacks-marketing-plan/references/team-and-agency-model.md +278 -0
- package/ai/skills/stacks-marketing-popups/LICENSE +21 -0
- package/ai/skills/stacks-marketing-popups/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-popups/PLAYBOOK.md +450 -0
- package/ai/skills/stacks-marketing-popups/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-popups/evals/evals.json +94 -0
- package/ai/skills/stacks-marketing-pricing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-pricing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-pricing/PLAYBOOK.md +291 -0
- package/ai/skills/stacks-marketing-pricing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-pricing/evals/evals.json +131 -0
- package/ai/skills/stacks-marketing-pricing/references/pricing-models.md +66 -0
- package/ai/skills/stacks-marketing-pricing/references/pricing-page-teardown.md +87 -0
- package/ai/skills/stacks-marketing-pricing/references/research-methods.md +156 -0
- package/ai/skills/stacks-marketing-pricing/references/tier-structure.md +232 -0
- package/ai/skills/stacks-marketing-product-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-product-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-product-marketing/PLAYBOOK.md +255 -0
- package/ai/skills/stacks-marketing-product-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-product-marketing/evals/evals.json +98 -0
- package/ai/skills/stacks-marketing-programmatic-seo/LICENSE +21 -0
- package/ai/skills/stacks-marketing-programmatic-seo/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-programmatic-seo/PLAYBOOK.md +238 -0
- package/ai/skills/stacks-marketing-programmatic-seo/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-programmatic-seo/evals/evals.json +107 -0
- package/ai/skills/stacks-marketing-programmatic-seo/references/implementation-platforms.md +41 -0
- package/ai/skills/stacks-marketing-programmatic-seo/references/playbooks.md +308 -0
- package/ai/skills/stacks-marketing-prospecting/LICENSE +21 -0
- package/ai/skills/stacks-marketing-prospecting/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-prospecting/PLAYBOOK.md +273 -0
- package/ai/skills/stacks-marketing-prospecting/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-prospecting/evals/evals.json +163 -0
- package/ai/skills/stacks-marketing-prospecting/references/account-research.md +59 -0
- package/ai/skills/stacks-marketing-prospecting/references/b2b-prospecting.md +106 -0
- package/ai/skills/stacks-marketing-prospecting/references/compliance.md +161 -0
- package/ai/skills/stacks-marketing-prospecting/references/data-sources.md +300 -0
- package/ai/skills/stacks-marketing-prospecting/references/demand-signals.md +131 -0
- package/ai/skills/stacks-marketing-prospecting/references/enrichment-playbook.md +61 -0
- package/ai/skills/stacks-marketing-prospecting/references/local-prospecting.md +165 -0
- package/ai/skills/stacks-marketing-prospecting/references/saas-prospecting.md +123 -0
- package/ai/skills/stacks-marketing-prospecting/references/signal-plays.md +99 -0
- package/ai/skills/stacks-marketing-prospecting/references/sourcing-and-enrichment.md +89 -0
- package/ai/skills/stacks-marketing-psychology/LICENSE +21 -0
- package/ai/skills/stacks-marketing-psychology/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-psychology/PLAYBOOK.md +451 -0
- package/ai/skills/stacks-marketing-psychology/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-psychology/evals/evals.json +88 -0
- package/ai/skills/stacks-marketing-public-relations/LICENSE +21 -0
- package/ai/skills/stacks-marketing-public-relations/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-public-relations/PLAYBOOK.md +150 -0
- package/ai/skills/stacks-marketing-public-relations/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-public-relations/evals/evals.json +36 -0
- package/ai/skills/stacks-marketing-public-relations/references/crisis-communications.md +113 -0
- package/ai/skills/stacks-marketing-public-relations/references/journalist-pitching.md +368 -0
- package/ai/skills/stacks-marketing-public-relations/references/media-outlets.md +207 -0
- package/ai/skills/stacks-marketing-public-relations/references/newsjacking.md +220 -0
- package/ai/skills/stacks-marketing-public-relations/references/podcast-guest-prep.md +60 -0
- package/ai/skills/stacks-marketing-public-relations/references/press-platforms.md +188 -0
- package/ai/skills/stacks-marketing-public-relations/references/statement-templates.md +145 -0
- package/ai/skills/stacks-marketing-public-relations/references/story-angles.md +87 -0
- package/ai/skills/stacks-marketing-referrals/LICENSE +21 -0
- package/ai/skills/stacks-marketing-referrals/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-referrals/PLAYBOOK.md +279 -0
- package/ai/skills/stacks-marketing-referrals/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-referrals/evals/evals.json +202 -0
- package/ai/skills/stacks-marketing-referrals/references/affiliate-operations.md +64 -0
- package/ai/skills/stacks-marketing-referrals/references/affiliate-programs.md +167 -0
- package/ai/skills/stacks-marketing-referrals/references/program-examples.md +151 -0
- package/ai/skills/stacks-marketing-referrals/references/review-platform-rules.md +36 -0
- package/ai/skills/stacks-marketing-referrals/references/review-program-operations.md +62 -0
- package/ai/skills/stacks-marketing-referrals/references/review-programs.md +96 -0
- package/ai/skills/stacks-marketing-referrals/references/viral-mechanisms.md +102 -0
- package/ai/skills/stacks-marketing-revops/LICENSE +21 -0
- package/ai/skills/stacks-marketing-revops/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-revops/PLAYBOOK.md +345 -0
- package/ai/skills/stacks-marketing-revops/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-revops/evals/evals.json +104 -0
- package/ai/skills/stacks-marketing-revops/references/automation-playbooks.md +290 -0
- package/ai/skills/stacks-marketing-revops/references/inbound-routing.md +43 -0
- package/ai/skills/stacks-marketing-revops/references/lifecycle-definitions.md +309 -0
- package/ai/skills/stacks-marketing-revops/references/routing-rules.md +203 -0
- package/ai/skills/stacks-marketing-revops/references/scoring-models.md +247 -0
- package/ai/skills/stacks-marketing-sales-enablement/LICENSE +21 -0
- package/ai/skills/stacks-marketing-sales-enablement/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-sales-enablement/PLAYBOOK.md +423 -0
- package/ai/skills/stacks-marketing-sales-enablement/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-sales-enablement/evals/evals.json +153 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/cold-call-scripts.md +68 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/deck-frameworks.md +263 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/demo-scripts.md +355 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/objection-library.md +270 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/one-pager-templates.md +208 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/win-loss-analysis.md +72 -0
- package/ai/skills/stacks-marketing-schema/LICENSE +21 -0
- package/ai/skills/stacks-marketing-schema/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-schema/PLAYBOOK.md +187 -0
- package/ai/skills/stacks-marketing-schema/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-schema/evals/evals.json +127 -0
- package/ai/skills/stacks-marketing-schema/references/schema-examples.md +392 -0
- package/ai/skills/stacks-marketing-seo-audit/LICENSE +21 -0
- package/ai/skills/stacks-marketing-seo-audit/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-seo-audit/PLAYBOOK.md +492 -0
- package/ai/skills/stacks-marketing-seo-audit/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-seo-audit/evals/evals.json +204 -0
- package/ai/skills/stacks-marketing-seo-audit/references/ai-writing-detection.md +200 -0
- package/ai/skills/stacks-marketing-seo-audit/references/international-seo.md +228 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo-pages-and-measurement.md +39 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo-profile-and-citations.md +41 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo.md +86 -0
- package/ai/skills/stacks-marketing-seo-audit/references/rankings-push.md +62 -0
- package/ai/skills/stacks-marketing-seo-audit/references/title-tags.md +89 -0
- package/ai/skills/stacks-marketing-signup/LICENSE +21 -0
- package/ai/skills/stacks-marketing-signup/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-signup/PLAYBOOK.md +359 -0
- package/ai/skills/stacks-marketing-signup/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-signup/evals/evals.json +88 -0
- package/ai/skills/stacks-marketing-site-architecture/LICENSE +21 -0
- package/ai/skills/stacks-marketing-site-architecture/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-site-architecture/PLAYBOOK.md +355 -0
- package/ai/skills/stacks-marketing-site-architecture/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-site-architecture/evals/evals.json +113 -0
- package/ai/skills/stacks-marketing-site-architecture/references/mermaid-templates.md +216 -0
- package/ai/skills/stacks-marketing-site-architecture/references/navigation-patterns.md +305 -0
- package/ai/skills/stacks-marketing-site-architecture/references/platforms-and-migration.md +86 -0
- package/ai/skills/stacks-marketing-site-architecture/references/site-type-templates.md +293 -0
- package/ai/skills/stacks-marketing-sms/LICENSE +21 -0
- package/ai/skills/stacks-marketing-sms/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-sms/PLAYBOOK.md +348 -0
- package/ai/skills/stacks-marketing-sms/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-sms/evals/evals.json +118 -0
- package/ai/skills/stacks-marketing-sms/references/compliance.md +202 -0
- package/ai/skills/stacks-marketing-sms/references/platforms.md +318 -0
- package/ai/skills/stacks-marketing-sms/references/sequence-templates.md +282 -0
- package/ai/skills/stacks-marketing-sms/references/whatsapp.md +260 -0
- package/ai/skills/stacks-marketing-social/LICENSE +21 -0
- package/ai/skills/stacks-marketing-social/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-social/PLAYBOOK.md +452 -0
- package/ai/skills/stacks-marketing-social/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-social/evals/evals.json +150 -0
- package/ai/skills/stacks-marketing-social/references/carousel-frameworks.md +141 -0
- package/ai/skills/stacks-marketing-social/references/listening-sources-template.md +123 -0
- package/ai/skills/stacks-marketing-social/references/listening.md +288 -0
- package/ai/skills/stacks-marketing-social/references/platform-limits.md +110 -0
- package/ai/skills/stacks-marketing-social/references/platforms.md +176 -0
- package/ai/skills/stacks-marketing-social/references/post-templates.md +179 -0
- package/ai/skills/stacks-marketing-social/references/reverse-engineering.md +195 -0
- package/ai/skills/stacks-marketing-social/references/short-form-video.md +237 -0
- package/ai/skills/stacks-marketing-social/references/x-algorithm.md +69 -0
- package/ai/skills/stacks-marketing-video/LICENSE +21 -0
- package/ai/skills/stacks-marketing-video/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-video/PLAYBOOK.md +330 -0
- package/ai/skills/stacks-marketing-video/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-video/evals/evals.json +118 -0
- package/ai/skills/stacks-marketing-video/references/ai-video-prompting.md +175 -0
- package/ai/skills/stacks-marketing-video/references/edit-anatomy.md +86 -0
- package/ai/skills/stacks-marketing-video/references/product-demo-recording.md +176 -0
- package/ai/skills/stacks-middleware/SKILL.md +37 -21
- package/ai/skills/stacks-migrations/SKILL.md +29 -5
- package/ai/skills/stacks-mobile/SKILL.md +25 -4
- package/ai/skills/stacks-models/SKILL.md +35 -15
- package/ai/skills/stacks-models/references/model-capabilities.md +104 -0
- package/ai/skills/stacks-native/CAPABILITIES.md +536 -0
- package/ai/skills/stacks-native/CATALOG.md +930 -0
- package/ai/skills/stacks-native/RECIPES.md +108 -0
- package/ai/skills/stacks-native/SKILL.md +79 -0
- package/ai/skills/stacks-newsletter/SKILL.md +39 -0
- package/ai/skills/stacks-notifications/SKILL.md +118 -203
- package/ai/skills/stacks-objects/SKILL.md +18 -4
- package/ai/skills/stacks-orm/SKILL.md +112 -328
- package/ai/skills/stacks-pagination/SKILL.md +40 -0
- package/ai/skills/stacks-path/SKILL.md +38 -18
- package/ai/skills/stacks-payments/SKILL.md +9 -1
- package/ai/skills/stacks-pr/CREDITS.md +3 -0
- package/ai/skills/stacks-pr/LICENSE +21 -0
- package/ai/skills/stacks-pr/NOTICE.md +10 -0
- package/ai/skills/stacks-pr/PLAYBOOK.md +127 -0
- package/ai/skills/stacks-pr/SKILL.md +23 -0
- package/ai/skills/stacks-prototype/LICENSE +21 -0
- package/ai/skills/stacks-prototype/NOTICE.md +10 -0
- package/ai/skills/stacks-prototype/SKILL.md +6 -0
- package/ai/skills/stacks-push/SKILL.md +20 -0
- package/ai/skills/stacks-query-builder/SKILL.md +21 -5
- package/ai/skills/stacks-queue/DURABLE-WORKFLOWS.md +121 -0
- package/ai/skills/stacks-queue/SKILL.md +37 -6
- package/ai/skills/stacks-realtime/SKILL.md +29 -140
- package/ai/skills/stacks-redesign/SKILL.md +1 -1
- package/ai/skills/stacks-registry/SKILL.md +20 -48
- package/ai/skills/stacks-repl/SKILL.md +31 -7
- package/ai/skills/stacks-research/LICENSE +21 -0
- package/ai/skills/stacks-research/NOTICE.md +10 -0
- package/ai/skills/stacks-research/PLAYBOOK.md +10 -0
- package/ai/skills/stacks-research/SKILL.md +23 -0
- package/ai/skills/stacks-retro/LICENSE +21 -0
- package/ai/skills/stacks-retro/NOTICE.md +10 -0
- package/ai/skills/stacks-retro/SKILL.md +10 -0
- package/ai/skills/stacks-review/LICENSE +21 -0
- package/ai/skills/stacks-review/NOTICE.md +10 -0
- package/ai/skills/stacks-review/SKILL.md +15 -0
- package/ai/skills/stacks-router/SKILL.md +33 -2
- package/ai/skills/stacks-routes/SKILL.md +25 -2
- package/ai/skills/stacks-scaffold-exercises/LICENSE +21 -0
- package/ai/skills/stacks-scaffold-exercises/NOTICE.md +10 -0
- package/ai/skills/stacks-scaffold-exercises/PLAYBOOK.md +106 -0
- package/ai/skills/stacks-scaffold-exercises/SKILL.md +23 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +27 -11
- package/ai/skills/stacks-scheduler/SKILL.md +52 -25
- package/ai/skills/stacks-search-engine/SKILL.md +28 -7
- package/ai/skills/stacks-security/SKILL.md +22 -6
- package/ai/skills/stacks-server/SKILL.md +47 -85
- package/ai/skills/stacks-setup-deep-modules/LICENSE +21 -0
- package/ai/skills/stacks-setup-deep-modules/NOTICE.md +10 -0
- package/ai/skills/stacks-setup-deep-modules/SKILL.md +55 -0
- package/ai/skills/stacks-setup-engineering/LICENSE +21 -0
- package/ai/skills/stacks-setup-engineering/NOTICE.md +10 -0
- package/ai/skills/stacks-setup-engineering/PLAYBOOK.md +115 -0
- package/ai/skills/stacks-setup-engineering/SKILL.md +24 -0
- package/ai/skills/stacks-setup-engineering/domain.md +51 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-github.md +46 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-gitlab.md +46 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-local.md +30 -0
- package/ai/skills/stacks-setup-engineering/triage-labels.md +15 -0
- package/ai/skills/stacks-sites/SKILL.md +44 -0
- package/ai/skills/stacks-skills/SKILL.md +33 -0
- package/ai/skills/stacks-slug/SKILL.md +15 -12
- package/ai/skills/stacks-sms/SKILL.md +33 -6
- package/ai/skills/stacks-socials/SKILL.md +81 -294
- package/ai/skills/stacks-storage/SKILL.md +34 -15
- package/ai/skills/stacks-storage/UPLOADS-AND-DISKS.md +133 -0
- package/ai/skills/stacks-strings/SKILL.md +41 -35
- package/ai/skills/stacks-stx/SKILL.md +63 -58
- package/ai/skills/stacks-tdd/LICENSE +21 -0
- package/ai/skills/stacks-tdd/NOTICE.md +10 -0
- package/ai/skills/stacks-tdd/SKILL.md +10 -0
- package/ai/skills/stacks-tdd/mocking.md +59 -0
- package/ai/skills/stacks-tdd/tests.md +77 -0
- package/ai/skills/stacks-teach/GLOSSARY-FORMAT.md +35 -0
- package/ai/skills/stacks-teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/ai/skills/stacks-teach/LICENSE +21 -0
- package/ai/skills/stacks-teach/MISSION-FORMAT.md +31 -0
- package/ai/skills/stacks-teach/NOTICE.md +10 -0
- package/ai/skills/stacks-teach/PLAYBOOK.md +136 -0
- package/ai/skills/stacks-teach/RESOURCES-FORMAT.md +32 -0
- package/ai/skills/stacks-teach/SKILL.md +24 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +2 -2
- package/ai/skills/stacks-technical-diagrams/bin/diagrams +1 -1
- package/ai/skills/stacks-technical-diagrams/renderers/shared/bun-runtime.mjs +1 -1
- package/ai/skills/stacks-test-fixtures/LICENSE +21 -0
- package/ai/skills/stacks-test-fixtures/NOTICE.md +10 -0
- package/ai/skills/stacks-test-fixtures/SKILL.md +38 -0
- package/ai/skills/stacks-testing/SKILL.md +77 -4
- package/ai/skills/stacks-to-questionnaire/LICENSE +21 -0
- package/ai/skills/stacks-to-questionnaire/NOTICE.md +10 -0
- package/ai/skills/stacks-to-questionnaire/PLAYBOOK.md +51 -0
- package/ai/skills/stacks-to-questionnaire/SKILL.md +24 -0
- package/ai/skills/stacks-to-spec/LICENSE +21 -0
- package/ai/skills/stacks-to-spec/NOTICE.md +10 -0
- package/ai/skills/stacks-to-spec/PLAYBOOK.md +72 -0
- package/ai/skills/stacks-to-spec/SKILL.md +24 -0
- package/ai/skills/stacks-to-tickets/LICENSE +21 -0
- package/ai/skills/stacks-to-tickets/NOTICE.md +10 -0
- package/ai/skills/stacks-to-tickets/PLAYBOOK.md +102 -0
- package/ai/skills/stacks-to-tickets/SKILL.md +24 -0
- package/ai/skills/stacks-triage/AGENT-BRIEF.md +207 -0
- package/ai/skills/stacks-triage/LICENSE +21 -0
- package/ai/skills/stacks-triage/NOTICE.md +10 -0
- package/ai/skills/stacks-triage/OUT-OF-SCOPE.md +105 -0
- package/ai/skills/stacks-triage/PLAYBOOK.md +109 -0
- package/ai/skills/stacks-triage/SKILL.md +24 -0
- package/ai/skills/stacks-tunnel/SKILL.md +29 -19
- package/ai/skills/stacks-types/SKILL.md +77 -168
- package/ai/skills/stacks-ui/SKILL.md +66 -228
- package/ai/skills/stacks-unslop/NOTICE.md +25 -0
- package/ai/skills/stacks-unslop/SKILL.md +95 -0
- package/ai/skills/stacks-unslop/references/core-contract.md +88 -0
- package/ai/skills/stacks-unslop/references/patterns.md +110 -0
- package/ai/skills/stacks-unslop/references/presets.md +37 -0
- package/ai/skills/stacks-unslop/references/voice.md +95 -0
- package/ai/skills/stacks-utils/SKILL.md +45 -25
- package/ai/skills/stacks-validation/SKILL.md +67 -4
- package/ai/skills/stacks-video/SKILL.md +33 -0
- package/ai/skills/stacks-wait-what/LICENSE +21 -0
- package/ai/skills/stacks-wait-what/NOTICE.md +10 -0
- package/ai/skills/stacks-wait-what/PLAYBOOK.md +4 -0
- package/ai/skills/stacks-wait-what/SKILL.md +24 -0
- package/ai/skills/stacks-wayfinder/LICENSE +21 -0
- package/ai/skills/stacks-wayfinder/NOTICE.md +10 -0
- package/ai/skills/stacks-wayfinder/PLAYBOOK.md +125 -0
- package/ai/skills/stacks-wayfinder/SKILL.md +24 -0
- package/ai/skills/stacks-whois/SKILL.md +13 -3
- package/ai/skills/stacks-wizard/LICENSE +21 -0
- package/ai/skills/stacks-wizard/NOTICE.md +10 -0
- package/ai/skills/stacks-wizard/SKILL.md +8 -0
- package/ai/skills/stacks-wizard/scripts/template.sh +42 -26
- package/ai/skills/stacks-writing-beats/LICENSE +21 -0
- package/ai/skills/stacks-writing-beats/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-beats/PLAYBOOK.md +64 -0
- package/ai/skills/stacks-writing-beats/SKILL.md +28 -0
- package/ai/skills/stacks-writing-for-agents/LICENSE +21 -0
- package/ai/skills/stacks-writing-for-agents/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-for-agents/SKILL.md +7 -1
- package/ai/skills/stacks-writing-fragments/LICENSE +21 -0
- package/ai/skills/stacks-writing-fragments/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-fragments/PLAYBOOK.md +76 -0
- package/ai/skills/stacks-writing-fragments/SKILL.md +28 -0
- package/ai/skills/stacks-writing-shape/LICENSE +21 -0
- package/ai/skills/stacks-writing-shape/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-shape/PLAYBOOK.md +76 -0
- package/ai/skills/stacks-writing-shape/SKILL.md +28 -0
- package/ide/vscode/package.json +1 -1
- package/package.json +2 -2
- /package/ai/skills/stacks-technical-diagrams/{bunfig.toml → runtime.toml} +0 -0
|
@@ -8,283 +8,102 @@ allowed-tools: Read Edit Write Bash Grep Glob
|
|
|
8
8
|
|
|
9
9
|
# Stacks Events
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Use the native event bus for process-local application and model events. Use
|
|
12
|
+
`stacks-realtime` for network broadcasting and `stacks-queue` for durable work.
|
|
12
13
|
|
|
13
|
-
##
|
|
14
|
-
- Core package: `storage/framework/core/events/src/index.ts` (single file -- entire implementation)
|
|
15
|
-
- Application events: `app/Events.ts`
|
|
16
|
-
- Listener setup: `app/Listener.ts`
|
|
17
|
-
- Listeners: `app/Listeners/`
|
|
18
|
-
- Event types: `storage/framework/types/events.ts`
|
|
14
|
+
## Dispatch and completion
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
`@stacksjs/events` exports `dispatch`, `dispatchAsync`,
|
|
17
|
+
`dispatchAndCollect`, `listen`, `once`, `off` and `emitter`.
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
- `dispatch(name, payload)` invokes handlers immediately and returns void.
|
|
20
|
+
Async handlers continue without blocking the caller; errors are logged.
|
|
21
|
+
- `await dispatchAsync(name, payload)` awaits matching handlers in sequence.
|
|
22
|
+
Rejections are logged and appear as undefined results, so this does not prove
|
|
23
|
+
that every handler succeeded.
|
|
24
|
+
- `await dispatchAndCollect(name, payload)` returns a result for each handler:
|
|
25
|
+
`{ ok: true, value }` or `{ ok: false, error }`. Inspect failures when
|
|
26
|
+
downstream work determines the response.
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
```
|
|
28
|
+
Payloadless events are supported by the emitter. Exact handlers receive the
|
|
29
|
+
payload; wildcard and glob handlers receive `(eventName, payload)`.
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
`emitter.on(name, handler, { priority })` sorts higher priorities first
|
|
32
|
+
within each handler bucket. Equal priority preserves registration order.
|
|
33
|
+
Exact handlers run before glob buckets, then `*` handlers. Snapshotting keeps
|
|
34
|
+
subscription changes during a dispatch from corrupting iteration.
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
on(type: '*', handler: WildcardHandler<Events>): void
|
|
36
|
+
## Typed application events
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
`StacksEvents` combines built-in auth events and the augmentable
|
|
39
|
+
`AppEvents` interface. Declare an application event before dispatching it:
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### How emit() Works
|
|
44
|
-
1. Gets handlers array from `all.get(type)` -- calls each with `handler(event)`
|
|
45
|
-
2. Gets wildcard handlers from `all.get('*')` -- calls each with `handler(type, event)`
|
|
46
|
-
3. Handlers are called via `.slice()` copy to avoid mutation during iteration
|
|
47
|
-
4. Each handler is wrapped in try-catch with `console.error` logging
|
|
48
|
-
5. Error in one handler does NOT prevent other handlers from executing
|
|
49
|
-
6. Both type-matched AND wildcard handlers run (wildcards run second)
|
|
50
|
-
7. If `event` is `undefined`, handlers are NOT called
|
|
51
|
-
|
|
52
|
-
### on() / off() Behavior
|
|
53
|
-
- `on(type, handler)`: pushes to handlers array (creates array if first handler)
|
|
54
|
-
- `off(type, handler)`: splices handler from array by index
|
|
55
|
-
- `off(type)` (no handler): replaces handlers array with empty `[]`
|
|
56
|
-
- Handler maps use `Map<string, Array<Handler>>` internally
|
|
57
|
-
|
|
58
|
-
## Stacks Event System Exports
|
|
59
|
-
|
|
60
|
-
The package creates a single `mitt<StacksEvents>()` instance and exports multiple aliases:
|
|
61
|
-
|
|
62
|
-
```typescript
|
|
63
|
-
import { dispatch, listen, off, emitter, events, useEvent, useListen, useEvents, all } from '@stacksjs/events'
|
|
64
|
-
|
|
65
|
-
// Dispatch an event
|
|
66
|
-
dispatch('user:registered', { id: 1, email: 'user@example.com' })
|
|
67
|
-
|
|
68
|
-
// Listen for an event
|
|
69
|
-
listen('user:registered', (data) => {
|
|
70
|
-
console.log('New user:', data.email)
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
// Wildcard listener (catches ALL events)
|
|
74
|
-
listen('*', (type, data) => {
|
|
75
|
-
console.log(`Event ${type}:`, data)
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
// Remove a specific listener
|
|
79
|
-
off('user:registered', handler)
|
|
80
|
-
|
|
81
|
-
// Direct emitter access
|
|
82
|
-
emitter.on('event', handler)
|
|
83
|
-
emitter.off('event', handler)
|
|
84
|
-
emitter.emit('event', data)
|
|
85
|
-
emitter.all // Map of all handlers
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Export Aliases
|
|
89
|
-
| Export | Maps To |
|
|
90
|
-
|--------|---------|
|
|
91
|
-
| `dispatch` | `emitter.emit` |
|
|
92
|
-
| `useEvent` | `emitter.emit` (alias for `dispatch`) |
|
|
93
|
-
| `listen` | `emitter.on` |
|
|
94
|
-
| `useListen` | `emitter.on` (alias for `listen`) |
|
|
95
|
-
| `off` | `emitter.off` |
|
|
96
|
-
| `emitter` | the mitt instance |
|
|
97
|
-
| `events` | the mitt instance (alias for `emitter`) |
|
|
98
|
-
| `useEvents` | the mitt instance (alias for `emitter`) |
|
|
99
|
-
| `all` | `emitter.all` (the handler Map) |
|
|
100
|
-
| `mitt` | the factory function itself |
|
|
101
|
-
|
|
102
|
-
### Type Aliases
|
|
103
|
-
```typescript
|
|
104
|
-
type Dispatch = <Key extends keyof StacksEvents>(type: Key, event: StacksEvents[Key]) => void
|
|
105
|
-
type Listen = <Key extends keyof StacksEvents>(type: Key, handler: Handler<StacksEvents[Key]>) => void
|
|
106
|
-
type Off = <Key extends keyof StacksEvents>(type: Key, handler?: Handler<StacksEvents[Key]>) => void
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Built-in Event Types (StacksEvents)
|
|
41
|
+
~~~ts
|
|
42
|
+
import { dispatch, listen } from '@stacksjs/events'
|
|
110
43
|
|
|
111
|
-
```typescript
|
|
112
|
-
// @stacksjs/events
|
|
113
|
-
interface AuthEvents {
|
|
114
|
-
'user:registered': UserRegisteredEvent
|
|
115
|
-
'user:logged-in': UserLoggedInEvent
|
|
116
|
-
'user:logged-out': UserLoggedOutEvent
|
|
117
|
-
'user:password-reset': UserPasswordEvent
|
|
118
|
-
'user:password-changed': UserPasswordEvent
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Augmentation target - model events land here, and so do yours.
|
|
122
|
-
interface AppEvents {}
|
|
123
|
-
|
|
124
|
-
type StacksEvents = AppEvents & AuthEvents
|
|
125
|
-
type EventName = keyof StacksEvents & string
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
There is **no** trailing index signature, deliberately: an arbitrary event name is
|
|
129
|
-
what made `dispatch('user:creatd', …)` compile and reach nobody. Declare an
|
|
130
|
-
application's own events on `AppEvents` and the typo becomes a compile error.
|
|
131
|
-
|
|
132
|
-
```typescript
|
|
133
44
|
declare module '@stacksjs/events' {
|
|
134
45
|
interface AppEvents {
|
|
135
46
|
'invoice:settled': { id: number, total: number }
|
|
136
47
|
}
|
|
137
48
|
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## Model Events
|
|
141
|
-
|
|
142
|
-
Every model with the `observe: true` trait emits **eight** events:
|
|
143
|
-
|
|
144
|
-
| Event | When | Payload |
|
|
145
|
-
|---|---|---|
|
|
146
|
-
| `{model}:saving` | before any write | the model object |
|
|
147
|
-
| `{model}:creating` / `:updating` / `:deleting` | before that write | the model object |
|
|
148
|
-
| `{model}:created` / `:updated` / `:deleted` | after that write | the row |
|
|
149
|
-
| `{model}:saved` | after insert OR update | the row |
|
|
150
49
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
A **before** listener can cancel the write by returning `false`:
|
|
154
|
-
|
|
155
|
-
```ts
|
|
156
|
-
listen('user:deleting', (model) => {
|
|
157
|
-
if (model.attributes.email.endsWith('@example.com'))
|
|
158
|
-
return false // the delete does not happen
|
|
50
|
+
listen('invoice:settled', invoice => {
|
|
51
|
+
console.log(invoice.id, invoice.total)
|
|
159
52
|
})
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
model
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
a value must name a listener that is on disk (`ListenerName`, generated into
|
|
218
|
-
`storage/framework/types/actions.d.ts` from `app/Listeners/`, `app/Actions/` and
|
|
219
|
-
the framework defaults behind them). `satisfies Events` is equivalent and still
|
|
220
|
-
supported; `defineEvents` is preferred because it also keeps the literal types,
|
|
221
|
-
so `keyof typeof events` is the two names the file declares rather than `string`.
|
|
222
|
-
|
|
223
|
-
## Listener Resolution (app/Listener.ts)
|
|
224
|
-
|
|
225
|
-
`handleEvents()` delegates to `registerAppListeners()`, which registers both
|
|
226
|
-
conventions and is idempotent:
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
import { registerAppListeners } from '@stacksjs/events'
|
|
230
|
-
import { path as p } from '@stacksjs/path'
|
|
231
|
-
|
|
232
|
-
export async function handleEvents(): Promise<number> {
|
|
233
|
-
return registerAppListeners({ base: p.projectPath() })
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
Names in the map resolve against `app/Listeners/`, `app/Actions/`, then the same
|
|
238
|
-
two directories under the framework defaults - first match wins.
|
|
239
|
-
|
|
240
|
-
### Registration Flow
|
|
241
|
-
1. **The map**: `registerFromMap()` imports `app/Events.ts` and, for each name,
|
|
242
|
-
resolves a module with a `handle` method out of `app/Listeners/`,
|
|
243
|
-
`app/Actions/` or the framework defaults, then subscribes it to that event
|
|
244
|
-
directly. A name that resolves to nothing is warned about by name.
|
|
245
|
-
2. **The scan**: `discoverListeners()` walks `app/Listeners/` and registers any
|
|
246
|
-
default export shaped `{ listensTo, handle }`. `listensTo` may be an array.
|
|
247
|
-
3. **Dedup**: every `(event, module)` pair is claimed once per process, so a
|
|
248
|
-
listener that appears in both conventions - or a dev server that re-runs
|
|
249
|
-
boot - registers once rather than twice.
|
|
250
|
-
4. **Payload check**: if the resolved action declares `validations`, a dispatched
|
|
251
|
-
payload that does not match them is warned about. It is not thrown: the
|
|
252
|
-
dispatcher has already committed the thing the event announces.
|
|
253
|
-
|
|
254
|
-
### Where it is called from
|
|
255
|
-
- `injectGlobalAutoImports()` (`@stacksjs/server`), so every path that dispatches -
|
|
256
|
-
HTTP, `buddy seed`, a scheduled job, a console command - has listeners on the bus
|
|
257
|
-
- `handleEvents()` in `app/Listener.ts`, the app's own override hook
|
|
258
|
-
|
|
259
|
-
Both on the same boot in dev. The claim registry is what keeps that from being
|
|
260
|
-
two of every listener.
|
|
261
|
-
|
|
262
|
-
## Implementation Details
|
|
263
|
-
|
|
264
|
-
### Thread Safety
|
|
265
|
-
- handlers are stored in arrays -- `emit()` calls `.slice()` before iterating to safely handle additions/removals during iteration
|
|
266
|
-
|
|
267
|
-
### Synchronous vs Asynchronous
|
|
268
|
-
- **`emit` is synchronous**: it calls handlers directly and does not await them; an async handler's rejection is logged rather than lost
|
|
269
|
-
- **`emitAsync` / `dispatchAsync` awaits** every matching handler and resolves with their results
|
|
270
|
-
- **Registration is asynchronous**: resolving a listener name imports a module
|
|
271
|
-
|
|
272
|
-
### Memory
|
|
273
|
-
- The emitter is one per *process*, keyed on `Symbol.for('stacks.events.emitter')` rather than per copy of the package -- two installed copies would otherwise be two separate buses, and a dispatch into the wrong one looks exactly like a dispatch nobody listened for
|
|
274
|
-
- Resolved listener modules are held by the closures registered on the emitter, so adding an action requires a restart
|
|
275
|
-
|
|
276
|
-
## Gotchas
|
|
277
|
-
- Events are functional, not class-based -- no need to create event classes
|
|
278
|
-
- The emitter is a **singleton** -- shared across the entire application process
|
|
279
|
-
- Wildcard `'*'` listeners receive `(type, event)` -- regular handlers receive just `(event)`
|
|
280
|
-
- Listeners in `app/Events.ts` are **names** (strings), not file paths or handler functions -- resolved against `app/Listeners/`, `app/Actions/`, then the framework defaults
|
|
281
|
-
- The listener module must export a default with a `handle(event)` method
|
|
282
|
-
- Event dispatch is **synchronous** but listener resolution (dynamic import) happens once, at boot
|
|
283
|
-
- Model events only fire when the model has `observe: true` (or array) trait set
|
|
284
|
-
- The event system is ~200 bytes total -- it is intentionally minimal
|
|
285
|
-
- Listeners are resolved once at boot, so adding an action requires a server restart
|
|
286
|
-
- If `evt` is `undefined`, handlers are NOT called (`emit` checks `if (evt !== undefined)`)
|
|
287
|
-
- The `'*'` event type cannot be manually emitted -- it only receives forwarded events
|
|
288
|
-
- `off(type)` without a handler argument clears ALL handlers for that type (sets to empty array, not delete)
|
|
289
|
-
- `StacksEvents` has **no** index signature: an undeclared event name is a compile error, not a dispatch into the void. Declare your own on `AppEvents`
|
|
290
|
-
- Error logging in mitt uses `console.error` (not `@stacksjs/logging`) to avoid circular dependencies
|
|
53
|
+
dispatch('invoice:settled', { id: 1, total: 1200 })
|
|
54
|
+
~~~
|
|
55
|
+
|
|
56
|
+
Built-in auth names include `user:registered`, `user:logged-in`,
|
|
57
|
+
`user:logged-out`, `user:password-reset` and `user:password-changed`.
|
|
58
|
+
Read their payload types from `core/events/src/index.ts` rather than guessing.
|
|
59
|
+
|
|
60
|
+
## Application listeners
|
|
61
|
+
|
|
62
|
+
`app/Events.ts` default-exports `defineEvents({ event: [listenerName] })`.
|
|
63
|
+
Names resolve against application listeners, application actions, then framework
|
|
64
|
+
defaults. A standalone module in `app/Listeners/` may instead default-export
|
|
65
|
+
`defineListener({ listensTo, handle })`. Its handler is `(payload, eventName)`,
|
|
66
|
+
including for a glob subscription, because the discovery layer adapts the bus.
|
|
67
|
+
|
|
68
|
+
`registerAppListeners()` loads both conventions at boot and deduplicates each
|
|
69
|
+
event/module pair. `injectGlobalAutoImports()` calls it for HTTP, CLI, scheduler
|
|
70
|
+
and seeding entrypoints. `app/Listener.ts` may call the same registration hook.
|
|
71
|
+
Adding a listener requires a process restart. See `stacks-listeners` for files.
|
|
72
|
+
|
|
73
|
+
## Model lifecycle
|
|
74
|
+
|
|
75
|
+
`traits.observe` opts a model into lifecycle events. Before events are
|
|
76
|
+
`saving`, `creating`, `updating` and `deleting`; after events are
|
|
77
|
+
`created`, `updated`, `deleted` and `saved`. Names lowercase the model
|
|
78
|
+
name, for example `teammember:saved`.
|
|
79
|
+
|
|
80
|
+
Before handlers receive the model object, with its row under `.attributes`;
|
|
81
|
+
returning exactly false cancels the write. After handlers receive the row.
|
|
82
|
+
The ORM awaits the before-event result; that is separate from ordinary
|
|
83
|
+
fire-and-forget application dispatch. See `stacks-models` and `stacks-orm`
|
|
84
|
+
for which writes emit hooks, bulk operations and transaction boundaries.
|
|
85
|
+
Model event types derive from the models barrel in
|
|
86
|
+
`storage/framework/types/model-events.d.ts`.
|
|
87
|
+
|
|
88
|
+
## Isolation and cleanup
|
|
89
|
+
|
|
90
|
+
`createEmitter<EventMap>()` creates an isolated emitter; the compatibility
|
|
91
|
+
`mitt`/default export is its alias. The application singleton uses a global
|
|
92
|
+
symbol so duplicate installed copies share the same bus in one process.
|
|
93
|
+
It is not cross-process messaging.
|
|
94
|
+
|
|
95
|
+
`once` removes its listener after the first invocation. `off(name, handler)`
|
|
96
|
+
removes by identity; `off(name)` clears that bucket.
|
|
97
|
+
`emitter.removeAllListeners(name?)` removes a bucket or all listeners;
|
|
98
|
+
`listenerCount(name)` counts only the exact bucket, not matching patterns.
|
|
99
|
+
`scopedEvents(prefix)` and `scope(emitter, prefix)` provide prefixed names
|
|
100
|
+
without creating another bus. Read their prefix composition in the source
|
|
101
|
+
before combining them with an application's named events.
|
|
102
|
+
|
|
103
|
+
## Source and verification
|
|
104
|
+
|
|
105
|
+
- Public API and async behavior: `storage/framework/core/events/src/index.ts`.
|
|
106
|
+
- Discovery and typed listener adapters: `core/events/src/discover.ts`.
|
|
107
|
+
- Retained tests: `native-emitter.test.ts`, `priority-and-collect.test.ts`,
|
|
108
|
+
`scope.test.ts`, `register.test.ts`, `shared-emitter.test.ts` under
|
|
109
|
+
`storage/framework/core/events/tests/`.
|
|
@@ -119,13 +119,16 @@ faker.word.adjective() / .noun()
|
|
|
119
119
|
Model attributes declare a `factory` function receiving `faker`:
|
|
120
120
|
|
|
121
121
|
```typescript
|
|
122
|
-
{
|
|
122
|
+
import { schema } from '@stacksjs/validation'
|
|
123
|
+
|
|
124
|
+
// Attribute entries inside defineModel({ attributes: ... })
|
|
125
|
+
const attributes = {
|
|
123
126
|
name: {
|
|
124
|
-
|
|
127
|
+
validation: { rule: schema.string().min(3).max(255) },
|
|
125
128
|
factory: faker => faker.company.name(),
|
|
126
129
|
},
|
|
127
130
|
status: {
|
|
128
|
-
|
|
131
|
+
validation: { rule: schema.enum(['active', 'inactive']) },
|
|
129
132
|
factory: faker => faker.helpers.arrayElement(['active', 'inactive']),
|
|
130
133
|
},
|
|
131
134
|
}
|
|
@@ -133,14 +136,17 @@ Model attributes declare a `factory` function receiving `faker`:
|
|
|
133
136
|
|
|
134
137
|
### How Seeding Works
|
|
135
138
|
1. Model needs `traits: { useSeeder: { count: N } }`
|
|
136
|
-
2. `generateRecord()` calls `attr.factory(faker)` for each attribute
|
|
139
|
+
2. `generateRecord()` calls `attr.factory(faker, generated)` for each attribute;
|
|
140
|
+
generated contains earlier declared attributes before password hashing
|
|
137
141
|
3. Falls back to `attr.default` if factory fails
|
|
138
142
|
4. Converts camelCase → snake_case for DB columns
|
|
139
143
|
5. Auto-hashes password fields (bcrypt)
|
|
140
144
|
6. Inserts in batches of 100
|
|
141
|
-
7.
|
|
145
|
+
7. Model dependencies determine seeding order, so included parent models seed
|
|
146
|
+
before their dependents. Application Seeder classes additionally use static
|
|
147
|
+
order and tags; read `stacks-database` for that separate pass.
|
|
142
148
|
|
|
143
|
-
### Smart Default Inference (
|
|
149
|
+
### Smart Default Inference (when a factory throws and has no explicit default)
|
|
144
150
|
- `is*`, `has*`, `*able` → `false`
|
|
145
151
|
- `*count`, `*amount`, `*quantity` → `0`
|
|
146
152
|
- `*url`, `*link` → `'https://example.com'`
|
|
@@ -148,11 +154,20 @@ Model attributes declare a `factory` function receiving `faker`:
|
|
|
148
154
|
- `*name` → `faker.person.fullName()`
|
|
149
155
|
- Unknown → `null`
|
|
150
156
|
|
|
157
|
+
An attribute with neither factory nor default is skipped, not filled by this
|
|
158
|
+
inference. App models override framework models even when opting out of model
|
|
159
|
+
seeding. Auth/account models are protected from routine seeding; review the
|
|
160
|
+
actual protected-model and includeDefaults/fresh/allowProtected behavior before
|
|
161
|
+
choosing a destructive development reset. Seed records are fixture data, not
|
|
162
|
+
random values suitable for real credentials or financial claims.
|
|
163
|
+
|
|
151
164
|
## Gotchas
|
|
152
|
-
- **Not @faker-js/faker**
|
|
153
|
-
- **Custom modules override base**
|
|
154
|
-
- **Vehicle module is fully custom**
|
|
155
|
-
- **Factory receives
|
|
156
|
-
|
|
157
|
-
- **
|
|
158
|
-
|
|
165
|
+
- **Not @faker-js/faker** - wrapper around `ts-mocker`. Most APIs compatible but not all
|
|
166
|
+
- **Custom modules override base** - lorem, datatype, location, company, vehicle, helpers are custom
|
|
167
|
+
- **Vehicle module is fully custom** - hardcoded manufacturer/model lists, not from ts-mocker
|
|
168
|
+
- **Factory receives context** - `(faker, generated) => value` can use fields
|
|
169
|
+
declared earlier in the same model; do not depend on fields declared later.
|
|
170
|
+
- **Password detection is heuristic** - by password-like names, or a hidden
|
|
171
|
+
attribute whose name also includes pass; hidden alone does not hash a field.
|
|
172
|
+
- **Seeder batch size is 100** - records inserted in chunks
|
|
173
|
+
- **Model seeding order matters** - the dependency graph drives parent ordering.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-feature-flags
|
|
3
|
+
description: Use when implementing per-user or per-team feature rollouts, persisted flag values, percentage experiments, or weighted variants. Covers @stacksjs/feature-flags and config/feature-flags.ts.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Scoped feature flags
|
|
10
|
+
|
|
11
|
+
This package manages user-targeted runtime values. Framework bundle enablement
|
|
12
|
+
through the named `feature()` export from `@stacksjs/config` is a different
|
|
13
|
+
surface; read stacks-features.
|
|
14
|
+
|
|
15
|
+
## Define, scope, and evaluate
|
|
16
|
+
|
|
17
|
+
Import Feature or createFeatureFlags from @stacksjs/feature-flags. Definitions
|
|
18
|
+
can be fixed values or resolvers. Feature.for(scope) returns a scoped facade
|
|
19
|
+
with async value/values/all, active/inactive, activate/deactivate/forget and
|
|
20
|
+
when/unless. Await evaluations and writes; they are not synchronous booleans.
|
|
21
|
+
|
|
22
|
+
percentage(percent) and variants(weights) deterministically bucket a flag name
|
|
23
|
+
and scope key. Keep scope identities stable to preserve cohort assignment.
|
|
24
|
+
The manager supports explicit missing-flag behavior and evaluation listeners.
|
|
25
|
+
Changing a definition is not the same as forgetting already-persisted values.
|
|
26
|
+
|
|
27
|
+
## Drivers and boundaries
|
|
28
|
+
|
|
29
|
+
The global Feature facade resolves configured memory or database storage lazily.
|
|
30
|
+
Memory state is process-local. The SQL driver supports the dialects checked by
|
|
31
|
+
configuredDriver, and failures raise FeatureFlagStoreError rather than silently
|
|
32
|
+
switching a production experiment to memory. Inspect the actual config and
|
|
33
|
+
store schema before rollout. Persisted value types are validated by the package.
|
|
34
|
+
|
|
35
|
+
Do not send private cohort inputs to the browser or use a feature flag as the
|
|
36
|
+
only authorization check. Test stable scope keys, variant assignment, missing
|
|
37
|
+
definitions, persistence, concurrent evaluation and explicit value overrides.
|
|
38
|
+
|
|
39
|
+
Source: core/feature-flags/src/{index,manager,scope,strategies,schema,value}.ts
|
|
40
|
+
and drivers/. Retained evidence: manager, global, scope, strategies and both
|
|
41
|
+
driver test suites.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-features
|
|
3
|
+
description: Use when installing or disabling optional Stacks bundles, understanding model/migration/view gates, or choosing default route bundles. Covers @stacksjs/features and @stacksjs/config feature controls.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Optional framework bundles
|
|
10
|
+
|
|
11
|
+
The installable bundles are declared by FEATURE_NAMES in @stacksjs/features/names.
|
|
12
|
+
They include dashboard, commerce, cms, forms, marketing, monitoring, realtime
|
|
13
|
+
and queue. FEATURE_FILES and FEATURE_TABLES own scaffold and migration selection.
|
|
14
|
+
|
|
15
|
+
## Installation and gates
|
|
16
|
+
|
|
17
|
+
Use buddy <feature>:install or the corresponding uninstall command after
|
|
18
|
+
checking its current help. Installation publishes the feature's app scaffold;
|
|
19
|
+
config/<feature>.ts enabled controls the feature. There is no required central
|
|
20
|
+
config/features.ts manifest. Preserve application-owned overrides during changes.
|
|
21
|
+
|
|
22
|
+
feature(name), enableFeature, disableFeature, resetFeature and listFeatures from
|
|
23
|
+
@stacksjs/config read config and runtime overrides. With no config section,
|
|
24
|
+
only dashboard defaults on. A present config object without an enabled field
|
|
25
|
+
counts as enabled, and its optional env gate can restrict environments.
|
|
26
|
+
Runtime overrides are process-local, not a persisted rollout system.
|
|
27
|
+
|
|
28
|
+
Auth and email also have config gates but are not installable bundle names.
|
|
29
|
+
Auth model loading does not by itself mount every default auth endpoint.
|
|
30
|
+
STACKS_DEFAULT_ROUTES explicitly selects route bundles; an explicit selection
|
|
31
|
+
has different precedence from default feature-driven selection. Read stacks-routes.
|
|
32
|
+
|
|
33
|
+
## Schema and discovery
|
|
34
|
+
|
|
35
|
+
The migration corpus excludes disabled bundle tables while protecting app-owned
|
|
36
|
+
models. Turning off a feature is not permission to drop its production data.
|
|
37
|
+
Package discovery can add resource roots; components require explicit opt-in
|
|
38
|
+
because bare component tags are process-wide.
|
|
39
|
+
|
|
40
|
+
STACKS_CANONICAL_FEATURES is an artifact-generation mode, not a production
|
|
41
|
+
configuration shortcut. Use stacks-feature-flags for scoped experiments.
|
|
42
|
+
Test the enabled app surface, route selection, preserved overrides and no-op
|
|
43
|
+
reinstallation rather than checking only a package's presence.
|
|
44
|
+
|
|
45
|
+
Source: core/features/src/{names,index}.ts, core/config/src/features.ts,
|
|
46
|
+
core/router/src/route-loader.ts and buddy feature lifecycle tests.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Stacks adaptation of the engineering workflows
|
|
2
|
+
|
|
3
|
+
This shared reference applies to the Matt Pocock ports listed in
|
|
4
|
+
[upstream-skills.json](upstream-skills.json). Read it with the selected skill.
|
|
5
|
+
Stacks conventions and explicit user instructions govern the adapted playbooks.
|
|
6
|
+
|
|
7
|
+
## Context, skills, and tracking
|
|
8
|
+
|
|
9
|
+
Read `AGENTS.md`, the relevant Stacks package skill, existing specs, and ADRs.
|
|
10
|
+
Use the existing domain source: `CONTEXT.md`, or `GLOSSARY.md` when that is the
|
|
11
|
+
project's established glossary. Follow an existing context map in a multi-context
|
|
12
|
+
repository. Keep glossary terms separate from implementation decisions and
|
|
13
|
+
create domain files only when a resolved term or decision needs recording.
|
|
14
|
+
|
|
15
|
+
The translated skill names are the entrypoints. Read a skill before relying on
|
|
16
|
+
its summary or skipping a step. A Skill tool is optional: reading `SKILL.md`
|
|
17
|
+
and its relevant references provides the same instructions.
|
|
18
|
+
|
|
19
|
+
Read `docs/agents/issue-tracker.md` and `docs/agents/triage-labels.md` when present.
|
|
20
|
+
If no tracker convention exists, use local specs and one Markdown file per
|
|
21
|
+
ticket under `.scratch/<feature>/issues/`. Configure a remote tracker only when
|
|
22
|
+
requested. Spec synthesis, ticket drafting, and local planning can proceed
|
|
23
|
+
without an account or a setup ceremony.
|
|
24
|
+
|
|
25
|
+
Existing authorization and resolved decisions carry forward. Confirm an
|
|
26
|
+
uncertain seam, destination, or consequential choice when necessary; do not
|
|
27
|
+
re-ask settled preferences or impose a permission prompt for each reversible
|
|
28
|
+
step. A planning interview resolves human decisions, not facts the agent can read.
|
|
29
|
+
|
|
30
|
+
## Implementation and verification
|
|
31
|
+
|
|
32
|
+
Use TypeScript and Bun. Application files override framework defaults. Read the
|
|
33
|
+
subsystem skill before calling Stacks APIs. Build features in the model,
|
|
34
|
+
generated migration, action, route, and test order, one tracer bullet at a time.
|
|
35
|
+
A spec or ticket names observable acceptance criteria and genuine blockers.
|
|
36
|
+
|
|
37
|
+
Use `./buddy lint` through pickier, never an extra linter or formatter. Use
|
|
38
|
+
`./buddy typecheck` for application code and `bun run typecheck` for framework
|
|
39
|
+
internals. Run focused Bun tests during the loop and the appropriate buddy
|
|
40
|
+
test suite before finishing. Preserve the user-defined test seams and exercise
|
|
41
|
+
real behavior through public interfaces.
|
|
42
|
+
|
|
43
|
+
UI uses stx and Crosswind, signals and composables, and Iconify classes. Read
|
|
44
|
+
the design skill before visually important work. Reports may use standalone
|
|
45
|
+
HTML with local CSS; do not introduce Tailwind or React into the application.
|
|
46
|
+
Copied example commands for other package managers are conceptual; use Bun and
|
|
47
|
+
the repository's actual scripts. Do not duplicate better-dx tooling.
|
|
48
|
+
|
|
49
|
+
## Parallel work and long-running tasks
|
|
50
|
+
|
|
51
|
+
Use subagents when the invoked workflow asks for parallel work and the harness
|
|
52
|
+
supports it. Otherwise work sequentially through the same dependency frontier.
|
|
53
|
+
Treat user decisions as human-in-the-loop work; a subagent cannot answer them
|
|
54
|
+
for the user. Give workers context pointers, a concrete scope, acceptance
|
|
55
|
+
criteria, and a disjoint edit surface. Preserve existing user edits.
|
|
56
|
+
|
|
57
|
+
For an implementation graph, integrate completed work before unblocking
|
|
58
|
+
dependent tickets. Validate the combined result and distinguish completed,
|
|
59
|
+
blocked, and unstarted work. Do not silently reset a worktree with changes.
|
|
60
|
+
Archive only task-owned temporary worktrees after preserving needed work.
|
|
61
|
+
|
|
62
|
+
Research files are cited primary-source evidence. Background orchestration is
|
|
63
|
+
optional, not a precondition for answering a research question. Do not create
|
|
64
|
+
recurring schedules or a long-running goal merely because an upstream playbook
|
|
65
|
+
mentions them; use native tools when the user requests that behavior.
|
|
66
|
+
|
|
67
|
+
## Git and external actions
|
|
68
|
+
|
|
69
|
+
Only commit or push when asked. Use conventional commits and branch off the
|
|
70
|
+
default branch before a requested commit. An upstream "commit", "push", or
|
|
71
|
+
"publish" step is conditional on the user's authorization. Never close or
|
|
72
|
+
alter tracker issues, post comments, or send a questionnaire merely because
|
|
73
|
+
the draft is complete. Perform the requested external action when authorized;
|
|
74
|
+
otherwise return its concrete draft.
|
|
75
|
+
|
|
76
|
+
Attach any created or actively reviewed PR using the harness's artifact tool
|
|
77
|
+
when available. Preserve authored `AGENTS.md`; generated agent files are
|
|
78
|
+
per-developer. Setup guidance edits the canonical guidance, not an independent
|
|
79
|
+
copy of a symlinked `CLAUDE.md`.
|
|
80
|
+
|
|
81
|
+
Generate user-visible copy with regular hyphens and ordinary punctuation.
|
|
82
|
+
Keep quotes, secrets, executable code, and source evidence accurate. Redact
|
|
83
|
+
secrets from reports and handoffs. Completion is the requested behavior or
|
|
84
|
+
reviewable artifact with its relevant checks, not an unsolicited deployment.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Matt Pocock
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Source and license
|
|
2
|
+
|
|
3
|
+
The upstream MIT notice is preserved in [LICENSE](LICENSE).
|
|
4
|
+
|
|
5
|
+
## ask-matt
|
|
6
|
+
|
|
7
|
+
Source: [skills/engineering/ask-matt/SKILL.md](https://github.com/mattpocock/skills/blob/49dd158d1076134a641b33efb035946536778336/skills/engineering/ask-matt/SKILL.md),
|
|
8
|
+
revision `49dd158d1076134a641b33efb035946536778336`.
|
|
9
|
+
|
|
10
|
+
Reviewed against the existing Stacks workflow. Stacks API guidance is retained; current workflow changes and supporting references are integrated where applicable.
|