agent rules: first rule "Do it, don't ask" (agents-core and every adapter, README, store-pitfalls lead, first-release, declarations and console skills); the agent runs the real command after the dry run, the owner presses only final public or irreversible buttons and answers compliance facts in one batch; handoff text removed from skills; tests/do-it-dont-ask.test.ts. Pitfall 26
This commit is contained in:
parent
fc524cd2d4
commit
dfc28c15f8
22 changed files with 393 additions and 105 deletions
|
|
@ -7,6 +7,10 @@ description: Fill App Store Connect and Google Play Console forms that have no A
|
|||
|
||||
CLI: `storebound` (or `bunx storebound` in a project that has it, or `bun <toolchain>/cli/index.ts`).
|
||||
|
||||
**Do it, don't ask** (first rule in AGENTS.md / `docs/agents-core.md`): you open the console, navigate, fill the form,
|
||||
save drafts and verify; the owner only signs in once and presses the final button. Ask the owner's `ask-owner`
|
||||
answers in one batch before you start, never one at a time on the page.
|
||||
|
||||
**Read this to the owner first.** Console pages change without notice. You (the agent) fill the form from storebound's
|
||||
answer sheet and the owner reviews every field and presses the final button. Nobody types a password or touches a
|
||||
sign-in page except the owner; nothing that submits, publishes, creates, accepts an agreement or grants a permission
|
||||
|
|
@ -27,7 +31,8 @@ the UI shows. This is the primary mode.
|
|||
- `buttons.neverPress` (Publish, Submit, Create, Create app, Send, Release, "Definitions and Examples", "?", the
|
||||
final Save of a form ...), `buttons.final` and `buttons.allowed` (navigation and draft saves);
|
||||
- `uiFacts` (verified facts per form, see below), `driving` and `verify` (the command and what to capture).
|
||||
2. Show the owner the `ask-owner` answers and ask (AGENTS.md rule 5). Never guess them; leave them empty if the owner
|
||||
2. Collect the `ask-owner` answers of every form you will fill in ONE question to the owner before you start (AGENTS.md
|
||||
rule 5) and write them into the config, so the plan has them. Never guess them; leave them empty if the owner
|
||||
wants to answer in the page.
|
||||
3. Open `start.url` in your browser tool. If a sign-in page shows, the owner signs in; you wait.
|
||||
4. Follow `steps`. Read the page (text or accessibility tree) before each action, click by visible text, set each
|
||||
|
|
@ -68,15 +73,15 @@ the UI shows. This is the primary mode.
|
|||
left. Text inputs set by `form_input` are fine. After Create app the app lives at
|
||||
`/console/u/0/developers/<developerId>/app/<appId>/app-dashboard`: put the id in `play.appId`.
|
||||
- **After Play Create app, an owner step:** a service account's app-level permissions do NOT cover apps created
|
||||
later. The owner opens Users and permissions > the service account > Add app > the new app > Admin (or the minimal
|
||||
set the plan lists) > Apply > Save changes, then `storebound apps check --store play`. Never do it yourself (a
|
||||
permission grant; auto mode blocks it too).
|
||||
later. Granting them is the owner's (a permission grant; auto mode blocks it too): give the exact path together
|
||||
with the Create app button, Users and permissions > the service account > Add app > the new app > Admin (or the
|
||||
minimal set the plan lists) > Apply > Save changes; then run `storebound apps check --store play` yourself.
|
||||
|
||||
## Optional: the scripted fast path (`storebound console fill`)
|
||||
|
||||
`console fill` drives a visible browser by itself with the same answers and click rules. It is fast when the page
|
||||
matches its model; when it stalls on a changed page, switch to the agent-first mode above instead of waiting for a
|
||||
fix. It is not available over MCP (the owner runs it in a terminal or the desktop app).
|
||||
fix. It is not available over MCP: run it from your shell (or the owner uses the desktop app).
|
||||
|
||||
## Forms
|
||||
|
||||
|
|
@ -93,7 +98,7 @@ fix. It is not available over MCP (the owner runs it in a terminal or the deskto
|
|||
|
||||
1. `storebound console fill` lists the forms. `storebound console fill <form> --dry` prints every answer with its
|
||||
source; `[check]` lines are not proven by the config. Show them to the owner.
|
||||
2. For each `[check]` line, ask the owner (AGENTS.md rule 5: never guess a compliance answer). If they want it filled
|
||||
2. Ask the owner about every `[check]` line in one batch before the run (AGENTS.md rule 5: never guess a compliance answer). If they want it filled
|
||||
next time, add it to the config, for example:
|
||||
```ts
|
||||
console: {
|
||||
|
|
@ -103,8 +108,8 @@ fix. It is not available over MCP (the owner runs it in a terminal or the deskto
|
|||
},
|
||||
```
|
||||
Age rating answers live in `apple.info.ageRating` (also `socialMedia`, `socialMediaAgeRestricted`).
|
||||
3. The owner runs `storebound console fill <form>` in a terminal (or presses the button in the desktop app). The
|
||||
first log line says which browser it uses:
|
||||
3. Run `storebound console fill <form>` yourself from a shell (the desktop app has a button for it too). The first
|
||||
log line says which browser it uses:
|
||||
- **profile** (the default): storebound's own profile (`~/.storebound/console-profile/<store>`, or `--profile <dir>`
|
||||
/ `STOREBOUND_CONSOLE_PROFILE`; one per store, not per account: every studio shares the one login). Nothing is
|
||||
read or copied from the owner's own Chrome. storebound starts Chrome itself as a normal window (its own
|
||||
|
|
@ -158,8 +163,9 @@ fix. It is not available over MCP (the owner runs it in a terminal or the deskto
|
|||
Save, Submit, Publish, Create, Send, Next or the Turkish equivalents; only a LINK named exactly Start / Manage /
|
||||
Başla / Yönet is let through. If a step is not found in time, or two apps match (they are listed: set
|
||||
`apple.appId` / `play.packageName`), storebound says which step failed, prints what to click, and keeps watching:
|
||||
a sign-in that finishes restarts navigation at step 1; when the owner moves on by hand (the + button, the New App
|
||||
item, the app in the list appear) it continues from that step; when the owner opens the form it fills it. Watching
|
||||
a sign-in that finishes restarts navigation at step 1; when the page moves on (you click the step with your
|
||||
browser tool: the + button, the New App item, the app in the list appear) it continues from that step; when the
|
||||
form is open it fills it. Watching
|
||||
ends when the window is closed. When the form appears storebound fills the certain answers, outlines every
|
||||
unproven or unfillable field with a "storebound: check this" label, and lists them in the terminal.
|
||||
5. **One login, many developer accounts or teams.** storebound never asks for a second sign-in; it finds the
|
||||
|
|
@ -204,7 +210,8 @@ fix. It is not available over MCP (the owner runs it in a terminal or the deskto
|
|||
step: attach that folder to a bug report after looking at screen.jpg (labels only; no values, cookies or tokens;
|
||||
emails, phone numbers and the account area are replaced).
|
||||
9. If a field cannot be found or matches twice (for more than a moment: a page that is still loading does not count), the console UI changed: storebound stops filling and prints the
|
||||
step-by-step list ("label: answer") for the owner to copy. That is the expected safe behavior, not an error.
|
||||
step-by-step list ("label: answer"). That is the expected safe behavior, not an error: finish that part yourself
|
||||
with your browser tool (agent-first mode above), not by handing the list to the owner.
|
||||
|
||||
## Play Create app (`play-app-record`)
|
||||
|
||||
|
|
@ -225,7 +232,8 @@ fix. It is not available over MCP (the owner runs it in a terminal or the deskto
|
|||
"Check availability" ("Package name available"). It is fixed for good once the app is created.
|
||||
- App or game and Free or paid are `<material-radio>`s: storebound clicks the inner `[role=radio]` (the native input
|
||||
does not update the form's model). With `play.developerId` the form opens by its own URL (`.../create-new-app`).
|
||||
- After Create app: the owner adds the new app to the service account (see "Verified UI facts" above).
|
||||
- After Create app: the owner grants the service account access to the new app (a permission grant; see "Verified UI
|
||||
facts" above), then you run `storebound apps check --store play`.
|
||||
|
||||
## What storebound clicks, and what stays with the owner
|
||||
|
||||
|
|
@ -242,8 +250,8 @@ content", "Create and set up your app"):
|
|||
| Content rating (Play) | Start; **Save draft** then Next on each page (a draft: IARC gets nothing before Submit; the owner agreed) | **Submit** on the Summary: sends the questionnaire to IARC |
|
||||
| Target audience (Play) | Start / Manage, Next between the pages | **Save** on the last page: stores the declaration, which Google then reviews |
|
||||
|
||||
Mid-way storebound stops only for an uncertain answer (see 6). It never asks the owner to click a navigation button
|
||||
unless the console page changed so that storebound cannot find it (then it says so).
|
||||
Mid-way storebound stops only for an uncertain answer (see 6). A navigation button is never the owner's: when the
|
||||
console page changed so that storebound cannot find it, it says so and you click it with your browser tool.
|
||||
|
||||
## The owner decides
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue