[6.47.0] - 2026-09-16
Added
- JCAM import: NIST 800-63 digital identity data now imports -- the assessed and implemented Identity, Authenticator and Federation assurance levels, the rationale for any difference between them, the comparability demonstrations, and the rationale for not accepting federated identities
- Source control evidence can now be harvested into Evidence records mapped to NIST 800-53 Rev5 controls
- GitHub repositories can now be discovered and recorded as RegScale components and assets
- GitHub code scanning, Dependabot and secret scanning alerts can now be synced into RegScale issues and vulnerabilities
- GitHub repository dependency graphs can now be imported as SBOM records with their software inventory
- GitLab projects can now be discovered and recorded as RegScale components and assets
- GitLab security findings can now be harvested into a security plan, with automatic fallback to pipeline security reports on non-Ultimate tiers
- GitLab dependency inventory can now be harvested into a security plan as a CycloneDX software bill of materials
- Shared OCSF normalization layer so integrations map findings, assets, software inventory, and control evidence through one vendor-neutral schema
- CrowdStrike sync can exclude sensitive hosts by tag, host group, or hostname so they are never returned by the Falcon API
- New
crowdstrike preview_filtercommand reports exactly which CrowdStrike records an exclusion removes, without writing anything - CrowdStrike sync commands accept a
--filteroption to narrow a single run with an ad-hoc Falcon Query Language expression - Axonius asset sync now supports selecting between the legacy flat-file export format and the vendor's raw API export format via a schema option
- Sensitive configuration values can now resolve at runtime from the RegScale platform's encrypted secret store instead of plaintext init.yaml, with a new
regscale config push-secretscommand to migrate existing secrets - A
jcamValueMappingorjcamFieldMappingoverride that reaches more than one mapping now says so, naming the source and every destination it was applied to. Overrides are addressed by source and a source is not always unique -- JCAM's control Status column is read both as an implementation status and as a Control Origin -- so one line of config can change two vocabularies. The override still applies to all of them; it is no longer silent. - Scheduling guides covering configuration, cron schedules, deployment options, and troubleshooting for scheduled CLI jobs
- Scheduled CLI jobs (beta): define cron-scheduled RegScale CLI commands in jobs.yaml and run them with the new
regscale jobscommand group, including a daemon mode for containers, one-shot modes for external schedulers, run history, and per-run logs - Scheduled jobs can email per-job recipients on failure, timeout, or success through a configurable SMTP relay, with run metadata and a credential-redacted excerpt of the job log in the message body
- The interactive terminal GUI can schedule any command as a recurring job from its form and manage jobs in a new Jobs tab with run-now, schedule editing, enable/disable, delete, per-job run history, and YAML export
- Scheduled jobs can pull their configuration from a remote HTTPS source such as an Azure Blob SAS URL via --config-url, with ETag caching and automatic fallback to the last known-good copy when the source is unreachable
- Daemon
--grace-periodoption to bound the shutdown grace given to an in-flight scheduled job - RegScale Trust Center KSI automation via
regscale trust-center ksicommands
Changed
- PyPI releases are published with PEP 740 digital attestations so the published wheel can be verified against its source build
- The scheduler daemon fetches its configuration once at startup instead of twice, and reports each job's next fire time as a readable local timestamp
- CrowdStrike Spotlight vulnerability status is now configurable instead of always being limited to open findings
- Corrected the JCAM readme, which described the per-control control-retrieval path as still in use when control implementations come from the report endpoint
import_artifactsnow imports every artifact type whenjcamArtifactTypesis not set, instead of exiting. The key ships as a placeholder, so the command could not run at all out of the box; naming types still narrows the import, andjcamFilteralready bounds which systems are read. An unfiltered run reports how many files it is about to download before it starts, and local copies are removed once they are in RegScale rather than accumulating. A single string rather than a list keeps working and is still matched by substring, with a warning showing the list to write instead. Also fixed on this path: an artifact with no description, one whose download returns no content, one with no filename, and one RegScale refuses to store no longer end the import, two artifacts sharing a filename no longer overwrite each other, and an artifact already attached to the plan is no longer re-downloaded and re-attached on every run.- Scheduled job Run Now in the terminal GUI now records run history and sends outcome email notifications
- Broader redaction of secret-shaped configuration values in scheduled-job logs and outcome emails
Fixed
- Scheduled job run history no longer hides a legitimate flag that follows a credential option
- The job log pump now releases its output pipe safely when a job leaves a child process behind
- A disk or permission error while recording scheduled job run history no longer stops the job or the scheduler daemon
- Scheduled job run history is no longer lost when a manual run and the scheduler write to the same job's history at the same time
- The jobs run command now accepts --config-url so a single job can be run from a remotely hosted configuration
- The terminal GUI now refuses to start a second command while a scheduled job launched with Run Now is still running, keeps the Jobs tab usable when a run history file cannot be read, and no longer garbles accented or symbol characters in live job output
- Scheduled job outcome emails now redact credential-shaped text in a job description
- JCAM imports no longer end when RegScale refuses a single record. Every write the integration makes -- security plans, interconnections, POA&Ms, milestones, control implementations, inheritance records, info types, FISMA rollups, points of contact, system roles, assessments and custom field values -- now records the refusal against the run report and carries on, and the end-of-run summary names every refused record so a partial import is visible rather than silent. A refused batch write reports how many records it was carrying, so an incomplete batch reads as one rather than as a single missing field. These commands still exit zero on a partial import, so read the summary rather than gating automation on the exit code. Also fixes a related silent loss: a newly created milestone's custom fields were never written, because the created record's id was discarded
- JCAM imports now treat an answer of nothing as an answer. If JCAM returns a null, a blank, or one of the words it sends in place of a null, the field is cleared; if the key is absent or the call failed, the field is left alone and the run reports it. This means a value deleted in JCAM now reaches RegScale, where previously a field could be set by an import and never un-set. Absence is shaped for its destination -- a checkbox records no answer rather than a "no", and a typed field is cleared with the kind of empty its own type holds rather than a null. Where the mapping declares an alternative source or a value for the unmapped case, that still wins over clearing. Also fixes JCAM's absence words being written as data: the four-character "None" across the SSP tabs, "NoTestTypeDefined" on the contingency and incident-response test types, and "{}" in milestone notes. The clearing rule applies to the recommended mapping profile only; on legacy the one change is that a null is no longer written as the word "None"
- A
jcamValueMappingoverride no longer drops the case-insensitivity of the vocabulary it merges into, which had made every other control status stop matching JCAM's report - JCAM control status
Applicableno longer overwrites a control's recorded implementation status, and the status vocabulary is now read from the resolved mapping profile so ajcamValueMappingoverride ofcontrols.Statusgoverns what the importer reads as well as what it writes - JCAM import: an information type's confidentiality, integrity and availability are now recorded as adjusted only where JCAM differs from the information type's own baseline, and an information type already on a plan is updated on later imports instead of being skipped
- JCAM import: the recommended mapping now reads each System of Records Notice's current flag into the matching "SORN x - Current" checkbox. Five notices previously arrived with nothing recording which one is in force. The fifteen SORN fields must exist before the first
import_privacy_inforun on themodernprofile, or the command exits without importing - A JCAM custom field value RegScale refuses no longer costs the rest of the plan's values, and each refusal is reported individually rather than as one failure for the whole write
- JCAM import: a milestone or interconnection field the mapping does not carry now keeps the value RegScale already held, instead of reverting to a default on every import
- JCAM import: artifact types can now be set to "@drop" to import no artifacts at all, and an unset setting means no artifacts on the legacy mapping profile and every type on the recommended one
- Prevent concurrent run-due and daemon passes from double-firing scheduled jobs
- Scheduler now shuts down promptly on termination signals instead of waiting out the idle interval
- Restore redaction of all-lowercase credential configuration keys such as accesskey and clientsecret in logs and scheduled-job emails
- Scheduled jobs no longer reject commands that take a public identifier option such as --project_key
