### Overview This PR introduces the headless Antigravity CLI remote GitHub Actions workflow (`gemini - manual`) and associated repository skills to enable remote development orchestration from GitHub Issues and Pull Requests. ### Key Changes 1. **GitHub Actions Workflow (`.github/workflows/gemini-manual.yml`)**: - Collaborator access guard (`OWNER`, `MEMBER`, `COLLABORATOR`). - Interactive emoji reactions (`eyes` and `rocket`). - Multi-turn conversation persistence via `actions/cache@v4` on `~/.gemini/antigravity-cli/conversations` and `brain/`. - Command dispatchers for `/plan`, `/implement`, and `/fix`. - Pre-push monorepo verification gates (`typecheck`, `lint`, `test`). 2. **Repository Skills (`.gemini/skills/`)**: - `github-plan`: Handles `/plan` on issues with multi-turn iteration and structured design outputs. - `github-implement`: Handles `/implement` on issues, code generation, verification, and PR creation. - `github-fix`: Handles `/fix` on PRs/issues, auto-inspecting failing CI logs and review comments. 3. **Project Guidelines (`GEMINI.md`)**: - Updated safety rules to allow automated GitOps workflows. --- Disclosure: I'm an AI assistant helping deytenit; I'm not deytenit.
137 lines
6.4 KiB
Markdown
137 lines
6.4 KiB
Markdown
---
|
|
name: github-plan
|
|
description: Analyze an issue thread, iterate on feedback, and produce or update an implementation plan for ermnvldmr.com.
|
|
---
|
|
|
|
# GitHub Issue Planning Skill (ASD-STE100 Standard)
|
|
|
|
## Overview
|
|
|
|
Use this skill when an issue receives the `/plan [optional instructions]` command.
|
|
|
|
This skill creates or updates an implementation plan before code modification starts. All outputs must follow ASD-STE100 language constraints and repository standards.
|
|
|
|
---
|
|
|
|
## ASD-STE100 Writing Rules
|
|
|
|
Follow these rules for all generated plans and documentation:
|
|
|
|
| Rule | Limit | Approved Example | Non-Approved Example |
|
|
| :--- | :--- | :--- | :--- |
|
|
| **Procedural Sentences** | Max **20 words** | "Run `pnpm test`. Verify that all unit tests pass." | "You should run the pnpm test command to verify that all the unit tests pass properly without errors." |
|
|
| **Descriptive Sentences** | Max **25 words** | "The `Button` component uses `cva` to manage style variants." | "The Button component is implemented using the cva library because it helps us manage complex style variants across different themes easily." |
|
|
| **Voice** | **Active voice** | "The function validates the user input." | "The user input is validated by the function." |
|
|
| **Mood and Tense** | **Present tense** and **Imperative mood** | "Click **Submit**. The form transmits the data." | "You will click submit and the form will be transmitting the data." |
|
|
| **Noun Clusters** | Max **3 nouns** | "Theme configuration file" | "Theme variant style configuration file" |
|
|
|
|
### Controlled Vocabulary Guidelines
|
|
- Do not use conversational filler (for example: "basically", "let's dive in", "simply", "feel free to").
|
|
- Use approved verbs: use *use* (not *utilize*), *stop* (not *terminate*), *start* (not *initiate*), *show* (not *exhibit*).
|
|
- Use clear and literal technical terms.
|
|
|
|
---
|
|
|
|
## Planning Responsibilities
|
|
|
|
### 1. Ingest Full Issue Context
|
|
- Read the issue title, issue description, and all subsequent comments.
|
|
- Identify user requirements, technical constraints, and reported symptoms.
|
|
- Inspect relevant source files in the repository before proposing changes.
|
|
- Read `GEMINI.md` to confirm current project conventions.
|
|
|
|
### 2. Multi-Turn Plan Iteration
|
|
- Check if an earlier implementation plan exists in the issue thread.
|
|
- If an earlier plan exists:
|
|
- Do not create a plan from zero.
|
|
- Retain approved architectural decisions from previous turns.
|
|
- Apply the requested modifications or additions from the latest comment.
|
|
- Summarize the specific adjustments made to the previous plan.
|
|
- If no earlier plan exists:
|
|
- Create a new baseline implementation plan from the issue requirements.
|
|
|
|
### 3. Enforce Repository Architecture (`GEMINI.md`)
|
|
Every proposed plan must comply with repository architecture:
|
|
- **Build System**: Use Rsbuild and Rspack. Do not propose Vite, Webpack, or Next.js.
|
|
- **Strict TypeScript**:
|
|
- Do not use `any`.
|
|
- Do not use type assertions (`as Type`). Use type guards or `castRef` from `@ermnvldmr/stl`.
|
|
- Do not use non-null assertions (`!`).
|
|
- Use `import type` for type-only imports.
|
|
- Define object shapes with `interface`, not `type` aliases.
|
|
- Require JSDoc comments on all exported symbols.
|
|
- **Component Architecture** (`packages/ui`):
|
|
- Place components in `packages/ui/src/components/<ComponentName>/`.
|
|
- Provide `<ComponentName>.tsx`, `<ComponentName>.stories.tsx`, and `<ComponentName>.test.tsx`.
|
|
- Use `cva` for variant definitions.
|
|
- Merge class names with `cn(...)` from `@ermnvldmr/stl`.
|
|
- **Accessibility & State**:
|
|
- Use React Aria hooks (`useButton`, `useFocusRing`, `useHover`) and Radix UI primitives.
|
|
- Use standard React state (`useState`, `useReducer`, `useContext`) and `react-stately`.
|
|
- Do not introduce external state management libraries.
|
|
- **Monorepo Import Rules**:
|
|
- Use relative import paths within the same package.
|
|
- Do not import `@ermnvldmr/<package>` inside `<package>` itself.
|
|
- **Protected Files**:
|
|
- Do not modify `.env.keys`, `pnpm-lock.yaml`, `LICENSE`, `services/docs/content/`, or `services/www/content/`.
|
|
|
|
---
|
|
|
|
## Output Plan Structure
|
|
|
|
Format the generated plan with the following markdown template:
|
|
|
|
```markdown
|
|
### Goal
|
|
[Describe the objective in 1-2 sentences. Keep each sentence under 25 words.]
|
|
|
|
### Architecture & Technical Decisions
|
|
- [Decision 1: Explain pattern, primitive, or component structure.]
|
|
- [Decision 2: Explain typing or API contracts.]
|
|
- [Decision 3: Explain state management or accessibility integration.]
|
|
|
|
### File Changes
|
|
- `[NEW]` `packages/ui/src/components/NewComponent/NewComponent.tsx` - [Purpose]
|
|
- `[NEW]` `packages/ui/src/components/NewComponent/NewComponent.stories.tsx` - [Purpose]
|
|
- `[NEW]` `packages/ui/src/components/NewComponent/NewComponent.test.tsx` - [Purpose]
|
|
- `[MODIFY]` `packages/ui/src/index.ts` - [Export new component]
|
|
|
|
### Verification Plan
|
|
1. `pnpm typecheck` - Verify zero TypeScript compiler errors.
|
|
2. `pnpm lint` - Verify zero ESLint warnings and errors.
|
|
3. `pnpm test` - Run unit and integration tests.
|
|
4. `pnpm build` - Run full workspace build.
|
|
|
|
### Open Questions
|
|
- [List open questions or ambiguities. If no open questions exist, write "None.".]
|
|
|
|
Disclosure: I'm an AI assistant helping deytenit; I'm not deytenit.
|
|
```
|
|
|
|
---
|
|
|
|
## Common Traps and Solutions
|
|
|
|
| Anti-Pattern | Correct Action |
|
|
| :--- | :--- |
|
|
| Regenerating a new plan after user feedback | Update the existing plan and highlight modified sections. |
|
|
| Using `as Type` assertions in the proposed code | Propose explicit type guards or `castRef` helpers. |
|
|
| Missing Storybook or Vitest files for UI components | Include `.stories.tsx` and `.test.tsx` in the file plan. |
|
|
| Proposing external state libraries | Use React 19 primitives and `react-stately`. |
|
|
| Omitting the attribution line | Append the mandatory disclosure line at the end. |
|
|
|
|
---
|
|
|
|
## Verification Checklist
|
|
|
|
Before posting the plan response, verify all items:
|
|
|
|
- [ ] The issue thread context and all user comments are analyzed.
|
|
- [ ] Existing plans are updated rather than replaced from scratch.
|
|
- [ ] Proposed code satisfies all `GEMINI.md` constraints (`strict: true`, no `any`, no `as`, no `!`).
|
|
- [ ] All UI components include unit tests and Storybook stories.
|
|
- [ ] All sentences follow ASD-STE100 limits (<=20 words for instructions, <=25 words for descriptions).
|
|
- [ ] Active voice is used throughout the plan.
|
|
- [ ] The output concludes with: `Disclosure: I'm an AI assistant helping deytenit; I'm not deytenit.`
|
|
|