Skip to content

docs(uipath-troubleshoot): add Word COM-start background/Session-0 playbook#1606

Open
Stefan-Virgil wants to merge 54 commits into
docs/word-open-sharepoint-url-playbookfrom
docs/word-com-start-background-session0-playbook
Open

docs(uipath-troubleshoot): add Word COM-start background/Session-0 playbook#1606
Stefan-Virgil wants to merge 54 commits into
docs/word-open-sharepoint-url-playbookfrom
docs/word-com-start-background-session0-playbook

Conversation

@Stefan-Virgil

Copy link
Copy Markdown
Contributor

Summary

Adds a third playbook to the word-activities package: the COM-start failure where Word Application Scope faults launching Word (WordAppHelpers.StartNewApplication) with UiPath.Word.WordException: "Error opening document, make sure Word application is installed. If already installed, an Office Repair may be required." on an unattended robot.

Primary cause this covers: the process is a Background Process (runtimeOptions.requiresUserInteraction: false) running in Session 0 under LOCAL SERVICE with no interactive session, so the Office COM server can't start — Word opens fine interactively but the headless robot fails. The playbook also covers Word-not-installed and broken-registration, with the "opens interactively but fails headless" discriminator.

Why this one matters

Modern project.json has no "background": true key — the flag is requiresUserInteraction: false, which is easy to miss (a live investigation initially looked for the wrong key and wrongly concluded the project was fine). The playbook and the package investigation guide now encode the correct check.

What's included

  • playbooks/word-com-start-background-session0.md — signature, three causes, host-side discriminators, and the foreground / interactive-session / Use Foreground fix (explicitly: do not run Office Repair when Word opens cleanly interactively).
  • investigation_guide.md — faulting-frame routing rule (start vs open vs cast) + requiresUserInteraction run-surface check.
  • summary.md — registers the playbook.

Stacking

