mkblackbelt.ui.yaml #1

  • //
  • p4sudo/
  • dev/
  • doc/
  • mkblackbelt.ui.yaml
  • View
  • Commits
  • Open Download .zip Download (7 KB)
##############################################################################
# mkblackbelt.ui.yaml — Web UI Form Definition for the mkblackbelt Command
#
# This file defines the web form rendered by the P4Sudo web interface when
# a user invokes the 'mkblackbelt' command.  It is separate from p4sudo.cfg
# (which handles command registration and authorization) to accommodate the
# rich field types and groupings needed for this form.
#
# Field types:
#   word     — Single token: alphanumeric, no spaces (used for identifiers)
#   line     — Single line of free text
#   url      — URL, validated as well-formed
#   email    — Email address, validated as well-formed
#   date     — Date in YYYY/MM/DD format
#   integer  — Non-negative integer
#   select   — Dropdown; valid values listed under 'options'
#
# Each field may be marked required: true or required: false.
# Empty optional fields are substituted as empty strings in the template;
# their corresponding table rows are kept in the generated INFO.md.
##############################################################################

command: mkblackbelt
title: "Bootstrap Black Belt Customer on PPN"
description: >
  Onboard a new customer to the Perforce Black Belt consulting program.
  Creates the customer depot, main stream, and INFO.md on PPN, and adds
  a row to the Black Belt Customer Index.

sections:

  - id: customer_identity
    title: "Customer Identity"
    fields:

      - name: CustomerTag
        label: "Customer Tag"
        type: word
        required: true
        description: >
          Short identifier for the customer's P4 depot (e.g. AcmeCorp).
          Alphanumeric only, any case, no spaces, no special characters,
          must not start with a digit. Becomes the P4 depot name on PPN.
        token: __EDITME_CUSTOMER_TAG__

      - name: SalesforceLink
        label: "Salesforce Link"
        type: url
        required: true
        description: "Full Salesforce opportunity or account URL."
        token: __EDITME_SALESFORCE_LINK__

      - name: Tier
        label: "Program Tier"
        type: select
        required: true
        options:
          - Standard
          - Enterprise
          - Essential
        token: null   # used in CustomerIndex only, not in INFO.md template

      - name: CommsChannel
        label: "Comms Channel"
        type: line
        required: true
        description: "Communication channel for the engagement (e.g. Slack #ext-acme-perforce-bb)."
        token: null   # used in CustomerIndex only, not in INFO.md template

      - name: IndexNotes
        label: "Notes"
        type: line
        required: false
        description: "Optional free-text notes for the Customer Index entry."
        token: null   # used in CustomerIndex only, not in INFO.md template


  - id: program_dates
    title: "Program Dates & Licensed Seats"
    fields:

      - name: ProgramStartDate
        label: "Program Start Date"
        type: date
        required: true
        description: "YYYY/MM/DD — also used as the Start date in the Customer Index."
        token: __EDITME_PROGRAM_START_DATE__

      - name: ProgramEndDate
        label: "Program End Date"
        type: date
        required: true
        description: "YYYY/MM/DD — also used as the End date in the Customer Index."
        token: __EDITME_PROGRAM_END_DATE__

      - name: LicensedUsers
        label: "Licensed Users"
        type: integer
        required: true
        token: __EDITME_LICENSED_USERS__

      - name: BackgroundUsers
        label: "Background Users"
        type: integer
        required: true
        token: __EDITME_BACKGROUND_USERS__


  - id: customer_contacts
    title: "Customer Contacts"
    fields:

      - name: Contact1Name
        label: "Contact 1 — Name"
        type: line
        required: true
        token: __EDITME_CONTACT_1_NAME__

      - name: Contact1Email
        label: "Contact 1 — Email"
        type: email
        required: true
        token: __EDITME_CONTACT_1_EMAIL__

      - name: Contact1Role
        label: "Contact 1 — Role / Notes"
        type: line
        required: true
        token: __EDITME_CONTACT_1_ROLE_AND_NOTES__

      - name: Contact2Name
        label: "Contact 2 — Name"
        type: line
        required: false
        token: __EDITME_CONTACT_2_NAME__

      - name: Contact2Email
        label: "Contact 2 — Email"
        type: email
        required: false
        token: __EDITME_CONTACT_2_EMAIL__

      - name: Contact2Role
        label: "Contact 2 — Role / Notes"
        type: line
        required: false
        token: __EDITME_CONTACT_2_ROLE_AND_NOTES__


  - id: p4_staff_contacts
    title: "P4 Staff Contacts"
    fields:

      - name: P4PrimaryName
        label: "Primary — Name"
        type: line
        required: true
        token: __EDITME_P4_PRIMARY_NAME__

      - name: P4PrimaryEmail
        label: "Primary — Email"
        type: email
        required: true
        token: __EDITME_P4_PRIMARY_EMAIL__

      - name: P4PrimaryRole
        label: "Primary — Role / Notes"
        type: line
        required: true
        token: __EDITME_P4_PRIMARY_ROLE_AND_NOTES__

      - name: P4SecondaryName
        label: "Secondary — Name"
        type: line
        required: false
        token: __EDITME_P4_SECONDARY_NAME__

      - name: P4SecondaryEmail
        label: "Secondary — Email"
        type: email
        required: false
        token: __EDITME_P4_SECONDARY_EMAIL__

      - name: P4SecondaryRole
        label: "Secondary — Role / Notes"
        type: line
        required: false
        token: __EDITME_P4_SECONDARY_ROLE_AND_NOTES__

      - name: P4Extra1Name
        label: "Extra Contact 1 — Name"
        type: line
        required: false
        token: __EDITME_P4_EXTRA_1_NAME__

      - name: P4Extra1Email
        label: "Extra Contact 1 — Email"
        type: email
        required: false
        token: __EDITME_P4_EXTRA_1_EMAIL__

      - name: P4Extra1Role
        label: "Extra Contact 1 — Role / Notes"
        type: line
        required: false
        token: __EDITME_P4_EXTRA_1_ROLE_AND_NOTES__

      - name: P4Extra2Name
        label: "Extra Contact 2 — Name"
        type: line
        required: false
        token: __EDITME_P4_EXTRA_2_NAME__

      - name: P4Extra2Email
        label: "Extra Contact 2 — Email"
        type: email
        required: false
        token: __EDITME_P4_EXTRA_2_EMAIL__

      - name: P4Extra2Role
        label: "Extra Contact 2 — Role / Notes"
        type: line
        required: false
        token: __EDITME_P4_EXTRA_2_ROLE_AND_NOTES__


# Auto-populated fields — set by the script at runtime, not entered by user.
auto_fields:

  - name: ActivationDate
    description: "Today's date in YYYY/MM/DD format."
    token: __EDITME_YYYY_MM_DD__
# Change User Description Committed
#1 32528 bot_Claude_Anthropic Design: resolve UC-001 open questions; add mkblackbelt.ui.yaml

Update use-cases.md with answers to open questions Q1-Q6.
Add mkblackbelt.ui.yaml: YAML web form definition for mkblackbelt.
Update p4sudo.cfg.example with mkblackbelt command entry.
Key decisions: required/optional fields live in YAML UI definition;
empty optional tokens substituted as empty string (row kept);
CustomerTag validation deferred; conflict retry on CustomerIndex.

#review-32529 @robert_cowham @tom_tyler