Skip to content

Platform schema

Current data contract for the Platform domain's ServiceNow-side tables — the shared transaction/event/agent infrastructure that specs-corehr, specs-time-attendance, and specs-superagent all build on. Read directly from nova-platform-sn-app's live dictionary XML on main. Reverse-engineered per the 2026-08-07 decision retiring schema/pending/ — goes directly here with status: applied, since this reflects real, committed, shipped code, not a proposal. This is the first schema content in this repo — bootstrap of specs-platform's schema/ folder.

Every table carries sys_domain (ServiceNow Domain Separation) — omitted from the entity blocks below for readability.

Diagram

erDiagram
    TransactionConfiguration ||--o{ ExecutionScript : "transaction_configuration"
    TransactionConfiguration ||--o{ ContextScript : "transaction_configuration"
    TransactionConfiguration ||--o{ InputMetadata : "transaction_configuration"
    TransactionConfiguration ||--o{ TransactionDecision : "transaction_configuration"
    TransactionConfiguration ||--o{ BusinessEventConfiguration : "transaction_configuration"
    TransactionConfiguration ||--o{ TransactionInstance : "transaction_configuration"
    BusinessEventConfiguration ||--o{ EventPhaseConfiguration : "business_event_configuration"
    EventPhaseConfiguration ||--o{ EventQueue : "event_phase_configuration"
    TransactionInstance ||--o{ EventQueue : "transaction_instance"
    Agent ||--o{ AgentActivation : "agent"
    KnowledgeType }o--o{ KbKnowledgeBase : "kb_base_type_m2m"

    Agent {
        boolean internal
        string agent_code
        string source_application
        string agent
    }

    AgentActivation {
        ref agent
        boolean active
    }

    BusinessEventConfiguration {
        boolean active
        string name
        string description
        ref transaction_configuration
    }

    ContextScript {
        ref transaction_configuration
        boolean active
        int order
        string script
        string name
        string description
    }

    EventPhaseConfiguration {
        int default_offset_days
        string phase
        string audience_script
        string payload_script
        string name
        ref business_event_configuration
        boolean active
    }

    EventQueue {
        string number
        boolean execute_event
        string dispatch_payload
        string status
        list target_users
        ref event_phase_configuration
        ref transaction_instance
        string status_message
        ref depends_on
        ref source_user
        datetime effective_date_time
        string topic_name
    }

    ExecutionScript {
        int order
        ref transaction_configuration
        boolean active
        string description
        string name
        string script
    }

    InputMetadata {
        boolean active
        string table_name
        ref transaction_configuration
        string description
        string type
        boolean optional
        string conditions
        string name
    }

    KnowledgeType {
        string name
        string description
        boolean is_agent_policy
    }

    Notification {
        ref parent
        string source_record
        string action_payload
        string state
        string priority
        string short_description
        string type
        string target_url
        string subject
        string number
        ref recipient
        string source_table
        ref recipient_group
    }

    NovaProperties {
        string key
        string value
        boolean active
    }

    Prompts {
        string prompt_name
        string prompt
        string source_application
        string prompt_version
    }

    TransactionConfiguration {
        string source_application
        string name
        string description
        boolean active
    }

    TransactionDecision {
        ref decision_table
        boolean active
        ref transaction_configuration
    }

    TransactionInstance {
        ref subject_user
        string work_notes
        ref transaction_configuration
        string state
        string user_request
        ref flow_context
        ref approval_task
        string agent_process_id
        list approvers
        string transaction_input
        string number
    }

Extended by (other domains' tables)

TransactionInstance (x_novaw_platform_transaction_instance) is the base table extended (via superTable) by: - x_novaw_corehcm_transaction_instance (Core HR) - x_novaw_edm_transaction_instance (Core HR — EDM) - x_novaw_comp_transaction_instance (Core HR — Compensation) - x_novaw_tna_transaction_instance (Time & Attendance)

EventQueue (x_novaw_platform_event_queue) is similarly extended by x_novaw_corehcm_event_queue.

This is a real, load-bearing dependency: any change to TransactionInstance or EventQueue's base fields propagates to all five extending tables across two other repos. No cross-repo reference runs the other direction — every reference field on Platform's own tables points to a native ServiceNow table or another x_novaw_platform_* table, never out to Core HR or Time & Attendance.

Discrepancies vs. github-private's component KB

github-private/docs/profile/repos/nova-platform-sn-app/tables.md describes a *_base/subclass hierarchy (event_queue_baseevent_queue, transaction_basetransaction_configuration, transaction_instance_basetransaction_instance, plus context_script_base, execution_script_base, input_metadata_base, transaction_decision_base) that does not exist in the live dictionary — none of these _base tables appear anywhere in the app's exported table XML. Live tables extend native sys_metadata directly, not an intermediate Platform _base layer. This is the largest tables.md/live-code divergence found across any of the six -sn-app repos checked in this pass — flag to whoever owns that KB sync.

Open items

  • Confirm with whoever wrote tables.md's _base hierarchy whether that reflects a past design that was since simplified, or a future direction not yet implemented — the divergence is large enough that it's worth knowing which.