Base branch is docs/word-open-sharepoint-url-playbook (#1605), which itself stacks on #1598. Merge order: #1598#1605 → this PR. GitHub retargets automatically as each base merges.

Sourced from a live troubleshooting investigation of a faulted unattended job (UiPath.Word.Activities 2.6.0-alpha; product 25.10).

🤖 Generated with Claude Code

joe-prosser and others added 26 commits June 19, 2026 09:02
…ow Bedrock path [RE-12529] (#1560)

The task's run_limits.task_timeout (900s) sits below its own ~882-905s
runtime, so on the slow eu.anthropic.claude-sonnet-4-6 Bedrock path the
run is wall-clock-killed before finishing (Task timed out after 900s,
score 0.0, ~80% of run-days). Raise task_timeout 900->1500 (modal
connector/e2e budget, ~600s headroom over the 882s fast baseline) and
max_turns 80->120 (completed run used 71/80). turn_timeout unchanged;
task_timeout >= turn_timeout preserved.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…bs) (#1580)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…1570)

Four guardrail eval failures, all grader/test bugs — the skill produced
valid code in each case:

- recommend_all / recommend_scoped: narrow the uipath.platform.guardrails
  import guard to flag only wrapping symbols (the guardrail decorator and
  *Middleware classes), not bare validators like CustomValidator that
  uipath_langchain.guardrails re-exports — so a valid mixed import no longer
  fails with a false "silently no-ops" verdict.
- recommend_all / recommend_scoped / pii_middleware: accept the valid
  variable-then-spread middleware form (m = Foo(...); middleware=[*m]) in
  addition to the inline [*Foo(...)] form, via a new shared AST helper
  (_shared/guardrail_middleware.py). The old regexes matched only the inline
  spread and rejected functionally-identical code.
- user_prompt_attacks_decorator: anchor the prompt to UiPath and add a
  skill_triggered guard so the agent routes to uipath-agents instead of the
  globally-installed claude-api skill (which led it to hand-roll an
  Anthropic-SDK guardrail).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 4 planner tests that inherited the 900s default (3 smoke + the
skipped bpmn classifier) now pin turn_timeout: 1800, matching the 5
SDD-generation tests already at 30 minutes.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…1507)

* docs: document object-repository read commands in rpa cli reference

* docs: correct library-paths flag to comma-separated not repeatable

* docs(rpa): route Finding Descriptors to object-repository read commands

Wire the new `uip rpa object-repository get` / `get-library` read commands
(documented in cli-reference.md by this branch) into the UI Automation
guide's Finding Descriptors decision tree:

- Step 1: use `object-repository get` to enumerate the project's OR as JSON
  when ObjectRepository.cs is missing or stale (no Studio Desktop regen).
- Step 2: use `object-repository get-library` to list a referenced library's
  exposed apps/screens/elements instead of only `packages inspect`.

Both link to cli-reference.md rather than restating flags.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…es (#1589)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…bs) (#1595)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Adds the required mode:* and lifecycle:* tags to the 5 IS smoke tasks so
the Coding Agents Scorecard B/O/T automation can classify them (removes
the asterisk on the IS row of the scorecard). Mode/lifecycle values
match what tests/reports/uipath-platform.md already inferred per row.

Also drops the invented leaf tags (integration-service, activities,
connections, connectors, resources, describe, execute) — these duplicate
the file path or fall outside the closed tag vocabulary in
tests/README.md §Tag Taxonomy. Promotes connections/activities to the
proper feature: namespace and adds the flat connector marker where the
task exercises a connector.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add back the integration-service marker on the 5 IS smoke tasks so the
scorecard / filtering can slice on it. Required mode:* + lifecycle:*
tags from the previous commit are preserved.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The task prompt forbids connections create/edit and the criteria only
require connections list + ping, so it does not mutate tenant state.
Tagging it lifecycle:setup inflated the scorecard's setup coverage and
hid a real gap in IS connection setup tests. Drop mode:build for the
same reason — list+ping is closer to operate (verifying a live
connector's health) than build (creating/editing/deploying).

A genuine setup-mode test for IS connections is still missing and
should be added separately if browser-driven create/edit can be
exercised in the sandbox.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Closes 4 missing uip is verbs (run get/update/replace/delete) in a single
e2e walk. Adds the first lifecycle:setup test on the IS axis, filling the
gap exposed when connection_lifecycle was retagged to discover.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
First lifecycle:setup test on the Integration Service axis. Exercises
uip is connections create with a placeholder PAT/API-key so the create
path is shaped correctly even in a sandboxed tenant. Pairs with the
existing connection_lifecycle (discover) to give the scorecard genuine
coverage of both lifecycle phases.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
First mode:diagnose test on the Integration Service axis. Exercises
uip is triggers describe and uip is webhooks config in a "non-firing
trigger" diagnostic walk against the Outlook365 EMAIL_RECEIVED trigger.
Closes the diagnose-mode gap exposed by the coder-coverage IS capability
inventory.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…i-workflow

The smoke prompt 'create a Contact in Salesforce' was auto-triggering
uipath-api-workflow (which legitimately matches Salesforce/API phrasing)
after PR #1518 stripped the explicit skill-load directive. The agent
then walked the api-workflow registry resolve/stub path and skipped
the required `uip is connectors list --filter` and
`uip is resources describe --operation` commands, failing 2 criteria.

Nudge the prompt to the raw IS resource execute path and explicitly
exclude `uip api-workflow`, matching the pattern PR #1518 used for the
maestro-bpmn and platform tasks that mistriggered after the directive
removal.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…bs) (#1597)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- Add steps subcommand group (list, get, add, update, move, delete)
- Note list-steps alias still works alongside steps list
- Update testcases update to mention pre/post-condition support
- Add --step-id to identifier flag shapes callout
- Move --yes requirement to Critical Rule 6 (applies to all deletes)
- Trim optional flag lists from rows; agent uses -h for those
…1600)

Both skill-sdd-e2e-rpa-process and skill-sdd-integration-constraint-gate
overrode turn_timeout: 1800 but left task_timeout unset, so it inherited
the experiment default of 1200s. The whole-task wall-clock cap fired before
the SDD landed regardless of the per-turn budget. Set task_timeout: 2700 on
both so the end-to-end run has headroom across setup turns and grading.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#1583)

* docs(uipath-data-fabric): document folder scope, FILE-write silent-strip, and mandatory scope-prompt flow

- SKILL.md Rule 6: rewrite FILE-write rule — platform silently strips FILE
  values from records insert/update/import payloads (Result: Success, column
  unchanged). receipt:null does NOT clear; receipt:"<uuid>" does NOT swap.
- SKILL.md Rule 19: add Mandatory scope-prompt flow — when scope is unspecified,
  ask via AskUserQuestion with two dropdowns (tenant vs folder; then accessible
  folders pre-fetched from `uip or folders list`). Never default silently.
- entity-schema.md / file-attachments.md / records-query.md: align FILE-write
  wording with the rule-shaped phrasing in SKILL.md ("Never put FILE-typed key
  in payload. Expected behavior: silently stripped. Use files upload to attach
  or replace; files delete to clear.")
- file-attachments.md: new section documenting what records get returns for a
  FILE field — stable per-record-per-field UUID handle, not a content id;
  filename is not in any read response.
- choice-sets.md / bulk-import.md / records-query.md: --folder-key fan-out
  across every records / files / choice-set verb (CLI ≥ 1.197.0), and
  --yes/--reason gating with --confirm as deprecated alias.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs(uipath-data-fabric): align skill with live CLI response shapes; trim noise

Empirically verified every entity / records / files / choice-set CRUD against
the live tenant and corrected stale claims in the skill.

Response shapes corrected:
- entities create: Data.Id (was: Data.ID)
- entities list rows: EntityType field ("Entity" / "SystemEntity" / federated),
  no Source field exists (was: Source: Native / Federated)
- entities get fields: Name / Id / FieldDataType.Name / FieldDataType.{Length
  Limit,MaxValue,MinValue,DecimalPrecision} (was: FieldName / ID / Type)
- records list / query: Data.Items (was: Data.Records); NextCursor is an object
  {Value: "..."} — pass the inner Value to --cursor, not the wrapper
- Aggregate alias is PascalCased in the response regardless of how it was sent
  (verified: total -> Total, my_total_count -> MyTotalCount)
- files delete response includes Reason field

CLI gating updated for recent server changes:
- entities delete, field removal, records delete, files delete all require
  --yes --reason (was: --confirm). records delete IDs are positional varargs.
- choice-sets update requires BOTH --display-name AND --description on every
  call; sending only one fails (DisplayName required / Internal Server Error)

Rule 19 bypass clauses added so the mandatory scope-prompt flow does not block
non-interactive contexts: agent proceeds without AskUserQuestion when the
prompt explicitly says "do not ask" / names a folder inline / states tenant
scope / supplies folder GUIDs, or for pure tenant-wide discovery reads.

FILE field binding clarified: bind referenceFieldId to EntityAttachment's
Name (NVARCHAR) field. Removed the "attachment-id field" misnomer.

Trimmed unnecessary content per the same-pass review:
- Dropped the "Relationship violation" troubleshooting row (unverified error
  string, fix lives in entity-schema.md > FILE Fields)
- Dropped PascalCase / camelCase meta-narration where examples already convey
  the case; kept short footgun notes for genuine subtle traps (id-body vs
  Id-response on updateFields; type-enum UPPERCASE-only)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(tests): correct DF smoke tasks — files upload is
  supported; raise complex-fields turn cap

* docs(uipath-data-fabric): address PR review + verified FILE-read shape and upload-replace semantics

- file-attachments.md: correct FILE-read shape (live-verified against codereval/DefaultTenant).
  At expansionLevel:0 the field is a UUID string; at expansionLevel:1+ it is an object
  with Id/Name/Size/Type/Path/EntityId/FieldId/RecordId/CreatedBy/UpdatedBy/CreateTime/UpdateTime.
  Drops the prior false claim that the filename is unreadable via records verbs.
- file-attachments.md: rename "Upload a File" → "Upload or Replace a File"; explicitly
  document that files upload both attaches (empty field) and replaces in place (existing
  file) — no files delete needed first. UUID handle is preserved across replace.
- file-attachments.md: restructure Prerequisites as numbered list; add explicit
  "record must already exist" prereq.
- records-query.md: tag FILE-write section as Anti-pattern, add inline link to
  file-attachments.md, and fix wrong "files delete then files upload to replace"
  guidance (live test proves upload alone replaces).
- entity-schema.md: drop record-level FILE-write row from Not Supported table;
  this file covers schema only — record-level FILE behavior lives in Rule 6 and
  records-query.md.
- SKILL.md Rule 17: fold PascalCase aggregate-alias gotcha into the existing rule
  (alias: "total" → response key "Total") instead of adding a new critical rule.

Live verification on codereval/DefaultTenant covered Rule 5, Rule 6 (insert/update
silent-strip), Rule 17 (PascalCase alias, like rejected, Data.Items shape), Rule 19
(--folder-key / --include-folders surface across all verbs, mutually exclusive),
Rule 20 (records import drops FILE columns), and files upload response shape.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…aybook

Word Application Scope can fault on COM start (WordAppHelpers.StartNewApplication
via ComAppReferenceCountManager.StartOrAttach) with
UiPath.Word.WordException "Error opening document, make sure Word application is
installed. If already installed, an Office Repair may be required." on an
unattended robot — even though Word opens fine interactively. Primary cause:
the process is a Background Process (runtimeOptions.requiresUserInteraction:
false) running in Session 0 under LOCAL SERVICE with no interactive session, so
Office COM cannot start. Modern project.json has no "background": true key —
requiresUserInteraction is the flag, which is easy to miss.

Adds playbook word-com-start-background-session0.md covering the three causes
(background/Session-0, not-installed, broken-registration) with the
opens-interactively-but-fails-headless discriminator and the foreground /
interactive-session / Use Foreground fix (explicitly: do NOT run Office Repair
when Word opens cleanly interactively). Extends the package investigation guide
with a faulting-frame routing rule and the requiresUserInteraction run-surface
check. Registered in the package summary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.