diff --git a/.github/workflows/docs-quality.yml b/.github/workflows/docs-quality.yml index 75f7f10..5fe7a54 100644 --- a/.github/workflows/docs-quality.yml +++ b/.github/workflows/docs-quality.yml @@ -1,4 +1,4 @@ -name: Documentation quality +name: Docs checks on: pull_request: @@ -24,7 +24,25 @@ jobs: with: node-version: 22 - run: npm run check - - name: Enforce live-release gates + # Keep mechanical checks blocking; the full launch checklist is advisory. + # npm run check:release remains available for an explicit release audit. + - name: Report launch checklist (advisory) if: (github.event_name == 'pull_request' && github.base_ref == 'v1.0' && github.event.pull_request.draft == false) || github.ref == 'refs/heads/v1.0' - run: npm run check:release + run: | + if npm run check:release > "$RUNNER_TEMP/docs-release-report.txt" 2>&1; then + echo '### Launch checklist: complete' >> "$GITHUB_STEP_SUMMARY" + else + { + echo '### Launch checklist: follow-up items remain' + echo '' + echo 'Advisory only: this checklist does not block routine documentation fixes. Passing this PR does not certify release readiness or replace Product and Support review.' + echo '' + echo '
View outstanding release items' + echo '' + echo '```text' + cat "$RUNNER_TEMP/docs-release-report.txt" + echo '```' + echo '
' + } >> "$GITHUB_STEP_SUMMARY" + fi - run: npm run check:media diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d02b6a3..b18a43c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -93,7 +93,7 @@ Keep the core integration guides provider-neutral. Put source-specific fields, p - Never cosmetically alter visible product UI. If a release-excluded area is central to the screen, wait for the correct product flag. - Use only masked test information for billing. Never purchase, cancel, or change a real payment method to create documentation. - Keep `media/screenshot-manifest.json` current and remove every temporary `Docs Demo` record after verification. -- Use the `wanaware-ai-assisted-v4` frame. The generated backdrop supplies decoration only; the sanitized portal capture remains an exact, unscaled layer. +- Use the theme-neutral frame produced by `scripts/frame-screenshot.mjs` for new captures: transparent surroundings, generous margins, and a subtle neutral border and shadow. Preserve the captured UI without regenerating text, controls, icons, or product state. Existing `wanaware-ai-assisted-v4` and `wanaware-navy-teal-v5` images remain accepted during migration; do not relabel them as theme-neutral until they have been re-rendered and visually checked. - Place each screenshot beside the step or decision it explains. Never append a workflow screenshot after **Get help**. - Keep `media/workflow-visual-coverage.json` and `media/screenshot-placements.json` complete. Every screenshot-capable action must name a captured screenshot or an explicit capture blocker. A release-ready article cannot remain incomplete or blocked. diff --git a/docs/Start Here/welcome-to-wanaware.md b/docs/Start Here/welcome-to-wanaware.md index 6cc5dae..5ddea9d 100644 --- a/docs/Start Here/welcome-to-wanaware.md +++ b/docs/Start Here/welcome-to-wanaware.md @@ -30,14 +30,16 @@ release-status: draft WanAware brings your Assets, their business context, and their Relationships into one place. Choose the path that matches what you need to accomplish now. - + + Explore WanAware **Outcome:** Find a known Asset, understand its details, and follow one useful Relationship. - **For:** Anyone exploring an existing workspace - **Permission:** `read my_launchpad` and `read assets` - **Time:** 10–30 minutes - + + Build your environment **Outcome:** Add data, define how Assets are described, and organize them for your team. - **For:** Customer administrators @@ -53,22 +55,28 @@ The quickest way to understand the workspace is to open a known Asset and follow ## Common tasks - + + Integrations Choose between a manual Asset, bulk upload, or an Integration. - + + Assets Update editable fields, tags, and catalog-backed choices, then verify the saved result. - + + Relationships Create a supported network connection or investigate a Relationship that already exists. - + + Asset Types and Service Catalog Start from AI, a template, or scratch, then configure the draft before publishing it. - + + Structures, Elements, and Collections Understand Structures, Elements, Collections, and the attachment paths between them. - + + Support and access Invite a user, assign a Role, and confirm the invitation status. diff --git a/docs/Structures, Elements, and Collections/create-and-manage-structures.md b/docs/Structures, Elements, and Collections/create-and-manage-structures.md index f26ebf1..99ed4c5 100644 --- a/docs/Structures, Elements, and Collections/create-and-manage-structures.md +++ b/docs/Structures, Elements, and Collections/create-and-manage-structures.md @@ -22,7 +22,7 @@ permission: create structures; update structures or delete structures for those product-area: Structures, Elements, and Collections content-owner: Product review-owner: Support -last-verified: 2026-09-03 +last-verified: 2026-09-07 last-verified-release: pending screenshot-set: structures-create video-status: planned @@ -39,7 +39,8 @@ release-status: draft ## If you're stuck - Search the complete hierarchy for the exact name before adding a node. -- If a parent cannot be selected, confirm the new node's **Structure Type** is valid at that level. +- Choose the parent in the hierarchy before opening **Add sub-structure**. The form does not contain a separate parent picker. +- After saving, expand the parent's sub-structures. A collapsed branch can hide a successfully created node. - Do not delete a Structure to detach an Element or Collection; remove its Structure Tag instead. ## Before you start @@ -54,37 +55,54 @@ release-status: draft | UI item | Purpose | What to choose or enter | Verification | | --- | --- | --- | --- | | **Structure Type** | Defines the node's role | **Company**, **Organization**, **Group**, or **Vendor**, matching the real hierarchy | Node displays the intended type | -| **Name** | Identifies the node | Unique, durable organizational name | Search returns one node | -| Parent or placement | Places the node in the hierarchy | Exact existing parent, confirmed by name and ID | Node appears under that parent | -| Placement preview | Shows the pending hierarchy path | Read the complete path before save | Saved path matches the preview | +| **Structure Name** | Identifies the node | Required; use a durable organizational name, such as Service Operations | The label on the saved node | +| **Add sub-structure** | Chooses the parent context | Open this action on the intended existing parent | New node appears under that parent | +| **Save** / **Update** | Stores the form | **Save** creates a node; **Update** changes an existing node | Refresh the hierarchy to verify persistence | ## Create a Structure 1. Open **Functions → Structures**. ![Structure hierarchy showing an example company and its top-level organizational nodes.](https://files.readme.io/1b5ecefc90dd8392bcc3478cdb33897388dd8600701ba35ab5c451068066f39e-structure-hierarchy.png) -2. Select **Add Structure**. -3. Choose the **Structure Type**. -4. Enter a clear **Name**. +2. Find the intended parent. Open its actions menu and select **Add sub-structure**. +3. In **Add Structure**, review **Structure Type**. An Organization parent offers a Group child in the verified flow. +4. Enter the required **Structure Name**. ![Add Structure dialog showing the Structure Type and required Structure Name fields.](https://files.readme.io/d4b714512e888faa25ab82f3e25aca497940fa05ac54b3ad04de8f2db553fd2f-structure-add.png) -5. Select the intended parent shown by the form for that Structure Type. -6. Review the placement preview. -7. Select **Save**. +5. Confirm that you opened the form from the correct parent. If not, select **Cancel** and reopen **Add sub-structure** on the intended parent. +6. Select **Save** once. An empty **Structure Name** keeps **Save** disabled. +7. Expand the parent's sub-structures, then select **Refresh from database** and confirm the new node remains under that parent. **Expected result:** The new node appears once under the intended parent. -If a parent cannot be selected, the type may not be valid at that level. Choose a valid placement instead of creating a duplicate elsewhere. +If the node is missing, expand the branch and refresh before submitting again. Check the exact name to avoid creating a duplicate after an uncertain save. ## Edit a Structure -1. Select the existing node. -2. Open its edit action. +1. Find the existing node and confirm its name and parent. +2. Open its actions menu and select **Edit structure**. ![Structure actions menu showing view, attachment, child Structure, and edit choices.](https://files.readme.io/5417aaec8dd89edc0762a780bff6557500e4aea23a9eef710929552ffe343aab-structure-actions.png) -3. Confirm the node's ID and attachments. -4. Change only the approved name or supported setting. -5. Select **Save** and reopen the node. +3. In **Edit Structure**, review **Structure Type** and **Structure Name**. The dialog does not contain a parent picker; renaming a node does not move it. + +![Edit Structure dialog showing Structure Type, Structure Name, Cancel, and Update for an example node.](https://files.readme.io/d02b99d04f3fa0695a7e2ade3fdfd685988147ca5ee6a562d0a707c7eeccf157-structure-edit.png) +4. Change **Structure Name** to the approved value. +5. Select **Update**, then **Refresh from database**. Reopen **Edit structure** and confirm the saved name. + +If the update fails or the old name remains, record the visible error and check `update structures` before trying again. To discard an unsubmitted edit, select **Cancel**. + +## Review before deletion + +Deleting a node is not the same as removing a Structure Tag from an Element or Collection. Use the attachment guides below when the record only needs to be detached. + +1. Open the intended node's actions menu and select **Delete structure…**. +2. Review the name, **Structure Type**, and **Sub-structures** count in **Delete Structure**. + +![Delete Structure dialog showing an example node name, Structure Type, sub-structure count, and Cancel.](https://files.readme.io/749c93ecb82657c024e30f1f5ba7c1fddb0a4ae23991fa52fefeeaa5867ca7b6-structure-delete-confirmation.png) +3. Select **Cancel** if there are child nodes, attachments, or any uncertainty about the scope. Ask Support to confirm the impact before deleting a populated node. +4. For an approved empty test node, select **Delete** once. Refresh and search for the exact name to verify removal. + +The confirmation shows a sub-structure count, but that count alone does not establish the impact on attached records. Do not assume deleting a parent moves or preserves its children. No restore procedure is verified here. ## Check your result @@ -103,6 +121,7 @@ Restore the previous editable value when possible. Before removing a Structure, - [Create and populate Elements](https://docs.wanaware.com/docs/create-and-populate-elements) - [Attach Elements to Structures](https://docs.wanaware.com/docs/attach-elements-to-structures) +- [Attach Collections to Structures](https://docs.wanaware.com/docs/attach-collections-to-structures) ## Get help diff --git a/integration/userpilot-compact-panel.css b/integration/userpilot-compact-panel.css new file mode 100644 index 0000000..bccf59c --- /dev/null +++ b/integration/userpilot-compact-panel.css @@ -0,0 +1,62 @@ +/* Append after the network icon stylesheet in Userpilot Custom CSS. + Staging Resource Center: compact overlay, not a native docked panel. */ +#userpilot-resource-centre:not([aria-hidden="true"]) { + display: flex !important; + flex-direction: column; + width: 420px !important; + max-width: calc(100vw - 24px) !important; + height: 560px !important; + max-height: calc(100dvh - 32px) !important; + top: auto !important; + bottom: 16px !important; + border-radius: 14px !important; + overflow: hidden; +} +#userpilot-resource-centre #widget-headers { + flex: 0 0 auto; +} +#userpilot-resource-centre .widget-header { + padding: 16px 20px !important; +} +#userpilot-resource-centre #widget-title { + font-size: 20px !important; + line-height: 28px !important; + padding-right: 36px; +} +#userpilot-resource-centre #widget-desc { + font-size: 13px !important; + line-height: 19px !important; + margin-top: 4px !important; +} +#userpilot-resource-centre #widget-close { + width: 32px !important; + height: 32px !important; + top: 0 !important; + display: flex; + align-items: center; + justify-content: center; +} +#userpilot-resource-centre .userpilot-resource-centre-container:not(.active) { + display: none !important; +} +#userpilot-resource-centre .userpilot-resource-centre-container.active { + position: relative !important; + top: auto !important; + flex: 1 1 auto; + height: auto !important; + min-height: 0; + overflow: hidden; +} +#userpilot-resource-centre .userpilot-resource-centre-container.active #widget-content, +#userpilot-resource-centre .userpilot-resource-centre-container.active #main-content { + height: 100% !important; + max-height: 100% !important; + min-height: 0; + box-sizing: border-box; +} +#userpilot-resource-centre .userpilot-resource-centre-container.active #main-content { + overflow-y: auto !important; + overscroll-behavior: contain; + scrollbar-width: thin; + padding-bottom: 16px; +} diff --git a/integration/userpilot-network-icons.css b/integration/userpilot-network-icons.css new file mode 100644 index 0000000..9d86c7e --- /dev/null +++ b/integration/userpilot-network-icons.css @@ -0,0 +1,74 @@ +/* WanAware staging Help: decorative, pedestal-free network artwork. + Article labels remain the accessible source of meaning. */ +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/"]::before { + content: ""; + display: block; + width: 44px; + height: 44px; + min-width: 44px; + flex: 0 0 44px; + margin-right: 12px; + background: var(--wanaware-help-icon) center / contain no-repeat; + pointer-events: none; +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/your-first-30-minutes "] { + --wanaware-help-icon: url("https://files.readme.io/98ac97db4c2c90ecbcf5b65b3b024c9879590a5960083c72aa19bae3e19a1496-explore-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/administrator-setup-path "] { + --wanaware-help-icon: url("https://files.readme.io/50e780bdf04c2a132761fd7d0443d3e07b65210d283d7e35cd859485fbec4423-build-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/find-filter-and-inspect-assets "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/add-an-asset "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/bulk-upload-assets "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/missing-stale-or-duplicate-assets "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/review-discovery-and-move-assets-to-inventory "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/bulk-import-validation-failures "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/populate-asset-details "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/manage-asset-and-structure-tags "] { + --wanaware-help-icon: url("https://files.readme.io/ef570547e1bf5492e110661da61848b9d1994678d4a674659acc8f9cb6532e8d-assets-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/add-an-integration "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/refresh-integration-data "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/integration-connection-failures "] { + --wanaware-help-icon: url("https://files.readme.io/42b0aa03d1397f430ecf414e971d43725513e6f08cfaf8b588881e1f4b7472dd-integrations-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/view-asset-relationships "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/add-a-network-connection "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/missing-or-unexpected-relationships "] { + --wanaware-help-icon: url("https://files.readme.io/564d462cc3fd1059b0f0af717d90db0d04f3a48edc971eea6ea13a80c0152727-relationships-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/create-a-custom-asset-type "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/configure-asset-type-sections-and-fields "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/publish-and-verify-an-asset-type "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/asset-type-save-or-publish-failures "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/create-a-custom-service-catalog "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/add-catalog-entries-and-compatibility "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/understand-asset-types-and-service-catalogs "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/service-catalog-failures "] { + --wanaware-help-icon: url("https://files.readme.io/90954bd00c01194a48549629fa3cb6458bc98046f1b692e3aa7561cd354df746-catalog-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/create-and-manage-structures "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/create-and-populate-elements "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/attach-elements-to-structures "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/create-collections-and-add-assets "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/attach-collections-to-structures "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/structure-element-or-collection-attachment-failures "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/manage-site-details "] { + --wanaware-help-icon: url("https://files.readme.io/405bfe07d529d0ea156b39a414f7fd47a72a8bc20a9aa23e54bf70e6bc2f4804-organization-network-v2.png"); +} +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/welcome-to-wanaware "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/contact-wanaware-support "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/product-map-and-terminology "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/invite-users-and-assign-roles "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/manage-pending-invitations "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/create-and-edit-roles "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/missing-pages-actions-or-permissions "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/manage-company-settings "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/manage-profile-and-security "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/choose-a-theme "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/view-plan-and-usage "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/manage-payment-methods "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/view-billing-history-and-invoices "], +#userpilot-resource-centre .row[role="link"][aria-label*="https://docs.wanaware.com/docs/billing-and-payment-failures "] { + --wanaware-help-icon: url("https://files.readme.io/1fbcc1e22043d174cae24da2038c9ae4bd5f901e1f05e4abe08343eda63d8d7d-support-network-v2.png"); +} diff --git a/media/icons/assets-network-v2.png b/media/icons/assets-network-v2.png new file mode 100644 index 0000000..ea462fa Binary files /dev/null and b/media/icons/assets-network-v2.png differ diff --git a/media/icons/assets-network-v2.svg b/media/icons/assets-network-v2.svg new file mode 100644 index 0000000..7c60ce0 --- /dev/null +++ b/media/icons/assets-network-v2.svg @@ -0,0 +1,246 @@ +Assets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/build-network-v2.png b/media/icons/build-network-v2.png new file mode 100644 index 0000000..feb0247 Binary files /dev/null and b/media/icons/build-network-v2.png differ diff --git a/media/icons/build-network-v2.svg b/media/icons/build-network-v2.svg new file mode 100644 index 0000000..c56be2b --- /dev/null +++ b/media/icons/build-network-v2.svg @@ -0,0 +1,744 @@ +Build your environment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/catalog-network-v2.png b/media/icons/catalog-network-v2.png new file mode 100644 index 0000000..953112d Binary files /dev/null and b/media/icons/catalog-network-v2.png differ diff --git a/media/icons/catalog-network-v2.svg b/media/icons/catalog-network-v2.svg new file mode 100644 index 0000000..e481dae --- /dev/null +++ b/media/icons/catalog-network-v2.svg @@ -0,0 +1,396 @@ +Asset Types and Service Catalog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/devices/desktop.svg b/media/icons/devices/desktop.svg new file mode 100644 index 0000000..017445f --- /dev/null +++ b/media/icons/devices/desktop.svg @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/devices/network-router.svg b/media/icons/devices/network-router.svg new file mode 100644 index 0000000..e4dba0e --- /dev/null +++ b/media/icons/devices/network-router.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/devices/server.svg b/media/icons/devices/server.svg new file mode 100644 index 0000000..e1c8fd3 --- /dev/null +++ b/media/icons/devices/server.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/devices/switch.svg b/media/icons/devices/switch.svg new file mode 100644 index 0000000..ad24e54 --- /dev/null +++ b/media/icons/devices/switch.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/explore-network-v2.png b/media/icons/explore-network-v2.png new file mode 100644 index 0000000..e0b4339 Binary files /dev/null and b/media/icons/explore-network-v2.png differ diff --git a/media/icons/explore-network-v2.svg b/media/icons/explore-network-v2.svg new file mode 100644 index 0000000..f801a41 --- /dev/null +++ b/media/icons/explore-network-v2.svg @@ -0,0 +1,246 @@ +Explore WanAware + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/integrations-network-v2.png b/media/icons/integrations-network-v2.png new file mode 100644 index 0000000..6e10725 Binary files /dev/null and b/media/icons/integrations-network-v2.png differ diff --git a/media/icons/integrations-network-v2.svg b/media/icons/integrations-network-v2.svg new file mode 100644 index 0000000..5e551cc --- /dev/null +++ b/media/icons/integrations-network-v2.svg @@ -0,0 +1,293 @@ +Integrations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/network-manifest.json b/media/icons/network-manifest.json new file mode 100644 index 0000000..e0fbc5f --- /dev/null +++ b/media/icons/network-manifest.json @@ -0,0 +1,63 @@ +{ + "style": "wanaware-connected-device-v2", + "background": "transparent", + "pedestal": false, + "icons": [ + { + "id": "explore", + "label": "Explore WanAware", + "source": "media/icons/explore-network-v2.svg", + "file": "media/icons/explore-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "build", + "label": "Build your environment", + "source": "media/icons/build-network-v2.svg", + "file": "media/icons/build-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "assets", + "label": "Assets", + "source": "media/icons/assets-network-v2.svg", + "file": "media/icons/assets-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "integrations", + "label": "Integrations", + "source": "media/icons/integrations-network-v2.svg", + "file": "media/icons/integrations-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "relationships", + "label": "Relationships", + "source": "media/icons/relationships-network-v2.svg", + "file": "media/icons/relationships-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "catalog", + "label": "Asset Types and Service Catalog", + "source": "media/icons/catalog-network-v2.svg", + "file": "media/icons/catalog-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "organization", + "label": "Structures, Elements, and Collections", + "source": "media/icons/organization-network-v2.svg", + "file": "media/icons/organization-network-v2.png", + "publication": "hosted-pending-rendered-preview" + }, + { + "id": "support", + "label": "Support and access", + "source": "media/icons/support-network-v2.svg", + "file": "media/icons/support-network-v2.png", + "publication": "hosted-pending-rendered-preview" + } + ] +} diff --git a/media/icons/network-readme-urls.json b/media/icons/network-readme-urls.json new file mode 100644 index 0000000..e470ee1 --- /dev/null +++ b/media/icons/network-readme-urls.json @@ -0,0 +1,10 @@ +{ + "explore": "https://files.readme.io/98ac97db4c2c90ecbcf5b65b3b024c9879590a5960083c72aa19bae3e19a1496-explore-network-v2.png", + "build": "https://files.readme.io/50e780bdf04c2a132761fd7d0443d3e07b65210d283d7e35cd859485fbec4423-build-network-v2.png", + "assets": "https://files.readme.io/ef570547e1bf5492e110661da61848b9d1994678d4a674659acc8f9cb6532e8d-assets-network-v2.png", + "integrations": "https://files.readme.io/42b0aa03d1397f430ecf414e971d43725513e6f08cfaf8b588881e1f4b7472dd-integrations-network-v2.png", + "relationships": "https://files.readme.io/564d462cc3fd1059b0f0af717d90db0d04f3a48edc971eea6ea13a80c0152727-relationships-network-v2.png", + "catalog": "https://files.readme.io/90954bd00c01194a48549629fa3cb6458bc98046f1b692e3aa7561cd354df746-catalog-network-v2.png", + "organization": "https://files.readme.io/405bfe07d529d0ea156b39a414f7fd47a72a8bc20a9aa23e54bf70e6bc2f4804-organization-network-v2.png", + "support": "https://files.readme.io/1fbcc1e22043d174cae24da2038c9ae4bd5f901e1f05e4abe08343eda63d8d7d-support-network-v2.png" +} diff --git a/media/icons/organization-network-v2.png b/media/icons/organization-network-v2.png new file mode 100644 index 0000000..9325f12 Binary files /dev/null and b/media/icons/organization-network-v2.png differ diff --git a/media/icons/organization-network-v2.svg b/media/icons/organization-network-v2.svg new file mode 100644 index 0000000..111fbf1 --- /dev/null +++ b/media/icons/organization-network-v2.svg @@ -0,0 +1,989 @@ +Structures, Elements, and Collections + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/preview-network-dark.png b/media/icons/preview-network-dark.png new file mode 100644 index 0000000..ed10903 Binary files /dev/null and b/media/icons/preview-network-dark.png differ diff --git a/media/icons/preview-network-light.png b/media/icons/preview-network-light.png new file mode 100644 index 0000000..9342ce8 Binary files /dev/null and b/media/icons/preview-network-light.png differ diff --git a/media/icons/relationships-network-v2.png b/media/icons/relationships-network-v2.png new file mode 100644 index 0000000..75ef6ac Binary files /dev/null and b/media/icons/relationships-network-v2.png differ diff --git a/media/icons/relationships-network-v2.svg b/media/icons/relationships-network-v2.svg new file mode 100644 index 0000000..7708e85 --- /dev/null +++ b/media/icons/relationships-network-v2.svg @@ -0,0 +1,697 @@ +Relationships + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/icons/support-network-v2.png b/media/icons/support-network-v2.png new file mode 100644 index 0000000..0753bf7 Binary files /dev/null and b/media/icons/support-network-v2.png differ diff --git a/media/icons/support-network-v2.svg b/media/icons/support-network-v2.svg new file mode 100644 index 0000000..57ab120 --- /dev/null +++ b/media/icons/support-network-v2.svg @@ -0,0 +1,104 @@ +Support and access + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/publishing-manifest.json b/media/publishing-manifest.json index 9783acb..49e2f7e 100644 --- a/media/publishing-manifest.json +++ b/media/publishing-manifest.json @@ -1034,6 +1034,176 @@ "publishedUrl": "https://files.readme.io/606771bd138d3b448d60a4885c49d19e58c77eead82c98aec7a9c38fdb95d5ce-iam-role-delete-confirmation.png", "renderedOn": "2026-09-04", "approvalState": "pending-product-support-review" + }, + { + "id": "structures-edit", + "kind": "screenshot", + "source": "media/screenshots/source/structure-edit.png", + "publishingFile": "media/screenshots/structure-edit.png", + "sha256": "af7c79e4fbf4cd8600cc3817c336e0befec84a482ae81bbf4a08ebe9beced746", + "width": 1500, + "height": 932, + "bytes": 113895, + "alt": "Edit Structure dialog showing Structure Type, Structure Name, Cancel, and Update for an example node.", + "articles": [ + "/docs/create-and-manage-structures" + ], + "publishedUrl": "https://files.readme.io/d02b99d04f3fa0695a7e2ade3fdfd685988147ca5ee6a562d0a707c7eeccf157-structure-edit.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "structures-delete-confirm", + "kind": "screenshot", + "source": "media/screenshots/source/structure-delete-confirmation.png", + "publishingFile": "media/screenshots/structure-delete-confirmation.png", + "sha256": "7c7d9de87e804216e0c8fb315689735bf32220f2cd83fb099062f94d2cebe596", + "width": 1500, + "height": 533, + "bytes": 67974, + "alt": "Delete Structure dialog showing an example node name, Structure Type, sub-structure count, and Cancel.", + "articles": [ + "/docs/create-and-manage-structures" + ], + "publishedUrl": "https://files.readme.io/749c93ecb82657c024e30f1f5ba7c1fddb0a4ae23991fa52fefeeaa5867ca7b6-structure-delete-confirmation.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-explore", + "kind": "icon", + "source": "media/icons/explore-network-v2.svg", + "publishingFile": "media/icons/explore-network-v2.png", + "sha256": "a14671c9ec8c39212c3578f1d2bf6300fa0c724e87a9788560548ada66f5aafa", + "width": 352, + "height": 352, + "bytes": 21707, + "alt": "Network-device illustration for Explore WanAware, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/98ac97db4c2c90ecbcf5b65b3b024c9879590a5960083c72aa19bae3e19a1496-explore-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-build", + "kind": "icon", + "source": "media/icons/build-network-v2.svg", + "publishingFile": "media/icons/build-network-v2.png", + "sha256": "460396f5ae21018860b1416aa81191ca82648c7e27ce252729db331869b5e78b", + "width": 352, + "height": 352, + "bytes": 25805, + "alt": "Network-device illustration for Build your environment, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/50e780bdf04c2a132761fd7d0443d3e07b65210d283d7e35cd859485fbec4423-build-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-assets", + "kind": "icon", + "source": "media/icons/assets-network-v2.svg", + "publishingFile": "media/icons/assets-network-v2.png", + "sha256": "1214cf1a09ca26a8bbdebfb3081bf4adabaccde242ce2ab1cd207f99f70269ee", + "width": 352, + "height": 352, + "bytes": 27476, + "alt": "Network-device illustration for Assets, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/ef570547e1bf5492e110661da61848b9d1994678d4a674659acc8f9cb6532e8d-assets-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-integrations", + "kind": "icon", + "source": "media/icons/integrations-network-v2.svg", + "publishingFile": "media/icons/integrations-network-v2.png", + "sha256": "9aaf881fd8e896db8142f7aaef07bc0a0812a153117b7682c3143f1e6076b19c", + "width": 352, + "height": 352, + "bytes": 22715, + "alt": "Network-device illustration for Integrations, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/42b0aa03d1397f430ecf414e971d43725513e6f08cfaf8b588881e1f4b7472dd-integrations-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-relationships", + "kind": "icon", + "source": "media/icons/relationships-network-v2.svg", + "publishingFile": "media/icons/relationships-network-v2.png", + "sha256": "992bdf4697f969618e7fcf04005a68b50bcd08a2bf2c78e5cf9f24d30cca09b4", + "width": 352, + "height": 352, + "bytes": 25729, + "alt": "Network-device illustration for Relationships, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/564d462cc3fd1059b0f0af717d90db0d04f3a48edc971eea6ea13a80c0152727-relationships-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-catalog", + "kind": "icon", + "source": "media/icons/catalog-network-v2.svg", + "publishingFile": "media/icons/catalog-network-v2.png", + "sha256": "4c219adfffc8f4935b72c95137f70e341d8f36408282095b55b2fb5cb2ded38e", + "width": 352, + "height": 352, + "bytes": 17459, + "alt": "Network-device illustration for Asset Types and Service Catalog, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/90954bd00c01194a48549629fa3cb6458bc98046f1b692e3aa7561cd354df746-catalog-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-organization", + "kind": "icon", + "source": "media/icons/organization-network-v2.svg", + "publishingFile": "media/icons/organization-network-v2.png", + "sha256": "8966d6d3b07ce0fff67be82bb5292cef99c4f8758476ef24ba42896f4088f8a0", + "width": 352, + "height": 352, + "bytes": 25081, + "alt": "Network-device illustration for Structures, Elements, and Collections, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/405bfe07d529d0ea156b39a414f7fd47a72a8bc20a9aa23e54bf70e6bc2f4804-organization-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" + }, + { + "id": "help-icon-support", + "kind": "icon", + "source": "media/icons/support-network-v2.svg", + "publishingFile": "media/icons/support-network-v2.png", + "sha256": "d59c25f5c2a529e2aa9d9b991da55b8d9e6d9210ea8261003c62386e9744ccce", + "width": 352, + "height": 352, + "bytes": 19148, + "alt": "Network-device illustration for Support and access, without a pedestal.", + "articles": [ + "/docs/welcome-to-wanaware" + ], + "publishedUrl": "https://files.readme.io/1fbcc1e22043d174cae24da2038c9ae4bd5f901e1f05e4abe08343eda63d8d7d-support-network-v2.png", + "renderedOn": "2026-09-07", + "approvalState": "pending-product-support-review" } ], "screenshotPolicy": { diff --git a/media/screenshot-manifest.json b/media/screenshot-manifest.json index 17566be..eda3d9b 100644 --- a/media/screenshot-manifest.json +++ b/media/screenshot-manifest.json @@ -709,16 +709,29 @@ { "id": "structures-edit", "file": "media/screenshots/structure-edit.png", + "sourceFile": "media/screenshots/source/structure-edit.png", "article": "/docs/create-and-manage-structures", - "alt": "Edit Structure dialog showing the selected node, editable name, hierarchy context, and Save action.", - "status": "pending-documentation-record" + "alt": "Edit Structure dialog showing Structure Type, Structure Name, Cancel, and Update for an example node.", + "captureDate": "2026-09-07", + "style": "wanaware-navy-teal-v5", + "status": "captured-pending-product-support-review" }, { "id": "structures-delete-confirm", "file": "media/screenshots/structure-delete-confirmation.png", + "sourceFile": "media/screenshots/source/structure-delete-confirmation.png", "article": "/docs/create-and-manage-structures", - "alt": "Structure deletion confirmation showing the selected example node and the impact warning before confirmation.", - "status": "pending-documentation-record" + "alt": "Delete Structure dialog showing an example node name, Structure Type, sub-structure count, and Cancel.", + "captureDate": "2026-09-07", + "style": "wanaware-navy-teal-v5", + "status": "captured-pending-product-support-review" + }, + { + "id": "structures-save-result", + "file": "media/screenshots/structure-save-result.png", + "article": "/docs/create-and-manage-structures", + "alt": "Refreshed Structure hierarchy showing a saved example Group beneath its intended parent Organization.", + "status": "pending-safe-capture" }, { "id": "elements-create-success", diff --git a/media/screenshot-placements.json b/media/screenshot-placements.json index e77815d..cfffdd7 100644 --- a/media/screenshot-placements.json +++ b/media/screenshot-placements.json @@ -64,8 +64,10 @@ { "article": "/docs/manage-profile-and-security", "screenshotId": "personal-password", "after": "2. In **Change Password**, enter your **Current Password**." }, { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-hierarchy", "after": "1. Open **Functions → Structures**." }, - { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-add", "after": "4. Enter a clear **Name**." }, - { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-actions", "after": "2. Open its edit action." }, + { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-add", "after": "4. Enter the required **Structure Name**." }, + { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-actions", "after": "2. Open its actions menu and select **Edit structure**." }, + { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-edit", "after": "3. In **Edit Structure**, review **Structure Type** and **Structure Name**. The dialog does not contain a parent picker; renaming a node does not move it." }, + { "article": "/docs/create-and-manage-structures", "screenshotId": "structures-delete-confirm", "after": "2. Review the name, **Structure Type**, and **Sub-structures** count in **Delete Structure**." }, { "article": "/docs/create-and-populate-elements", "screenshotId": "elements-create-details", "after": "3. Enter a unique **Element Name**." }, { "article": "/docs/create-and-populate-elements", "screenshotId": "elements-type-options", "after": "4. Select **Element Type**." }, { "article": "/docs/create-and-populate-elements", "screenshotId": "elements-site-fields", "after": "5. For a Site, open **Site Assets** and **Location**." }, diff --git a/media/screenshots/source/structure-delete-confirmation.png b/media/screenshots/source/structure-delete-confirmation.png new file mode 100644 index 0000000..9b7dd61 Binary files /dev/null and b/media/screenshots/source/structure-delete-confirmation.png differ diff --git a/media/screenshots/source/structure-edit.png b/media/screenshots/source/structure-edit.png new file mode 100644 index 0000000..5e98183 Binary files /dev/null and b/media/screenshots/source/structure-edit.png differ diff --git a/media/screenshots/structure-delete-confirmation.png b/media/screenshots/structure-delete-confirmation.png new file mode 100644 index 0000000..57aa19c Binary files /dev/null and b/media/screenshots/structure-delete-confirmation.png differ diff --git a/media/screenshots/structure-edit.png b/media/screenshots/structure-edit.png new file mode 100644 index 0000000..88e3669 Binary files /dev/null and b/media/screenshots/structure-edit.png differ diff --git a/media/workflow-visual-coverage.json b/media/workflow-visual-coverage.json index f156b6e..ffc06e1 100644 --- a/media/workflow-visual-coverage.json +++ b/media/workflow-visual-coverage.json @@ -154,10 +154,12 @@ "screenshotIds": [ "structures-hierarchy", "structures-actions", - "structures-add" + "structures-add", + "structures-edit", + "structures-delete-confirm" ], - "pendingScreenshotIds": ["structures-edit", "structures-delete-confirm"], - "blocker": "Edit and deletion confirmation require a disposable documentation-only Structure." + "pendingScreenshotIds": ["structures-save-result"], + "blocker": "Edit and deletion dialogs captured on 2026-09-07, uploaded to ReadMe, and placed beside the corresponding steps. A safe saved-result capture and rendered preview verification remain outstanding. Create, rename, refresh, and empty test-node deletion succeeded under one authorized account; normal-role verification remains pending." }, { "article": "/docs/create-and-populate-elements", diff --git a/scripts/build-network-help-icons.mjs b/scripts/build-network-help-icons.mjs new file mode 100644 index 0000000..1552f02 --- /dev/null +++ b/scripts/build-network-help-icons.mjs @@ -0,0 +1,48 @@ +import {readFile,writeFile,mkdir} from 'node:fs/promises'; +import {join} from 'node:path'; +import sharp from 'sharp'; + +// Uses approved public device artwork only; no product implementation is imported. +const directory=process.argv[2]; +await mkdir('media/icons/devices',{recursive:true}); +const art={}; +for(const name of ['switch','network-router','server','desktop']) { + const path=`media/icons/devices/${name}.svg`; + let svg; + if(directory) { + svg=await readFile(join(directory,`${name}.svg`),'utf8'); + const start=svg.search(/]*id="Base[^\"]*"/); + if(start<0)throw new Error(`Inspect pedestal manually: ${name}`); + const tags=/<\/?g\b[^>]*>/g; tags.lastIndex=start; + let depth=0,end; + for(let m;(m=tags.exec(svg));) {depth+=m[0].startsWith(']*>/,''); +} +const device=(name,x,y,w,h)=>art[name].replace('``; +const icons={ + explore:{label:'Explore WanAware',shape:`${device('switch',14,31,132,89)}${device('server',114,100,26,34)}`}, + build:{label:'Build your environment',shape:`${link('M86 83V128H135M86 128H37')}${device('network-router',47,20,79,67)}${device('server',16,107,42,58)}${device('desktop',113,114,54,44)}`}, + assets:{label:'Assets',shape:`${device('server',23,19,65,116)}${device('switch',66,104,99,55)}`}, + integrations:{label:'Integrations',shape:`${link('M53 82V112H118V83')}${device('server',14,22,59,75)}${device('network-router',93,30,74,66)}`}, + relationships:{label:'Relationships',shape:`${link('M88 73V93M31 121V93H141V121')}${device('switch',40,19,96,60)}${device('server',12,112,42,55)}${device('desktop',115,115,52,45)}`}, + catalog:{label:'Asset Types and Service Catalog',shape:`${device('switch',33,24,80,28)}${device('network-router',35,67,65,42)}${device('server',43,119,30,36)}${link('M112 82H141M112 96H133M94 130H141M94 144H133')}`}, + organization:{label:'Structures, Elements, and Collections',shape:`${link('M87 65V83M43 97V83H133V97')}${device('network-router',47,15,80,54)}${device('server',11,105,32,52)}${device('switch',41,131,35,23)}${device('server',103,105,32,52)}${device('desktop',133,126,33,29)}`}, + support:{label:'Support and access',shape:`${device('switch',11,25,144,91)}`} +}; +const manifest={style:'wanaware-connected-device-v2',background:'transparent',pedestal:false,icons:[]}; +for(const [id,{label,shape}]of Object.entries(icons)) { + const source=`media/icons/${id}-network-v2.svg`,file=`media/icons/${id}-network-v2.png`; + const svg=`${label}${shape}\n`; + await writeFile(source,svg);await sharp(Buffer.from(svg)).resize(352,352).png().toFile(file); + manifest.icons.push({id,label,source,file,publication:'pending-upload-and-preview'}); +} +await writeFile('media/icons/network-manifest.json',JSON.stringify(manifest,null,2)+'\n'); +const samples=Object.entries(icons).map(([id,{shape}],i)=>`${shape}${id}`).join(''); +for(const [theme,color]of [['light','#FAFAFA'],['dark','#202024']])await sharp(Buffer.from(`${samples}`)).png().toFile(`media/icons/preview-network-${theme}.png`); diff --git a/scripts/frame-screenshot.mjs b/scripts/frame-screenshot.mjs index 810229f..3c0a68d 100644 --- a/scripts/frame-screenshot.mjs +++ b/scripts/frame-screenshot.mjs @@ -16,9 +16,9 @@ Usage: Options: --input PATH Raw browser capture. --source-out PATH Safe, cropped source retained for future reframing. - --output PATH Linear-style framed PNG for publishing. + --output PATH Theme-neutral framed PNG for publishing. --crop X,Y,W,H Crop that removes browser chrome, navigation, identifiers, and empty space. - --max-inner-width N Maximum inner screenshot width (default: 936). + --max-inner-width N Maximum inner screenshot width (default: full available width). --max-inner-height N Maximum inner screenshot height (default: 860). --canvas-width N Output width from 1500 to 2200 pixels (default: 1800). `); @@ -69,24 +69,11 @@ function backgroundSvg(width, height, radius, inset) { return Buffer.from(` - - - - - - - - - - - + - - - - + `); } @@ -141,14 +128,15 @@ const cropped = await sharp(input) await sharp(cropped).toFile(sourceOutput); const source = await sharp(cropped).metadata(); -const maxInnerWidth = integerOption(args['max-inner-width'], 936); +const maxInnerWidth = integerOption(args['max-inner-width'], 2200); const maxInnerHeight = integerOption(args['max-inner-height'], 860); const sourceIsPortrait = source.height > source.width * 1.15; -const canvasWidth = rangedIntegerOption(args['canvas-width'], 1800, 1500, 2200, 'canvas-width'); const horizontalPadding = sourceIsPortrait ? 64 : 32; const verticalPadding = sourceIsPortrait ? 48 : 36; +const requestedWidth = rangedIntegerOption(args['canvas-width'], 1800, 1500, 2200, 'canvas-width'); +const canvasWidth = Math.min(requestedWidth, source.width + horizontalPadding * 2); const availableWidth = Math.min(maxInnerWidth, canvasWidth - horizontalPadding * 2); -const scale = Math.min(availableWidth / source.width, maxInnerHeight / source.height); +const scale = Math.min(1, availableWidth / source.width, maxInnerHeight / source.height); const innerWidth = Math.max(1, Math.round(source.width * scale)); const innerHeight = Math.max(1, Math.round(source.height * scale)); const canvasHeight = innerHeight + verticalPadding * 2; @@ -171,7 +159,7 @@ const background = backgroundSvg(canvasWidth, canvasHeight, 24, { const framed = sharp(background).composite([ { input: inner, left, top }, { - input: Buffer.from(``), + input: Buffer.from(``), left, top } diff --git a/scripts/register-network-help-icons.mjs b/scripts/register-network-help-icons.mjs new file mode 100644 index 0000000..d2b76c3 --- /dev/null +++ b/scripts/register-network-help-icons.mjs @@ -0,0 +1,20 @@ +import {readFile,writeFile} from 'node:fs/promises'; +import {createHash} from 'node:crypto'; +const manifest=JSON.parse(await readFile('media/icons/network-manifest.json','utf8')); +const urls=JSON.parse(await readFile('media/icons/network-readme-urls.json','utf8')); +const publishing=JSON.parse(await readFile('media/publishing-manifest.json','utf8')); +const welcome='docs/Start Here/welcome-to-wanaware.md'; +let article=await readFile(welcome,'utf8'); +for(const icon of manifest.icons) { + const bytes=await readFile(icon.file),url=urls[icon.id]; + if(!url?.startsWith('https://files.readme.io/')||!url.endsWith(`-${icon.id}-network-v2.png`))throw new Error(`Missing revised upload: ${icon.id}`); + const alt=`Network-device illustration for ${icon.label}, without a pedestal.`; + const entry={id:`help-icon-${icon.id}`,kind:'icon',source:icon.source,publishingFile:icon.file,sha256:createHash('sha256').update(bytes).digest('hex'),width:352,height:352,bytes:bytes.length,alt,articles:['/docs/welcome-to-wanaware'],publishedUrl:url,renderedOn:new Date().toISOString().slice(0,10),approvalState:'pending-product-support-review'}; + const index=publishing.assets.findIndex(a=>a.id===entry.id); + if(index<0)publishing.assets.push(entry);else publishing.assets[index]=entry; + article=article.replace(new RegExp(`https://files\\.readme\\.io/[^"\\s]+-${icon.id}(?:-network-v2)?\\.png`,'g'),url); + icon.publication='hosted-pending-rendered-preview'; +} +await writeFile(welcome,article); +await writeFile('media/icons/network-manifest.json',JSON.stringify(manifest,null,2)+'\n'); +await writeFile('media/publishing-manifest.json',JSON.stringify(publishing,null,2)+'\n'); diff --git a/scripts/validate-content.mjs b/scripts/validate-content.mjs index b5b5697..6db942c 100644 --- a/scripts/validate-content.mjs +++ b/scripts/validate-content.mjs @@ -35,7 +35,9 @@ function metadataValue(block, field) { function slugForMarkdown(file) { const name = basename(file, '.md'); - return name === 'index' ? basename(dirname(file)) : name; + return name === 'index' + ? basename(dirname(file)).toLowerCase().replace(/,/g, '').replace(/\s+/g, '-') + : name; } function pngDimensions(file) { @@ -294,13 +296,13 @@ for (const file of publicScopeFiles) { } } -const genericIntegration = join(docsRoot, 'integrations/add-an-integration.md'); +const genericIntegration = markdownFiles.find((file) => basename(file) === 'add-an-integration.md'); const providerNamePattern = /\b(?:AWS|Amazon Web Services|Azure|Google Cloud|GCP|Oracle Cloud|VMware)\b/i; if (providerNamePattern.test(readFileSync(genericIntegration, 'utf8'))) { fail(genericIntegration, 'provider-neutral integration guide contains a provider name'); } -const productMapFile = join(docsRoot, 'start-here/product-map-and-terminology.md'); +const productMapFile = markdownFiles.find((file) => basename(file) === 'product-map-and-terminology.md'); const productMap = readFileSync(productMapFile, 'utf8'); const productModelSource = join(root, 'media/diagrams/organization-model.d2'); const productModelSvg = join(root, 'media/diagrams/organization-model.svg'); @@ -401,7 +403,8 @@ if (publishingManifest) { ids.add(asset.id); urls.add(asset.publishedUrl); - if (!['diagram', 'screenshot'].includes(kind)) fail(publishingManifestFile, `${label} has invalid kind ${kind}`); + if (!['diagram', 'screenshot', 'icon'].includes(kind)) fail(publishingManifestFile, `${label} has invalid kind ${kind}`); + if (kind === 'icon' && !String(asset.source || '').endsWith('.svg')) fail(publishingManifestFile, `${label} icon source must be SVG`); if (kind === 'diagram' && !String(asset.source || '').endsWith('.d2')) fail(publishingManifestFile, `${label} source must be D2`); if (kind === 'diagram' && !String(asset.reviewArtifact || '').endsWith('.svg')) fail(publishingManifestFile, `${label} review artifact must be SVG`); if (kind === 'screenshot' && !String(asset.source || '').endsWith('.png')) fail(publishingManifestFile, `${label} source must be a safe PNG crop`); @@ -513,8 +516,8 @@ if (screenshotManifest) { if (!screenshot.sourceFile || !existsSync(join(root, screenshot.sourceFile))) { fail(screenshotManifestFile, `captured screenshot is missing its safe source crop: ${screenshot.sourceFile || screenshot.file}`); } - if (screenshot.style !== 'wanaware-ai-assisted-v4') { - fail(screenshotManifestFile, `captured screenshot must use wanaware-ai-assisted-v4: ${screenshot.file}`); + if (!['wanaware-ai-assisted-v4', 'wanaware-navy-teal-v5'].includes(screenshot.style)) { + fail(screenshotManifestFile, `captured screenshot must use an approved WanAware frame style: ${screenshot.file}`); } if (!/^\d{4}-\d{2}-\d{2}$/.test(screenshot.captureDate || '')) { fail(screenshotManifestFile, `captured screenshot needs a YYYY-MM-DD captureDate: ${screenshot.file}`);