flyee 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/bin/install.js +357 -0
- package/bridge/bridge.py +1780 -0
- package/bridge/local_tracker.py +722 -0
- package/core/agents/backend-specialist.md +266 -0
- package/core/agents/code-archaeologist.md +106 -0
- package/core/agents/database-architect.md +226 -0
- package/core/agents/debugger.md +225 -0
- package/core/agents/devops-engineer.md +323 -0
- package/core/agents/documentation-writer.md +104 -0
- package/core/agents/explorer-agent.md +73 -0
- package/core/agents/frontend-specialist.md +743 -0
- package/core/agents/game-developer.md +162 -0
- package/core/agents/mobile-developer.md +377 -0
- package/core/agents/orchestrator.md +416 -0
- package/core/agents/penetration-tester.md +188 -0
- package/core/agents/performance-optimizer.md +187 -0
- package/core/agents/product-manager.md +112 -0
- package/core/agents/product-owner.md +95 -0
- package/core/agents/project-planner.md +470 -0
- package/core/agents/qa-automation-engineer.md +103 -0
- package/core/agents/security-auditor.md +170 -0
- package/core/agents/seo-specialist.md +111 -0
- package/core/agents/stitch-designer.md +190 -0
- package/core/agents/tdd-reviewer.md +282 -0
- package/core/agents/test-engineer.md +158 -0
- package/core/scripts/auto_preview.py +148 -0
- package/core/scripts/checklist.py +243 -0
- package/core/scripts/cost_report.py +149 -0
- package/core/scripts/doc-sync-check.py +461 -0
- package/core/scripts/parse_user_stories.py +79 -0
- package/core/scripts/prepare_notion_updates.py +172 -0
- package/core/scripts/print_create_payload.py +18 -0
- package/core/scripts/session_manager.py +120 -0
- package/core/scripts/task_complete.py +127 -0
- package/core/scripts/verify_all.py +327 -0
- package/core/skills/analytics-strategy/SKILL.md +128 -0
- package/core/skills/api-patterns/SKILL.md +81 -0
- package/core/skills/api-patterns/api-style.md +42 -0
- package/core/skills/api-patterns/auth.md +24 -0
- package/core/skills/api-patterns/documentation.md +26 -0
- package/core/skills/api-patterns/graphql.md +41 -0
- package/core/skills/api-patterns/rate-limiting.md +31 -0
- package/core/skills/api-patterns/response.md +37 -0
- package/core/skills/api-patterns/rest.md +40 -0
- package/core/skills/api-patterns/scripts/api_validator.py +211 -0
- package/core/skills/api-patterns/security-testing.md +122 -0
- package/core/skills/api-patterns/trpc.md +41 -0
- package/core/skills/api-patterns/versioning.md +22 -0
- package/core/skills/app-builder/SKILL.md +75 -0
- package/core/skills/app-builder/agent-coordination.md +71 -0
- package/core/skills/app-builder/feature-building.md +53 -0
- package/core/skills/app-builder/project-detection.md +34 -0
- package/core/skills/app-builder/scaffolding.md +118 -0
- package/core/skills/app-builder/tech-stack.md +40 -0
- package/core/skills/app-builder/templates/SKILL.md +39 -0
- package/core/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/core/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/core/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/core/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/core/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/core/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/core/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/core/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/core/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/core/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/core/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/core/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/core/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/core/skills/architecture/SKILL.md +55 -0
- package/core/skills/architecture/context-discovery.md +43 -0
- package/core/skills/architecture/examples.md +94 -0
- package/core/skills/architecture/pattern-selection.md +68 -0
- package/core/skills/architecture/patterns-reference.md +50 -0
- package/core/skills/architecture/trade-off-analysis.md +77 -0
- package/core/skills/atomic-design/SKILL.md +282 -0
- package/core/skills/atomic-design/references/classification-guide.md +132 -0
- package/core/skills/atomic-design/references/quality-checklist.md +60 -0
- package/core/skills/atomic-design/references/stacks/stack-blade.md +254 -0
- package/core/skills/atomic-design/references/stacks/stack-nextjs.md +272 -0
- package/core/skills/atomic-design/references/stacks/stack-react.md +239 -0
- package/core/skills/atomic-design/references/stacks/stack-vue.md +224 -0
- package/core/skills/bash-linux/SKILL.md +199 -0
- package/core/skills/behavioral-modes/SKILL.md +242 -0
- package/core/skills/brainstorming/SKILL.md +163 -0
- package/core/skills/brainstorming/dynamic-questioning.md +373 -0
- package/core/skills/checkpointing-patterns/SKILL.md +163 -0
- package/core/skills/clean-code/SKILL.md +201 -0
- package/core/skills/code-review-checklist/SKILL.md +109 -0
- package/core/skills/code-truth-validation/SKILL.md +149 -0
- package/core/skills/component-library-discovery/SKILL.md +154 -0
- package/core/skills/content-strategy/SKILL.md +222 -0
- package/core/skills/context-budget/SKILL.md +155 -0
- package/core/skills/context-gathering-patterns/SKILL.md +278 -0
- package/core/skills/cost-tracking/SKILL.md +206 -0
- package/core/skills/database-design/SKILL.md +52 -0
- package/core/skills/database-design/database-selection.md +43 -0
- package/core/skills/database-design/indexing.md +39 -0
- package/core/skills/database-design/migrations.md +48 -0
- package/core/skills/database-design/optimization.md +36 -0
- package/core/skills/database-design/orm-selection.md +30 -0
- package/core/skills/database-design/schema-design.md +56 -0
- package/core/skills/database-design/scripts/schema_validator.py +172 -0
- package/core/skills/deployment-procedures/SKILL.md +295 -0
- package/core/skills/design-md/README.md +34 -0
- package/core/skills/design-md/SKILL.md +172 -0
- package/core/skills/design-md/examples/DESIGN.md +154 -0
- package/core/skills/design-system-enforcement/SKILL.md +339 -0
- package/core/skills/doc.md +177 -0
- package/core/skills/document-registry/SKILL.md +130 -0
- package/core/skills/documentation-publishing/SKILL.md +174 -0
- package/core/skills/documentation-templates/SKILL.md +194 -0
- package/core/skills/enhance-prompt/README.md +34 -0
- package/core/skills/enhance-prompt/SKILL.md +204 -0
- package/core/skills/enhance-prompt/references/KEYWORDS.md +114 -0
- package/core/skills/frontend-design/SKILL.md +430 -0
- package/core/skills/frontend-design/animation-guide.md +331 -0
- package/core/skills/frontend-design/color-system.md +311 -0
- package/core/skills/frontend-design/decision-trees.md +418 -0
- package/core/skills/frontend-design/motion-graphics.md +306 -0
- package/core/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/core/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/core/skills/frontend-design/typography-system.md +345 -0
- package/core/skills/frontend-design/ux-psychology.md +541 -0
- package/core/skills/frontend-design/visual-effects.md +383 -0
- package/core/skills/game-development/2d-games/SKILL.md +119 -0
- package/core/skills/game-development/3d-games/SKILL.md +135 -0
- package/core/skills/game-development/SKILL.md +167 -0
- package/core/skills/game-development/game-art/SKILL.md +185 -0
- package/core/skills/game-development/game-audio/SKILL.md +190 -0
- package/core/skills/game-development/game-design/SKILL.md +129 -0
- package/core/skills/game-development/mobile-games/SKILL.md +108 -0
- package/core/skills/game-development/multiplayer/SKILL.md +132 -0
- package/core/skills/game-development/pc-games/SKILL.md +144 -0
- package/core/skills/game-development/vr-ar/SKILL.md +123 -0
- package/core/skills/game-development/web-games/SKILL.md +150 -0
- package/core/skills/geo-fundamentals/SKILL.md +156 -0
- package/core/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/core/skills/git-workflow/SKILL.md +263 -0
- package/core/skills/history-check-patterns/SKILL.md +125 -0
- package/core/skills/i18n-localization/SKILL.md +154 -0
- package/core/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/core/skills/integration-completeness/SKILL.md +219 -0
- package/core/skills/intelligent-routing/SKILL.md +370 -0
- package/core/skills/lint-and-validate/SKILL.md +45 -0
- package/core/skills/lint-and-validate/scripts/lint_runner.py +173 -0
- package/core/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/core/skills/local-verification/SKILL.md +195 -0
- package/core/skills/mcp-builder/SKILL.md +176 -0
- package/core/skills/mobile-design/SKILL.md +394 -0
- package/core/skills/mobile-design/decision-trees.md +516 -0
- package/core/skills/mobile-design/mobile-backend.md +491 -0
- package/core/skills/mobile-design/mobile-color-system.md +420 -0
- package/core/skills/mobile-design/mobile-debugging.md +122 -0
- package/core/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/core/skills/mobile-design/mobile-navigation.md +458 -0
- package/core/skills/mobile-design/mobile-performance.md +767 -0
- package/core/skills/mobile-design/mobile-testing.md +356 -0
- package/core/skills/mobile-design/mobile-typography.md +433 -0
- package/core/skills/mobile-design/platform-android.md +666 -0
- package/core/skills/mobile-design/platform-ios.md +561 -0
- package/core/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/core/skills/mobile-design/touch-psychology.md +537 -0
- package/core/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
- package/core/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/core/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/core/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/core/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/core/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/core/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/core/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/core/skills/nextjs-react-expert/SKILL.md +267 -0
- package/core/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/core/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/core/skills/nodejs-best-practices/SKILL.md +333 -0
- package/core/skills/notion-task-patterns/SKILL.md +2529 -0
- package/core/skills/page-specifications/SKILL.md +367 -0
- package/core/skills/parallel-agents/SKILL.md +175 -0
- package/core/skills/performance-profiling/SKILL.md +143 -0
- package/core/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/core/skills/plan-writing/SKILL.md +190 -0
- package/core/skills/powershell-windows/SKILL.md +167 -0
- package/core/skills/project-foundation/SKILL.md +117 -0
- package/core/skills/project-setup/SKILL.md +141 -0
- package/core/skills/project-tracking-patterns/SKILL.md +357 -0
- package/core/skills/project-type-discovery/SKILL.md +239 -0
- package/core/skills/python-patterns/SKILL.md +441 -0
- package/core/skills/qa-test-generation/SKILL.md +156 -0
- package/core/skills/react-components/README.md +36 -0
- package/core/skills/react-components/SKILL.md +47 -0
- package/core/skills/react-components/examples/gold-standard-card.tsx +80 -0
- package/core/skills/react-components/package-lock.json +231 -0
- package/core/skills/react-components/package.json +16 -0
- package/core/skills/react-components/resources/architecture-checklist.md +15 -0
- package/core/skills/react-components/resources/component-template.tsx +37 -0
- package/core/skills/react-components/resources/stitch-api-reference.md +14 -0
- package/core/skills/react-components/resources/style-guide.json +27 -0
- package/core/skills/react-components/scripts/fetch-stitch.sh +30 -0
- package/core/skills/react-components/scripts/validate.js +68 -0
- package/core/skills/red-team-tactics/SKILL.md +199 -0
- package/core/skills/remotion/README.md +105 -0
- package/core/skills/remotion/SKILL.md +393 -0
- package/core/skills/remotion/examples/WalkthroughComposition.tsx +78 -0
- package/core/skills/remotion/examples/screens.json +56 -0
- package/core/skills/remotion/resources/composition-checklist.md +124 -0
- package/core/skills/remotion/resources/screen-slide-template.tsx +123 -0
- package/core/skills/remotion/scripts/download-stitch-asset.sh +38 -0
- package/core/skills/seo-fundamentals/SKILL.md +129 -0
- package/core/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/core/skills/server-management/SKILL.md +161 -0
- package/core/skills/session-resilience/SKILL.md +199 -0
- package/core/skills/shadcn-ui/README.md +248 -0
- package/core/skills/shadcn-ui/SKILL.md +326 -0
- package/core/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
- package/core/skills/shadcn-ui/examples/data-table.tsx +313 -0
- package/core/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
- package/core/skills/shadcn-ui/resources/component-catalog.md +481 -0
- package/core/skills/shadcn-ui/resources/customization-guide.md +516 -0
- package/core/skills/shadcn-ui/resources/migration-guide.md +463 -0
- package/core/skills/shadcn-ui/resources/setup-guide.md +412 -0
- package/core/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
- package/core/skills/state-machine/SKILL.md +264 -0
- package/core/skills/stitch-loop/README.md +54 -0
- package/core/skills/stitch-loop/SKILL.md +203 -0
- package/core/skills/stitch-loop/examples/SITE.md +73 -0
- package/core/skills/stitch-loop/examples/next-prompt.md +25 -0
- package/core/skills/stitch-loop/resources/baton-schema.md +61 -0
- package/core/skills/stitch-loop/resources/site-template.md +104 -0
- package/core/skills/systematic-debugging/SKILL.md +109 -0
- package/core/skills/tailwind-patterns/SKILL.md +284 -0
- package/core/skills/tdd-validation/SKILL.md +243 -0
- package/core/skills/tdd-workflow/SKILL.md +284 -0
- package/core/skills/testing-patterns/SKILL.md +196 -0
- package/core/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/core/skills/ui-ux-discovery/SKILL.md +329 -0
- package/core/skills/ui-validation/SKILL.md +190 -0
- package/core/skills/ui-validation/scripts/ui_antipattern_check.py +317 -0
- package/core/skills/verification-gate/SKILL.md +205 -0
- package/core/skills/vulnerability-scanner/SKILL.md +276 -0
- package/core/skills/vulnerability-scanner/checklists.md +121 -0
- package/core/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/core/skills/web-design-guidelines/SKILL.md +57 -0
- package/core/skills/webapp-testing/SKILL.md +187 -0
- package/core/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/core/templates/ARCHITECTURE.template.md +407 -0
- package/core/templates/project-resources.example.json +71 -0
- package/core/workflows/atomic.md +182 -0
- package/core/workflows/brainstorm.md +134 -0
- package/core/workflows/check-task.md +242 -0
- package/core/workflows/copy-collect.md +306 -0
- package/core/workflows/create-agent.md +33 -0
- package/core/workflows/create-skill.md +39 -0
- package/core/workflows/create-workflow.md +33 -0
- package/core/workflows/create.md +92 -0
- package/core/workflows/debug.md +186 -0
- package/core/workflows/demand.md +443 -0
- package/core/workflows/deploy.md +260 -0
- package/core/workflows/discovery.md +267 -0
- package/core/workflows/document.md +272 -0
- package/core/workflows/ds-components.md +296 -0
- package/core/workflows/ds-init.md +58 -0
- package/core/workflows/ds-refactor.md +245 -0
- package/core/workflows/ds-references.md +197 -0
- package/core/workflows/ds-styleguide.md +237 -0
- package/core/workflows/ds-token-diff.md +103 -0
- package/core/workflows/ds-tokens.md +317 -0
- package/core/workflows/ds-validate.md +309 -0
- package/core/workflows/execute.md +483 -0
- package/core/workflows/extract-template.md +278 -0
- package/core/workflows/fix-failed-tests.md +160 -0
- package/core/workflows/init-project.md +386 -0
- package/core/workflows/legacy-project.md +849 -0
- package/core/workflows/log.md +97 -0
- package/core/workflows/new-project.md +610 -0
- package/core/workflows/new-project.md.bak +3292 -0
- package/core/workflows/new-task.md +404 -0
- package/core/workflows/orchestrate.md +237 -0
- package/core/workflows/page-build.md +296 -0
- package/core/workflows/plan.md +89 -0
- package/core/workflows/prd.md +255 -0
- package/core/workflows/preview.md +81 -0
- package/core/workflows/review-page.md +304 -0
- package/core/workflows/status.md +86 -0
- package/core/workflows/stitch.md +226 -0
- package/core/workflows/task-complete.md +473 -0
- package/core/workflows/task-update.md +163 -0
- package/core/workflows/tdd.md +344 -0
- package/core/workflows/test.md +251 -0
- package/core/workflows/ui-ux-pro-max.md +437 -0
- package/core/workflows/ux-mobile-optimize.md +262 -0
- package/core/workflows/ux-mobile-validate.md +297 -0
- package/engine-files/GEMINI.md +69 -0
- package/package.json +47 -0
- package/runtime-adapters/antigravity.js +26 -0
- package/runtime-adapters/claude.js +57 -0
- package/runtime-adapters/codex.js +51 -0
- package/runtime-adapters/copilot.js +51 -0
- package/runtime-adapters/cursor.js +51 -0
- package/runtime-adapters/gemini-cli.js +30 -0
- package/runtime-adapters/opencode.js +51 -0
- package/runtime-adapters/windsurf.js +51 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: geo-fundamentals
|
|
3
|
+
description: Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).
|
|
4
|
+
allowed-tools: Read, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GEO Fundamentals
|
|
8
|
+
|
|
9
|
+
> Optimization for AI-powered search engines.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. What is GEO?
|
|
14
|
+
|
|
15
|
+
**GEO** = Generative Engine Optimization
|
|
16
|
+
|
|
17
|
+
| Goal | Platform |
|
|
18
|
+
|------|----------|
|
|
19
|
+
| Be cited in AI responses | ChatGPT, Claude, Perplexity, Gemini |
|
|
20
|
+
|
|
21
|
+
### SEO vs GEO
|
|
22
|
+
|
|
23
|
+
| Aspect | SEO | GEO |
|
|
24
|
+
|--------|-----|-----|
|
|
25
|
+
| Goal | #1 ranking | AI citations |
|
|
26
|
+
| Platform | Google | AI engines |
|
|
27
|
+
| Metrics | Rankings, CTR | Citation rate |
|
|
28
|
+
| Focus | Keywords | Entities, data |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. AI Engine Landscape
|
|
33
|
+
|
|
34
|
+
| Engine | Citation Style | Opportunity |
|
|
35
|
+
|--------|----------------|-------------|
|
|
36
|
+
| **Perplexity** | Numbered [1][2] | Highest citation rate |
|
|
37
|
+
| **ChatGPT** | Inline/footnotes | Custom GPTs |
|
|
38
|
+
| **Claude** | Contextual | Long-form content |
|
|
39
|
+
| **Gemini** | Sources section | SEO crossover |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 3. RAG Retrieval Factors
|
|
44
|
+
|
|
45
|
+
How AI engines select content to cite:
|
|
46
|
+
|
|
47
|
+
| Factor | Weight |
|
|
48
|
+
|--------|--------|
|
|
49
|
+
| Semantic relevance | ~40% |
|
|
50
|
+
| Keyword match | ~20% |
|
|
51
|
+
| Authority signals | ~15% |
|
|
52
|
+
| Freshness | ~10% |
|
|
53
|
+
| Source diversity | ~15% |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 4. Content That Gets Cited
|
|
58
|
+
|
|
59
|
+
| Element | Why It Works |
|
|
60
|
+
|---------|--------------|
|
|
61
|
+
| **Original statistics** | Unique, citable data |
|
|
62
|
+
| **Expert quotes** | Authority transfer |
|
|
63
|
+
| **Clear definitions** | Easy to extract |
|
|
64
|
+
| **Step-by-step guides** | Actionable value |
|
|
65
|
+
| **Comparison tables** | Structured info |
|
|
66
|
+
| **FAQ sections** | Direct answers |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 5. GEO Content Checklist
|
|
71
|
+
|
|
72
|
+
### Content Elements
|
|
73
|
+
|
|
74
|
+
- [ ] Question-based titles
|
|
75
|
+
- [ ] Summary/TL;DR at top
|
|
76
|
+
- [ ] Original data with sources
|
|
77
|
+
- [ ] Expert quotes (name, title)
|
|
78
|
+
- [ ] FAQ section (3-5 Q&A)
|
|
79
|
+
- [ ] Clear definitions
|
|
80
|
+
- [ ] "Last updated" timestamp
|
|
81
|
+
- [ ] Author with credentials
|
|
82
|
+
|
|
83
|
+
### Technical Elements
|
|
84
|
+
|
|
85
|
+
- [ ] Article schema with dates
|
|
86
|
+
- [ ] Person schema for author
|
|
87
|
+
- [ ] FAQPage schema
|
|
88
|
+
- [ ] Fast loading (< 2.5s)
|
|
89
|
+
- [ ] Clean HTML structure
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 6. Entity Building
|
|
94
|
+
|
|
95
|
+
| Action | Purpose |
|
|
96
|
+
|--------|---------|
|
|
97
|
+
| Google Knowledge Panel | Entity recognition |
|
|
98
|
+
| Wikipedia (if notable) | Authority source |
|
|
99
|
+
| Consistent info across web | Entity consolidation |
|
|
100
|
+
| Industry mentions | Authority signals |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 7. AI Crawler Access
|
|
105
|
+
|
|
106
|
+
### Key AI User-Agents
|
|
107
|
+
|
|
108
|
+
| Crawler | Engine |
|
|
109
|
+
|---------|--------|
|
|
110
|
+
| GPTBot | ChatGPT/OpenAI |
|
|
111
|
+
| Claude-Web | Claude |
|
|
112
|
+
| PerplexityBot | Perplexity |
|
|
113
|
+
| Googlebot | Gemini (shared) |
|
|
114
|
+
|
|
115
|
+
### Access Decision
|
|
116
|
+
|
|
117
|
+
| Strategy | When |
|
|
118
|
+
|----------|------|
|
|
119
|
+
| Allow all | Want AI citations |
|
|
120
|
+
| Block GPTBot | Don't want OpenAI training |
|
|
121
|
+
| Selective | Allow some, block others |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 8. Measurement
|
|
126
|
+
|
|
127
|
+
| Metric | How to Track |
|
|
128
|
+
|--------|--------------|
|
|
129
|
+
| AI citations | Manual monitoring |
|
|
130
|
+
| "According to [Brand]" mentions | Search in AI |
|
|
131
|
+
| Competitor citations | Compare share |
|
|
132
|
+
| AI-referred traffic | UTM parameters |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 9. Anti-Patterns
|
|
137
|
+
|
|
138
|
+
| β Don't | β
Do |
|
|
139
|
+
|----------|-------|
|
|
140
|
+
| Publish without dates | Add timestamps |
|
|
141
|
+
| Vague attributions | Name sources |
|
|
142
|
+
| Skip author info | Show credentials |
|
|
143
|
+
| Thin content | Comprehensive coverage |
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
> **Remember:** AI cites content that's clear, authoritative, and easy to extract. Be the best answer.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Script
|
|
152
|
+
|
|
153
|
+
| Script | Purpose | Command |
|
|
154
|
+
|--------|---------|---------|
|
|
155
|
+
| `scripts/geo_checker.py` | GEO audit (AI citation readiness) | `python scripts/geo_checker.py <project_path>` |
|
|
156
|
+
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
GEO Checker - Generative Engine Optimization Audit
|
|
4
|
+
Checks PUBLIC WEB CONTENT for AI citation readiness.
|
|
5
|
+
|
|
6
|
+
PURPOSE:
|
|
7
|
+
- Analyze pages that will be INDEXED by AI engines (ChatGPT, Perplexity, etc.)
|
|
8
|
+
- Check for structured data, author info, dates, FAQ sections
|
|
9
|
+
- Help content rank in AI-generated answers
|
|
10
|
+
|
|
11
|
+
WHAT IT CHECKS:
|
|
12
|
+
- HTML files (actual web pages)
|
|
13
|
+
- JSX/TSX files (React page components)
|
|
14
|
+
- NOT markdown files (those are developer docs, not public content)
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
python geo_checker.py <project_path>
|
|
18
|
+
"""
|
|
19
|
+
import sys
|
|
20
|
+
import re
|
|
21
|
+
import json
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
# Fix Windows console encoding
|
|
25
|
+
try:
|
|
26
|
+
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
|
|
27
|
+
sys.stderr.reconfigure(encoding='utf-8', errors='replace')
|
|
28
|
+
except AttributeError:
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Directories to skip (not public content)
|
|
33
|
+
SKIP_DIRS = {
|
|
34
|
+
'node_modules', '.next', 'dist', 'build', '.git', '.github',
|
|
35
|
+
'__pycache__', '.vscode', '.idea', 'coverage', 'test', 'tests',
|
|
36
|
+
'__tests__', 'spec', 'docs', 'documentation'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Files to skip (not public pages)
|
|
40
|
+
SKIP_FILES = {
|
|
41
|
+
'jest.config', 'webpack.config', 'vite.config', 'tsconfig',
|
|
42
|
+
'package.json', 'package-lock', 'yarn.lock', '.eslintrc',
|
|
43
|
+
'tailwind.config', 'postcss.config', 'next.config'
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def is_page_file(file_path: Path) -> bool:
|
|
48
|
+
"""Check if this file is likely a public-facing page."""
|
|
49
|
+
name = file_path.stem.lower()
|
|
50
|
+
|
|
51
|
+
# Skip config/utility files
|
|
52
|
+
if any(skip in name for skip in SKIP_FILES):
|
|
53
|
+
return False
|
|
54
|
+
|
|
55
|
+
# Skip test files
|
|
56
|
+
if name.endswith('.test') or name.endswith('.spec'):
|
|
57
|
+
return False
|
|
58
|
+
if name.startswith('test_') or name.startswith('spec_'):
|
|
59
|
+
return False
|
|
60
|
+
|
|
61
|
+
# Likely page indicators
|
|
62
|
+
page_indicators = ['page', 'index', 'home', 'about', 'contact', 'blog',
|
|
63
|
+
'post', 'article', 'product', 'service', 'landing']
|
|
64
|
+
|
|
65
|
+
# Check if it's in a pages/app directory (Next.js, etc.)
|
|
66
|
+
parts = [p.lower() for p in file_path.parts]
|
|
67
|
+
if 'pages' in parts or 'app' in parts or 'routes' in parts:
|
|
68
|
+
return True
|
|
69
|
+
|
|
70
|
+
# Check filename indicators
|
|
71
|
+
if any(ind in name for ind in page_indicators):
|
|
72
|
+
return True
|
|
73
|
+
|
|
74
|
+
# HTML files are usually pages
|
|
75
|
+
if file_path.suffix.lower() == '.html':
|
|
76
|
+
return True
|
|
77
|
+
|
|
78
|
+
return False
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def find_web_pages(project_path: Path) -> list:
|
|
82
|
+
"""Find public-facing web pages only."""
|
|
83
|
+
patterns = ['**/*.html', '**/*.htm', '**/*.jsx', '**/*.tsx']
|
|
84
|
+
|
|
85
|
+
files = []
|
|
86
|
+
for pattern in patterns:
|
|
87
|
+
for f in project_path.glob(pattern):
|
|
88
|
+
# Skip excluded directories
|
|
89
|
+
if any(skip in f.parts for skip in SKIP_DIRS):
|
|
90
|
+
continue
|
|
91
|
+
|
|
92
|
+
# Check if it's likely a page
|
|
93
|
+
if is_page_file(f):
|
|
94
|
+
files.append(f)
|
|
95
|
+
|
|
96
|
+
return files[:30] # Limit to 30 pages
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def check_page(file_path: Path) -> dict:
|
|
100
|
+
"""Check a single web page for GEO elements."""
|
|
101
|
+
try:
|
|
102
|
+
content = file_path.read_text(encoding='utf-8', errors='ignore')
|
|
103
|
+
except Exception as e:
|
|
104
|
+
return {'file': str(file_path.name), 'passed': [], 'issues': [f"Error: {e}"], 'score': 0}
|
|
105
|
+
|
|
106
|
+
issues = []
|
|
107
|
+
passed = []
|
|
108
|
+
|
|
109
|
+
# 1. JSON-LD Structured Data (Critical for AI)
|
|
110
|
+
if 'application/ld+json' in content:
|
|
111
|
+
passed.append("JSON-LD structured data found")
|
|
112
|
+
if '"@type"' in content:
|
|
113
|
+
if 'Article' in content:
|
|
114
|
+
passed.append("Article schema present")
|
|
115
|
+
if 'FAQPage' in content:
|
|
116
|
+
passed.append("FAQ schema present")
|
|
117
|
+
if 'Organization' in content or 'Person' in content:
|
|
118
|
+
passed.append("Entity schema present")
|
|
119
|
+
else:
|
|
120
|
+
issues.append("No JSON-LD structured data (AI engines prefer structured content)")
|
|
121
|
+
|
|
122
|
+
# 2. Heading Structure
|
|
123
|
+
h1_count = len(re.findall(r'<h1[^>]*>', content, re.I))
|
|
124
|
+
h2_count = len(re.findall(r'<h2[^>]*>', content, re.I))
|
|
125
|
+
|
|
126
|
+
if h1_count == 1:
|
|
127
|
+
passed.append("Single H1 heading (clear topic)")
|
|
128
|
+
elif h1_count == 0:
|
|
129
|
+
issues.append("No H1 heading - page topic unclear")
|
|
130
|
+
else:
|
|
131
|
+
issues.append(f"Multiple H1 headings ({h1_count}) - confusing for AI")
|
|
132
|
+
|
|
133
|
+
if h2_count >= 2:
|
|
134
|
+
passed.append(f"{h2_count} H2 subheadings (good structure)")
|
|
135
|
+
else:
|
|
136
|
+
issues.append("Add more H2 subheadings for scannable content")
|
|
137
|
+
|
|
138
|
+
# 3. Author Attribution (E-E-A-T signal)
|
|
139
|
+
author_patterns = ['author', 'byline', 'written-by', 'contributor', 'rel="author"']
|
|
140
|
+
has_author = any(p in content.lower() for p in author_patterns)
|
|
141
|
+
if has_author:
|
|
142
|
+
passed.append("Author attribution found")
|
|
143
|
+
else:
|
|
144
|
+
issues.append("No author info (AI prefers attributed content)")
|
|
145
|
+
|
|
146
|
+
# 4. Publication Date (Freshness signal)
|
|
147
|
+
date_patterns = ['datePublished', 'dateModified', 'datetime=', 'pubdate', 'article:published']
|
|
148
|
+
has_date = any(re.search(p, content, re.I) for p in date_patterns)
|
|
149
|
+
if has_date:
|
|
150
|
+
passed.append("Publication date found")
|
|
151
|
+
else:
|
|
152
|
+
issues.append("No publication date (freshness matters for AI)")
|
|
153
|
+
|
|
154
|
+
# 5. FAQ Section (Highly citable)
|
|
155
|
+
faq_patterns = [r'<details', r'faq', r'frequently.?asked', r'"FAQPage"']
|
|
156
|
+
has_faq = any(re.search(p, content, re.I) for p in faq_patterns)
|
|
157
|
+
if has_faq:
|
|
158
|
+
passed.append("FAQ section detected (highly citable)")
|
|
159
|
+
|
|
160
|
+
# 6. Lists (Structured content)
|
|
161
|
+
list_count = len(re.findall(r'<(ul|ol)[^>]*>', content, re.I))
|
|
162
|
+
if list_count >= 2:
|
|
163
|
+
passed.append(f"{list_count} lists (structured content)")
|
|
164
|
+
|
|
165
|
+
# 7. Tables (Comparison data)
|
|
166
|
+
table_count = len(re.findall(r'<table[^>]*>', content, re.I))
|
|
167
|
+
if table_count >= 1:
|
|
168
|
+
passed.append(f"{table_count} table(s) (comparison data)")
|
|
169
|
+
|
|
170
|
+
# 8. Entity Recognition (E-E-A-T signal) - NEW 2025
|
|
171
|
+
entity_patterns = [
|
|
172
|
+
r'"@type"\s*:\s*"Organization"',
|
|
173
|
+
r'"@type"\s*:\s*"LocalBusiness"',
|
|
174
|
+
r'"@type"\s*:\s*"Brand"',
|
|
175
|
+
r'itemtype.*schema\.org/(Organization|Person|Brand)',
|
|
176
|
+
r'rel="author"'
|
|
177
|
+
]
|
|
178
|
+
has_entity = any(re.search(p, content, re.I) for p in entity_patterns)
|
|
179
|
+
if has_entity:
|
|
180
|
+
passed.append("Entity/Brand recognition (E-E-A-T)")
|
|
181
|
+
|
|
182
|
+
# 9. Original Statistics/Data (AI citation magnet) - NEW 2025
|
|
183
|
+
stat_patterns = [
|
|
184
|
+
r'\d+%', # Percentages
|
|
185
|
+
r'\$[\d,]+', # Dollar amounts
|
|
186
|
+
r'study\s+(shows|found)', # Research citations
|
|
187
|
+
r'according to', # Source attribution
|
|
188
|
+
r'data\s+(shows|reveals)', # Data-backed claims
|
|
189
|
+
r'\d+x\s+(faster|better|more)', # Comparison stats
|
|
190
|
+
r'(million|billion|trillion)', # Large numbers
|
|
191
|
+
]
|
|
192
|
+
stat_matches = sum(1 for p in stat_patterns if re.search(p, content, re.I))
|
|
193
|
+
if stat_matches >= 2:
|
|
194
|
+
passed.append("Original statistics/data (citation magnet)")
|
|
195
|
+
|
|
196
|
+
# 10. Conversational/Direct answers - NEW 2025
|
|
197
|
+
direct_answer_patterns = [
|
|
198
|
+
r'is defined as',
|
|
199
|
+
r'refers to',
|
|
200
|
+
r'means that',
|
|
201
|
+
r'the answer is',
|
|
202
|
+
r'in short,',
|
|
203
|
+
r'simply put,',
|
|
204
|
+
r'<dfn'
|
|
205
|
+
]
|
|
206
|
+
has_direct = any(re.search(p, content, re.I) for p in direct_answer_patterns)
|
|
207
|
+
if has_direct:
|
|
208
|
+
passed.append("Direct answer patterns (LLM-friendly)")
|
|
209
|
+
|
|
210
|
+
# Calculate score
|
|
211
|
+
total = len(passed) + len(issues)
|
|
212
|
+
score = (len(passed) / total * 100) if total > 0 else 0
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
'file': str(file_path.name),
|
|
216
|
+
'passed': passed,
|
|
217
|
+
'issues': issues,
|
|
218
|
+
'score': round(score)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def main():
|
|
223
|
+
target = sys.argv[1] if len(sys.argv) > 1 else "."
|
|
224
|
+
target_path = Path(target).resolve()
|
|
225
|
+
|
|
226
|
+
print("\n" + "=" * 60)
|
|
227
|
+
print(" GEO CHECKER - AI Citation Readiness Audit")
|
|
228
|
+
print("=" * 60)
|
|
229
|
+
print(f"Project: {target_path}")
|
|
230
|
+
print("-" * 60)
|
|
231
|
+
|
|
232
|
+
# Find web pages only
|
|
233
|
+
pages = find_web_pages(target_path)
|
|
234
|
+
|
|
235
|
+
if not pages:
|
|
236
|
+
print("\n[!] No public web pages found.")
|
|
237
|
+
print(" Looking for: HTML, JSX, TSX files in pages/app directories")
|
|
238
|
+
print(" Skipping: docs, tests, config files, node_modules")
|
|
239
|
+
output = {"script": "geo_checker", "pages_found": 0, "passed": True}
|
|
240
|
+
print("\n" + json.dumps(output, indent=2))
|
|
241
|
+
sys.exit(0)
|
|
242
|
+
|
|
243
|
+
print(f"Found {len(pages)} public pages to analyze\n")
|
|
244
|
+
|
|
245
|
+
# Check each page
|
|
246
|
+
results = []
|
|
247
|
+
for page in pages:
|
|
248
|
+
result = check_page(page)
|
|
249
|
+
results.append(result)
|
|
250
|
+
|
|
251
|
+
# Print results
|
|
252
|
+
for result in results:
|
|
253
|
+
status = "[OK]" if result['score'] >= 60 else "[!]"
|
|
254
|
+
print(f"{status} {result['file']}: {result['score']}%")
|
|
255
|
+
if result['issues'] and result['score'] < 60:
|
|
256
|
+
for issue in result['issues'][:2]: # Show max 2 issues
|
|
257
|
+
print(f" - {issue}")
|
|
258
|
+
|
|
259
|
+
# Average score
|
|
260
|
+
avg_score = sum(r['score'] for r in results) / len(results) if results else 0
|
|
261
|
+
|
|
262
|
+
print("\n" + "=" * 60)
|
|
263
|
+
print(f"AVERAGE GEO SCORE: {avg_score:.0f}%")
|
|
264
|
+
print("=" * 60)
|
|
265
|
+
|
|
266
|
+
if avg_score >= 80:
|
|
267
|
+
print("[OK] Excellent - Content well-optimized for AI citations")
|
|
268
|
+
elif avg_score >= 60:
|
|
269
|
+
print("[OK] Good - Some improvements recommended")
|
|
270
|
+
elif avg_score >= 40:
|
|
271
|
+
print("[!] Needs work - Add structured elements")
|
|
272
|
+
else:
|
|
273
|
+
print("[X] Poor - Content needs GEO optimization")
|
|
274
|
+
|
|
275
|
+
# JSON output
|
|
276
|
+
output = {
|
|
277
|
+
"script": "geo_checker",
|
|
278
|
+
"project": str(target_path),
|
|
279
|
+
"pages_checked": len(results),
|
|
280
|
+
"average_score": round(avg_score),
|
|
281
|
+
"passed": avg_score >= 60
|
|
282
|
+
}
|
|
283
|
+
print("\n" + json.dumps(output, indent=2))
|
|
284
|
+
|
|
285
|
+
sys.exit(0 if avg_score >= 60 else 1)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
if __name__ == "__main__":
|
|
289
|
+
main()
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-workflow
|
|
3
|
+
description: Git branch strategy, commit patterns, and merge guidance. Branch-per-phase, configurable auto/manual commits, boundary maps between phases. Absorbed from GSD-2 auto-worktree.ts and native-git-bridge.ts patterns.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git Workflow
|
|
7
|
+
|
|
8
|
+
> **Absorbed from:** GSD-2 `auto-worktree.ts`, `native-git-bridge.ts`
|
|
9
|
+
> **Purpose:** Structured git workflow that keeps changes organized and reversible.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## π― PURPOSE
|
|
14
|
+
|
|
15
|
+
Without a git strategy, AI agents create giant "implement everything" commits.
|
|
16
|
+
This skill provides:
|
|
17
|
+
- Branch-per-phase for clean isolation
|
|
18
|
+
- Structured commit messages
|
|
19
|
+
- Easy rollback if a phase goes wrong
|
|
20
|
+
- Configurable: auto or manual commits
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## βοΈ CONFIGURATION
|
|
25
|
+
|
|
26
|
+
### User preference (in `.flyee/config.json`)
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"git": {
|
|
31
|
+
"auto_commit": false,
|
|
32
|
+
"auto_branch": true,
|
|
33
|
+
"commit_style": "conventional",
|
|
34
|
+
"branch_prefix": "flyee"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Options
|
|
40
|
+
|
|
41
|
+
| Setting | Values | Default | Description |
|
|
42
|
+
|---------|--------|---------|-------------|
|
|
43
|
+
| `auto_commit` | `true`/`false` | `false` | Commit after each task completion |
|
|
44
|
+
| `auto_branch` | `true`/`false` | `true` | Create branch per phase automatically |
|
|
45
|
+
| `commit_style` | `conventional`/`descriptive` | `conventional` | Commit message format |
|
|
46
|
+
| `branch_prefix` | string | `flyee` | Branch name prefix |
|
|
47
|
+
|
|
48
|
+
### First-Time Setup
|
|
49
|
+
|
|
50
|
+
On first run, ask the user:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
π§ Git Workflow Configuration
|
|
54
|
+
|
|
55
|
+
How do you want commits handled?
|
|
56
|
+
1. π€ Auto-commit after each task (I trust the agent)
|
|
57
|
+
2. β Manual commits (suggest message, I decide when)
|
|
58
|
+
|
|
59
|
+
> Choice: _
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Store preference in `.flyee/config.json`.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## πΏ BRANCH STRATEGY
|
|
67
|
+
|
|
68
|
+
### Pattern: `{prefix}/{sprint}/{phase-name}`
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
main
|
|
72
|
+
βββ flyee/S09/backend-api β P01
|
|
73
|
+
βββ flyee/S09/frontend-components β P02
|
|
74
|
+
βββ flyee/S09/cms-admin β P03
|
|
75
|
+
βββ flyee/S09/seo-meta β P04
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Branch Lifecycle
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
1. Phase starts β Create branch from main (or previous phase branch)
|
|
82
|
+
2. Tasks execute β Commits on this branch
|
|
83
|
+
3. Phase completes β Verification gate passes
|
|
84
|
+
4. Phase merges β Squash merge to main (manual approval)
|
|
85
|
+
5. Next phase branches from updated main
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Branch Commands
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Create branch for phase
|
|
92
|
+
git checkout -b flyee/S09/frontend-components main
|
|
93
|
+
|
|
94
|
+
# After phase completion
|
|
95
|
+
git checkout main
|
|
96
|
+
git merge --squash flyee/S09/frontend-components
|
|
97
|
+
git commit -m "feat(S09): P02 frontend components"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## π COMMIT MESSAGES
|
|
103
|
+
|
|
104
|
+
### Conventional Style (default)
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
{type}({scope}): {description}
|
|
108
|
+
|
|
109
|
+
Types: feat, fix, refactor, test, docs, style, chore
|
|
110
|
+
Scope: sprint/phase/task identifier
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Examples:**
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
feat(S09/P02): implement BlogCard component
|
|
117
|
+
fix(S09/P02/T03): fix image aspect ratio in BlogCard
|
|
118
|
+
test(S09/P02): add BlogCard unit tests
|
|
119
|
+
refactor(S09/P01): extract post validation to helper
|
|
120
|
+
docs(S09): update README with blog setup instructions
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Descriptive Style (alternative)
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
[S09/P02/T03] Implement BlogCard with responsive images
|
|
127
|
+
|
|
128
|
+
- Created BlogCard.tsx with Post prop interface
|
|
129
|
+
- Added CSS Modules with design tokens
|
|
130
|
+
- Connected to usePosts hook for data
|
|
131
|
+
- Added hover scale animation
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## π€ AUTO-COMMIT PROTOCOL
|
|
137
|
+
|
|
138
|
+
When `auto_commit: true`:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
After task completion:
|
|
142
|
+
1. Run verification gate β PASS required
|
|
143
|
+
2. Stage changed files: git add <modified files>
|
|
144
|
+
3. Generate commit message from task summary
|
|
145
|
+
4. Commit: git commit -m "<generated message>"
|
|
146
|
+
5. Log commit hash to cost-log
|
|
147
|
+
|
|
148
|
+
IF verification gate FAILS:
|
|
149
|
+
β Do NOT commit
|
|
150
|
+
β Fix issues first
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Safety Guards
|
|
154
|
+
|
|
155
|
+
- Never auto-commit if tests fail
|
|
156
|
+
- Never auto-commit if typecheck fails
|
|
157
|
+
- Never auto-push (push is always manual)
|
|
158
|
+
- User can always `git reset HEAD~1` to undo
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## β MANUAL COMMIT PROTOCOL
|
|
163
|
+
|
|
164
|
+
When `auto_commit: false` (default):
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
After task completion:
|
|
168
|
+
1. Run verification gate β PASS
|
|
169
|
+
2. Suggest commit to user:
|
|
170
|
+
|
|
171
|
+
π Suggested commit:
|
|
172
|
+
git add src/components/BlogCard.tsx src/components/BlogCard.module.css
|
|
173
|
+
git commit -m "feat(S09/P02): implement BlogCard component"
|
|
174
|
+
|
|
175
|
+
Files changed:
|
|
176
|
+
- src/components/BlogCard.tsx (new, 87 lines)
|
|
177
|
+
- src/components/BlogCard.module.css (new, 42 lines)
|
|
178
|
+
|
|
179
|
+
3. User decides when/how to commit
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## πΊοΈ BOUNDARY MAPS
|
|
185
|
+
|
|
186
|
+
When branching phases, define what each produces:
|
|
187
|
+
|
|
188
|
+
```markdown
|
|
189
|
+
## Boundary Map: P01 β P02
|
|
190
|
+
|
|
191
|
+
### P01 produces (available on main after merge):
|
|
192
|
+
- `src/types/post.ts` β Post, Author interfaces
|
|
193
|
+
- `src/app/api/posts/route.ts` β GET, POST handlers
|
|
194
|
+
- `src/lib/posts.ts` β createPost, getPosts functions
|
|
195
|
+
|
|
196
|
+
### P02 consumes:
|
|
197
|
+
- `Post` type from `src/types/post.ts`
|
|
198
|
+
- `GET /api/posts` endpoint for data fetching
|
|
199
|
+
|
|
200
|
+
### P02 MUST NOT change:
|
|
201
|
+
- Any file in `src/app/api/`
|
|
202
|
+
- Any file in `src/lib/posts.ts`
|
|
203
|
+
- The Post interface (if breaking change needed β new task)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## π MERGE CHECKLIST
|
|
209
|
+
|
|
210
|
+
Before merging a phase branch:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
Pre-merge checklist for flyee/S09/frontend-components:
|
|
214
|
+
[ ] All tasks in phase complete (T01βT04)
|
|
215
|
+
[ ] Verification gate passed on ALL tasks
|
|
216
|
+
[ ] No conflicts with main
|
|
217
|
+
[ ] Branch is up to date with main
|
|
218
|
+
[ ] Phase SUMMARY.md written
|
|
219
|
+
[ ] Commit history clean (squash if messy)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## π‘ FLYEE SAAS EVENTS
|
|
225
|
+
|
|
226
|
+
```python
|
|
227
|
+
# When branch created
|
|
228
|
+
bridge.emit_event("git.branch_created", {
|
|
229
|
+
"sprint": "S09", "phase": "P02",
|
|
230
|
+
"branch": "flyee/S09/frontend-components"
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
# When phase merged
|
|
234
|
+
bridge.emit_event("git.phase_merged", {
|
|
235
|
+
"sprint": "S09", "phase": "P02",
|
|
236
|
+
"branch": "flyee/S09/frontend-components",
|
|
237
|
+
"commits": 4, "files_changed": 12
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
# When commit made (auto-commit mode)
|
|
241
|
+
bridge.emit_event("git.commit", {
|
|
242
|
+
"sprint": "S09", "phase": "P02", "task": "T03",
|
|
243
|
+
"hash": "abc1234", "message": "feat(S09/P02): implement BlogCard"
|
|
244
|
+
})
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## β‘ QUICK REFERENCE
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# Check git preferences
|
|
253
|
+
cat .flyee/config.json | python3 -m json.tool
|
|
254
|
+
|
|
255
|
+
# Create phase branch
|
|
256
|
+
git checkout -b flyee/S09/P02-frontend main
|
|
257
|
+
|
|
258
|
+
# Squash merge after phase
|
|
259
|
+
git checkout main && git merge --squash flyee/S09/P02-frontend
|
|
260
|
+
|
|
261
|
+
# View branch structure
|
|
262
|
+
git branch --list "flyee/*"
|
|
263
|
+
```
|