{"id":"497d5f03-d718-4591-967e-36791f61d6ce","shortId":"qdPrYh","kind":"skill","title":"code-submit","tagline":"Cross-platform code submission workflow - Lint check, non-destructive review, manual verification document, smart staging, clean commit, MR creation. Auto-detects project type (Android/iOS/backend) and adapts to the corresponding lint/build tools. Triggers when the user says \"sub","description":"# Cross-Platform Code Submission Workflow\n\nChains 6 stages together, each with a user confirmation gate. Core principle: **lint first, review without changing logic, human verification as backstop, clean commit to production.**\n\nPrerequisite: The current repository remote points to `gitlab.example.com` and `glab` CLI is installed.\n\n---\n\n## Parameter Parsing\n\nParse from `$ARGUMENTS`:\n- `--target=<branch>`: Target branch (**required**), e.g., `--target=test/VH_2.92.0_20260310140519`\n- `--from=<stage>`: Start from a specific stage (optional), values `stage1` through `stage6`, skipping earlier stages\n- `--type=<android|ios|backend>`: Force a specific project type (optional, defaults to auto-detection)\n\nIf `--target` is not provided, **you must ask the user** for the target branch before continuing.\n\n---\n\n## Step 0: Project Type Detection\n\nAuto-detect the current project type to determine which specific commands are used in subsequent stages.\n\n### Detection Rules (by priority)\n\n1. **Android**: `build.gradle` or `build.gradle.kts` exists AND `**/AndroidManifest.xml` exists\n   - Lint: `./gradlew :<module>:lint --no-daemon`\n   - Test directory pattern: `src/test/`, `src/androidTest/`\n   - Excluded directories: `build/`, `.idea/`, `.gradle/`, `debugpanel/`, `*.iml`\n\n2. **iOS**: `*.xcodeproj` or `*.xcworkspace` or `Package.swift` exists\n   - Lint: `swiftlint lint --reporter json`\n   - Test directory pattern: `*Tests/`, `*UITests/`\n   - Excluded directories: `DerivedData/`, `.build/`, `Pods/`, `*.xcuserstate`\n\n3. **Backend (by language)**:\n   - **Java/Kotlin (Spring Boot)**: `pom.xml` exists OR (`build.gradle` without `AndroidManifest.xml`)\n     - Lint: `./gradlew checkstyleMain` or `./mvnw checkstyle:check`\n   - **Python**: `pyproject.toml` or `requirements.txt` exists\n     - Lint: `ruff check .` or `flake8`\n   - **Go**: `go.mod` exists\n     - Lint: `golangci-lint run`\n   - **Node.js**: `package.json` exists (without the above characteristic files)\n     - Lint: `npm run lint` or `npx eslint .`\n\nOutput confirmation after detection:\n```\nProject type: Android (evidence: build.gradle + AndroidManifest.xml)\nLint command: ./gradlew :<module>:lint --no-daemon\nTest directories: src/test/, src/androidTest/\n```\n\nIf the user specified `--type`, skip auto-detection.\n\n---\n\n## Stage 1: Lint Check\n\n> Goal: Run lint before code review to avoid repeated CI failures due to lint issues\n\n### 1a. Detect Change Scope\n\n```bash\nTARGET_BRANCH=\"<from parameter parsing>\"\ngit fetch origin \"$TARGET_BRANCH\" 2>/dev/null\nCHANGED_FILES=$(git diff --name-only \"origin/$TARGET_BRANCH\"...HEAD)\n```\n\nIf `CHANGED_FILES` is empty, notify the user \"no changed files relative to the target branch\" and terminate.\n\n### 1b. Execute Lint (by project type)\n\n**Android**:\n1. Derive Gradle modules from changed file paths:\n   - `app/src/...` → `:app`\n   - `BaseLib/xxx/src/...` → `:BaseLib:xxx`\n   - `ThirdPartLib/xxx/src/...` → `:ThirdPartLib:xxx`\n   - Files that cannot be mapped → fall back to `:app:lint`\n2. Execute for each changed module (timeout: 300000):\n   ```bash\n   ./gradlew :<module>:lint --no-daemon\n   ```\n\n**iOS**:\n1. Filter changed `.swift` files\n2. Execute:\n   ```bash\n   swiftlint lint --path <file1> --path <file2> --reporter json\n   ```\n\n**Backend**: Execute the lint command determined in Step 0 (timeout: 120000).\n\n### 1c. Parse Results\n\n**Android**: Read `build/reports/lint-results*.xml`, extract `severity=\"Error\"` entries.\n**iOS**: Parse SwiftLint JSON output for `severity: \"error\"` entries.\n**Backend**: Parse the corresponding tool's output.\n\nFor each error, list: file path + line number + error type + description.\n\n### 1d. Handle Errors\n\n- **Has Errors**: Display the error list, attempt auto-fix for simple issues (import sorting, formatting, unused imports). Re-lint after fixing. If errors remain, list remaining issues and ask the user whether to continue (with risk warning).\n- **No Errors**: Pass. Warnings are displayed but do not block.\n\n### 1e. Gate\n\n```\nLint check result: 0 errors, N warnings\nContinue to Code Review?\n```\n\nWait for user confirmation.\n\n---\n\n## Stage 2: Non-Destructive Code Review\n\n> Goal: Quality review only — never alter the user's designed business flow\n\n### 2a. Collect Changes\n\n```bash\ngit diff \"origin/$TARGET_BRANCH\"...HEAD -- '*.kt' '*.java' '*.swift' '*.py' '*.go' '*.ts' '*.js' ':!*Test*' ':!*test*' ':!*spec*' ':!*Mock*'\n```\n\nOnly review production code; exclude test files.\n\n### 2b. Execute Review\n\nReview the diff of each changed file, following these **inviolable rules**:\n\n#### Absolutely Prohibited Modifications\n\nThe following represent the user's design decisions — **only raise questions, never modify**:\n\n- **Control flow logic**: if/when/for/while/switch conditions and branch structure\n- **API call order**: Call chain and sequence of network requests, database operations, SDK calls\n- **State management**: Emission and subscription of StateFlow/LiveData/Combine/Redux/MobX state flows\n- **Method signatures**: Parameter lists, return types, method names, access modifiers\n- **Class hierarchy**: Inheritance relationships, interface implementations, protocol conformance, generic constraints\n- **Business rules**: Price calculations, permission checks, flow transition conditions, data validation rules\n- **Architecture decisions**: Design pattern choices, module partitioning, dependency injection approach, data flow direction\n\n#### Allowed Suggestions (output as suggestions; user decides whether to adopt)\n\n- Variable/method/class naming improvements\n- Code style and formatting consistency\n- Potential null pointer / resource leak / memory leak\n- Performance issues (unnecessary object creation, N+1 queries, main thread blocking operations)\n- Security risks (hard-coded keys, injection vulnerabilities, plaintext storage of sensitive data)\n- Duplicate code reminders\n- Missing error handling (supplement only within existing try-catch scope)\n- Unclosed resources (Cursor, Stream, Connection)\n\n### 2c. Output Suggestions\n\nCategorized by priority:\n\n```\n══ Code Review Suggestions ══\n\nCRITICAL (must address)\n  1. [file:line] Description...\n\nHIGH (strongly recommended)\n  2. [file:line] Description...\n\nMEDIUM (suggested improvement)\n  3. [file:line] Description...\n\nLOW (optional optimization)\n  4. [file:line] Description...\n\nTotal N suggestions (CRITICAL: X, HIGH: X, MEDIUM: X, LOW: X)\n```\n\nIf no issues are found, output \"Code Review passed — no improvements needed.\"\n\n### 2d. Gate\n\nDisplay the suggestion list and ask the user:\n```\nSelect suggestions to adopt (enter numbers like 1,3,5 or all or none):\n```\n\n- Selected suggestions: AI automatically applies changes to code\n- When the user chooses to skip CRITICAL-level items: require additional confirmation \"I understand the risk and choose to skip\"\n- After applying changes, display the diff for user confirmation\n\n---\n\n## Stage 3: Manual Verification Document Generation\n\n> Goal: Generate a detailed review document (flow diagrams + architecture diagrams + key code) for final human review\n\n### 3a. Analyze Changes\n\nRead all changed files (`git diff \"origin/$TARGET_BRANCH\"...HEAD`) and analyze:\n- Which classes/methods/functions were modified\n- Which business modules are involved\n- Data flow direction and inter-component call relationships\n- Added/removed/modified public APIs\n\n### 3b. Generate Review Document\n\nFile path: `docs/reviews/<branch-short-name>-review.md`\n\n`<branch-short-name>` takes the last segment of the branch name, e.g., `bugfix/VH_2.92.0_20260310140519` → `VH_2.92.0_20260310140519`\n\nDocument content:\n\n```markdown\n# Code Review Document\n\n> Branch: <current branch>\n> Target: <target branch>\n> Generated: <YYYY-MM-DD HH:mm>\n\n## 1. Change Summary\n\n| File | Change Type | Description |\n|------|---------|------|\n| path/to/File.kt | Added/Modified/Deleted | One-line description of the change |\n\nTotal N files changed, X lines added, Y lines deleted.\n\n## 2. Business Flow Diagram\n\nUse Mermaid flowchart to describe the **complete business flow involving the changes** (not just the changed parts, but the full flow context where the changes occur).\nUse different colors to highlight changed nodes.\n\n## 3. Architecture Diagram\n\nUse Mermaid classDiagram to describe the class/interface relationships involved.\nOr use sequenceDiagram for key interaction flows (e.g., network request chains, event propagation chains).\n\nIf changes span multiple modules, show inter-module dependency relationships.\n\n## 4. Key Code\n\nList the most critical code snippets (no more than 5), each with annotations explaining:\n- The design intent of this code\n- Why it was implemented this way\n- Boundary cases to watch for\n\n## 5. Risk Assessment\n\n| Risk Item | Level (High/Medium/Low) | Description | Mitigation |\n|--------|---------------|------|---------|\n\n## 6. Manual Testing Recommendations\n\n- [ ] Normal scenario: ...\n- [ ] Error scenario: ...\n- [ ] Boundary scenario: ...\n- [ ] Regression scenario: ... (verify that unmodified related features are not affected)\n```\n\n### 3c. Gate\n\n```\nReview document generated: docs/reviews/<branch>-review.md\nPlease read and confirm: does the manual review pass?\n```\n\n**You must wait for explicit user confirmation before continuing.** This is the most important human verification checkpoint.\n\n---\n\n## Stage 4: Smart Staging\n\n> Goal: Automatically exclude test/debug code; stage only files that need to be committed\n\n### 4a. Scan Changes\n\n```bash\ngit status --porcelain\n```\n\nList all modified, added, and deleted files.\n\n### 4b. Classify Files\n\nClassify each file based on project type:\n\n#### Auto-Exclude (do not stage)\n\n**Universal exclusions**:\n- `.idea/`, `*.iml`, `local.properties`, `.DS_Store`\n- `build/`, `out/`, `dist/`, `target/`\n- `docs/reviews/*-review.md` (Stage 3 documents are for local reading only, not committed)\n\n**Android additional exclusions**:\n- New files under `src/test/` (except modifications to existing test files, e.g., updating tests for a bug fix)\n- New files under `src/androidTest/`\n- `debugpanel/` directory\n- `.gradle/` directory\n\n**iOS additional exclusions**:\n- New files under `*Tests/`\n- New files under `*UITests/`\n- `DerivedData/`, `.build/`, `Pods/`\n- `*.xcuserstate`, `*.xcuserdata`\n\n**Backend additional exclusions**:\n- New files under `tests/`, `test/`, `__tests__/`\n- New `*_test.go`, `*.test.ts`, `*.test.js`, `*_test.py` files\n- `venv/`, `node_modules/`, `__pycache__/`, `.pytest_cache/`\n\n#### Needs Confirmation (content detection flagged as suspicious)\n\nScan **production code** files pending staging for the following suspicious patterns:\n\n- Debug statements: `Log.d(\"test`, `print(\"debug`, `console.log(\"test`, `fmt.Println(\"debug`\n- Hard-coded test IPs/URLs: `192.168.`, `10.0.0.`, `http://localhost` (except in config files)\n- Temporary markers: `// TODO: remove`, `// FIXME`, `// HACK`, `// TEMP`, `// XXX`\n- Debug flags: Newly added `BuildConfig.DEBUG` conditions, `#if DEBUG` blocks, `if __debug__` blocks\n\n#### Normal Staging\n\nFiles not matched by the above rules.\n\n### 4c. Display Staging Plan\n\n```\n══ Staging Plan ══\n\nWill stage (N files):\n  + path/to/Feature.kt\n  + path/to/layout.xml\n  ...\n\nWill exclude (M files):\n  - path/to/FeatureTest.kt (test file)\n  - docs/reviews/xxx-review.md (review document, local only)\n  ...\n\nNeeds confirmation (K files):\n  ? path/to/Utils.kt — line 42 contains Log.d(\"test data\")\n  ...\n\nConfirm staging? (for \"needs confirmation\" files, enter numbers to exclude)\n```\n\n### 4d. Gate\n\nAfter user confirmation, stage files one by one with `git add <file>`. **Never use `git add -A` or `git add .`**.\n\n---\n\n## Stage 5: Clean Commit\n\n> Goal: Rebase onto the latest target branch and generate a clean commit\n\n### 5a. Rebase to Latest Target Branch\n\n```bash\ngit fetch origin \"$TARGET_BRANCH\"\ngit rebase \"origin/$TARGET_BRANCH\"\n```\n\n**If there are conflicts**:\n1. Run `git diff --name-only --diff-filter=U` to list conflicted files\n2. For each conflicted file, show both sides' differences and suggest a resolution strategy\n3. Assist the user in resolving conflicts\n4. After user confirmation: `git add <resolved-file>` then `git rebase --continue`\n5. If the user wants to abort the rebase: `git rebase --abort`\n\n**Note**: Do not auto force-push after rebase; Stage 6 handles the unified push.\n\n### 5b. Generate Changelog\n\n```bash\ngit log \"origin/$TARGET_BRANCH\"..HEAD --oneline --no-merges\n```\n\nGroup commits by type and format:\n\n```\n## Changelog\n\n### Features\n- <commit message>\n\n### Bug Fixes\n- <commit message>\n\n### Refactoring\n- <commit message>\n\n### Other\n- <commit message>\n```\n\nIf there is only one commit, the changelog is that commit's description.\n\n### 5c. Construct Commit Message\n\nAnalyze the staged file changes and generate a conventional commit message:\n\n```\n<type>(<scope>): <concise description>\n\n<detailed explanation (optional, from changelog)>\n```\n\n- `type`: Inferred from change content (feat/fix/refactor/docs/test/chore/perf/ci/style)\n- `scope`: Module name inferred from changed file paths\n- Description: One-line summary of the change purpose\n\n### 5d. Gate\n\n```\n══ Commit Preview ══\n\nCommit message:\n  feat(payment): add retry logic for Stripe payment\n\n  - Add exponential backoff for failed payments\n  - Handle network timeout gracefully\n\nStaged files (N):\n  M path/to/PaymentRetry.kt\n  A path/to/RetryPolicy.kt\n  ...\n\nConfirm commit? (Y=commit / edit=edit message / n=cancel)\n```\n\nAfter user confirmation, execute:\n```bash\ngit commit -m \"<message>\"\n```\n\n---\n\n## Stage 6: MR Creation\n\n> Goal: Create an MR with complete documentation and drive it to mergeable\n\n### 6a. Push Branch\n\n```bash\ngit push -u origin \"$(git branch --show-current)\" --force-with-lease\n```\n\nUses `--force-with-lease` (since Stage 5 performed a rebase) — safer than `--force`.\n\n### 6b. Prepare MR Documentation\n\n1. Check if `docs/plans/` or `docs/04-user-stories/` contains documentation related to this change\n2. If not:\n   - Based on Stage 3's review document \"Change Summary\" and \"Business Flow Diagram\" sections, create a condensed version\n   - Path: `docs/plans/YYYY-MM-DD-<feature-name>.md`\n   - Content must cover this MR's core changes (CI checks for relevance)\n3. Commit and push the document:\n   ```bash\n   git add docs/plans/<doc>.md\n   git commit -m \"docs: add <feature> design document\"\n   git push\n   ```\n\n### 6c. Create MR\n\nConstruct the blob link: Parse group/project from `git remote get-url origin`, concatenate with branch name and file path.\n\n```bash\nglab mr create \\\n  --title \"<Stage 5 commit title>\" \\\n  --description \"$(cat <<'EOF'\n## Changelog\n\n<changelog generated in Stage 5>\n\n## Related Documents\n\n- Design document: <GitLab blob link to docs/plans/ document>\n\n## Change Type\n\n- [x] <corresponding type: Bug fix / New feature / Refactoring / ...>\nEOF\n)\" \\\n  --target-branch \"$TARGET_BRANCH\"\n```\n\nIf an MR already exists, use `glab mr update` to update the description.\n\n### 6d. CI Polling (reuses gitlab-mr skill logic)\n\n```bash\nsleep 5\nglab ci status\n```\n\nPoll pipeline status and handle common failures:\n\n| Failed Job | Fix Approach |\n|----------|---------|\n| `check:mr-documentation` | Update MR description, add blob link |\n| `check:mr-us-relevance` | Modify document content to cover MR changes |\n| Merge conflict | `git fetch && git rebase && git push --force-with-lease` |\n| Other | Display failed job logs, provide fix suggestions |\n\nLoop until CI is all green + no conflicts, or report issues that cannot be auto-fixed.\n\n### 6e. Completion Report\n\n```\n══ Submission Complete ══\n\nMR: https://gitlab.example.com/xxx/project/-/merge_requests/XXX\nCI: Passed / Running / Failed (details...)\nDocument: <blob link>\nChangelog:\n  - feat: ...\n  - fix: ...\n```\n\n---\n\n## Notes\n\n- `./gradlew` and `xcodebuild` commands are set with `timeout: 300000` (5 minutes)\n- Stage files one by one with `git add` — **never use `git add -A` or `git add .`**\n- Both rebase conflicts and force push require user confirmation\n- Stage 3 review documents are for local reading only and are not committed to remote\n- Stage 6 MR documents are a separate condensed design document committed to remote\n- Blob link branch names and file paths must point to already-pushed files\n- When using `--from=stageN` to skip earlier stages, skipped stages are marked \"skipped\" in the final report\n- Every stage's gate must wait for explicit user confirmation — auto-skipping is not allowed\n\n---\n\n## Examples\n\n### Good Example — Full Workflow Execution\n\n```\nUser: /code-submit --target=test/VH_2.92.0_20260310140519\n\nAI: Project type: Android (evidence: build.gradle + AndroidManifest.xml)\n\n══ Stage 1: Lint Check ══\nChanged modules: :app, :BaseLib:payment\nRunning ./gradlew :app:lint :BaseLib:payment:lint ...\nLint check result: 0 errors, 3 warnings\nContinue to Code Review?\n\nUser: Y\n\n══ Stage 2: Code Review ══\nCRITICAL (must address)\n  1. [PaymentRetry.kt:42] Unclosed Cursor — query result in fetchPaymentHistory() is not closed\nHIGH (strongly recommended)\n  2. [PaymentRetry.kt:78] Variable naming — `d` should be renamed to `retryDelay`\nTotal 2 suggestions\nSelect suggestions to adopt:\n\nUser: all\n\n[Applying changes...]\n\n══ Stage 3: Manual Verification Document ══\nReview document generated: docs/reviews/VH_2.92.0_20260310140519-review.md\nPlease read and confirm: does the manual review pass?\n\nUser: Y\n\n══ Stage 4: Smart Staging ══\nWill stage (5 files):\n  + app/src/main/.../PaymentRetry.kt\n  + app/src/main/.../RetryPolicy.kt\n  ...\nWill exclude (2 files):\n  - app/src/test/.../PaymentRetryTest.kt (test file)\n  - docs/reviews/VH_2.92.0_20260310140519-review.md (review document)\nConfirm staging?\n\nUser: Y\n\n══ Stage 5: Clean Commit ══\nCommit message: feat(payment): add retry logic for failed payments\nConfirm commit?\n\nUser: Y\n\n══ Stage 6: MR Creation ══\nMR: https://gitlab.example.com/team/my-project/-/merge_requests/456\nCI: Passed\n```\n\n### Bad Example — Review Modifies Business Logic\n\n```\n# BAD: Code Review stage directly modified the user's if-condition logic\nAI: I have changed line 35 of PaymentRetry.kt from `if (retryCount < 3)` to `if (retryCount < 5)`\n    because 3 retries might not be enough.\n\n# GOOD: Only raise suggestions without directly modifying\nAI: MEDIUM\n  3. [PaymentRetry.kt:35] Retry count — current maxRetry=3; may be insufficient for unstable networks.\n     Consider whether to adjust. (Note: this is a business decision, for reference only)\n```\n\n### Bad Example — Using git add -A for Staging\n\n```\n# BAD: Stage all files at once\ngit add -A\ngit commit -m \"feat: add payment retry\"\n\n# GOOD: Stage files individually, excluding test and debug files\ngit add app/src/main/.../PaymentRetry.kt\ngit add app/src/main/.../RetryPolicy.kt\ngit commit -m \"feat(payment): add retry logic for failed payments\"\n```","tags":["code","submit","enterprise","harness","engineering","addxai","agent-skills","ai-agent","ai-engineering","claude-code","code-review","cursor"],"capabilities":["skill","source-addxai","skill-code-submit","topic-agent-skills","topic-ai-agent","topic-ai-engineering","topic-claude-code","topic-code-review","topic-cursor","topic-devops","topic-enterprise","topic-sre","topic-windsurf"],"categories":["enterprise-harness-engineering"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/addxai/enterprise-harness-engineering/code-submit","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add addxai/enterprise-harness-engineering","source_repo":"https://github.com/addxai/enterprise-harness-engineering","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 16 github stars · SKILL.md body (18,679 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T01:02:11.364Z","embedding":null,"createdAt":"2026-04-21T19:04:00.791Z","updatedAt":"2026-04-22T01:02:11.364Z","lastSeenAt":"2026-04-22T01:02:11.364Z","tsv":"'+1':732 '/androidmanifest.xml':179 '/code-submit':2085 '/dev/null':338 '/gradlew':182,237,288,410,1967,2105 '/mvnw':240 '/paymentretry.kt':2195,2354 '/paymentretrytest.kt':2203 '/retrypolicy.kt':2197,2358 '/team/my-project/-/merge_requests/456':2238 '/xxx/project/-/merge_requests/xxx':1956 '0':147,438,536,2114 '1':172,307,375,416,782,847,980,1483,1737,2096,2131 '10.0.0':1345 '120000':440 '192.168':1344 '1a':325 '1b':368 '1c':441 '1d':479 '1e':531 '2':199,337,401,421,549,789,1006,1498,1749,2125,2145,2156,2200 '2.92.0':969 '20260310140519':970 '2a':567 '2b':595 '2c':770 '2d':830 '3':223,796,848,893,1043,1237,1512,1755,1785,2004,2116,2167,2271,2277,2292,2298 '300000':408,1975 '35':2265 '3a':914 '3b':950 '3c':1143 '4':803,1080,1177,1519,2187 '42':1410 '4a':1193 '4b':1207 '4c':1380 '4d':1425 '5':849,1092,1114,1447,1529,1726,1874,1976,2192,2214,2275 '5a':1462 '5b':1556 '5c':1595 '5d':1638 '6':51,1123,1551,1687,2019,2232 '6a':1702 '6b':1733 '6c':1805 '6d':1863 '6e':1948 'abort':1535,1540 'absolut':609 'access':664 'ad':1002,1203,1362 'adapt':32 'add':1437,1441,1445,1524,1646,1652,1793,1800,1896,1985,1989,1993,2221,2322,2333,2339,2352,2356,2364 'added/modified/deleted':988 'added/removed/modified':947 'addit':873,1247,1275,1291 'address':781,2130 'adjust':2308 'adopt':710,843,2161 'affect':1142 'ai':856,2088,2260,2290 'allow':701,2077 'alreadi':1853,2042 'already-push':2041 'alter':560 'analyz':915,928,1599 'android':116,173,282,374,444,1246,2091 'android/ios/backend':30 'androidmanifest.xml':235,285,2094 'annot':1095 'api':633,949 'app':384,399,2101,2106 'app/src':383 'app/src/main':2194,2196,2353,2357 'app/src/test':2202 'appli':858,884,2164 'approach':697,1888 'architectur':688,906,1044 'argument':93 'ask':137,512,837 'assess':1116 'assist':1513 'attempt':488 'auto':26,128,152,304,490,1218,1544,1946,2073 'auto-detect':25,127,151,303 'auto-exclud':1217 'auto-fix':489,1945 'auto-skip':2072 'automat':857,1181 'avoid':317 'back':397 'backend':118,224,430,461,1290 'backoff':1654 'backstop':71 'bad':2241,2247,2318,2326 'base':1213,1752 'baselib':386,2102,2108 'baselib/xxx/src':385 'bash':329,409,423,570,1196,1468,1559,1682,1705,1791,1828,1872 'blob':1810,1897,2031 'block':530,736,1367,1370 'boot':229 'boundari':1109,1131 'branch':96,143,331,336,348,365,575,631,925,964,977,1456,1467,1473,1478,1564,1704,1711,1823,1847,1849,2033 'bug':1264,1578 'bugfix/vh_2.92.0_20260310140519':967 'build':194,220,1230,1286 'build.gradle':174,233,284,2093 'build.gradle.kts':176 'build/reports/lint-results':446 'buildconfig.debug':1363 'busi':565,676,934,1007,1017,1762,2245,2313 'cach':1310 'calcul':679 'call':634,636,646,945 'cancel':1677 'cannot':393,1943 'case':1110 'cat':1834 'catch':763 'categor':773 'chain':50,637,1065,1068 'chang':66,327,339,351,359,380,405,418,569,603,859,885,916,919,981,984,995,999,1021,1025,1034,1041,1070,1195,1603,1618,1626,1636,1748,1759,1780,1841,1910,2099,2165,2263 'changelog':1558,1576,1589,1614,1836,1963 'characterist':267 'check':11,242,250,309,534,681,1738,1782,1889,1899,2098,2112 'checkpoint':1175 'checkstyl':241 'checkstylemain':238 'choic':692 'choos':865,880 'ci':319,1781,1864,1876,1933,1957,2239 'class':666 'class/interface':1052 'classdiagram':1048 'classes/methods/functions':930 'classifi':1208,1210 'clean':21,72,1448,1460,2215 'cli':86 'close':2141 'code':2,7,47,314,542,553,591,714,742,752,776,824,861,909,974,1082,1087,1102,1184,1320,1341,2120,2126,2248 'code-submit':1 'collect':568 'color':1038 'command':162,287,434,1970 'commit':22,73,1192,1245,1449,1461,1571,1587,1592,1597,1608,1640,1642,1670,1672,1684,1786,1797,2015,2028,2216,2217,2228,2336,2360 'common':1883 'complet':1016,1695,1949,1952 'compon':944 'concaten':1821 'condens':1768,2025 'condit':629,684,1364,2258 'config':1349 'confirm':58,277,547,874,891,1153,1165,1312,1405,1415,1419,1429,1522,1669,1680,2002,2071,2178,2209,2227 'conflict':1482,1496,1501,1518,1912,1938,1996 'conform':673 'connect':769 'consid':2305 'consist':718 'console.log':1335 'constraint':675 'construct':1596,1808 'contain':1411,1743 'content':972,1313,1619,1773,1906 'context':1031 'continu':145,517,540,1167,1528,2118 'control':625 'convent':1607 'core':60,1779 'correspond':35,464 'count':2295 'cover':1775,1908 'creat':1691,1766,1806,1831 'creation':24,730,1689,2234 'critic':779,810,869,1086,2128 'critical-level':868 'cross':5,45 'cross-platform':4,44 'current':78,155,1714,2296 'cursor':767,2134 'd':2149 'daemon':186,292,414 'data':685,698,750,938,1414 'databas':643 'debug':1329,1334,1338,1359,1366,1369,2349 'debugpanel':197,1270 'decid':707 'decis':619,689,2314 'default':125 'delet':1005,1205 'depend':695,1078 'deriv':376 'deriveddata':219,1285 'describ':1014,1050 'descript':478,785,792,799,806,986,992,1121,1594,1629,1833,1862,1895 'design':564,618,690,1098,1801,1839,2026 'destruct':14,552 'detail':901,1610,1961 'detect':27,129,150,153,168,279,305,326,1314 'determin':159,435 'diagram':905,907,1009,1045,1764 'diff':342,572,600,888,922,1486,1491 'diff-filt':1490 'differ':1037,1506 'direct':700,940,2251,2288 'directori':188,193,213,218,294,1271,1273 'display':484,526,832,886,1381,1924 'dist':1232 'doc':1799 'docs/04-user-stories':1742 'docs/plans':1740,1794 'docs/plans/yyyy-mm-dd-':1771 'docs/reviews':956,1148,1234 'docs/reviews/vh_2.92.0_20260310140519-review.md':2174,2206 'docs/reviews/xxx-review.md':1399 'document':18,896,903,953,971,976,1146,1238,1401,1696,1736,1744,1758,1790,1802,1838,1840,1892,1905,1962,2006,2021,2027,2170,2172,2208 'drive':1698 'ds':1228 'due':321 'duplic':751 'e.g':98,966,1062,1259 'earlier':113,2051 'edit':1673,1674 'emiss':649 'empti':354 'enough':2282 'enter':844,1421 'entri':451,460 'eof':1835,1844 'error':450,459,470,476,481,483,486,506,522,537,755,1129,2115 'eslint':275 'event':1066 'everi':2062 'evid':283,2092 'exampl':2078,2080,2242,2319 'except':1253,1347 'exclud':192,217,592,1182,1219,1393,1424,2199,2346 'exclus':1224,1248,1276,1292 'execut':369,402,422,431,596,1681,2083 'exist':177,180,206,231,247,255,263,760,1256,1854 'explain':1096 'explan':1611 'explicit':1163,2069 'exponenti':1653 'extract':448 'fail':1656,1885,1925,1960,2225,2368 'failur':320,1884 'fall':396 'feat':1644,1964,2219,2338,2362 'feat/fix/refactor/docs/test/chore/perf/ci/style':1620 'featur':1139,1577 'fetch':333,1470,1914 'fetchpaymenthistori':2138 'file':268,340,352,360,381,391,420,472,594,604,783,790,797,804,920,954,983,998,1187,1206,1209,1212,1250,1258,1267,1278,1282,1294,1304,1321,1350,1373,1389,1395,1398,1407,1420,1431,1497,1502,1602,1627,1663,1826,1979,2036,2044,2193,2201,2205,2329,2344,2350 'filter':417,1492 'final':911,2060 'first':63 'fix':491,504,1265,1579,1887,1929,1947,1965 'fixm':1355 'flag':1315,1360 'flake8':252 'flow':566,626,655,682,699,904,939,1008,1018,1030,1061,1763 'flowchart':1012 'fmt.println':1337 'follow':605,613,1326 'forc':119,1546,1716,1721,1732,1920,1998 'force-push':1545 'force-with-leas':1715,1720,1919 'format':497,717,1575 'found':822 'full':1029,2081 'gate':59,532,831,1144,1426,1639,2065 'generat':897,899,951,979,1147,1458,1557,1605,2173 'generic':674 'get':1818 'get-url':1817 'git':332,341,571,921,1197,1436,1440,1444,1469,1474,1485,1523,1526,1538,1560,1683,1706,1710,1792,1796,1803,1815,1913,1915,1917,1984,1988,1992,2321,2332,2335,2351,2355,2359 'gitlab':1868 'gitlab-mr':1867 'gitlab.example.com':83,1955,2237 'gitlab.example.com/team/my-project/-/merge_requests/456':2236 'gitlab.example.com/xxx/project/-/merge_requests/xxx':1954 'glab':85,1829,1856,1875 'go':253,581 'go.mod':254 'goal':310,555,898,1180,1450,1690 'golangci':258 'golangci-lint':257 'good':2079,2283,2342 'grace':1661 'gradl':196,377,1272 'green':1936 'group':1570 'group/project':1813 'hack':1356 'handl':480,756,1552,1658,1882 'hard':741,1340 'hard-cod':740,1339 'head':349,576,926,1565 'hierarchi':667 'high':786,812,2142 'high/medium/low':1120 'highlight':1040 'human':68,912,1173 'idea':195,1225 'if-condit':2256 'if/when/for/while/switch':628 'iml':198,1226 'implement':671,1106 'import':495,499,1172 'improv':713,795,828 'individu':2345 'infer':1616,1624 'inherit':668 'inject':696,744 'instal':88 'insuffici':2301 'intent':1099 'inter':943,1076 'inter-compon':942 'inter-modul':1075 'interact':1060 'interfac':670 'inviol':607 'involv':937,1019,1054 'io':117,200,415,452,1274 'ips/urls':1343 'issu':324,494,510,727,820,1941 'item':871,1118 'java':578 'java/kotlin':227 'job':1886,1926 'js':583 'json':211,429,455 'k':1406 'key':743,908,1059,1081 'kt':577 'languag':226 'last':960 'latest':1454,1465 'leak':723,725 'leas':1718,1723,1922 'level':870,1119 'like':846 'line':474,784,791,798,805,991,1001,1004,1409,1632,2264 'link':1811,1898,2032 'lint':10,62,181,183,207,209,236,248,256,259,269,272,286,289,308,312,323,370,400,411,425,433,502,533,2097,2107,2110,2111 'lint/build':36 'list':471,487,508,659,835,1083,1200,1495 'local':1241,1402,2009 'local.properties':1227 'localhost':1346 'log':1561,1927 'log.d':1331,1412 'logic':67,627,1648,1871,2223,2246,2259,2366 'loop':1931 'low':800,816 'm':1394,1665,1685,1798,2337,2361 'main':734 'manag':648 'manual':16,894,1124,1156,2168,2181 'map':395 'mark':2056 'markdown':973 'marker':1352 'match':1375 'maxretri':2297 'may':2299 'md':1772,1795 'medium':793,814,2291 'memori':724 'merg':1569,1911 'mergeabl':1701 'mermaid':1011,1047 'messag':1598,1609,1643,1675,2218 'method':656,662 'might':2279 'minut':1977 'miss':754 'mitig':1122 'mock':587 'modif':611,1254 'modifi':624,665,932,1202,1904,2244,2252,2289 'modul':378,406,693,935,1073,1077,1307,1622,2100 'mr':23,1688,1693,1735,1777,1807,1830,1852,1857,1869,1891,1894,1901,1909,1953,2020,2233,2235 'mr-document':1890 'mr-us-relev':1900 'multipl':1072 'must':136,780,1160,1774,2038,2066,2129 'n':538,731,808,997,1388,1664,1676 'name':344,663,712,965,1488,1623,1824,2034,2148 'name-on':343,1487 'need':829,1189,1311,1404,1418 'network':641,1063,1659,2304 'never':559,623,1438,1986 'new':1249,1266,1277,1281,1293,1299 'newli':1361 'no-daemon':184,290,412 'no-merg':1567 'node':1042,1306 'node.js':261 'non':13,551 'non-destruct':12,550 'none':853 'normal':1127,1371 'note':1541,1966,2309 'notifi':355 'npm':270 'npx':274 'null':720 'number':475,845,1422 'object':729 'occur':1035 'one':990,1432,1434,1586,1631,1980,1982 'one-lin':989,1630 'onelin':1566 'onto':1452 'oper':644,737 'optim':802 'option':107,124,801,1612 'order':635 'origin':334,346,573,923,1471,1476,1562,1709,1820 'output':276,456,467,703,771,823 'package.json':262 'package.swift':205 'paramet':89,658 'pars':90,91,442,453,462,1812 'part':1026 'partit':694 'pass':523,826,1158,1958,2183,2240 'path':382,426,427,473,955,1628,1770,1827,2037 'path/to/feature.kt':1390 'path/to/featuretest.kt':1396 'path/to/file.kt':987 'path/to/layout.xml':1391 'path/to/paymentretry.kt':1666 'path/to/retrypolicy.kt':1668 'path/to/utils.kt':1408 'pattern':189,214,691,1328 'payment':1645,1651,1657,2103,2109,2220,2226,2340,2363,2369 'paymentretry.kt':2267 'paymentretry.kt:35':2293 'paymentretry.kt:42':2132 'paymentretry.kt:78':2146 'pend':1322 'perform':726,1727 'permiss':680 'pipelin':1879 'plaintext':746 'plan':1383,1385 'platform':6,46 'pleas':1150,2175 'pod':221,1287 'point':81,2039 'pointer':721 'poll':1865,1878 'pom.xml':230 'porcelain':1199 'potenti':719 'prepar':1734 'prerequisit':76 'preview':1641 'price':678 'principl':61 'print':1333 'prioriti':171,775 'product':75,590,1319 'prohibit':610 'project':28,122,148,156,280,372,1215,2089 'propag':1067 'protocol':672 'provid':134,1928 'public':948 'purpos':1637 'push':1547,1555,1703,1707,1788,1804,1918,1999,2043 'py':580 'pycach':1308 'pyproject.toml':244 'pytest':1309 'python':243 'qualiti':556 'queri':733,2135 'question':622 'rais':621,2285 're':501 're-lint':500 'read':445,917,1151,1242,2010,2176 'rebas':1451,1463,1475,1527,1537,1539,1549,1729,1916,1995 'recommend':788,1126,2144 'refactor':1580 'refer':2316 'regress':1133 'relat':361,1138,1745,1837 'relationship':669,946,1053,1079 'relev':1784,1903 'remain':507,509 'remind':753 'remot':80,1816,2017,2030 'remov':1354 'renam':2152 'repeat':318 'report':210,428,1940,1950,2061 'repositori':79 'repres':614 'request':642,1064 'requir':97,872,2000 'requirements.txt':246 'resolut':1510 'resolv':1517 'resourc':722,766 'result':443,535,2113,2136 'retri':1647,2222,2278,2294,2341,2365 'retrycount':2270,2274 'retrydelay':2154 'return':660 'reus':1866 'review':15,64,315,543,554,557,589,597,598,777,825,902,913,952,975,1145,1157,1400,1757,2005,2121,2127,2171,2182,2207,2243,2249 'review.md':957,1149,1235 'risk':519,739,878,1115,1117 'ruff':249 'rule':169,608,677,687,1379 'run':260,271,311,1484,1959,2104 'safer':1730 'say':42 'scan':1194,1318 'scenario':1128,1130,1132,1134 'scope':328,764,1621 'sdk':645 'section':1765 'secur':738 'segment':961 'select':840,854,2158 'sensit':749 'separ':2024 'sequenc':639 'sequencediagram':1057 'set':1972 'sever':449,458 'show':1074,1503,1713 'show-curr':1712 'side':1505 'signatur':657 'simpl':493 'sinc':1724 'skill':1870 'skill-code-submit' 'skip':112,302,867,882,2050,2053,2057,2074 'sleep':1873 'smart':19,1178,2188 'snippet':1088 'sort':496 'source-addxai' 'span':1071 'spec':586 'specif':105,121,161 'specifi':300 'spring':228 'src/androidtest':191,296,1269 'src/test':190,295,1252 'stage':20,52,106,114,167,306,548,892,1176,1179,1185,1222,1236,1323,1372,1382,1384,1387,1416,1430,1446,1550,1601,1662,1686,1725,1754,1978,2003,2018,2052,2054,2063,2095,2124,2166,2186,2189,2191,2210,2213,2231,2250,2325,2327,2343 'stage1':109 'stage6':111 'stagen':2048 'start':102 'state':647,654 'stateflow/livedata/combine/redux/mobx':653 'statement':1330 'status':1198,1877,1880 'step':146,437 'storag':747 'store':1229 'strategi':1511 'stream':768 'stripe':1650 'strong':787,2143 'structur':632 'style':715 'sub':43 'submiss':8,48,1951 'submit':3 'subscript':651 'subsequ':166 'suggest':702,705,772,778,794,809,834,841,855,1508,1930,2157,2159,2286 'summari':982,1633,1760 'supplement':757 'suspici':1317,1327 'swift':419,579 'swiftlint':208,424,454 'take':958 'target':94,95,99,131,142,330,335,347,364,574,924,978,1233,1455,1466,1472,1477,1563,1846,1848,2086 'target-branch':1845 'temp':1357 'temporari':1351 'termin':367 'test':187,212,215,293,584,585,593,1125,1257,1261,1280,1296,1297,1298,1332,1336,1342,1397,1413,2204,2347 'test.go':1300 'test.js':1302 'test.py':1303 'test.ts':1301 'test/debug':1183 'test/vh_2.92.0_20260310140519':100,2087 'thirdpartlib':389 'thirdpartlib/xxx/src':388 'thread':735 'timeout':407,439,1660,1974 'titl':1832 'todo':1353 'togeth':53 'tool':37,465 'topic-agent-skills' 'topic-ai-agent' 'topic-ai-engineering' 'topic-claude-code' 'topic-code-review' 'topic-cursor' 'topic-devops' 'topic-enterprise' 'topic-sre' 'topic-windsurf' 'total':807,996,2155 'transit':683 'tri':762 'trigger':38 'try-catch':761 'ts':582 'type':29,115,123,149,157,281,301,373,477,661,985,1216,1573,1615,1842,2090 'u':1493,1708 'uitest':216,1284 'unclos':765,2133 'understand':876 'unifi':1554 'univers':1223 'unmodifi':1137 'unnecessari':728 'unstabl':2303 'unus':498 'updat':1260,1858,1860,1893 'url':1819 'us':1902 'use':164,1010,1036,1046,1056,1439,1719,1855,1987,2046,2320 'user':41,57,139,299,357,514,546,562,616,706,839,864,890,1164,1428,1515,1521,1532,1679,2001,2070,2084,2122,2162,2184,2211,2229,2254 'valid':686 'valu':108 'variabl':2147 'variable/method/class':711 'venv':1305 'verif':17,69,895,1174,2169 'verifi':1135 'version':1769 'vh':968 'vulner':745 'wait':544,1161,2067 'want':1533 'warn':520,524,539,2117 'watch':1112 'way':1108 'whether':515,708,2306 'within':759 'without':65,234,264,2287 'workflow':9,49,2082 'x':811,813,815,817,1000,1843 'xcodebuild':1969 'xcodeproj':201 'xcuserdata':1289 'xcuserst':222,1288 'xcworkspac':203 'xml':447 'xxx':387,390,1358 'y':1003,1671,2123,2185,2212,2230","prices":[{"id":"0c38dd9b-7ad2-4931-898c-122afa97bcd5","listingId":"497d5f03-d718-4591-967e-36791f61d6ce","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"addxai","category":"enterprise-harness-engineering","install_from":"skills.sh"},"createdAt":"2026-04-21T19:04:00.791Z"}],"sources":[{"listingId":"497d5f03-d718-4591-967e-36791f61d6ce","source":"github","sourceId":"addxai/enterprise-harness-engineering/code-submit","sourceUrl":"https://github.com/addxai/enterprise-harness-engineering/tree/main/skills/code-submit","isPrimary":false,"firstSeenAt":"2026-04-21T19:04:00.791Z","lastSeenAt":"2026-04-22T01:02:11.364Z"}],"details":{"listingId":"497d5f03-d718-4591-967e-36791f61d6ce","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"addxai","slug":"code-submit","github":{"repo":"addxai/enterprise-harness-engineering","stars":16,"topics":["agent-skills","ai-agent","ai-engineering","claude-code","code-review","cursor","devops","enterprise","sre","windsurf"],"license":"apache-2.0","html_url":"https://github.com/addxai/enterprise-harness-engineering","pushed_at":"2026-04-17T08:57:37Z","description":"Enterprise-grade AI Agent Skills for software development, DevOps, SRE, security, and product teams. Compatible with Claude Code, Cursor, Windsurf, Gemini CLI, GitHub Copilot, and 30+ AI coding agents.","skill_md_sha":"de41147988aca02bd55d26676db9e158ef74d3df","skill_md_path":"skills/code-submit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/addxai/enterprise-harness-engineering/tree/main/skills/code-submit"},"layout":"multi","source":"github","category":"enterprise-harness-engineering","frontmatter":{"name":"code-submit","description":"Cross-platform code submission workflow - Lint check, non-destructive review, manual verification document, smart staging, clean commit, MR creation. Auto-detects project type (Android/iOS/backend) and adapts to the corresponding lint/build tools. Triggers when the user says \"submit code\", \"prepare to submit\", \"submit\", \"start submission flow\", or \"code submit\"."},"skills_sh_url":"https://skills.sh/addxai/enterprise-harness-engineering/code-submit"},"updatedAt":"2026-04-22T01:02:11.364Z"}}