@uipath/skills 1.201.0-preview.591 → 1.201.0-preview.602
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/package.json +1 -1
- package/skills/uipath-maestro-case/references/evals/evals.json +1 -1
- package/skills/uipath-planner/SKILL.md +5 -8
- package/skills/uipath-planner/assets/templates/case-sdd-template.md +165 -30
- package/skills/uipath-planner/references/case-design-lane-guide.md +179 -145
- package/skills/uipath-planner/references/case-design-layers-guide.md +462 -0
- package/skills/uipath-planner/references/sdd-generation-guide.md +1 -1
- package/skills/uipath-planner/scripts/audit_sdd.py +490 -30
- package/version-manifest.json +1 -1
- package/skills/uipath-planner/assets/templates/case-sdd-examples.md +0 -518
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/skills",
|
|
3
|
-
"version": "1.201.0-preview.
|
|
3
|
+
"version": "1.201.0-preview.602",
|
|
4
4
|
"description": "UiPath agent skills for Claude Code, Codex, Cursor, Copilot, Gemini and OpenCode — RPA, UI automation, UI testing, coded agents/apps/workflows, and troubleshooting. Distributed as the UiPath Claude Code plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "UiPath"
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"The confirmation includes a complete Decisions I Made table with a plain-language provenance per assumption",
|
|
93
93
|
"A manually triggered task is presented as optional adhoc worker-launched work without exposing schema mechanics",
|
|
94
94
|
"The confirmation carries the build continuation choice (build straight through vs pause at the build preview) so it is never asked mid-build",
|
|
95
|
-
"On a Build answer the lane writes sdd.md
|
|
95
|
+
"On a Build answer the lane writes sdd.md, then the build starts (solution init + planning); the design doc is mentioned in one line as a reference artifact — never presented for review, and never written before the Build answer"
|
|
96
96
|
]
|
|
97
97
|
},
|
|
98
98
|
{
|
|
@@ -16,7 +16,7 @@ Never execute the work. Outputs are SDD markdown, plan/tasks markdown, and live
|
|
|
16
16
|
|
|
17
17
|
The skill has three paths, decided by the **Entry Guard**:
|
|
18
18
|
|
|
19
|
-
- **Phase D — Design.** Input is a PDD, or an explicit "design / architect this" request. Author the SDD; the SDD write ends the turn, and Lane A continues on the next turn. See [sdd-generation-guide.md](references/sdd-generation-guide.md). **Case Management designs run through Phase D's Case Design Lane** ([case-design-lane-guide.md](references/case-design-lane-guide.md))
|
|
19
|
+
- **Phase D — Design.** Input is a PDD, or an explicit "design / architect this" request. Author the SDD; the SDD write ends the turn, and Lane A continues on the next turn. See [sdd-generation-guide.md](references/sdd-generation-guide.md). **Case Management designs run through Phase D's Case Design Lane** ([case-design-lane-guide.md](references/case-design-lane-guide.md)) — a conversational design ending in ONE Case Review confirmation.
|
|
20
20
|
- **Lane A — PDD-driven.** Input is an SDD with the `## Planner Handoff` marker (written by Phase D, or hand-written). Read it, derive tasks, emit live tasks. Zero to two user prompts. See [pdd-driven-lane-guide.md](references/pdd-driven-lane-guide.md).
|
|
21
21
|
- **Lane B — Non-PDD.** No SDD; a non-PDD multi-project request. Elicit preferences, detect project type, write a plan, emit live tasks. 0–3 prompts (5-call cap). See [non-pdd-lane-guide.md](references/non-pdd-lane-guide.md).
|
|
22
22
|
|
|
@@ -25,8 +25,6 @@ The skill has three paths, decided by the **Entry Guard**:
|
|
|
25
25
|
- User provides a **PDD or any process-knowledge source** — a PDD, Confluence page, BPMN model, meeting/Zoom transcript, SOP, or requirements doc (as PDF / Word / Markdown / `.txt` / `.bpmn` / pasted) — and asks to design or build from it → Phase D
|
|
26
26
|
- User asks to **design / architect / generate an SDD** for a UiPath automation → Phase D
|
|
27
27
|
- User provides an **SDD path** → Lane A
|
|
28
|
-
- User asks to **design / generate a Case Management SDD** conversationally (no PDD), asks for a reviewable case design draft, or asks to **finalize a case `sdd.draft.md`** → Phase D — Design (Case Design Lane)
|
|
29
|
-
- **`uipath-maestro-case` handed a case build request off to this skill** (no `sdd.md` exists yet; same conversation) → Phase D — Design (Case Design Lane, Build handoff: design with the user, Build-option confirmation, write `sdd.md` at the working root, the build continues immediately)
|
|
30
28
|
- The request is **non-trivial** — spans **separate buildable projects** that each need their own specialist (a Flow orchestrating standalone RPA processes or agents that must themselves be built) → Lane B
|
|
31
29
|
- The request is **ambiguous** — no single specialist clearly matches, or "what can I build?"
|
|
32
30
|
|
|
@@ -46,7 +44,7 @@ The skill has three paths, decided by the **Entry Guard**:
|
|
|
46
44
|
10. **Fill gaps with `[DEFAULT]` or `[SME REVIEW]` — never silently invent business rules.** `[DEFAULT]` for industry-standard patterns (retry counts, timeouts); `[SME REVIEW]` for business-knowledge gaps. Resolve `[SME REVIEW]` items with the user before writing. For Agent/Coded App gaps, use `AskUserQuestion` (proceed-with-gap-filling vs different product) — never auto-fallback.
|
|
47
45
|
11. **The terminal artefact of a Solution build is a packed `.uipx`.** The SDD's `## Next Steps` section points the user at the `uipath-solution` skill (`uip solution init` → `project add` per project → `resources refresh` → `pack`). A bare project folder is not the deliverable. Exception: when the Constraint Gate blocks Solutions for the delivery model — standalone, Automation Suite older than 2.2510, or a user exclusion — rewrite Next Steps to per-package Orchestrator publish routed via `uipath-platform`.
|
|
48
46
|
12. **Never copy SDD architecture into the plan, and never invent selectors or UI targets.** The plan references SDD section paths in skill prompts; it does not duplicate architecture content. Selectors require application inspection at development time — leave them for the specialist.
|
|
49
|
-
13. **
|
|
47
|
+
13. **Sole author of Case Management SDDs.** Every case design path — conversational, build handoff from `uipath-maestro-case`, draft finalization, PDD-driven — runs the Case Design Lane ([case-design-lane-guide.md](references/case-design-lane-guide.md)), which owns the conversation, the one confirmation, and the write; the case model and its defaults live in [case-design-layers-guide.md](references/case-design-layers-guide.md) and the render contract in the case SDD template. Design time resolves identities only — never schema discovery, project scaffolding, or create-on-missing; those are build concerns, recorded as gate decisions.
|
|
50
48
|
|
|
51
49
|
## Entry Guard
|
|
52
50
|
|
|
@@ -147,7 +145,7 @@ High-level view of what each specialist owns. **Do not describe internal flows o
|
|
|
147
145
|
| `uipath-functions` | Coded Functions — TypeScript (default), JavaScript, or Python (`uip function new -l ts / js / py`; typed I/O — Pydantic for Python) — atomic deterministic logic: transforms, custom-auth API calls, ERP/IS-connection queries. Runs serverless or on an RPA robot. Invoked from Maestro (Flow/BPMN), agents-as-tools, Orchestrator API. No LLM/agent loop (that → `uipath-agents`) | Yes (`uip login`) | **Yes** — `uip function pack/publish` |
|
|
148
146
|
| `uipath-maestro-flow` | `.flow` files orchestrating RPA, agents, apps | Yes (`uip login`) | **Partial** — Orchestrator deploy of `.uipx`-wrapped solutions → `uipath-solution`; non-solution single package → `uipath-platform` |
|
|
149
147
|
| `uipath-maestro-bpmn` | `.bpmn` files — standards-based BPMN 2.0 process orchestration (gateways, events, boundary timeouts, subprocesses, multi-instance) over RPA, agents, APIs, HITL. Authors its own inline userTask/HITL nodes. | Yes (`uip login`) | **Yes** — packages, uploads, publishes/deploys, and runs via `uip maestro bpmn`; Orchestrator deploy of `.uipx`-wrapped solutions → `uipath-solution` |
|
|
150
|
-
| `uipath-maestro-case` | Case Management authoring
|
|
148
|
+
| `uipath-maestro-case` | Case Management authoring — `caseplan.json` from an SDD (`case pack` compiles it to `caseplan.json.bpmn`; authoring `.bpmn` directly is `uipath-maestro-bpmn`) | Yes (`uip login`) | **Partial** — publishes to Studio Web and Orchestrator itself; `.uipx` solution deploy → `uipath-solution` |
|
|
151
149
|
| `uipath-api-workflow` | API Workflows (JSON `document.dsl`): author, run locally (`uip api-workflow run`), connector activities | Yes (`uip login`) | **No** — `uip solution pack/publish` via `uipath-solution` |
|
|
152
150
|
| `uipath-human-in-the-loop` | HITL node authoring — approval gates, escalations, write-back validation inside **Flow** projects. Coded-agent HITL → `uipath-agents`; BPMN / Case / RPA own theirs inline (userTask / task type / Action Center) | No (authoring only) | **No** — ships inside the host project |
|
|
153
151
|
| `uipath-platform` | Auth (`uip login`), Orchestrator (folders, processes, jobs, machines, users, roles), resources (assets, queues, storage buckets + bucket files, libraries, webhooks, triggers), Integration Service (connectors, connections, activities, IS triggers), Data Fabric entities/records/files/choice-sets (`uip df`), traces, licensing | Yes (auth hub) | **Yes** — for non-solution single packages and Orchestrator-side post-deploy ops |
|
|
@@ -163,8 +161,8 @@ High-level view of what each specialist owns. **Do not describe internal flows o
|
|
|
163
161
|
| File | Purpose |
|
|
164
162
|
|------|---------|
|
|
165
163
|
| [SDD Generation Guide](references/sdd-generation-guide.md) | Phase orchestrator — Phase 1, 2, 3 step-by-step instructions |
|
|
166
|
-
| [Case Design Lane Guide](references/case-design-lane-guide.md) |
|
|
167
|
-
| [Case
|
|
164
|
+
| [Case Design Lane Guide](references/case-design-lane-guide.md) | The case design conversation — entry, tenant grounding, authoring policy, the one Case Review, and the write |
|
|
165
|
+
| [Case Design Layers Guide](references/case-design-layers-guide.md) | The case model and every design **Default** — skeleton (triggers, stages, the nine task types), gates (lifecycle rules, exits, sequencing, secondary lanes), data (variables, outputs, expressions), time (SLAs, escalations, responses), naming rules, and the closure checklist |
|
|
168
166
|
| [PDD Analysis Guide](references/pdd-analysis-guide.md) | How to extract structured data from PDDs in any format |
|
|
169
167
|
| [Product Selection Guide](references/product-selection-guide.md) | **Constraint Gate** (delivery model + exclusions filter), **Level 1** (primary scope), **Level 1.75** (Solution composition), **Level 2.5 Part B** (cross-product project list merge), **Level 3** (capability add-ons), template mapping |
|
|
170
168
|
| [Platform Availability Guide](references/platform-availability-guide.md) | Product × delivery-model availability matrix (Cloud / Automation Suite / standalone), alternatives for blocked products, verification rule for uncertain cells. Load whenever the Constraint Gate runs — every delivery model: "Cloud is not uniform", variants (GovCloud / Dedicated / Test Cloud) and per-tenant entitlements can block products inside the Cloud column. |
|
|
@@ -182,7 +180,6 @@ High-level view of what each specialist owns. **Do not describe internal flows o
|
|
|
182
180
|
| [Flow Template](assets/templates/flow-sdd-template.md) | SDD template for Maestro Flow |
|
|
183
181
|
| [BPMN Template](assets/templates/bpmn-sdd-template.md) | SDD template for Maestro BPMN |
|
|
184
182
|
| [Case Management Template](assets/templates/case-sdd-template.md) | SDD template for Case Management (downstream Case Definition Blueprint shape) |
|
|
185
|
-
| [Case SDD Worked Examples](assets/templates/case-sdd-examples.md) | Worked case-authoring patterns by use case (variables, outputs operators, file In-args, multi-trigger) |
|
|
186
183
|
| [Agent Template](assets/templates/agent-sdd-template.md) | SDD template for UiPath Agents |
|
|
187
184
|
| [Coded App Template](assets/templates/coded-app-sdd-template.md) | SDD template for Coded Apps (web) |
|
|
188
185
|
| [API Workflow Template](assets/templates/api-workflow-sdd-template.md) | SDD template for API Workflows |
|
|
@@ -96,6 +96,12 @@ Skip entirely when no review items are open. Blocking = yes keeps Planner Handof
|
|
|
96
96
|
|
|
97
97
|
### Case Metadata
|
|
98
98
|
|
|
99
|
+
<!-- Required cells never render `—`: Case Name (PascalCase — missing → block, Ask), Identifier prefix
|
|
100
|
+
(missing → derive mechanically from the name + provenance). Case SLA `—` when none — then OMIT the SLA
|
|
101
|
+
Title row entirely. SLA Type: platform persists condition-based whenever ≥1 SLA rule carries a non-empty
|
|
102
|
+
expression; condition-based requires the Variable SLA Rules table. Defaults recorded with provenance:
|
|
103
|
+
Case App Disabled, Task-output passing Direct, SLA Type time-based, SLA Title `SLA Rule 1`. -->
|
|
104
|
+
|
|
99
105
|
| Property | Value |
|
|
100
106
|
|----------|-------|
|
|
101
107
|
| Case Name | <PascalCase name> |
|
|
@@ -115,8 +121,27 @@ Skip entirely when no review items are open. Blocking = yes keeps Planner Handof
|
|
|
115
121
|
|
|
116
122
|
| SLA Status | Threshold | Action | Display Name |
|
|
117
123
|
|------------|-----------|--------|--------------|
|
|
118
|
-
| At-Risk | <percentage>% of SLA duration | Notify: <
|
|
119
|
-
| Breached | 100% of SLA duration | Notify: <
|
|
124
|
+
| At-Risk | <percentage>% of SLA duration | Notify: <owner persona's group — never `—`> | <root-unique title, no `:`; `Escalation Rule {N}` only if no sla-status-change row references it> |
|
|
125
|
+
| Breached | 100% of SLA duration | Notify: <one tier up: leadership, or Compliance when regulation-driven — never `—`> | <root-unique title, no `:`; same defaulting rule> |
|
|
126
|
+
|
|
127
|
+
<!-- Whole section required when Case SLA is set; omit it entirely when there is none. A recipient
|
|
128
|
+
filled from the default tiers rather than the source carries provenance `default applied`. -->
|
|
129
|
+
|
|
130
|
+
### SLA Response Map
|
|
131
|
+
|
|
132
|
+
**THE single authored source of SLA responses.** Every per-stage SLA block carries only its title and
|
|
133
|
+
duration and points here; nothing restates a response.
|
|
134
|
+
|
|
135
|
+
| Scope | SLA | Status | Response | Target | Interrupting | Rationale |
|
|
136
|
+
|-------|-----|--------|----------|--------|--------------|-----------|
|
|
137
|
+
| <case \| stage: <StageName> \| task: <TaskName>> | <that target's SLA Title> | <At-Risk \| Breached> | <notify-only \| start-task \| enter-stage \| exit-stage \| exit-case> | <— for notify-only; else the task name / stage name / produced exit row> | <— for notify-only and for every start-task; else Yes \| No matching the produced stage-entry row> | <why this response fits the source> |
|
|
138
|
+
|
|
139
|
+
<!-- Section required whenever ANY SLA exists (case, stage, or action task); omit only in a case with no
|
|
140
|
+
SLA at all. One row per (Scope, SLA, Status), at-risk and breached separately. Source states no response
|
|
141
|
+
-> both statuses notify-only with Target and Interrupting `—`; never invent a stage, task, or routing
|
|
142
|
+
change to carry a notification. Legal Response values and the Interrupting value each implies:
|
|
143
|
+
case-design-layers-guide.md § Choosing the response. Two-way closure against the SDD's
|
|
144
|
+
`sla-status-change` rows is enforced by audit_sdd.py — it is not re-checked by hand. -->
|
|
120
145
|
|
|
121
146
|
### Variable SLA Rules
|
|
122
147
|
|
|
@@ -129,16 +154,31 @@ Skip entirely when no review items are open. Blocking = yes keeps Planner Handof
|
|
|
129
154
|
### Case Triggers
|
|
130
155
|
|
|
131
156
|
<!-- Trigger mapping into variables is declared in Case Variables with sourceTriggers/sourceFields, not here. T01 is reserved for the case file; number runtime triggers from T02.
|
|
132
|
-
`Manual` is author shorthand
|
|
133
|
-
Tenant object starts are still event triggers: a case that starts when a tenant case-entity / data-object record is created authors `Intsvc.EventTrigger` with that object name as Source — never downgrade to `Manual` because the object is not provisioned; unresolved event triggers survive as placeholders.
|
|
157
|
+
`Manual` is author shorthand for "no event source" — never a serviceType value. The SDD writes `Manual`, `Intsvc.EventTrigger`, or `Intsvc.TimerTrigger`; the on-disk mapping is the build skill's.
|
|
158
|
+
Tenant object starts are still event triggers: a case that starts when a tenant case-entity / data-object record is created authors `Intsvc.EventTrigger` with that object name as Source — never downgrade to `Manual` because the object is not provisioned; unresolved event triggers survive as placeholders (connectionId/activityTypeId → high review item).
|
|
159
|
+
Configuration cell = user intent in business terms (`Record created`, `Email received in Inbox; filter: subject contains "URGENT"`, `daily at 09:00 UTC`, `N/A`); an event trigger MUST carry a concrete operation phrase. Forbidden here (build-time detail): CLI enum values (`CALENDAR_CREATED`), delivery modes (`polling`/`webhook`), meta notes, activity slugs, HTTP methods. -->
|
|
134
160
|
|
|
135
161
|
| T# | Trigger Type | Source | Configuration |
|
|
136
162
|
|----|-------------|--------|---------------|
|
|
137
163
|
| T02 | <Manual \| Intsvc.EventTrigger \| Intsvc.TimerTrigger> | <source system, connector, object, or Manual> | <business event, timer cadence, filter intent, or N/A> |
|
|
138
164
|
|
|
165
|
+
### Trigger Filter
|
|
166
|
+
|
|
167
|
+
| Field | Operator | Value | Literal? |
|
|
168
|
+
|-------|----------|-------|----------|
|
|
169
|
+
| <payload field> | <one of, PascalCase and case-sensitive: Equals \| NotEquals \| Contains \| NotContains \| StartsWith \| EndsWith \| GreaterThan \| GreaterThanOrEqual \| LessThan \| LessThanOrEqual \| In \| NotIn \| IsNull \| IsNotNull> | <value> | <Yes — prefer a literal; No is a lossy fallback, so pair it with a review item> |
|
|
170
|
+
|
|
171
|
+
<!-- Section only when ≥1 trigger declares a filter; omit otherwise. AND/OR tree; nested
|
|
172
|
+
{op, clauses} groups flatten into rows. -->
|
|
173
|
+
|
|
139
174
|
### Case Exit Conditions
|
|
140
175
|
|
|
141
|
-
<!-- WHEN + Marks Case Complete pairing is schema-constrained:
|
|
176
|
+
<!-- WHEN + Marks Case Complete pairing is schema-constrained: Yes normally uses `required-stages-completed`;
|
|
177
|
+
selected-stage rules are for non-completing exits (alternate dispositions: Withdrawn / Rejected /
|
|
178
|
+
Cancelled — required when the case has ≥1 secondary stage, else high review item `Alt-disposition exits
|
|
179
|
+
missing`). ≥1 Yes row always. Display Name defaulting (every condition table in this SDD): carry the
|
|
180
|
+
author's value verbatim; blank → `Entry Rule {N}` / `Complete Rule {N}` / `Exit Rule {N}` by table kind,
|
|
181
|
+
N 1-based per label kind — never invent a label otherwise. -->
|
|
142
182
|
|
|
143
183
|
| WHEN | IF | THEN | Marks Case Complete | Display Name |
|
|
144
184
|
|------|-----|------|---------------------|--------------|
|
|
@@ -149,16 +189,17 @@ Tenant object starts are still event triggers: a case that starts when a tenant
|
|
|
149
189
|
<!--
|
|
150
190
|
Only include In/Out arguments, trigger-payload Variables, and true case-level state read by conditions or reused by multiple consumers.
|
|
151
191
|
Do not mint relay variables for one upstream task output consumed once downstream; bind those directly with `<- "Stage"."Task".out` or `vars.$xref('Stage','Task','out')`.
|
|
152
|
-
Every row must have Category.
|
|
192
|
+
Every row must have Category. Name camelCase, no role suffix.
|
|
193
|
+
sourceTriggers/sourceFields grammar — In: optional single T<N> (blank = primary trigger, never CSV), sourceFields always empty (an In-arg selects a trigger, extracts nothing). Variable: single T<N> or CSV; one trigger → bare payload path (`response.subject`); CSV → keyed `T<N>: <path>; T<M>: <path>`, one entry per listed T-number; dot-paths only, no array indexing. Out: both empty; every Out row needs a Default OR a producing task Outputs row.
|
|
194
|
+
Config-as-In: runtime business rules (priority bands, thresholds, taxonomies) ride ONE In variable — string with a JSON Default for opaque rule-sets; jsonSchema + body when downstream picks sub-fields. `json` is not a Type. file = JobAttachment record; a file In-arg triggers the Caller-obligation block in the confirmation.
|
|
153
195
|
-->
|
|
154
196
|
|
|
155
197
|
| Name | Category | Type | sourceTriggers | sourceFields | Default | Description |
|
|
156
198
|
|------|----------|------|----------------|--------------|---------|-------------|
|
|
157
199
|
| <camelCase name> | <In \| Out \| Variable> | <string \| integer \| float \| double \| boolean \| datetime \| date \| jsonSchema \| file> | <T02, blank, or CSV only for Variable rows> | <payload path or keyed T-number paths> | <default or blank — see below> | <what this variable represents> |
|
|
158
200
|
|
|
159
|
-
> **`Default` is always a string, for every Type.**
|
|
160
|
-
>
|
|
161
|
-
> BPMN — the variable is then null at runtime and the first task that reads it fails. Write a
|
|
201
|
+
> **`Default` is always a string, for every Type.** A non-string default is dropped on the way to
|
|
202
|
+
> runtime, leaving the variable null for the first task that reads it. Write a
|
|
162
203
|
> `jsonSchema` default as string-encoded JSON in the cell:
|
|
163
204
|
> `{"employeeName":"Test Employee","amount":125.5}` becomes
|
|
164
205
|
> `"{\"employeeName\":\"Test Employee\",\"amount\":125.5}"`. Same for numbers and booleans — `"5"`,
|
|
@@ -170,10 +211,9 @@ Every row must have Category.
|
|
|
170
211
|
|
|
171
212
|
**Purpose:** The case plan. Every stage has entry/exit conditions, optional SLA, and complete task detail blocks. Case has no BPMN-style edges; transitions are expressed by stage entry/exit conditions.
|
|
172
213
|
|
|
173
|
-
**Authoring rules**
|
|
174
|
-
[
|
|
175
|
-
|
|
176
|
-
During draft finalization, do NOT open these links — the draft is the settled design and this template is
|
|
214
|
+
**Authoring rules** — this template IS the render contract: cell rules live inline at each cell. Design
|
|
215
|
+
semantics (type enum, gates, sequencing, SLA surface): [case-design-layers-guide.md](../../references/case-design-layers-guide.md).
|
|
216
|
+
During draft finalization, do NOT open that link — the draft is the settled design and this template is
|
|
177
217
|
the complete normalization contract; finalization preserves existing display names verbatim.
|
|
178
218
|
Template-local rules:
|
|
179
219
|
- Every stage and task carries a concrete `Design Rationale` and prose `Description`.
|
|
@@ -188,7 +228,13 @@ Template-local rules:
|
|
|
188
228
|
|
|
189
229
|
---
|
|
190
230
|
|
|
191
|
-
### Stage <N>: <STAGE_NAME>
|
|
231
|
+
### Stage <N>: <STAGE_NAME> (`<stage_id>`)
|
|
232
|
+
|
|
233
|
+
<!-- The trailing code-formatted stage id MUST appear on every stage heading, and every cell that names a
|
|
234
|
+
stage appends it in code-formatted parens — cross-references stay greppable. Required for Case Completion
|
|
235
|
+
is explicit Yes/No (design default: primary Yes, secondary No). Design Rationale is concrete: a
|
|
236
|
+
global-event lane names the event and states that one interrupting entry replaces per-stage duplication;
|
|
237
|
+
an SLA lane names the SLA, the response, and why it interrupts or not. -->
|
|
192
238
|
|
|
193
239
|
**Type:** Stage
|
|
194
240
|
**Stage Kind:** <primary \| secondary>
|
|
@@ -213,11 +259,16 @@ Template-local rules:
|
|
|
213
259
|
|
|
214
260
|
**Design Rationale:** <Why this duration, threshold, recipients, and breach behavior fit.>
|
|
215
261
|
**SLA Type:** <time-based \| condition-based>
|
|
216
|
-
**SLA Title:** <non-empty stage-unique SLA rule title, no `:` — this exact title is what a `sla-status-change("<Stage>","<SLA Title>")` entry row references>
|
|
262
|
+
**SLA Title:** <non-empty stage-unique SLA rule title, no `:` — this exact title is what a `sla-status-change("<Stage>","<SLA Title>")` entry row references. Unnamed defaults: `<Stage Name> SLA`, at-risk display `<Stage Name> SLA at risk`, breach `<Stage Name> SLA breached`. Keep SLA Type and SLA Title as two separate lines — a collapsed line hides the title from line-start tooling>
|
|
263
|
+
|
|
264
|
+
| SLA | Unit | At-Risk | At-Risk Escalation Display Name | Breach Escalation Display Name |
|
|
265
|
+
|-----|------|---------|----------------------------------|---------------------------------|
|
|
266
|
+
| <count> | <min \| h \| d \| w \| m> | <percentage>% | <stage-unique title, no `:`> | <stage-unique title, no `:`> |
|
|
217
267
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
268
|
+
<!-- Titles and durations only. What HAPPENS at at-risk and breach is authored once, in
|
|
269
|
+
§ SLA Response Map — this block never carries a Notify/enter-stage response. The display names above
|
|
270
|
+
are load-bearing: they are the third argument of `sla-status-change("<Stage>","<SLA Title>","<display
|
|
271
|
+
name>")`. -->
|
|
221
272
|
|
|
222
273
|
##### Stage Variable SLA Rules
|
|
223
274
|
|
|
@@ -229,6 +280,11 @@ Template-local rules:
|
|
|
229
280
|
|
|
230
281
|
#### Tasks
|
|
231
282
|
|
|
283
|
+
<!-- In plan order, ≥1 task per stage; Persona = persona name or `system`. Stage tables above: ≥1 entry
|
|
284
|
+
row per stage; ≥1 completion (Yes) exit row per primary stage. Call forms with complete args appear ONLY
|
|
285
|
+
in table rows; prose uses bare rule names. sla-status-change target is the literal `root` (case scope) or
|
|
286
|
+
the exact stage display name — never the case name. -->
|
|
287
|
+
|
|
232
288
|
| # | Task Name | Type | Activation Mode | Starts When | Required | Run Only Once | Persona | SLA |
|
|
233
289
|
|---|-----------|------|-----------------|-------------|----------|---------------|---------|-----|
|
|
234
290
|
| 1 | <TASK_NAME> | <action \| process \| agent \| rpa \| api-workflow \| wait-for-timer \| wait-for-connector \| execute-connector-activity \| case-management> | <sequential \| parallel \| parallel-after-predecessor \| event-triggered \| adhoc \| fan-in \| conditional-gate> | <stage enters, sequential group, after tasks, connector event, etc.> | <Yes \| No> | <Yes \| No> | <persona or —> | <count unit or —> |
|
|
@@ -258,7 +314,7 @@ Template-local rules:
|
|
|
258
314
|
**Action App ID:** <actionAppId or <UNRESOLVED>>
|
|
259
315
|
**Deployment Folder:** <folder path or <UNRESOLVED>>
|
|
260
316
|
**actionType:** <dispatch code or —>
|
|
261
|
-
**Recipient:** <Role:name \| User:uuid \| UserGroup:uuid \| Email:addr \| Expression:=vars.id>
|
|
317
|
+
**Recipient:** <Role:name \| User:uuid \| UserGroup:uuid \| Email:addr \| Expression:=vars.id — typed prefix only; none known → drop the cell + high review item>
|
|
262
318
|
**Priority:** <Low \| Medium \| High \| Critical> · **Task Title:** <one-line Action Center prompt> · **Labels:** <csv or —>
|
|
263
319
|
|
|
264
320
|
**Input Schema:**
|
|
@@ -280,16 +336,29 @@ Template-local rules:
|
|
|
280
336
|
|--------|---------|----------|
|
|
281
337
|
| <button label> | <variable = value> | <Complete task \| Complete task and set variables> |
|
|
282
338
|
|
|
339
|
+
<!-- Buttons only on a decision task — then ≥2 rows; Maps To LHS = a §1.5 Name, taskOutcome, or this
|
|
340
|
+
task's own output (read downstream via a direct producer reference) — never an identifier occurring
|
|
341
|
+
nowhere else. Input/Output Schema fields MUST be ⊆ the resolved app's schema — a field the app lacks →
|
|
342
|
+
Ask (task-specific app / drop / placeholder), never silently author. Field NAMES are carried verbatim
|
|
343
|
+
from whatever supplied them, never re-cased or convention-converted, and never read off a
|
|
344
|
+
`--output json` envelope's PascalCased keys (layers § External names); unsourced spelling →
|
|
345
|
+
<UNRESOLVED> + review item. Reusing ONE deployed app across
|
|
346
|
+
several action tasks is sanctioned only when each task carries a distinct actionType dispatch value AND
|
|
347
|
+
its fields ⊆ the app schema (code-switched app); otherwise it is the substitute-app defect. -->
|
|
348
|
+
|
|
283
349
|
###### Connector Task Detail (type: `wait-for-connector` or `execute-connector-activity`)
|
|
284
350
|
|
|
285
351
|
**Connector:** <connector name> · **Connector Key:** <connectorKey>
|
|
286
352
|
**Connection:** <connection instance name or Tenant default> · **Connection ID:** <connectionId or <UNRESOLVED>>
|
|
287
|
-
**Activity Type ID:** <activityTypeId or <UNRESOLVED>>
|
|
353
|
+
**Activity Type ID:** <activityTypeId or <UNRESOLVED>>
|
|
288
354
|
**Auth Method:** <OAuth2 \| API Key \| Basic \| Service Account \| ...>
|
|
289
355
|
**Account / Endpoint:** <explicit endpoint or —>
|
|
290
356
|
**Operation:** <display/operation name>
|
|
291
357
|
**Trigger / Event:** <trigger display name for wait-for-connector, or —>
|
|
292
358
|
|
|
359
|
+
<!-- Missing Connection ID / Activity Type ID → high review item. Inputs `Field` verbatim to the IS
|
|
360
|
+
activity schema. Operation Configuration carries through as =jsonString: only here. -->
|
|
361
|
+
|
|
293
362
|
**Inputs:**
|
|
294
363
|
|
|
295
364
|
| Field | Type | Binding |
|
|
@@ -305,12 +374,14 @@ Template-local rules:
|
|
|
305
374
|
|
|
306
375
|
###### Timer Task Detail (type: `wait-for-timer`)
|
|
307
376
|
|
|
308
|
-
**Timer:** <timeDuration \| timeDate \| timeCycle>
|
|
309
|
-
**Value:** <ISO 8601 expression, date expression, or variable expression>
|
|
377
|
+
**Timer:** <timeDuration (relative) \| timeDate (absolute) \| timeCycle>
|
|
378
|
+
**Value:** <ISO 8601 expression, date expression, or variable expression — NEVER <UNRESOLVED>: a timer cannot fire without it; block approval>
|
|
379
|
+
**Business Calendar:** <calendar name or —>
|
|
310
380
|
|
|
311
381
|
###### Child Case Task Detail (type: `case-management`)
|
|
312
382
|
|
|
313
|
-
**Child Case:** <concrete intended child-case resource name; never <UNRESOLVED
|
|
383
|
+
**Child Case:** <concrete intended child-case resource name; never <UNRESOLVED>, never the parent task's display name>
|
|
384
|
+
**Child Case Identifier Prefix:** <2-4 char UPPER prefix>
|
|
314
385
|
**Folder Path:** <folder path or <UNRESOLVED>>
|
|
315
386
|
**Resource Identity:** <entityKey or <UNRESOLVED>>
|
|
316
387
|
**Data Passed (parent -> child):**
|
|
@@ -321,7 +392,7 @@ Template-local rules:
|
|
|
321
392
|
|
|
322
393
|
**Wait for Completion:** <Yes \| No>
|
|
323
394
|
|
|
324
|
-
**Data Returned (child -> parent):**
|
|
395
|
+
**Data Returned (child -> parent):** <!-- only when Wait for Completion: Yes -->
|
|
325
396
|
|
|
326
397
|
| Child Variable | Parent Variable |
|
|
327
398
|
|----------------|----------------|
|
|
@@ -332,8 +403,15 @@ Template-local rules:
|
|
|
332
403
|
**Resolved Resource:** <concrete intended resource name; never <UNRESOLVED>>
|
|
333
404
|
**Folder Path:** <resolved exact folder path or <UNRESOLVED>>
|
|
334
405
|
**Resource Identity:** <apiWorkflowId / agentId / processOrchestrationId (+version) or <UNRESOLVED>>
|
|
335
|
-
**
|
|
336
|
-
|
|
406
|
+
**Dispatch / Operation:** <selector and value for shared facades (`requestSource = "RegisterCaseShell"`) — also an Inputs row; — for single-purpose resources>
|
|
407
|
+
|
|
408
|
+
<!-- Folder Path = the exact resource folder (never a parent), or <UNRESOLVED> when identity is
|
|
409
|
+
unresolved. When a task resolves to a live resource: every REQUIRED declared input has a non-empty
|
|
410
|
+
Binding (any form incl. a direct upstream-output reference — needs no §1.5 row) or <UNRESOLVED> + high
|
|
411
|
+
review item; every Outputs -> Field exists verbatim in the resolved output contract (phantom field → high
|
|
412
|
+
review item). Unresolved-identity tasks have no contract — skipped; portable names stay concrete. Bare
|
|
413
|
+
field-name input lists are forbidden — table form only. No task-level SLA on any non-action type. Deep
|
|
414
|
+
runtime metadata (agent prompts, package versions, endpoints) stays out of the SDD. -->
|
|
337
415
|
|
|
338
416
|
**Inputs:**
|
|
339
417
|
|
|
@@ -350,7 +428,7 @@ Template-local rules:
|
|
|
350
428
|
|
|
351
429
|
---
|
|
352
430
|
|
|
353
|
-
### Secondary Stage: <SECONDARY_STAGE_NAME>
|
|
431
|
+
### Secondary Stage: <SECONDARY_STAGE_NAME> (`<stage_id>`)
|
|
354
432
|
|
|
355
433
|
**Type:** Stage
|
|
356
434
|
**Stage Kind:** secondary
|
|
@@ -395,9 +473,19 @@ Template-local rules:
|
|
|
395
473
|
|
|
396
474
|
**Operations:**
|
|
397
475
|
|
|
398
|
-
| Operation | Activity Type ID | Method |
|
|
399
|
-
|
|
400
|
-
| <operation name> | <activityTypeId or <UNRESOLVED>> | <GET \| POST \| PUT \| DELETE \| PATCH \| EVENT> | <field: type, ...> |
|
|
476
|
+
| Operation | Activity Type ID | Method | Output Fields |
|
|
477
|
+
|-----------|------------------|--------|---------------|
|
|
478
|
+
| <operation name> | <activityTypeId or <UNRESOLVED>> | <GET \| POST \| PUT \| DELETE \| PATCH \| EVENT> | <field: type, ...> |
|
|
479
|
+
|
|
480
|
+
<!-- No Input Fields column: inputs are authored per task in the task's Input Schema table, and
|
|
481
|
+
Phase 3 re-derives the operation's full input shape from the connector spec — design time never
|
|
482
|
+
transcribes it. Output Fields lists ONLY the fields some Section 2 read path actually consumes, and
|
|
483
|
+
lists them with their SCHEMA SPELLING, byte-for-byte: field names are external lookup keys matched
|
|
484
|
+
exactly at runtime, and the `--output json` envelope of `case spec` / `registry search` PascalCases
|
|
485
|
+
object keys recursively (`request_body` -> `RequestBody`), so a name copied from those keys binds to a
|
|
486
|
+
field the resource does not have. Casing not sourced from the user, the source document, or a build-time
|
|
487
|
+
spec -> render the field as <UNRESOLVED> and pair it with a review item; never guess a convention.
|
|
488
|
+
Rule: case-design-layers-guide.md § Layer 3 (External names). -->
|
|
401
489
|
|
|
402
490
|
### API Workflows
|
|
403
491
|
|
|
@@ -496,4 +584,51 @@ Implementation tasks **do not live in this SDD** — they live in the planner's
|
|
|
496
584
|
|
|
497
585
|
---
|
|
498
586
|
|
|
587
|
+
<!-- ============================ VALIDATION (do not render) ============================
|
|
588
|
+
Markers: <UNRESOLVED> renders as plain text — never backtick-wrapped, never annotated in-cell; allowed
|
|
589
|
+
ONLY on registry identity ids (taskTypeId, connectionId, actionAppId, agentId, processOrchestrationId,
|
|
590
|
+
entityKey) and on a schema FIELD NAME whose exact spelling nothing in the conversation supplied,
|
|
591
|
+
each paired with a review item. A field name is an external lookup key matched byte-for-byte at
|
|
592
|
+
runtime — an unsourced one is <UNRESOLVED>, never a plausible guess (layers § External names). `—` allowed only where a cell above says so (optional cells
|
|
593
|
+
the build defaults safely). Narrative cells never carry skill-internal vocabulary (Pattern C, bridge,
|
|
594
|
+
companion, inputOutputs[], groupOperator, essentialConfiguration-as-prose, savedFilterTrees, dispatcher,
|
|
595
|
+
io-binding, aliased into/from, reassign, originalVar, auto-mint).
|
|
596
|
+
|
|
597
|
+
FINALIZING a draft (`sdd.draft.md` -> the final SDD): the render obeys this contract IN FULL — the
|
|
598
|
+
document skeleton above, one `##### Task <n>: <Name>` detail block per task the draft inventories (never
|
|
599
|
+
a stage-level Tasks table standing in for them), `**Type:** Stage` on every stage block, the exact
|
|
600
|
+
type-specific detail headings and bold field labels (`**Timer:**` stays `**Timer:**`), Section 3/4 column
|
|
601
|
+
headers verbatim, real newlines. A task the draft left as a summary still gets its full detail block:
|
|
602
|
+
fill concise defaults, keep every concrete value the draft supplied, and set `**Resolved Resource:**` to
|
|
603
|
+
the draft's intended resource name — or, when it names none, the task display name; never <UNRESOLVED>
|
|
604
|
+
there. Pass --draft so the gate also checks inventory parity, verbatim `=js:` preservation, and
|
|
605
|
+
executable threshold encoding. What the DRAFT specifically needs repaired on the way through is the
|
|
606
|
+
lane guide's § Resumption; the shape is here.
|
|
607
|
+
|
|
608
|
+
Gate: run <py> "<skill folder>/scripts/audit_sdd.py" <sdd path> [--draft <draft path>] on the
|
|
609
|
+
on-disk file BEFORE the Status: ready flip — in every mode. `<py>` = the first of `python3`, `python`,
|
|
610
|
+
`py` that runs (Windows usually has no `python3` alias); only if all three are absent verify manually. RUN it, never open the script source —
|
|
611
|
+
its findings are the interface. Minting charset is ADVISORY — it never gates, and a name the user, the
|
|
612
|
+
source, or a draft supplied is kept verbatim (pass --draft so the validator knows). ':' gates always. Repair findings with Edit, re-run to AUDIT OK
|
|
613
|
+
(max 3 rounds, then stop and present findings). Never ship a summary SDD (top-level headings like
|
|
614
|
+
## Source / ## Case Objective / ## Stages / ## Task Plan, or build-mode/path narration) even if a later
|
|
615
|
+
caseplan.json would validate — rewrite from the model and this template.
|
|
616
|
+
|
|
617
|
+
The validator's checks, by family — RUN it, do not hand-verify this list. Each name is what a finding
|
|
618
|
+
will refer to; the rules themselves live at the cells above and in case-design-layers-guide.md:
|
|
619
|
+
|
|
620
|
+
1. Document skeleton · 2. Closed enums + gate-slot pairing · 3. Names (':' ban + case-wide uniqueness;
|
|
621
|
+
charset is advisory)
|
|
622
|
+
4. SLA references (arity, target, declared title) + stage/task selectors · 5. Data closure + orphan
|
|
623
|
+
Maps To · 6. Typed recipients, non-empty entry tables, forbidden vocabulary · 7. Structure (case-entered,
|
|
624
|
+
≥1 trigger, ≥1 Marks Case Complete, wait-for-user ↔ user-selected-stage, no duplicate case-exit rows)
|
|
625
|
+
8. Precedence & liveness (unreachable stage, exit-overrides-completion, self-reference, vacuous
|
|
626
|
+
required-*, SLA bounds) · 9. Draft parity (--draft: inventory, =js: expressions, thresholds encoded
|
|
627
|
+
executably)
|
|
628
|
+
|
|
629
|
+
If no interpreter is available at all, the enforcement detail behind each family is in the cell rules
|
|
630
|
+
above — every one of them must hold.
|
|
631
|
+
|
|
632
|
+
===================================================================================== -->
|
|
633
|
+
|
|
499
634
|
**End of Case Definition Blueprint.**
|