@noodleseed/agent-kit 0.33.0 → 0.35.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/README.md +2 -4
- package/manifest.json +69 -29
- package/package.json +1 -1
- package/skills/claude-code/SKILL.md +50 -31
- package/skills/claude-code/examples/acme-bistro/README.md +1 -1
- package/skills/claude-code/references/app-directory-compliance.md +59 -0
- package/skills/claude-code/references/authoring-workflow.md +2 -2
- package/skills/claude-code/references/build-an-mcp-app.md +52 -0
- package/skills/claude-code/references/build-an-mcp-server.md +54 -0
- package/skills/claude-code/references/cli-commands.md +2 -12
- package/skills/claude-code/references/compile-errors.md +2 -2
- package/skills/claude-code/references/connect-an-api.md +60 -20
- package/skills/claude-code/references/deploy-and-ops.md +15 -84
- package/skills/claude-code/references/embedded-assistant.md +3 -3
- package/skills/claude-code/references/experience-design.md +1 -1
- package/skills/claude-code/references/feedback.md +15 -7
- package/skills/claude-code/references/inspect-hosted.md +26 -0
- package/skills/claude-code/references/publishing.md +15 -17
- package/skills/claude-code/references/verify-and-recover.md +65 -0
- package/skills/claude-code/references/widgets-and-apps.md +1 -1
- package/skills/codex/SKILL.md +50 -31
- package/skills/codex/examples/acme-bistro/README.md +1 -1
- package/skills/codex/references/app-directory-compliance.md +59 -0
- package/skills/codex/references/authoring-workflow.md +2 -2
- package/skills/codex/references/build-an-mcp-app.md +52 -0
- package/skills/codex/references/build-an-mcp-server.md +54 -0
- package/skills/codex/references/cli-commands.md +2 -12
- package/skills/codex/references/compile-errors.md +2 -2
- package/skills/codex/references/connect-an-api.md +60 -20
- package/skills/codex/references/deploy-and-ops.md +15 -84
- package/skills/codex/references/embedded-assistant.md +3 -3
- package/skills/codex/references/experience-design.md +1 -1
- package/skills/codex/references/feedback.md +15 -7
- package/skills/codex/references/inspect-hosted.md +26 -0
- package/skills/codex/references/publishing.md +15 -17
- package/skills/codex/references/verify-and-recover.md +65 -0
- package/skills/codex/references/widgets-and-apps.md +1 -1
- package/skills/claude-code/references/chatgpt-compliance.md +0 -63
- package/skills/codex/references/chatgpt-compliance.md +0 -63
|
@@ -1,94 +1,25 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Hosted mutation authorization
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> This route changes hosted or external state. Use it only when the current user request explicitly authorizes the exact mutation and target.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
- Link and target
|
|
7
|
-
- Deploy and inspect
|
|
8
|
-
- Installed Developer plugin handoff
|
|
9
|
-
- Eject path (portable manifest)
|
|
10
|
-
- Connect into a host
|
|
11
|
-
- Access modes
|
|
12
|
-
- Org and members
|
|
13
|
-
- Config and observability
|
|
14
|
-
- Agent-safe CLI recipes
|
|
15
|
-
- Analytics
|
|
5
|
+
## Route boundary
|
|
16
6
|
|
|
17
|
-
|
|
7
|
+
- Select this route only for the exact hosted mutation the user requested.
|
|
8
|
+
- Route inspection, diagnosis, preparation, validation, testing, and other read-only work to their read-only references. Those requests do not authorize a mutation.
|
|
9
|
+
- Authentication, target binding, configuration, access changes, deployment, connection writes, and rollback are separate mutations. Authorization for one does not imply another.
|
|
18
10
|
|
|
19
|
-
|
|
11
|
+
## Authorization check
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
Before any mutation, require the current request to name both the action and its complete target. A mutation-capable target consists of an explicit organization, application, and environment. When the environment is absent, stop and ask for it instead of applying a default, reusing local state, or selecting a target implicitly.
|
|
22
14
|
|
|
23
|
-
|
|
15
|
+
Do not broaden a request to prepare, inspect, diagnose, or validate into permission to authenticate, bind a target, change configuration or access, deploy, connect, submit, or roll back.
|
|
24
16
|
|
|
25
|
-
##
|
|
17
|
+
## Command and service contract
|
|
26
18
|
|
|
27
|
-
|
|
19
|
+
Use `references/cli-commands.md` as the generated command, flag, and exit-code contract. Consult the live command catalog before acting, and treat the service response as the authority for resulting hosted state. This reference intentionally does not duplicate operational command sequences, defaults, or status semantics.
|
|
28
20
|
|
|
29
|
-
##
|
|
21
|
+
## Evidence and stop conditions
|
|
30
22
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
`noodle export manifest [--output <file>]` compiles the entrypoint locally and emits the portable, vendor-neutral manifest JSON — no service, no login, no account. A Noodle app is just `src/server.ts` plus this manifest: the user can read it, diff it, and keep it.
|
|
36
|
-
|
|
37
|
-
## Connect into a host
|
|
38
|
-
|
|
39
|
-
Once deployed, register the server as a tool in a host with `noodle connect <host>` (`claude-code`, `codex`, `chatgpt`, `cursor`, `vscode`, `claude`, `inspector`) — it prints the exact config to paste.
|
|
40
|
-
|
|
41
|
-
- **Claude Code / Claude Desktop** (verified) — add the `mcpServers` block, or one-shot `claude mcp add-json noodle-server '<json>'`:
|
|
42
|
-
|
|
43
|
-
```json
|
|
44
|
-
{
|
|
45
|
-
"mcpServers": {
|
|
46
|
-
"noodle-server": { "type": "https", "url": "https://<app>.mcp.noodleseed.dev" }
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
- **Codex / Cursor / VS Code** — the same `mcpServers` block is emitted as a starting point (these hosts' config formats are not officially documented). Wiring a deployed Noodle server into Codex means registering that block in Codex's MCP config.
|
|
52
|
-
- **ChatGPT / Claude.ai** — no config file: open the host's Settings → Connectors → Add custom connector, paste the MCP URL, then authenticate.
|
|
53
|
-
- `noodle connect codex|claude-code --write` writes the project-local agent files (only these two targets).
|
|
54
|
-
|
|
55
|
-
## Access modes
|
|
56
|
-
|
|
57
|
-
`noodle access set owner-only|org-members|authenticated|customers` controls who can call the deployed server. Hosted access is identity-based; never add static data-plane keys.
|
|
58
|
-
|
|
59
|
-
## Org and members
|
|
60
|
-
|
|
61
|
-
`noodle orgs list|create` and `noodle members list|add|remove --org <slug>` manage organizations and membership.
|
|
62
|
-
|
|
63
|
-
## Config and observability
|
|
64
|
-
|
|
65
|
-
Manage runtime config with `noodle secrets` / `noodle variables` (scoped org/app/env). Operators use `noodle logs`, `noodle audit`, and `noodle policy` for logs, governance audit, and policy.
|
|
66
|
-
|
|
67
|
-
## Billing migration preview
|
|
68
|
-
|
|
69
|
-
`noodle billing migration preview [--file <mapping.json>]` is a super-admin, read-only inventory and validation command for legacy organizations. It never creates billing accounts, links organizations, or changes entitlements, and there is no apply command. Keep real mapping files outside the repository. The versioned file must classify production apps for every organization: `linkState: "unlinked"` selects a current owner subject under the fixed hosted issuer `https://accounts.google.com`, while `linkState: "linked"` asserts the exact current billing-account ID and link version. Inventory apps with `noodle apps list --archived --json` so archive state is visible. A blocked preview exits 1 even though the JSON response is a successful preview envelope; inspect `data.preview.blockers` and resolve every blocker before a future cutover workflow exists.
|
|
70
|
-
|
|
71
|
-
## Agent-safe CLI recipes
|
|
72
|
-
|
|
73
|
-
Use explicit flags in headless runs so commands never wait for a prompt:
|
|
74
|
-
|
|
75
|
-
```sh
|
|
76
|
-
noodle link --org acme --app support-assistant --env prod
|
|
77
|
-
noodle secrets set CRM_TOKEN --scope env --org acme --app support-assistant --env prod --from-env CRM_TOKEN
|
|
78
|
-
noodle secrets set CRM_CERT --scope env --org acme --app support-assistant --env prod --from-file ./cert.pem
|
|
79
|
-
printf %s "$CRM_TOKEN" | noodle secrets set CRM_TOKEN --scope env --org acme --app support-assistant --env prod --from-stdin
|
|
80
|
-
noodle variables set CRM_BASE_URL --scope env --org acme --app support-assistant --env prod --value https://crm.example.com
|
|
81
|
-
noodle secrets list --scope env --org acme --app support-assistant --env prod --json
|
|
82
|
-
noodle validate --json
|
|
83
|
-
noodle test --json
|
|
84
|
-
noodle deploy --json
|
|
85
|
-
noodle smoke --json
|
|
86
|
-
noodle billing migration preview --json
|
|
87
|
-
noodle agents doctor --json
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
`secrets resolve` is for local diagnostics only; do not print resolved values into prompts, logs, tests, or docs. Prefer `--from-env`, `--from-file`, or `--from-stdin` over inline `--value` for sensitive values. Variables may use `--value` when the value is non-secret.
|
|
91
|
-
|
|
92
|
-
## Analytics (verify after deploy, debug errors)
|
|
93
|
-
|
|
94
|
-
After a deploy gets traffic, verify with `noodle metrics --agent-output` — it returns a `health` verdict (`ok`/`attention`), a one-line summary, and `attention[]` items each carrying the exact next command. When a tool errors, drill in with `noodle events --tool <name> --json` (filters: `--status tool_error|mcp_error`, `--client <name>`); `noodle events --session <id> --json` replays one session chronologically. `--json` on both returns the full payload; human runs get the branded report. Two-tier errors: `tool_error` is recoverable (handed back to the model), `mcp_error` needs attention (protocol/timeout/internal). Wire edge-triggered webhooks on error share, error count, calls, or p95 latency with `noodle alerts add|list|remove|test`.
|
|
23
|
+
- Stop before execution when the action or complete target is missing.
|
|
24
|
+
- After an authorized mutation, report only the state evidenced by the command and service response.
|
|
25
|
+
- Do not claim host behavior, production health, or successful external registration without direct evidence at that layer.
|
|
@@ -180,7 +180,7 @@ context: {
|
|
|
180
180
|
},
|
|
181
181
|
```
|
|
182
182
|
|
|
183
|
-
The callback records declarative fulfilment at author time; the shared runtime executes only read-only connector operations, validates the declared output, and freezes one snapshot for the whole invocation and any accepted interaction. Tools/resources/prompts read `context.temporal`, `context.ambient`, and `context.ambientStatus`. The embedded assistant receives the same snapshot in trusted platform context. For model-visible application context in every host, designate one normal zero-input tool with `contextProvider: true`; the embedded host preloads it per turn and external hosts call it normally.
|
|
183
|
+
The callback records declarative fulfilment at author time; the shared runtime executes only read-only connector operations, validates the declared output, and freezes one snapshot for the whole invocation and any accepted interaction. Tools/resources/prompts read `context.temporal`, `context.ambient`, and `context.ambientStatus`. The embedded assistant receives the same snapshot in trusted platform context. For model-visible application context in every host, designate one normal zero-input tool with `contextProvider: true`; the embedded host preloads it per turn and external hosts call it normally. Keep ambient facts compact: the platform caps serialized JSON at 16 KiB, depth 8, and 128 entries per container, and rejects credential-shaped keys.
|
|
184
184
|
|
|
185
185
|
## Structured missing input
|
|
186
186
|
|
|
@@ -304,7 +304,7 @@ if (pendingId) {
|
|
|
304
304
|
- Signed-out session exchange returns `401`.
|
|
305
305
|
- The browser network/DOM/storage contains no client secret or model key.
|
|
306
306
|
- The local and production origins match `allowedOrigins` character-for-character.
|
|
307
|
-
- At the manifest/runtime boundary and in TypeScript action helpers, only `confirm: true` enables confirmation; omitted or `false` preserves
|
|
307
|
+
- At the manifest/runtime boundary and in TypeScript action helpers, only `confirm: true` enables confirmation; omitted or `false` preserves direct execution. Action hints alone never enforce approval; `annotations.action({ confirm: false })` is equivalent to omission.
|
|
308
308
|
- An expired turn re-exchanges once; interaction decisions never auto-retry. An explicit same-decision repeat returns the stored outcome without executing again.
|
|
309
309
|
- Accept, decline, and cancel are single-use. Only accept executes; the server ignores replacement tool arguments.
|
|
310
310
|
- Wrong-origin and malformed-origin requests fail closed.
|
|
@@ -328,6 +328,6 @@ if (pendingId) {
|
|
|
328
328
|
| Relative dates use the wrong day or time zone | No verified user preference and the browser hint is missing/stale | Pass saved `preferences` from the backend; provide a fresh per-turn `clientContext` in a headless renderer |
|
|
329
329
|
| The model invents a team/holiday after context lookup fails | The ambient provider returned invalid data or its read-only connector failed (`ambientStatus: unavailable`) | Fix the provider/connector; treat unavailable ambient facts as missing, never prompt instructions |
|
|
330
330
|
| Decline/cancel reports `unsupported_service` | The session came from a legacy service with no `endpoints.interactions` | Upgrade the service; legacy `toolConfirmations` supports accept only |
|
|
331
|
-
| Behavior does not change after `noodle deploy` |
|
|
331
|
+
| Behavior does not change after `noodle deploy` | The client is not following the tenant's active deployment | Restart the client session and confirm the selected tenant and deployment |
|
|
332
332
|
| A delegated connector returns `credential_unavailable` / `caller_identity_not_customer` | The calling surface has no verified customer identity (or an old session minted before the platform carried the resource audience) | Verify `customerAuth` is configured, the backend passes the verified `user`, and run `noodle auth doctor --live` |
|
|
333
333
|
| Deploy fails with `unsupported_delegated_provider` | `delegatedOAuth.provider` only supports the managed `firebase`/`microsoft` bridges | Use `auth.kind: "delegatedTokenExchange"` for your own token endpoint (see authoring-workflow.md) |
|
|
@@ -126,7 +126,7 @@ The design phase produces up to three artifacts — worked gold-standard version
|
|
|
126
126
|
architecture, demo scope, success metrics, and future enhancements — opening on the funnel-boundary
|
|
127
127
|
line every scope debate resolves against.
|
|
128
128
|
- **Wireframe** — the single-file HTML alignment artifact (anatomy above) with the embedded compliance
|
|
129
|
-
audit; see `references/
|
|
129
|
+
audit; see `references/app-directory-compliance.md`.
|
|
130
130
|
- **API contract** — when the partner's backend must be built or wrapped. Escalate: (1) the MCP
|
|
131
131
|
tool→call-sequence map (always); (2) "Recommended API Shapes" — concrete request/response JSON per
|
|
132
132
|
tool, including the hardest nested case; (3) a full OpenAPI spec for transactional apps. Contract
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
# Send product feedback
|
|
2
2
|
|
|
3
|
-
When you — the coding agent — discover a way Noodle Seed could be better,
|
|
3
|
+
When you — the coding agent — discover a way Noodle Seed could be better, prepare one sanitized feedback proposal. Feedback crosses the customer project boundary and lands in Noodle Seed’s private tracker, so the user must make an informed choice. Show the user the exact command and ask for explicit user approval. Do not run or submit it until approval is given.
|
|
4
4
|
|
|
5
5
|
## Contents
|
|
6
6
|
|
|
7
|
-
- When to
|
|
7
|
+
- When to propose feedback
|
|
8
|
+
- Approval workflow
|
|
8
9
|
- The command
|
|
9
10
|
- Choose the structured fields
|
|
10
11
|
- Sanitization rules (hard requirements)
|
|
11
12
|
- Minimal repro guidance
|
|
12
13
|
- After you submit
|
|
13
14
|
|
|
14
|
-
## When to
|
|
15
|
+
## When to propose feedback
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
Draft one `noodle feedback` proposal per distinct finding when you:
|
|
17
18
|
|
|
18
19
|
- hit a CLI or SDK error that cost you retries, or whose message/`fix`/`next` guidance misled you;
|
|
19
20
|
- discover a missing capability you had to work around (in the CLI, SDK, widgets, connectors, deploy lane, console, or docs);
|
|
@@ -21,7 +22,14 @@ Send one `noodle feedback` per distinct finding whenever you:
|
|
|
21
22
|
- notice confusing command output, a broken `--json` envelope, or a wrong exit code;
|
|
22
23
|
- have a concrete idea that would make authoring or operating apps faster.
|
|
23
24
|
|
|
24
|
-
Do not batch several findings into one
|
|
25
|
+
Do not batch several findings into one proposal, and do not re-propose the same finding in the same session.
|
|
26
|
+
|
|
27
|
+
## Approval workflow
|
|
28
|
+
|
|
29
|
+
1. Draft and sanitize the title, message, labels, and exact shell command.
|
|
30
|
+
2. Show the user the exact command and explain that it sends the shown content plus CLI version, OS/platform, and Node version to Noodle Seed’s private tracker.
|
|
31
|
+
3. Ask for explicit user approval. Do not run, submit, or send anything until the user clearly approves that exact proposal.
|
|
32
|
+
4. After approval, run it once. If authentication is missing, report that feedback was not sent and offer the normal `noodle login` path; never sign in or retry without direction.
|
|
25
33
|
|
|
26
34
|
## The command
|
|
27
35
|
|
|
@@ -31,7 +39,7 @@ noodle feedback "resources list --json omits the truncated flag the docs promise
|
|
|
31
39
|
--type fix --severity P2 --area cli --json
|
|
32
40
|
```
|
|
33
41
|
|
|
34
|
-
The message is required (1–4000 chars). Pass `--json` and parse the envelope: success is `{ok:true,data:{reference,labels}}`; a `429` means the per-user hourly budget (5) is spent —
|
|
42
|
+
This is an example only; build the exact command for the finding and show it before execution. The message is required (1–4000 chars). Pass `--json` and parse the envelope: success is `{ok:true,data:{reference,labels}}`; a `429` means the per-user hourly budget (5) is spent — report that it was not sent and never retry-loop. The CLI attaches only the disclosed light diagnostics automatically: CLI version, OS/platform, Node version. Nothing else is collected.
|
|
35
43
|
|
|
36
44
|
## Choose the structured fields
|
|
37
45
|
|
|
@@ -64,4 +72,4 @@ Repro: applies to every connector whose response mapping references a nested arr
|
|
|
64
72
|
|
|
65
73
|
## After you submit
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
Only after explicit user approval and a successful command, the returned `reference` (e.g. `fb-142`) is confirmation; mention it briefly so the user knows what was sent. Feedback goes to a private tracker — there is no public issue link, and no follow-up action is needed. Continue the user’s task immediately; feedback must never block or slow their work.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Inspect hosted state
|
|
2
|
+
|
|
3
|
+
Read hosted evidence without changing target, credentials, configuration, access, host wiring, revisions, or directory state.
|
|
4
|
+
|
|
5
|
+
## Use when
|
|
6
|
+
|
|
7
|
+
- The user asks for hosted status, deployment metadata, health, logs, events, metrics, audit evidence, or diagnosis.
|
|
8
|
+
- The request is inspect-only, diagnose-only, or asks whether an existing deployment works.
|
|
9
|
+
|
|
10
|
+
## Authority boundary
|
|
11
|
+
|
|
12
|
+
This route is read-only. It never authorizes `login`, `logout`, `link`, `target set`, hosted secret/variable/config/access changes, `deploy`, `rollback`, host configuration writes, or directory submission. If evidence shows one of those actions is needed, report the exact proposed action and target, then stop for a new explicit user request.
|
|
13
|
+
|
|
14
|
+
## Workflow
|
|
15
|
+
|
|
16
|
+
1. Resolve the requested org, app, environment, and deployment from existing non-secret context. Do not change the effective target to make inspection easier.
|
|
17
|
+
2. Choose the narrowest read-only command: `noodle target show`, `noodle status`, `noodle inspect`, `noodle smoke`, `noodle metrics --agent-output`, `noodle events --json`, `noodle logs`, or `noodle audit`.
|
|
18
|
+
3. Prefer machine output when the selected command supports it. Record the target, revision/deployment ID, timestamp, result, and any request ID without exposing secrets or customer payloads.
|
|
19
|
+
4. When the installed Developer MCP is available, use its deployment inspection or diagnosis tool only for the selected org/app/env. Treat it as evidence gathering, not mutation authority.
|
|
20
|
+
5. If a command fails, distinguish missing authentication/access from unhealthy application behavior. Do not repair, relink, redeploy, rotate config, or roll back under this route.
|
|
21
|
+
|
|
22
|
+
## Stop conditions
|
|
23
|
+
|
|
24
|
+
- Stop complete when the requested hosted fact is supported by current evidence and higher untested levels are named.
|
|
25
|
+
- Stop blocked when existing access cannot read the target or the requested evidence requires a host/user journey unavailable in scope.
|
|
26
|
+
- Stop for authorization when the next useful action would mutate local targeting, hosted state, host configuration, or directory state.
|
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
# Publish to app directories
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Preparation is read-only unless the current user request explicitly authorizes the exact deploy, access change, host write, or submission target. A request to prepare must report missing readiness work and stop before mutation.
|
|
4
|
+
|
|
5
|
+
Directory requirements evolve. Identify the requested directory first and verify its current official requirements before preparing directory-specific evidence.
|
|
4
6
|
|
|
5
7
|
## Contents
|
|
6
8
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
9
|
+
- Shared readiness gate
|
|
10
|
+
- Directory-specific evidence
|
|
11
|
+
- Submission boundary
|
|
10
12
|
|
|
11
|
-
##
|
|
13
|
+
## Shared readiness gate
|
|
12
14
|
|
|
13
15
|
Before any submission:
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
4. Polish the listing surface: tool descriptions, widget titles, and the `server` branding tokens are what reviewers and users see.
|
|
17
|
+
Use `references/app-directory-compliance.md` as this route’s canonical shared compliance checklist.
|
|
18
|
+
|
|
19
|
+
Prepare evidence for a reachable production MCP endpoint, accurate capability descriptions and schemas, useful fallback behavior, realistic positive and negative tests, data minimization, privacy disclosures, support ownership, and any interactive surface the directory will review.
|
|
19
20
|
|
|
20
|
-
##
|
|
21
|
+
## Directory-specific evidence
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
Read the selected directory’s current official submission documentation at review time. Record each additional requirement separately from the shared checklist, including listing fields, identity verification, test credentials, screenshots, policy declarations, review limits, and appeal or resubmission steps. Never project one directory’s requirements onto another.
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
- The submission form asks for the app name, logo, description, company and privacy policy URLs, MCP server URL and tool information, screenshots, test prompts with expected responses, and localization details.
|
|
26
|
-
- One version may be published and one in review at a time; to revise a pending submission, cancel the review and resubmit rather than creating a new app.
|
|
27
|
-
- Review combines automated checks and manual evaluation; rejections come with feedback — fix and resubmit, or reply to appeal. An approved app is also distributed as a Codex plugin.
|
|
25
|
+
When a requirement cannot be verified from the selected directory’s current documentation or direct review evidence, mark it unknown instead of borrowing a rule from another host.
|
|
28
26
|
|
|
29
|
-
##
|
|
27
|
+
## Submission boundary
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
Preparation is read-only. Deployment, access changes, directory registration, and final submission each require explicit authorization for the exact target. Report remaining evidence gaps and stop when that authority or required directory access is absent.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Outcome
|
|
2
|
+
|
|
3
|
+
Identify the first failing evidence layer, repair only that layer, rerun it, and report the highest level actually proven. A successful lower layer must never be presented as proof of a higher one.
|
|
4
|
+
|
|
5
|
+
## Use when
|
|
6
|
+
|
|
7
|
+
- The user asks to validate, test, diagnose, recover, or establish whether a local or hosted Noodle Seed project works.
|
|
8
|
+
- A command, connector, App, host integration, deployment, or production check is failing or has uncertain evidence.
|
|
9
|
+
|
|
10
|
+
## Do not use when
|
|
11
|
+
|
|
12
|
+
- The primary request is to design or build a new product capability; select its build route and use this playbook only if evidence fails.
|
|
13
|
+
- The user asks for a higher-risk external action rather than diagnosis. This route does not grant deployment, publication, live-write, or merge authority.
|
|
14
|
+
|
|
15
|
+
## Required inputs
|
|
16
|
+
|
|
17
|
+
Capture the requested evidence level, the exact command or user-visible symptom, sanitized machine output, the environment/target, and the last known passing layer. Do not broaden the goal beyond the level the user asked to prove.
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
|
|
21
|
+
Use this ordered evidence ladder. Start at the last known passing layer or the lowest plausible failure; never jump upward over an unproven dependency:
|
|
22
|
+
|
|
23
|
+
1. **Compile** — the TypeScript build and authoring import surface are valid.
|
|
24
|
+
2. **Validate** — `noodle validate --json` accepts the Noodle contract.
|
|
25
|
+
3. **Local smoke** — `noodle test --json` starts the local runtime and exercises registration.
|
|
26
|
+
4. **Real API** — a representative safe `noodle tools call` proves connector credentials, transport, observed mapping, and populated data.
|
|
27
|
+
5. **App compliance** — `noodle check --json` and local devtools prove the App contract and intended states.
|
|
28
|
+
6. **Host** — the requested host connects, invokes the expected capability, and renders useful fallback/UI behavior.
|
|
29
|
+
7. **Deploy** — the requested hosted revision and configuration exist and report healthy at the deployment layer.
|
|
30
|
+
8. **Production health** — the live production endpoint and requested user journey are observed on the intended revision.
|
|
31
|
+
|
|
32
|
+
For the first failing layer:
|
|
33
|
+
|
|
34
|
+
1. Read the process exit code or status first. If machine JSON exists, parse it before reading human prose or editing files.
|
|
35
|
+
2. For validation envelopes, inspect every `error.errors[]` item and repair the field at its reported `path`. Use `references/agent-contract.md` for the envelope and `references/compile-errors.md` for the named error code.
|
|
36
|
+
3. Form one evidence-backed cause from the observed output. If the two canonical supports do not cover it, select one matching symptom from the router lookup catalog; do not scan every recovery path.
|
|
37
|
+
4. Make the smallest in-scope repair. Do not freeform re-edit adjacent code, change credentials, redeploy, or add product behavior without evidence and authority.
|
|
38
|
+
5. Rerun only the same evidence layer that failed. Once it passes, continue upward only to the user-requested level.
|
|
39
|
+
6. Stop after two evidence-backed repair attempts with the same failure signature, or immediately when the next action requires new authority or external state.
|
|
40
|
+
|
|
41
|
+
## Verification evidence
|
|
42
|
+
|
|
43
|
+
Report a compact ledger for every exercised layer: command/action, target, result, and the evidence it establishes. Claim only the highest contiguous passing layer.
|
|
44
|
+
|
|
45
|
+
- Compile success does not prove runtime behavior.
|
|
46
|
+
- Validation and local smoke do not prove a real API mapping or credential path.
|
|
47
|
+
- Local evidence does not prove hosted or host behavior.
|
|
48
|
+
- Deployment existence does not prove production health or a user journey.
|
|
49
|
+
- Report every requested but unperformed or blocked higher layer as not run, with the reason.
|
|
50
|
+
|
|
51
|
+
## Recovery paths
|
|
52
|
+
|
|
53
|
+
- Compile/validation: repair the exact import, schema, or reported path, then rerun that command without freeform changes.
|
|
54
|
+
- Local boot/smoke: use the structured startup error to correct the effective target, config, or entrypoint before retrying.
|
|
55
|
+
- Real API: distinguish authentication, reachability, legitimate empty results, and broken response mappings before changing code.
|
|
56
|
+
- App: repair the cited contract or state in `noodle check --json`, then confirm it in devtools before attempting a host.
|
|
57
|
+
- Host/deployment/production: confirm revision, target, identity, and configuration independently; do not infer one from another.
|
|
58
|
+
- Repeated external failure: preserve passing evidence and report the sanitized failure, required authority or external state, owner, and exact next action.
|
|
59
|
+
|
|
60
|
+
## Stop conditions
|
|
61
|
+
|
|
62
|
+
- Stop complete when the user-requested evidence level and every dependency below it pass in the current target.
|
|
63
|
+
- Stop blocked when progress requires credentials, approval, host access, deployment authority, production access, or an external-state change not available in scope.
|
|
64
|
+
- Stop after two evidence-backed repair attempts with the same failure signature at one layer; do not hide repetition behind unrelated edits.
|
|
65
|
+
- Never claim fixed or working without rerunning the failed layer, and never upgrade compile, local, deployment, or stale historical evidence into a stronger claim.
|
|
@@ -18,7 +18,7 @@ Use `tool(name, { description, input, output, fulfil, view })` for a model-visib
|
|
|
18
18
|
|
|
19
19
|
Generated widgets, official examples, and agent-authored MCP Apps must start with `@noodleseed/one/react` primitives and semantic tokens. Custom React/CSS or third-party components remain valid when the kit lacks the required behavior or the developer explicitly requests them.
|
|
20
20
|
|
|
21
|
-
`noodle init my-app` defaults to the
|
|
21
|
+
`noodle init my-app` defaults to the SaaS profile: federated OIDC placeholders, one explicit context-provider tool, MCP App UI, resource, prompt, state contract, branding, handoff, and embedded assistant. Begin by replacing the IdP/audience/domain placeholders. Use `--template widget`, `hello`, or `http-api` only when that narrower profile is intentional.
|
|
22
22
|
|
|
23
23
|
The default composition rule is: build the smallest useful conversational surface. Inline has one purpose, one primary action, and at most two visible actions. Use progressive disclosure or a later conversational turn for secondary detail; request fullscreen only when the user asks or the task genuinely needs it. Never use nested scrolling. At 280px and wider, the widget must remain one-column, readable, touch-safe, and free of horizontal overflow. Remove secondary chrome before shrinking essential content.
|
|
24
24
|
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# ChatGPT App compliance (pre-submission)
|
|
2
|
-
|
|
3
|
-
`noodle check --target chatgpt` verifies the *metadata* prerequisites; app-store submission also faces a
|
|
4
|
-
human review against OpenAI’s Apps SDK UX principles. Run this checklist against the built app before
|
|
5
|
-
submitting, and render it as an audit table in the design wireframe (`design/wireframe.html` in the
|
|
6
|
-
`acme-*` examples) so partners and reviewers see it up front.
|
|
7
|
-
|
|
8
|
-
## Contents
|
|
9
|
-
|
|
10
|
-
- Metadata gate vs review
|
|
11
|
-
- Pre-submission checklist
|
|
12
|
-
- UI guidelines
|
|
13
|
-
- Domain guardrails
|
|
14
|
-
- Privacy and data
|
|
15
|
-
|
|
16
|
-
## Metadata gate vs review
|
|
17
|
-
|
|
18
|
-
`noodle check --target chatgpt --json` returning `ok:true` means the widget is *metadata-ready* (widget
|
|
19
|
-
`domain`, `openai/outputTemplate`, CSP, tool annotations, and `invoking`/`invoked` invocation copy are
|
|
20
|
-
present) — it does NOT prove host rendering, conversation UX, or submission acceptance. Validate real
|
|
21
|
-
rendering in ChatGPT Developer Mode / MCP Inspector, then run the checklist below.
|
|
22
|
-
|
|
23
|
-
## Pre-submission checklist (what review looks for)
|
|
24
|
-
|
|
25
|
-
1. **Conversational value** — at least one capability relies on ChatGPT’s strengths: natural-language
|
|
26
|
-
actions no tap-driven app can do (e.g. "two margheritas and a lemon tart" parses into a cart). Cite
|
|
27
|
-
concrete app behavior, not aspirations.
|
|
28
|
-
2. **Beyond base ChatGPT** — new knowledge, actions, or presentation (grounded partner data, live
|
|
29
|
-
inventory, signed handoffs, real-world routing).
|
|
30
|
-
3. **Atomic, model-friendly actions** — self-contained tools with explicit input/output schemas, and an
|
|
31
|
-
annotation on every tool (`annotations.readOnly()` / `.action()` / `.openAction()`).
|
|
32
|
-
4. **Helpful UI only** — justify each widget (would plain text degrade UX?), and note what you
|
|
33
|
-
deliberately did NOT build a widget for (payment is off-app → no payment widget).
|
|
34
|
-
5. **In-chat task completion** — the user finishes a meaningful task in chat. For a top-of-funnel app,
|
|
35
|
-
the task is the discovery/config loop completed in-chat with an intentional handoff.
|
|
36
|
-
6. **Performance** — tool calls scoped per step; response-time targets stated.
|
|
37
|
-
7. **Discoverability** — broad, natural trigger prompts listed; description keywords planned. Golden
|
|
38
|
-
prompt sets and metadata optimization are a launch workstream, not polish.
|
|
39
|
-
8. **Platform fit** — multi-turn dialogue, conversation memory, and multimodality where genuinely useful.
|
|
40
|
-
|
|
41
|
-
## UI guidelines
|
|
42
|
-
|
|
43
|
-
System fonts, monochrome outlined icons, WCAG AA contrast, at most two actions on inline cards, no nested
|
|
44
|
-
scroll, and the right display mode per intent (inline by default; fullscreen only where browsing needs
|
|
45
|
-
it; picture-in-picture only for live state). Brand only through `server` `branding` tokens — accent on
|
|
46
|
-
the primary CTA, logo, and badges, nothing else; the compiler derives the palette. Never inject raw
|
|
47
|
-
global CSS.
|
|
48
|
-
|
|
49
|
-
## Domain guardrails
|
|
50
|
-
|
|
51
|
-
For regulated-adjacent apps, add app-specific trust behaviors and **show them in the rendered pixels**:
|
|
52
|
-
cite the source and its revision for consequential lookups; frame regulated content as "considerations,
|
|
53
|
-
not a ruling"; never invent compatibility, availability, or pricing; and always show the relevant
|
|
54
|
-
caution/disclaimer. These are what make a regulated-adjacent app approvable.
|
|
55
|
-
|
|
56
|
-
## Privacy and data
|
|
57
|
-
|
|
58
|
-
Data flows through OpenAI; tool payloads and whatever the server stores must match the partner’s privacy
|
|
59
|
-
policy. No payment happens in chat (PCI stays off-app). Avoid per-user OAuth in a top-of-funnel v1 (use
|
|
60
|
-
service credentials via a `connector`); add end-user auth only for two-way apps (`customerAuth`). Keep
|
|
61
|
-
secrets out of tool output, widgets, and logs. If the partner’s published policy predates the app, flag a
|
|
62
|
-
privacy gap for their counsel before submission. Re-run this checklist against the *built* app before
|
|
63
|
-
every submission — not just the wireframe.
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# ChatGPT App compliance (pre-submission)
|
|
2
|
-
|
|
3
|
-
`noodle check --target chatgpt` verifies the *metadata* prerequisites; app-store submission also faces a
|
|
4
|
-
human review against OpenAI’s Apps SDK UX principles. Run this checklist against the built app before
|
|
5
|
-
submitting, and render it as an audit table in the design wireframe (`design/wireframe.html` in the
|
|
6
|
-
`acme-*` examples) so partners and reviewers see it up front.
|
|
7
|
-
|
|
8
|
-
## Contents
|
|
9
|
-
|
|
10
|
-
- Metadata gate vs review
|
|
11
|
-
- Pre-submission checklist
|
|
12
|
-
- UI guidelines
|
|
13
|
-
- Domain guardrails
|
|
14
|
-
- Privacy and data
|
|
15
|
-
|
|
16
|
-
## Metadata gate vs review
|
|
17
|
-
|
|
18
|
-
`noodle check --target chatgpt --json` returning `ok:true` means the widget is *metadata-ready* (widget
|
|
19
|
-
`domain`, `openai/outputTemplate`, CSP, tool annotations, and `invoking`/`invoked` invocation copy are
|
|
20
|
-
present) — it does NOT prove host rendering, conversation UX, or submission acceptance. Validate real
|
|
21
|
-
rendering in ChatGPT Developer Mode / MCP Inspector, then run the checklist below.
|
|
22
|
-
|
|
23
|
-
## Pre-submission checklist (what review looks for)
|
|
24
|
-
|
|
25
|
-
1. **Conversational value** — at least one capability relies on ChatGPT’s strengths: natural-language
|
|
26
|
-
actions no tap-driven app can do (e.g. "two margheritas and a lemon tart" parses into a cart). Cite
|
|
27
|
-
concrete app behavior, not aspirations.
|
|
28
|
-
2. **Beyond base ChatGPT** — new knowledge, actions, or presentation (grounded partner data, live
|
|
29
|
-
inventory, signed handoffs, real-world routing).
|
|
30
|
-
3. **Atomic, model-friendly actions** — self-contained tools with explicit input/output schemas, and an
|
|
31
|
-
annotation on every tool (`annotations.readOnly()` / `.action()` / `.openAction()`).
|
|
32
|
-
4. **Helpful UI only** — justify each widget (would plain text degrade UX?), and note what you
|
|
33
|
-
deliberately did NOT build a widget for (payment is off-app → no payment widget).
|
|
34
|
-
5. **In-chat task completion** — the user finishes a meaningful task in chat. For a top-of-funnel app,
|
|
35
|
-
the task is the discovery/config loop completed in-chat with an intentional handoff.
|
|
36
|
-
6. **Performance** — tool calls scoped per step; response-time targets stated.
|
|
37
|
-
7. **Discoverability** — broad, natural trigger prompts listed; description keywords planned. Golden
|
|
38
|
-
prompt sets and metadata optimization are a launch workstream, not polish.
|
|
39
|
-
8. **Platform fit** — multi-turn dialogue, conversation memory, and multimodality where genuinely useful.
|
|
40
|
-
|
|
41
|
-
## UI guidelines
|
|
42
|
-
|
|
43
|
-
System fonts, monochrome outlined icons, WCAG AA contrast, at most two actions on inline cards, no nested
|
|
44
|
-
scroll, and the right display mode per intent (inline by default; fullscreen only where browsing needs
|
|
45
|
-
it; picture-in-picture only for live state). Brand only through `server` `branding` tokens — accent on
|
|
46
|
-
the primary CTA, logo, and badges, nothing else; the compiler derives the palette. Never inject raw
|
|
47
|
-
global CSS.
|
|
48
|
-
|
|
49
|
-
## Domain guardrails
|
|
50
|
-
|
|
51
|
-
For regulated-adjacent apps, add app-specific trust behaviors and **show them in the rendered pixels**:
|
|
52
|
-
cite the source and its revision for consequential lookups; frame regulated content as "considerations,
|
|
53
|
-
not a ruling"; never invent compatibility, availability, or pricing; and always show the relevant
|
|
54
|
-
caution/disclaimer. These are what make a regulated-adjacent app approvable.
|
|
55
|
-
|
|
56
|
-
## Privacy and data
|
|
57
|
-
|
|
58
|
-
Data flows through OpenAI; tool payloads and whatever the server stores must match the partner’s privacy
|
|
59
|
-
policy. No payment happens in chat (PCI stays off-app). Avoid per-user OAuth in a top-of-funnel v1 (use
|
|
60
|
-
service credentials via a `connector`); add end-user auth only for two-way apps (`customerAuth`). Keep
|
|
61
|
-
secrets out of tool output, widgets, and logs. If the partner’s published policy predates the app, flag a
|
|
62
|
-
privacy gap for their counsel before submission. Re-run this checklist against the *built* app before
|
|
63
|
-
every submission — not just the wireframe.
|