argos-harness 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 +21 -0
- package/assets/agents/auditor.md +140 -0
- package/assets/agents/commit-pr-pilot.md +154 -0
- package/assets/agents/explorer.md +93 -0
- package/assets/agents/implementer.md +117 -0
- package/assets/agents/leader.md +149 -0
- package/assets/agents/researcher.md +89 -0
- package/assets/agents/review-readability.md +87 -0
- package/assets/agents/review-reliability.md +100 -0
- package/assets/agents/review-resilience.md +87 -0
- package/assets/agents/review-risk.md +87 -0
- package/assets/agents/reviewer.md +167 -0
- package/assets/agents/ticket-audit.md +129 -0
- package/assets/hooks/argos-guard-destructive.sh +127 -0
- package/assets/hooks/argos-quality-gate.sh +129 -0
- package/assets/managed/aterrizaje.md +24 -0
- package/assets/managed/formato-respuesta.md +21 -0
- package/assets/managed/identidad.md +48 -0
- package/assets/managed/operaciones-seguras.md +14 -0
- package/assets/managed/orquestacion.md +169 -0
- package/assets/output-styles/argos.md +71 -0
- package/assets/skills/ai-sdk-5/SKILL.md +230 -0
- package/assets/skills/angular/SKILL.md +19 -0
- package/assets/skills/angular/references/architecture.md +137 -0
- package/assets/skills/angular/references/core.md +197 -0
- package/assets/skills/angular/references/forms.md +115 -0
- package/assets/skills/angular/references/performance.md +124 -0
- package/assets/skills/apollo-client/SKILL.md +61 -0
- package/assets/skills/app-blueprint/SKILL.md +45 -0
- package/assets/skills/app-blueprint/assets/module-template.md +48 -0
- package/assets/skills/app-blueprint/assets/system-template.md +38 -0
- package/assets/skills/app-blueprint/references/workflow.md +101 -0
- package/assets/skills/app-builder/SKILL.md +43 -0
- package/assets/skills/app-builder/phases/0-product.md +58 -0
- package/assets/skills/app-builder/phases/1-scaffold.md +33 -0
- package/assets/skills/app-builder/phases/10-store.md +40 -0
- package/assets/skills/app-builder/phases/2-data.md +34 -0
- package/assets/skills/app-builder/phases/3-domain.md +33 -0
- package/assets/skills/app-builder/phases/4-ui-nav.md +32 -0
- package/assets/skills/app-builder/phases/5-identity.md +30 -0
- package/assets/skills/app-builder/phases/6-polish.md +34 -0
- package/assets/skills/app-builder/phases/7-brand.md +31 -0
- package/assets/skills/app-builder/phases/8-web.md +30 -0
- package/assets/skills/app-builder/phases/9-docs.md +31 -0
- package/assets/skills/app-ia/SKILL.md +54 -0
- package/assets/skills/astro/SKILL.md +39 -0
- package/assets/skills/axios/SKILL.md +61 -0
- package/assets/skills/branch-pr/SKILL.md +200 -0
- package/assets/skills/bullmq/SKILL.md +55 -0
- package/assets/skills/chained-pr/SKILL.md +48 -0
- package/assets/skills/chained-pr/references/chaining-details.md +99 -0
- package/assets/skills/cognitive-doc-design/SKILL.md +81 -0
- package/assets/skills/comment-writer/SKILL.md +74 -0
- package/assets/skills/dashboard-ia/SKILL.md +54 -0
- package/assets/skills/django-drf/SKILL.md +180 -0
- package/assets/skills/go-testing/SKILL.md +47 -0
- package/assets/skills/go-testing/references/examples.md +89 -0
- package/assets/skills/issue-creation/SKILL.md +223 -0
- package/assets/skills/jira-epic/SKILL.md +306 -0
- package/assets/skills/jira-task/SKILL.md +382 -0
- package/assets/skills/judgment-day/SKILL.md +52 -0
- package/assets/skills/judgment-day/references/prompts-and-formats.md +98 -0
- package/assets/skills/lightsail-deploy/SKILL.md +44 -0
- package/assets/skills/lightsail-deploy/references/runbook.md +102 -0
- package/assets/skills/loop-back-debug/SKILL.md +102 -0
- package/assets/skills/mantine-form/SKILL.md +57 -0
- package/assets/skills/mongoose/SKILL.md +66 -0
- package/assets/skills/nextjs-15/SKILL.md +144 -0
- package/assets/skills/not-boring-mobile/SKILL.md +43 -0
- package/assets/skills/not-boring-mobile/references/not-boring-playbook.md +65 -0
- package/assets/skills/playwright/SKILL.md +315 -0
- package/assets/skills/pr-comments/SKILL.md +93 -0
- package/assets/skills/pr-create/SKILL.md +64 -0
- package/assets/skills/promo-video/SKILL.md +52 -0
- package/assets/skills/promo-video/assets/package.template.json +22 -0
- package/assets/skills/promo-video/assets/promo.template.tsx +469 -0
- package/assets/skills/promo-video/assets/theme.template.ts +27 -0
- package/assets/skills/promo-video/references/pipeline.md +119 -0
- package/assets/skills/promo-video-web/SKILL.md +51 -0
- package/assets/skills/promo-video-web/assets/browser-promo.template.tsx +385 -0
- package/assets/skills/promo-video-web/assets/capture.template.ts +70 -0
- package/assets/skills/promo-video-web/assets/package.template.json +26 -0
- package/assets/skills/promo-video-web/references/pipeline.md +84 -0
- package/assets/skills/pytest/SKILL.md +180 -0
- package/assets/skills/react-19/SKILL.md +118 -0
- package/assets/skills/react-hook-form/SKILL.md +59 -0
- package/assets/skills/react-router/SKILL.md +60 -0
- package/assets/skills/redux-toolkit/SKILL.md +60 -0
- package/assets/skills/review-diff/SKILL.md +101 -0
- package/assets/skills/ship-docs/SKILL.md +45 -0
- package/assets/skills/ship-docs/references/ship-docs-playbook.md +31 -0
- package/assets/skills/skill-creator/SKILL.md +97 -0
- package/assets/skills/skill-creator/assets/SKILL-TEMPLATE.md +68 -0
- package/assets/skills/skill-creator/references/skill-style-guide.md +79 -0
- package/assets/skills/skill-improver/SKILL.md +50 -0
- package/assets/skills/skill-improver/references/skill-style-guide.md +79 -0
- package/assets/skills/socketio/SKILL.md +58 -0
- package/assets/skills/spec-bootstrap/SKILL.md +62 -0
- package/assets/skills/store-ship/SKILL.md +52 -0
- package/assets/skills/store-ship/assets/android-supply.template.md +22 -0
- package/assets/skills/store-ship/assets/eas.template.json +32 -0
- package/assets/skills/store-ship/assets/maestro-flow.template.yaml +27 -0
- package/assets/skills/store-ship/assets/store.config.template.json +28 -0
- package/assets/skills/store-ship/references/pipeline.md +198 -0
- package/assets/skills/stripe/SKILL.md +83 -0
- package/assets/skills/tailwind-4/SKILL.md +193 -0
- package/assets/skills/tamagui/SKILL.md +60 -0
- package/assets/skills/tanstack-query/SKILL.md +58 -0
- package/assets/skills/ticket-intake/SKILL.md +55 -0
- package/assets/skills/typescript/SKILL.md +134 -0
- package/assets/skills/verify-before-done/SKILL.md +111 -0
- package/assets/skills/webapp-rebuilder/SKILL.md +48 -0
- package/assets/skills/webapp-rebuilder/assets/charter-template.md +46 -0
- package/assets/skills/webapp-rebuilder/references/workflow.md +47 -0
- package/assets/skills/winston-logging/SKILL.md +61 -0
- package/assets/skills/work-unit-commits/SKILL.md +84 -0
- package/assets/skills/zod-4/SKILL.md +210 -0
- package/assets/skills/zustand-5/SKILL.md +216 -0
- package/bin/argos.js +6 -0
- package/dist/commands/adopt.d.ts +35 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +347 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/doctor.d.ts +20 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +478 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +32 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +358 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/remove.d.ts +62 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +487 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/workspace.d.ts +73 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +354 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/assets.d.ts +29 -0
- package/dist/lib/assets.d.ts.map +1 -0
- package/dist/lib/assets.js +57 -0
- package/dist/lib/assets.js.map +1 -0
- package/dist/lib/atomic-write.d.ts +17 -0
- package/dist/lib/atomic-write.d.ts.map +1 -0
- package/dist/lib/atomic-write.js +41 -0
- package/dist/lib/atomic-write.js.map +1 -0
- package/dist/lib/backup.d.ts +11 -0
- package/dist/lib/backup.d.ts.map +1 -0
- package/dist/lib/backup.js +42 -0
- package/dist/lib/backup.js.map +1 -0
- package/dist/lib/config.d.ts +36 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +52 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detect.d.ts +58 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +330 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/ficha.d.ts +10 -0
- package/dist/lib/ficha.d.ts.map +1 -0
- package/dist/lib/ficha.js +38 -0
- package/dist/lib/ficha.js.map +1 -0
- package/dist/lib/git.d.ts +27 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +79 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/managed-files.d.ts +35 -0
- package/dist/lib/managed-files.d.ts.map +1 -0
- package/dist/lib/managed-files.js +97 -0
- package/dist/lib/managed-files.js.map +1 -0
- package/dist/lib/markers.d.ts +64 -0
- package/dist/lib/markers.d.ts.map +1 -0
- package/dist/lib/markers.js +157 -0
- package/dist/lib/markers.js.map +1 -0
- package/dist/lib/navori-import.d.ts +42 -0
- package/dist/lib/navori-import.d.ts.map +1 -0
- package/dist/lib/navori-import.js +65 -0
- package/dist/lib/navori-import.js.map +1 -0
- package/dist/lib/openclaw-agents.d.ts +53 -0
- package/dist/lib/openclaw-agents.d.ts.map +1 -0
- package/dist/lib/openclaw-agents.js +118 -0
- package/dist/lib/openclaw-agents.js.map +1 -0
- package/dist/lib/package-root.d.ts +11 -0
- package/dist/lib/package-root.d.ts.map +1 -0
- package/dist/lib/package-root.js +23 -0
- package/dist/lib/package-root.js.map +1 -0
- package/dist/lib/paths.d.ts +11 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +16 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/settings-merge.d.ts +125 -0
- package/dist/lib/settings-merge.d.ts.map +1 -0
- package/dist/lib/settings-merge.js +373 -0
- package/dist/lib/settings-merge.js.map +1 -0
- package/dist/lib/version.d.ts +3 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +13 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/which.d.ts +8 -0
- package/dist/lib/which.d.ts.map +1 -0
- package/dist/lib/which.js +30 -0
- package/dist/lib/which.js.map +1 -0
- package/dist/lib/workspaces.d.ts +133 -0
- package/dist/lib/workspaces.d.ts.map +1 -0
- package/dist/lib/workspaces.js +241 -0
- package/dist/lib/workspaces.js.map +1 -0
- package/dist/lib/zod-messages.d.ts +4 -0
- package/dist/lib/zod-messages.d.ts.map +1 -0
- package/dist/lib/zod-messages.js +28 -0
- package/dist/lib/zod-messages.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-creator
|
|
3
|
+
description: Create LLM-first skills with valid frontmatter. Trigger: new skills, agent instructions, documenting AI usage patterns.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Activation Contract
|
|
7
|
+
|
|
8
|
+
Create a skill when:
|
|
9
|
+
- A pattern is used repeatedly and AI needs guidance
|
|
10
|
+
- Project-specific conventions differ from generic best practices
|
|
11
|
+
- Complex workflows need step-by-step instructions
|
|
12
|
+
- Decision trees help AI choose the right approach
|
|
13
|
+
|
|
14
|
+
Do not create a skill when the pattern is trivial, one-off, or better served by normal documentation.
|
|
15
|
+
|
|
16
|
+
## Hard Rules
|
|
17
|
+
|
|
18
|
+
- When working in this repo, first follow `docs/skill-style-guide.md` as the normative source before creating or updating skills.
|
|
19
|
+
- Use `references/skill-style-guide.md` as the bundled local copy of that guide when `docs/skill-style-guide.md` is unavailable.
|
|
20
|
+
- If neither guide is available, use the compact inline rules below.
|
|
21
|
+
- A skill is a runtime instruction contract for an LLM, not human documentation.
|
|
22
|
+
- Do not add a `Keywords` section; preserve essential trigger words in `description`.
|
|
23
|
+
- References must point to local files.
|
|
24
|
+
- Keep the skill body concise: target 180–450 tokens, recommended max 700, hard max 1000.
|
|
25
|
+
|
|
26
|
+
## Decision Gates
|
|
27
|
+
|
|
28
|
+
| Need | Action |
|
|
29
|
+
|------|--------|
|
|
30
|
+
| Code templates, schemas, fixtures, generated examples | Put them in `assets/` |
|
|
31
|
+
| Conceptual detail, edge cases, existing docs | Put local links in `references/` |
|
|
32
|
+
| Long explanation in `SKILL.md` | Move it to a supporting file |
|
|
33
|
+
| Multiple meaningful paths | Add a compact decision table |
|
|
34
|
+
|
|
35
|
+
## Execution Steps
|
|
36
|
+
|
|
37
|
+
1. Check whether `docs/skill-style-guide.md` exists; if it does, apply it before the bundled local copy or inline fallback rules.
|
|
38
|
+
2. If the repo guide is unavailable, read `references/skill-style-guide.md` and apply it before the inline fallback rules.
|
|
39
|
+
3. Confirm the skill does not already exist and the pattern is reusable.
|
|
40
|
+
4. Create or update `assets/skills/{skill-name}/SKILL.md` using this required structure:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
assets/skills/{skill-name}/
|
|
44
|
+
├── SKILL.md # Required - main skill file
|
|
45
|
+
├── assets/ # Optional - templates, schemas, examples
|
|
46
|
+
│ ├── template.py
|
|
47
|
+
│ └── schema.json
|
|
48
|
+
└── references/ # Optional - links to local docs
|
|
49
|
+
└── docs.md # Points to docs/developer-guide/*.mdx
|
|
50
|
+
```
|
|
51
|
+
5. Use this frontmatter shape:
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
---
|
|
55
|
+
name: {skill-name}
|
|
56
|
+
description: "Trigger: {essential trigger words users or agents will say}. {What this skill does}."
|
|
57
|
+
---
|
|
58
|
+
```
|
|
59
|
+
6. Write sections in this order: Activation Contract, Hard Rules, Decision Gates, Execution Steps, Output Contract, References.
|
|
60
|
+
7. There is no per-repo registration step: skills live once in the global motor (`packages/cli/assets/skills/`) and Argos detects them dynamically. Do not add a registration entry in any repo's `AGENTS.md`.
|
|
61
|
+
|
|
62
|
+
## Inline Fallback Rules
|
|
63
|
+
|
|
64
|
+
- `description` MUST be one physical line, quoted, YAML-safe, and include essential trigger words first.
|
|
65
|
+
- `description` SHOULD be <=160 chars and MUST be <=250 chars.
|
|
66
|
+
- Frontmatter MUST include exactly `name` and `description` — no other fields.
|
|
67
|
+
- Use imperative instructions, not tutorials or background prose.
|
|
68
|
+
- Put supporting material in `assets/` or `references/`, not the main skill body.
|
|
69
|
+
|
|
70
|
+
Good:
|
|
71
|
+
|
|
72
|
+
```yaml
|
|
73
|
+
description: "Trigger: Jira task, ticket, issue, task creation. Create Jira tasks in the team format."
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Bad:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
description: >
|
|
80
|
+
Create Jira tasks in the team format.
|
|
81
|
+
Trigger: Jira task, ticket, issue, or task creation.
|
|
82
|
+
Keywords: jira, task
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Output Contract
|
|
86
|
+
|
|
87
|
+
Return:
|
|
88
|
+
- Files created or modified.
|
|
89
|
+
- Whether the repo style guide or inline fallback rules were used.
|
|
90
|
+
- Any supporting files added under `assets/` or `references/`.
|
|
91
|
+
|
|
92
|
+
## References
|
|
93
|
+
|
|
94
|
+
- `docs/skill-style-guide.md` — normative LLM-first skill style guide for this repo.
|
|
95
|
+
- `references/skill-style-guide.md` — bundled local copy for the global skill when the repo doc is unavailable.
|
|
96
|
+
|
|
97
|
+
_Adapted from a skill originally authored by gentleman-programming._
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {skill-name}
|
|
3
|
+
description: "Trigger: {essential trigger words users or agents will say}. {What this skill does}."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Activation Contract
|
|
7
|
+
|
|
8
|
+
Use this skill when:
|
|
9
|
+
- {Condition 1}
|
|
10
|
+
- {Condition 2}
|
|
11
|
+
- {Condition 3}
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Hard Rules
|
|
16
|
+
|
|
17
|
+
{The MOST important rules - what AI MUST follow}
|
|
18
|
+
|
|
19
|
+
### Pattern 1: {Name}
|
|
20
|
+
|
|
21
|
+
```{language}
|
|
22
|
+
{code example}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Pattern 2: {Name}
|
|
26
|
+
|
|
27
|
+
```{language}
|
|
28
|
+
{code example}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Decision Gates
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
{Question 1}? → {Action A}
|
|
37
|
+
{Question 2}? → {Action B}
|
|
38
|
+
Otherwise → {Default action}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Execution Steps
|
|
44
|
+
|
|
45
|
+
### Example 1: {Description}
|
|
46
|
+
|
|
47
|
+
```{language}
|
|
48
|
+
{minimal, focused example}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Example 2: {Description}
|
|
52
|
+
|
|
53
|
+
```{language}
|
|
54
|
+
{minimal, focused example}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Output Contract
|
|
60
|
+
|
|
61
|
+
{What this skill returns when it finishes: files touched, decisions made, anything flagged for human review.}
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## References
|
|
66
|
+
|
|
67
|
+
- **Templates**: See [assets/](assets/) for {description of templates}
|
|
68
|
+
- **Documentation**: See [references/](references/) for local developer guide links
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# LLM-first Skill Style Guide
|
|
2
|
+
|
|
3
|
+
Use this guide when creating or refactoring skills in this repo. A skill is a **runtime instruction contract for an LLM**, not human-facing documentation: it tells the model when to activate, what rules are non-negotiable, how to decide, what to do, and what to return.
|
|
4
|
+
|
|
5
|
+
## Required Structure
|
|
6
|
+
|
|
7
|
+
Every `SKILL.md` MUST use this order unless a section is truly irrelevant:
|
|
8
|
+
|
|
9
|
+
1. **Frontmatter** — complete metadata for skill discovery.
|
|
10
|
+
2. **Activation Contract** — exact situations that load the skill.
|
|
11
|
+
3. **Hard Rules** — constraints the LLM MUST NOT violate.
|
|
12
|
+
4. **Decision Gates** — short tables or bullets for branching choices.
|
|
13
|
+
5. **Execution Steps** — ordered operational workflow.
|
|
14
|
+
6. **Output Contract** — required final format or artifacts.
|
|
15
|
+
7. **References** — local files only; supporting detail lives outside the skill.
|
|
16
|
+
|
|
17
|
+
`## Compact Rules` is not required. Argos loads the full `SKILL.md` as the source of truth.
|
|
18
|
+
|
|
19
|
+
## Frontmatter Rules
|
|
20
|
+
|
|
21
|
+
- `description` MUST be one physical line, YAML-safe, and quoted.
|
|
22
|
+
- Put trigger words first: `"Trigger: ... . {What the skill does}."`
|
|
23
|
+
- `description` SHOULD be <=160 chars and MUST be <=250 chars.
|
|
24
|
+
- Frontmatter has exactly two fields: `name` and `description`. Do not add `license`, `metadata`, `type`, or any other field.
|
|
25
|
+
- Do NOT add a `Keywords` section; discovery uses frontmatter.
|
|
26
|
+
|
|
27
|
+
## Body Budget
|
|
28
|
+
|
|
29
|
+
- Target **180–450 tokens** for the skill body.
|
|
30
|
+
- Recommended maximum: **700 tokens**.
|
|
31
|
+
- Hard maximum: **1000 tokens**. Move examples, schemas, and background into `assets/` or `references/`.
|
|
32
|
+
|
|
33
|
+
## Writing Rules
|
|
34
|
+
|
|
35
|
+
### DO
|
|
36
|
+
|
|
37
|
+
- Write imperative runtime instructions: "Load X", "Check Y", "Return Z".
|
|
38
|
+
- Lead with the activation trigger and hard constraints.
|
|
39
|
+
- Use compact tables for decision gates.
|
|
40
|
+
- Keep examples minimal and executable.
|
|
41
|
+
- Link to local supporting files for details.
|
|
42
|
+
|
|
43
|
+
### DON'T
|
|
44
|
+
|
|
45
|
+
- Explain history, motivation, or tutorial background.
|
|
46
|
+
- Duplicate long docs inside the skill.
|
|
47
|
+
- Add generic advice the LLM cannot execute.
|
|
48
|
+
- Use external URLs as primary references.
|
|
49
|
+
- Hide critical rules below examples.
|
|
50
|
+
|
|
51
|
+
## Supporting Files
|
|
52
|
+
|
|
53
|
+
- Use `assets/` for templates, schemas, fixtures, or generated examples.
|
|
54
|
+
- Use `references/` for local docs that explain concepts or edge cases.
|
|
55
|
+
- Keep references stable and relative to the skill directory when possible.
|
|
56
|
+
|
|
57
|
+
## Registry Behavior
|
|
58
|
+
|
|
59
|
+
- Argos indexes the skills automatically by reading the directories under `assets/skills/` — no manual refresh command is needed.
|
|
60
|
+
- Discovery reads `name`, `description` trigger text, and the exact `SKILL.md` path.
|
|
61
|
+
- Delegators pass matching paths to subagents, and subagents read the full skill before work.
|
|
62
|
+
- Use `skill-improver` to audit and refactor existing skills against this guide.
|
|
63
|
+
|
|
64
|
+
## Quality Gates
|
|
65
|
+
|
|
66
|
+
- Frontmatter is complete, quoted, single-line, and trigger-preserving.
|
|
67
|
+
- Required sections exist in the expected order.
|
|
68
|
+
- Hard rules are testable or observable.
|
|
69
|
+
- Decision gates cover meaningful forks only.
|
|
70
|
+
- Output contract tells the LLM exactly what to return.
|
|
71
|
+
- References point to local files.
|
|
72
|
+
|
|
73
|
+
## Refactor Checklist
|
|
74
|
+
|
|
75
|
+
- [ ] Move explanatory prose to local references.
|
|
76
|
+
- [ ] Collapse repeated rules into one hard rule.
|
|
77
|
+
- [ ] Replace prose branches with a decision table.
|
|
78
|
+
- [ ] Trim examples to the smallest useful case.
|
|
79
|
+
- [ ] Recheck description length and trigger words.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-improver
|
|
3
|
+
description: Audit and upgrade existing LLM-first skills. Trigger: improve skills, audit skills, refactor skills, skill quality.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Activation Contract
|
|
7
|
+
|
|
8
|
+
Use this skill when asked to audit, refactor, normalize, or improve existing `SKILL.md` files. Use `skill-creator` instead when creating a brand-new skill from a reusable pattern.
|
|
9
|
+
|
|
10
|
+
## Hard Rules
|
|
11
|
+
|
|
12
|
+
- Treat `docs/skill-style-guide.md` as the normative style contract when it exists.
|
|
13
|
+
- Use `references/skill-style-guide.md` as the bundled local copy when `docs/skill-style-guide.md` is unavailable.
|
|
14
|
+
- Treat `SKILL.md` as the source of truth; preserve author intent, critical rules, activation semantics, and output requirements.
|
|
15
|
+
- Default to audit-only. Modify files only when the user explicitly asks to apply improvements.
|
|
16
|
+
- Never delete meaningful content silently; move long explanation, examples, templates, or schemas into local `references/` or `assets/`.
|
|
17
|
+
- Do not invent triggers, policies, or domain rules. Mark ambiguous cases for human review.
|
|
18
|
+
|
|
19
|
+
## Decision Gates
|
|
20
|
+
|
|
21
|
+
| Situation | Action |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Missing or invalid frontmatter | Fix `name` and quoted one-line `description` — the only two allowed fields |
|
|
24
|
+
| Skill reads like tutorial docs | Convert to runtime instructions and move background to `references/` |
|
|
25
|
+
| Body exceeds budget | Preserve rules, move examples/background to supporting files |
|
|
26
|
+
| Branching logic hidden in prose | Convert to a compact decision table |
|
|
27
|
+
| Rules conflict or intent is unclear | Report the issue; do not rewrite that rule automatically |
|
|
28
|
+
|
|
29
|
+
## Execution Steps
|
|
30
|
+
|
|
31
|
+
1. Read `docs/skill-style-guide.md`; if unavailable, read `references/skill-style-guide.md`; if neither exists, enforce the core LLM-first structure: frontmatter, Activation Contract, Hard Rules, Decision Gates, Execution Steps, Output Contract, References.
|
|
32
|
+
2. Scan the skill directories under `assets/skills/` for `*/SKILL.md` to select skills to audit.
|
|
33
|
+
3. For each selected skill, audit frontmatter, trigger clarity, section order, body budget, actionability, decision gates, output contract, and local references.
|
|
34
|
+
4. Return an audit report grouped by skill with severity and exact proposed changes.
|
|
35
|
+
5. In apply mode, edit only safe issues, preserve content, and create supporting files when needed. There is no per-repo registration or refresh step to run afterward: skills live once in the global motor and Argos detects them dynamically.
|
|
36
|
+
|
|
37
|
+
## Output Contract
|
|
38
|
+
|
|
39
|
+
Return:
|
|
40
|
+
- Skills audited and paths used.
|
|
41
|
+
- Issues found, grouped by severity.
|
|
42
|
+
- Files changed, if apply mode was requested.
|
|
43
|
+
- Ambiguities that need human review.
|
|
44
|
+
|
|
45
|
+
## References
|
|
46
|
+
|
|
47
|
+
- `docs/skill-style-guide.md` — normative LLM-first skill style guide for this repo.
|
|
48
|
+
- `references/skill-style-guide.md` — bundled local copy for the global skill when the repo doc is unavailable.
|
|
49
|
+
|
|
50
|
+
_Adapted from a skill originally authored by gentleman-programming._
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# LLM-first Skill Style Guide
|
|
2
|
+
|
|
3
|
+
Use this guide when creating or refactoring skills in this repo. A skill is a **runtime instruction contract for an LLM**, not human-facing documentation: it tells the model when to activate, what rules are non-negotiable, how to decide, what to do, and what to return.
|
|
4
|
+
|
|
5
|
+
## Required Structure
|
|
6
|
+
|
|
7
|
+
Every `SKILL.md` MUST use this order unless a section is truly irrelevant:
|
|
8
|
+
|
|
9
|
+
1. **Frontmatter** — complete metadata for skill discovery.
|
|
10
|
+
2. **Activation Contract** — exact situations that load the skill.
|
|
11
|
+
3. **Hard Rules** — constraints the LLM MUST NOT violate.
|
|
12
|
+
4. **Decision Gates** — short tables or bullets for branching choices.
|
|
13
|
+
5. **Execution Steps** — ordered operational workflow.
|
|
14
|
+
6. **Output Contract** — required final format or artifacts.
|
|
15
|
+
7. **References** — local files only; supporting detail lives outside the skill.
|
|
16
|
+
|
|
17
|
+
`## Compact Rules` is not required. Argos loads the full `SKILL.md` as the source of truth.
|
|
18
|
+
|
|
19
|
+
## Frontmatter Rules
|
|
20
|
+
|
|
21
|
+
- `description` MUST be one physical line, YAML-safe, and quoted.
|
|
22
|
+
- Put trigger words first: `"Trigger: ... . {What the skill does}."`
|
|
23
|
+
- `description` SHOULD be <=160 chars and MUST be <=250 chars.
|
|
24
|
+
- Frontmatter has exactly two fields: `name` and `description`. Do not add `license`, `metadata`, `type`, or any other field.
|
|
25
|
+
- Do NOT add a `Keywords` section; discovery uses frontmatter.
|
|
26
|
+
|
|
27
|
+
## Body Budget
|
|
28
|
+
|
|
29
|
+
- Target **180–450 tokens** for the skill body.
|
|
30
|
+
- Recommended maximum: **700 tokens**.
|
|
31
|
+
- Hard maximum: **1000 tokens**. Move examples, schemas, and background into `assets/` or `references/`.
|
|
32
|
+
|
|
33
|
+
## Writing Rules
|
|
34
|
+
|
|
35
|
+
### DO
|
|
36
|
+
|
|
37
|
+
- Write imperative runtime instructions: "Load X", "Check Y", "Return Z".
|
|
38
|
+
- Lead with the activation trigger and hard constraints.
|
|
39
|
+
- Use compact tables for decision gates.
|
|
40
|
+
- Keep examples minimal and executable.
|
|
41
|
+
- Link to local supporting files for details.
|
|
42
|
+
|
|
43
|
+
### DON'T
|
|
44
|
+
|
|
45
|
+
- Explain history, motivation, or tutorial background.
|
|
46
|
+
- Duplicate long docs inside the skill.
|
|
47
|
+
- Add generic advice the LLM cannot execute.
|
|
48
|
+
- Use external URLs as primary references.
|
|
49
|
+
- Hide critical rules below examples.
|
|
50
|
+
|
|
51
|
+
## Supporting Files
|
|
52
|
+
|
|
53
|
+
- Use `assets/` for templates, schemas, fixtures, or generated examples.
|
|
54
|
+
- Use `references/` for local docs that explain concepts or edge cases.
|
|
55
|
+
- Keep references stable and relative to the skill directory when possible.
|
|
56
|
+
|
|
57
|
+
## Registry Behavior
|
|
58
|
+
|
|
59
|
+
- Argos indexes the skills automatically by reading the directories under `assets/skills/` — no manual refresh command is needed.
|
|
60
|
+
- Discovery reads `name`, `description` trigger text, and the exact `SKILL.md` path.
|
|
61
|
+
- Delegators pass matching paths to subagents, and subagents read the full skill before work.
|
|
62
|
+
- Use `skill-improver` to audit and refactor existing skills against this guide.
|
|
63
|
+
|
|
64
|
+
## Quality Gates
|
|
65
|
+
|
|
66
|
+
- Frontmatter is complete, quoted, single-line, and trigger-preserving.
|
|
67
|
+
- Required sections exist in the expected order.
|
|
68
|
+
- Hard rules are testable or observable.
|
|
69
|
+
- Decision gates cover meaningful forks only.
|
|
70
|
+
- Output contract tells the LLM exactly what to return.
|
|
71
|
+
- References point to local files.
|
|
72
|
+
|
|
73
|
+
## Refactor Checklist
|
|
74
|
+
|
|
75
|
+
- [ ] Move explanatory prose to local references.
|
|
76
|
+
- [ ] Collapse repeated rules into one hard rule.
|
|
77
|
+
- [ ] Replace prose branches with a decision table.
|
|
78
|
+
- [ ] Trim examples to the smallest useful case.
|
|
79
|
+
- [ ] Recheck description length and trigger words.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: socketio
|
|
3
|
+
description: Patrones de Socket.IO en un servicio Node — namespaces, rooms, auth en el handshake, eventos tipados, cleanup. Trigger: al tocar realtime, gateways o handlers de socket.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Socket.IO — convenciones del servicio
|
|
7
|
+
|
|
8
|
+
## Cuándo usar este skill
|
|
9
|
+
|
|
10
|
+
Al agregar o tocar realtime: un namespace, un evento, autenticación de conexión, o broadcast a un room. Socket.IO sobre el HTTP server de Express. La regla base: el handler de socket es una capa de transporte, no de negocio — delega al mismo service/controller que usan las rutas HTTP.
|
|
11
|
+
|
|
12
|
+
## El patrón
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
io.of('/sessions').use(authSocket).on('connection', (socket) => {
|
|
16
|
+
socket.join(`session:${socket.data.sessionId}`);
|
|
17
|
+
|
|
18
|
+
socket.on('message:send', async (dto, ack) => {
|
|
19
|
+
try {
|
|
20
|
+
const saved = await messageService.create(socket.data.userId, dto);
|
|
21
|
+
io.to(`session:${socket.data.sessionId}`).emit('message:new', saved); // room de socket.data, no del payload
|
|
22
|
+
ack?.({ ok: true, id: saved._id });
|
|
23
|
+
} catch (err) {
|
|
24
|
+
ack?.({ ok: false, error: toClientError(err) });
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
socket.on('disconnect', () => { /* cleanup timers/subscriptions */ });
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`authSocket` valida el token en `socket.handshake.auth.token` y rellena `socket.data` (userId/sessionId). Nunca confíes en un id que venga en el payload del evento sin cruzarlo contra `socket.data`.
|
|
33
|
+
|
|
34
|
+
## Gotchas que muerden
|
|
35
|
+
|
|
36
|
+
- **Rooms, no broadcast global.** `io.emit` manda a todos los conectados; usa `io.to(room)` / `socket.to(room)` para no filtrar datos entre sesiones/tenants.
|
|
37
|
+
- **`socket.emit` vs `io.to(...).emit`.** `socket.emit` responde solo al emisor; para incluirte y al resto del room usa `io.to(room)`, para excluirte usa `socket.to(room)`.
|
|
38
|
+
- **Listeners colgados.** Toda suscripción/intervalo creado en `connection` se limpia en `disconnect`, o se filtra memoria.
|
|
39
|
+
- **Errores.** Un throw dentro de un handler no llega al cliente: reporta vía el callback `ack` o un evento `error:*`, nunca dejes la promesa sin catch.
|
|
40
|
+
- **Auth en el handshake**, no por evento — rechaza en el middleware `.use()` antes de `connection`.
|
|
41
|
+
- **Tipa el `Server`/`Socket`** con las 4 interfaces (`Server<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>`): autocompletado y type-check de payloads y acks. `socket.data` se tipa vía `SocketData`, no `any`.
|
|
42
|
+
- **Multi-instancia ⇒ adapter (Redis) + sticky sessions.** Sin adapter, `io.to(room)` solo alcanza a los sockets de **este** proceso (broadcasts perdidos al escalar); sin sticky, el long-polling da "Session ID unknown".
|
|
43
|
+
- **Acks que esperan respuesta usan timeout**: `socket.timeout(ms).emitWithAck(...)`. Sin timeout, un ack ausente cuelga/leakea.
|
|
44
|
+
|
|
45
|
+
## Reglas duras
|
|
46
|
+
|
|
47
|
+
1. El handler delega al service; nada de queries ni lógica de negocio inline.
|
|
48
|
+
2. Identidad desde `socket.data` (poblado en auth), nunca desde el payload.
|
|
49
|
+
3. Emite a un room específico; `io.emit` global solo para health/system.
|
|
50
|
+
4. Cada `on(...)` con efectos secundarios tiene su cleanup en `disconnect`.
|
|
51
|
+
5. Errores al cliente vía `ack`/evento `error`, con el mismo `ApiError` mapeado que HTTP.
|
|
52
|
+
|
|
53
|
+
## Antes de declarar listo
|
|
54
|
+
|
|
55
|
+
- Los eventos nuevos validan su input igual que un endpoint HTTP.
|
|
56
|
+
- Ningún `io.emit` global salvo señales de sistema; el resto va por room.
|
|
57
|
+
- Auth resuelta en el middleware del namespace, no dentro de los handlers.
|
|
58
|
+
- El quality gate del repo (`qualityGate.fast` en `argos.config.json`) en verde.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-bootstrap
|
|
3
|
+
description: Scaffoldea un spec SDD completo (requirements/design/tasks) con EARS y trazabilidad R<n>↔test. Trigger: arrancar una feature de alcance real, spec SDD, requirements/design/tasks, EARS, antes de escribir código.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# spec-bootstrap — arranque de un spec SDD
|
|
7
|
+
|
|
8
|
+
## Cuándo usar este skill
|
|
9
|
+
|
|
10
|
+
Al iniciar trabajo SDD-scope (feature nueva completa, cambios en auth/seguridad/datos sensibles, scope > ~2 días — ver el bloque **Spec Driven Development** en `CLAUDE.md`). No lo uses para bugfixes, ajustes de UI o refactors aislados: esos van directo.
|
|
11
|
+
|
|
12
|
+
Produce `requirements.md`, `design.md` y `tasks.md` en el directorio de specs del repo (definido en la ficha del repo — CLAUDE.md — o en `argos.config.json`), listos para que el orquestador los descomponga. El scaffolding lo hace el agente principal (o el `researcher`), no un subagente que nestee.
|
|
13
|
+
|
|
14
|
+
## Orden
|
|
15
|
+
|
|
16
|
+
1. **requirements.md primero.** Sin requisitos claros no hay diseño. Deriva del ticket/pedido; cada requisito es EARS con id `R<n>`.
|
|
17
|
+
2. **design.md** — cómo cumplir esos `R<n>`: componentes afectados, contratos, decisiones y trade-offs. Referencia los `R<n>` que cada decisión satisface.
|
|
18
|
+
3. **tasks.md** — lotes de 1-3 tasks; cada task lista los `R<n>` que cubre y su(s) test(s).
|
|
19
|
+
|
|
20
|
+
## Plantillas
|
|
21
|
+
|
|
22
|
+
`requirements.md`:
|
|
23
|
+
```md
|
|
24
|
+
# <Feature> — Requirements
|
|
25
|
+
|
|
26
|
+
## Contexto
|
|
27
|
+
<1-2 líneas: qué problema resuelve y para quién.>
|
|
28
|
+
|
|
29
|
+
## Requisitos (EARS)
|
|
30
|
+
- **R1** — El sistema DEBE <acción observable>.
|
|
31
|
+
- **R2** — CUANDO <evento>, el sistema DEBE <acción>.
|
|
32
|
+
- **R3** — SI <condición no deseada> ENTONCES el sistema DEBE <acción de contención>.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`design.md`:
|
|
36
|
+
```md
|
|
37
|
+
# <Feature> — Design
|
|
38
|
+
|
|
39
|
+
## Enfoque
|
|
40
|
+
<Arquitectura elegida y por qué. Trade-offs descartados.>
|
|
41
|
+
|
|
42
|
+
## Componentes
|
|
43
|
+
- <archivo/módulo> — <responsabilidad> — cubre R<n>.
|
|
44
|
+
|
|
45
|
+
## Decisiones
|
|
46
|
+
- <decisión no obvia> — <razón>.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`tasks.md`:
|
|
50
|
+
```md
|
|
51
|
+
# <Feature> — Tasks
|
|
52
|
+
|
|
53
|
+
- [ ] **T1** (R1, R2) — <qué se implementa> · test: <archivo>::<caso> con `// Covers: R1, R2`
|
|
54
|
+
- [ ] **T2** (R3) — <qué se implementa> · test: <archivo>::<caso> con `// Covers: R3`
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Reglas duras
|
|
58
|
+
|
|
59
|
+
- **Cero placeholders sin resolver.** No dejes `<...>` en el spec final; si no sabes un dato, es una pregunta al usuario, no un hueco.
|
|
60
|
+
- **Todo `R<n>` termina en ≥1 task y ≥1 test.** Un requisito sin task ni test no es trazable → no entra al spec.
|
|
61
|
+
- **El tracking vive en `tasks.md`, no en herramientas de tareas efímeras/externas.** Ver el bloque SDD.
|
|
62
|
+
- **Self-review antes de cerrar el scaffolding:** ¿cada `R<n>` es una sola acción testeable? ¿cada task apunta a `R<n>` reales? ¿el design cubre todos los `R<n>`? Si algo falla, corrígelo antes de pasar el spec a quien coordine la feature.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: store-ship
|
|
3
|
+
description: Trigger: store deploy, publish app, App Store, Play Store, eas submit, store metadata, store screenshots, subir a tiendas, publicar app. Automate store submission for Expo apps: EAS build/submit, metadata as code, Maestro screenshots.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Store Ship
|
|
7
|
+
|
|
8
|
+
## Activation Contract
|
|
9
|
+
|
|
10
|
+
Activate when an Expo/React Native app must be built, prepared, or submitted to the App Store / Play Store: metadata, screenshots, builds, or the whole pipeline. Also the Phase 10 executor of `app-builder`.
|
|
11
|
+
|
|
12
|
+
## Hard Rules
|
|
13
|
+
|
|
14
|
+
- All store artifacts live in the repo under `store/` — metadata and screenshots are code, never console-only state.
|
|
15
|
+
- Derive ALL copy (title, subtitle, description, keywords) from `docs/product-definition.md`; never invent product claims. Respect limits: iOS subtitle/keywords 30/100 chars, Play title/short/full 30/80/4000 chars.
|
|
16
|
+
- Never store credentials in the repo: Apple App Store Connect API key and Play service-account JSON go in env/EAS secrets; `store/` must be committable. Maestro flows must never hardcode credentials either, even local seed ones — inject with `${VAR}` and `maestro test -e KEY=value`, with the run command in the flow header comment. Same rule for the `store.config.json` demo password: inject→push→revert→verify, never committed — `references/pipeline.md` §6.
|
|
17
|
+
- Do not claim full automation of one-time console steps (App Privacy questionnaire, content rating, first Play AAB upload) — surface them as a manual checklist instead.
|
|
18
|
+
- Screenshots come from real app runs (Maestro on simulator/emulator with seeded demo data), not mockups.
|
|
19
|
+
|
|
20
|
+
## Decision Gates
|
|
21
|
+
|
|
22
|
+
| Situation | Route |
|
|
23
|
+
|---|---|
|
|
24
|
+
| Expo managed app | EAS: `eas build` + `eas submit` + `eas metadata` (iOS) |
|
|
25
|
+
| Bare RN / non-Expo | fastlane (`deliver`/`supply`/`snapshot`) — same `store/` layout |
|
|
26
|
+
| Play metadata (eas metadata is iOS-only) | fastlane `supply` structure in `store/android/`, uploaded via fastlane or console paste |
|
|
27
|
+
| First-ever Play submission | Manual AAB upload in Play Console (Google requirement), then `eas submit` for updates |
|
|
28
|
+
| Tablet screenshots | Only if `supportsTablet` (iPad) / tablet layouts exist (Play) |
|
|
29
|
+
| EAS submit queue busy / need local, queue-free iOS upload | `xcrun altool --upload-app`, Transporter, or `fastlane pilot upload` with the team's own ASC API key — see "Queue-free local submission" in `references/pipeline.md` §6 |
|
|
30
|
+
|
|
31
|
+
## Execution Steps
|
|
32
|
+
|
|
33
|
+
1. Read `references/pipeline.md`; check prereqs incl. EAS env vars (Phase 8).
|
|
34
|
+
2. Scaffold `store/` and `eas.json` from `assets/` templates; fill submit profiles.
|
|
35
|
+
3. Author metadata from the product definition: `store/store.config.json` (iOS) + `store/android/` supply tree; push once for text fields (no screenshots/password yet).
|
|
36
|
+
4. One-time ASC manual fixes for API-created apps: 1.0 version, primary language, copyright, pricing, content rights — pipeline §4.
|
|
37
|
+
5. Screenshots: seed demo data, write Maestro flows from `assets/maestro-flow.template.yaml`, run the device matrix, output to `store/screenshots/{platform}/{device}/`.
|
|
38
|
+
6. Build + submit: `eas build --profile production`, `eas submit` (queue) or the queue-free local path; verify TestFlight / Play internal track.
|
|
39
|
+
7. Final metadata push: real screenshots + demo password inject → push → revert → `rg`-verify — pipeline §6.
|
|
40
|
+
8. Print the manual-steps checklist and persist the run outcome (engram or decision log).
|
|
41
|
+
|
|
42
|
+
## Output Contract
|
|
43
|
+
|
|
44
|
+
Return: files created under `store/`, commands run with results, screenshot inventory per device, the final metadata push result, and the remaining manual checklist. Never report "submitted" without the `eas submit` output.
|
|
45
|
+
|
|
46
|
+
## References
|
|
47
|
+
|
|
48
|
+
- `references/pipeline.md` — full runbook: prereqs, eas.json profiles, metadata fields/limits, device matrix, seeding, troubleshooting.
|
|
49
|
+
- `assets/eas.template.json` — build+submit profiles.
|
|
50
|
+
- `assets/store.config.template.json` — iOS metadata as code.
|
|
51
|
+
- `assets/maestro-flow.template.yaml` — screenshot flow pattern.
|
|
52
|
+
- `assets/android-supply.template.md` — Play metadata tree.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Play supply tree template
|
|
2
|
+
|
|
3
|
+
`eas metadata` is iOS-only. Keep Play metadata in the fastlane `supply` layout so it
|
|
4
|
+
uploads with fastlane when available and stays diff-able either way:
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
store/android/metadata/
|
|
8
|
+
└── es-MX/ # primary locale = app UI language
|
|
9
|
+
├── title.txt # max 30 chars
|
|
10
|
+
├── short_description.txt # max 80 chars — the search-result hook
|
|
11
|
+
├── full_description.txt # max 4000 chars — derive from product definition
|
|
12
|
+
├── video.txt # optional YouTube URL, else empty
|
|
13
|
+
└── images/
|
|
14
|
+
├── icon.png # 512x512
|
|
15
|
+
├── featureGraphic.png # 1024x500 — required for store listing
|
|
16
|
+
├── phoneScreenshots/ # 2–8, ≥1080px wide, from the Maestro run
|
|
17
|
+
├── sevenInchScreenshots/ # only if tablet UI exists
|
|
18
|
+
└── tenInchScreenshots/ # only if tablet UI exists
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Upload: `fastlane supply --metadata_path store/android/metadata --skip_upload_apk true --skip_upload_aab true`
|
|
22
|
+
(first release: paste manually in Play Console; the repo copy remains the source of truth).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cli": {
|
|
3
|
+
"version": ">= 13.0.0",
|
|
4
|
+
"appVersionSource": "remote"
|
|
5
|
+
},
|
|
6
|
+
"build": {
|
|
7
|
+
"development": {
|
|
8
|
+
"developmentClient": true,
|
|
9
|
+
"distribution": "internal",
|
|
10
|
+
"environment": "development"
|
|
11
|
+
},
|
|
12
|
+
"preview": {
|
|
13
|
+
"distribution": "internal",
|
|
14
|
+
"channel": "preview",
|
|
15
|
+
"environment": "preview"
|
|
16
|
+
},
|
|
17
|
+
"production": {
|
|
18
|
+
"autoIncrement": true,
|
|
19
|
+
"channel": "production",
|
|
20
|
+
"environment": "production"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"submit": {
|
|
24
|
+
"production": {
|
|
25
|
+
"ios": {},
|
|
26
|
+
"android": {
|
|
27
|
+
"serviceAccountKeyPath": "../secrets/play-service-account.json",
|
|
28
|
+
"track": "internal"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Screenshot flow — one per screenshot set. Run against a seeded demo account
|
|
2
|
+
# on the device matrix in references/pipeline.md (never Expo Go).
|
|
3
|
+
# Never hardcode credentials, even local seed ones — inject via -e:
|
|
4
|
+
# maestro test store/flows/screenshots.yaml -e DEMO_PASSWORD=your-local-seed-password
|
|
5
|
+
appId: com.example.app
|
|
6
|
+
---
|
|
7
|
+
- launchApp:
|
|
8
|
+
clearState: true
|
|
9
|
+
# Launch-transition chrome can still be on screen right after launchApp —
|
|
10
|
+
# wait before the app is considered ready, and again before any screenshot.
|
|
11
|
+
- waitForAnimationToEnd
|
|
12
|
+
- assertVisible: "LOGIN_SCREEN_MARKER"
|
|
13
|
+
- tapOn: "EMAIL_FIELD_HINT"
|
|
14
|
+
- inputText: "demo@example.com"
|
|
15
|
+
- tapOn: "PASSWORD_FIELD_HINT"
|
|
16
|
+
- inputText: "${DEMO_PASSWORD}"
|
|
17
|
+
- tapOn: "LOGIN_CTA"
|
|
18
|
+
- waitForAnimationToEnd
|
|
19
|
+
# 1 — signature screen first: it becomes the store card image
|
|
20
|
+
- takeScreenshot: store/screenshots/tmp/01-signature
|
|
21
|
+
# 2..N — core loop, then differentiators
|
|
22
|
+
- tapOn: "TAB_2"
|
|
23
|
+
- waitForAnimationToEnd
|
|
24
|
+
- takeScreenshot: store/screenshots/tmp/02-core-loop
|
|
25
|
+
- tapOn: "TAB_3"
|
|
26
|
+
- waitForAnimationToEnd
|
|
27
|
+
- takeScreenshot: store/screenshots/tmp/03-differentiator
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"configVersion": 0,
|
|
3
|
+
"apple": {
|
|
4
|
+
"info": {
|
|
5
|
+
"es-MX": {
|
|
6
|
+
"title": "APP_NAME_MAX_30",
|
|
7
|
+
"subtitle": "VALUE_PROMISE_MAX_30",
|
|
8
|
+
"description": "FULL_DESCRIPTION_MAX_4000\n\nDerive from docs/product-definition.md: core promise first, then features as user benefits.",
|
|
9
|
+
"keywords": ["domain", "nouns", "users", "search", "max-100-chars-total"],
|
|
10
|
+
"promoText": "PROMO_MAX_170_EDITABLE_WITHOUT_NEW_BUILD",
|
|
11
|
+
"marketingUrl": "https://example.com",
|
|
12
|
+
"supportUrl": "https://example.com/support",
|
|
13
|
+
"privacyPolicyUrl": "https://example.com/privacy"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"categories": ["PRIMARY_CATEGORY"],
|
|
17
|
+
"review": {
|
|
18
|
+
"firstName": "REVIEWER_CONTACT_FIRST",
|
|
19
|
+
"lastName": "REVIEWER_CONTACT_LAST",
|
|
20
|
+
"email": "contact@example.com",
|
|
21
|
+
"phone": "+521234567890",
|
|
22
|
+
"demoUsername": "demo@example.com",
|
|
23
|
+
"demoPassword": "SET_VIA_SECRET_BEFORE_PUSH",
|
|
24
|
+
"demoRequired": true,
|
|
25
|
+
"notes": "Accounts are admin-created; use the demo login above."
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|