<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Audit on psLens</title><link>https://pslens.com/tags/audit/</link><description>Recent content in Audit on psLens</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pslens.com/tags/audit/index.xml" rel="self" type="application/rss+xml"/><item><title>Full Access Permission Lists</title><link>https://pslens.com/docs/reports/security/security-full-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/security/security-full-access/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="full-access-permission-lists-report"&gt;Full Access Permission Lists Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;security-full-access-permlists&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Security
&lt;strong&gt;Default Parameter:&lt;/strong&gt; &lt;code&gt;minMenuCount = 50&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Nodes with No Password</title><link>https://pslens.com/docs/reports/security/security-nodes-no-password/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/security/security-nodes-no-password/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="nodes-with-no-password-report"&gt;Nodes with No Password Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;security-nodes-no-password&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Security&lt;/p&gt;</description></item><item><title>Recurring Processes Schedule Comparison</title><link>https://pslens.com/docs/reports/process-scheduler/recurring-processes-compare/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/process-scheduler/recurring-processes-compare/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="recurring-processes-schedule-comparison-report"&gt;Recurring Processes Schedule Comparison Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;recurring-processes-compare&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Process Scheduler&lt;/p&gt;</description></item><item><title>Web Service Operation Access Audit</title><link>https://pslens.com/docs/reports/integration-broker/security-ws-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/security-ws-access/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="web-service-operation-access-audit"&gt;Web Service Operation Access Audit&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;security-ws-access&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Stale Password Audit</title><link>https://pslens.com/docs/reports/security/security-stale-passwords/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/security/security-stale-passwords/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="stale-password-audit-report"&gt;Stale Password Audit Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;security-stale-passwords&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Security&lt;/p&gt;</description></item><item><title>User Full Access Report</title><link>https://pslens.com/docs/reports/security/security-user-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/security/security-user-access/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="user-full-access-report"&gt;User Full Access Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;security-user-access&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Security
&lt;strong&gt;Parameters:&lt;/strong&gt; &lt;code&gt;oprid&lt;/code&gt; (required) — the PeopleSoft User ID to audit&lt;/p&gt;</description></item><item><title>IB Node Security Audit</title><link>https://pslens.com/docs/reports/integration-broker/ib-node-security-audit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/ib-node-security-audit/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="ib-node-security-audit-report"&gt;IB Node Security Audit Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;ib-node-security-audit&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Dangerous Permissions Audit</title><link>https://pslens.com/docs/reports/security/security-dangerous-permissions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/security/security-dangerous-permissions/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="dangerous-permissions-audit-report"&gt;Dangerous Permissions Audit Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;security-dangerous-permissions&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Security&lt;/p&gt;</description></item><item><title>Active ANY to Local Node Routings</title><link>https://pslens.com/docs/reports/integration-broker/ib-any-to-local-routing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/ib-any-to-local-routing/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="active-any-to-local-node-routings-report"&gt;Active &lt;code&gt;~~ANY~~&lt;/code&gt; to Local Node Routings Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;ib-any-to-local-routing&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Active Service Operations Report</title><link>https://pslens.com/docs/reports/integration-broker/ib-active-any-routes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/ib-active-any-routes/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="active-service-operations-report"&gt;Active Service Operations Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;ib-active-any-routes&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Active Service Operations with No Routings</title><link>https://pslens.com/docs/reports/integration-broker/ib-svcops-no-routing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/ib-svcops-no-routing/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="active-service-operations-with-no-routings"&gt;Active Service Operations with No Routings&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;ib-svcops-no-routing&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Unauthenticated Node Service Operations</title><link>https://pslens.com/docs/reports/integration-broker/ib-noauth-node-svcops/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/ib-noauth-node-svcops/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="unauthenticated-node-service-operations"&gt;Unauthenticated Node Service Operations&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;ib-noauth-node-svcops&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Deep Linking</title><link>https://pslens.com/docs/tools/deep-linking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/tools/deep-linking/</guid><description>&lt;h2 id="shareable-urls"&gt;Shareable URLs&lt;/h2&gt;
&lt;p&gt;Every PeopleSoft object in psLens has a permanent, shareable URL. Copy the address bar, paste it into a ticket or Slack, and anyone with psLens access lands on the same object in the same database.&lt;/p&gt;
&lt;p&gt;PeopleSoft&amp;rsquo;s native URLs are session-bound and cannot be shared or bookmarked reliably. psLens URLs can.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="url-structure"&gt;URL Structure&lt;/h3&gt;
&lt;p&gt;All object URLs follow the same pattern:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/resource/{identifier}?db={database}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;resource&lt;/code&gt;&lt;/strong&gt; — the object type (e.g., &lt;code&gt;records&lt;/code&gt;, &lt;code&gt;fields&lt;/code&gt;, &lt;code&gt;permissionlists&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;identifier&lt;/code&gt;&lt;/strong&gt; — the object name as it appears in PeopleSoft (e.g., &lt;code&gt;JOB&lt;/code&gt;, &lt;code&gt;EMPLID&lt;/code&gt;, &lt;code&gt;HCDPALL0100&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;db&lt;/code&gt;&lt;/strong&gt; — the configured database name, so the link is unambiguous about which environment it points to&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="linkable-object-types"&gt;Linkable Object Types&lt;/h4&gt;
&lt;p&gt;psLens provides direct URLs for over 25 PeopleSoft object types:&lt;/p&gt;</description></item><item><title>Permission Lists</title><link>https://pslens.com/docs/security/permission-lists/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/security/permission-lists/</guid><description>&lt;h2 id="permission-lists"&gt;Permission Lists&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;code&gt;/permissionlists&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Permission lists (PSCLASSDEFN, sometimes called classes) are the lowest-level grantable security object. Every menu, component, page, and function authorization attaches to one.&lt;/p&gt;
&lt;h3 id="what-you-can-do"&gt;What You Can Do&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;View Full Definitions:&lt;/strong&gt; See description, last modified information, and general settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View Authorizations:&lt;/strong&gt; See which menus and components the permission list authorizes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View Assigned Roles:&lt;/strong&gt; See which roles include this permission list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sign-on Settings:&lt;/strong&gt; View allowed sign-on times and other access constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="when-its-useful"&gt;When It&amp;rsquo;s Useful&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Auditing what access a particular permission list grants before assigning it.&lt;/li&gt;
&lt;li&gt;Incident response: what could a compromised permission list have touched.&lt;/li&gt;
&lt;li&gt;Finding permission lists that are overly broad (see also the &lt;a href="https://pslens.com/docs/reports/security/security-full-access/"&gt;Full Access Permission Lists report&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Sync Operations Without Logging</title><link>https://pslens.com/docs/reports/integration-broker/ib-sync-no-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/integration-broker/ib-sync-no-logging/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="sync-operations-without-logging"&gt;Sync Operations Without Logging&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;ib-sync-no-logging&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Integration Broker&lt;/p&gt;</description></item><item><title>Customized Objects Inventory</title><link>https://pslens.com/docs/reports/objects/objects-customized-inventory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/objects/objects-customized-inventory/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="customized-objects-inventory-report"&gt;Customized Objects Inventory Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;objects-customized-inventory&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Hygiene&lt;/p&gt;</description></item><item><title>Roles</title><link>https://pslens.com/docs/security/roles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/security/roles/</guid><description>&lt;h2 id="roles"&gt;Roles&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;code&gt;/roles&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Roles (PSROLEDEFN) are named bundles of permission lists. Users get roles, not permission lists directly.&lt;/p&gt;
&lt;h3 id="what-you-can-do"&gt;What You Can Do&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;View Included Permission Lists:&lt;/strong&gt; See the list of permission lists assigned to the role.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View Assigned Users:&lt;/strong&gt; See which users are assigned this role.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metadata Inspection:&lt;/strong&gt; See the role&amp;rsquo;s description and last modified information.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="when-its-useful"&gt;When It&amp;rsquo;s Useful&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Understanding what an unfamiliar role grants.&lt;/li&gt;
&lt;li&gt;Checking whether a role contains permission lists that are unexpectedly broad.&lt;/li&gt;
&lt;li&gt;Finding all users who have a particular role.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Message Catalog Usages</title><link>https://pslens.com/docs/reports/objects/msgcat-usages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/reports/objects/msgcat-usages/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="message-catalog-usages-report"&gt;Message Catalog Usages Report&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report ID:&lt;/strong&gt; &lt;code&gt;msgcat-usages&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Objects / Development&lt;/p&gt;</description></item><item><title>Users</title><link>https://pslens.com/docs/security/users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/security/users/</guid><description>&lt;h2 id="users"&gt;Users&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;code&gt;/users&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Users (PSOPRDEFN, historically called operators) are login accounts. Each carries a set of roles, a primary permission list, a row-security permission list, and a process profile. Search supports both OPRID and name.&lt;/p&gt;
&lt;h3 id="what-you-can-do"&gt;What You Can Do&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;View Assigned Roles:&lt;/strong&gt; See the roles assigned to a user.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Core Security Attributes:&lt;/strong&gt; See primary permission list, row security permission list, and process profile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account Metadata:&lt;/strong&gt; View account status (active/inactive), last login, and email address.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password Settings:&lt;/strong&gt; See password-related settings (whether a password is set, when it expires).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="when-its-useful"&gt;When It&amp;rsquo;s Useful&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Checking what access a specific user has.&lt;/li&gt;
&lt;li&gt;Reviewing user accounts during security audits.&lt;/li&gt;
&lt;li&gt;Finding accounts that are inactive but still have broad role assignments.&lt;/li&gt;
&lt;li&gt;Investigating who has access to a sensitive area of the system.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>