Thirteen rules govern job-invocation processing in this host. Two (BR-UC4-007) are declared in code but never reached by any caller path, and are recorded as findings rather than silently omitted. No rule in this catalog is enforced by an inherited base class: UC4Service derives from no base class, and the applied [LogErrorBehavior] service behavior contributes logging, not rule enforcement. BR-UC4-004 is the only rule whose mechanism lives in a dependency package.
Blocked → default-constructed UC4Result (all fields at default); allowed → the downstream result. Mechanism: if (!IsJobAllowed(environment, jobName, out message)) return new UC4Result(); The uc4.rules document is read from the Environment API on every invocation rather than cached, adding avoidable latency and Environment API load to every operation — see Tech debt.
Source
src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cs
BR-UC4-002 default allow for unmatched environment¶
Field
Value
Statement
When the rule document contains no entry for the requested environment, all jobs are allowed — except environment 100, where all jobs are blocked.
Within a matched environment, AllowByDefault sets the baseline and the first matching rule flips it; a rule matches by case-insensitive regex when Type is regex, otherwise by case-insensitive literal equality.
No runtime effect; the operations remain public and callable, and each delegates to its corresponding AndClientId operation after converting the enum with UC4EnvironmentFactory.GetUC4ClientId(environment)
Source
src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cs
BR-UC4-007 job and parameter names must not contain spaces declared not enforced¶
Field
Value
Statement
(Declared, not enforced) A job name must not contain a space, and no parameter name may contain a space.
Trigger
Would be entry validation on every job-execution operation
Enforcement
service — declared but never enforced: UC4Service.Validate (UC4Service.cs:239-256) has no caller anywhere in this host
Origin
UC4Service.Validate (UC4Service.cs:239)
Reached from
None — no operation calls this method
Outcome
None. ERR_JOB_NAME_INVALID (-101) and ERR_PARAMETER_NAME_INVALID (-102) are never produced by any code path. Recorded so the gap between declared intent and actual behavior is visible — see Tech debt.
Determines the parameter names the downstream job receives
Source
src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cs
BR-UC4-010 downstream service address resolved per call¶
Field
Value
Statement
The downstream service address is resolved per call from the environment settings uc4coreapi.url and uc4coreapi.schedulejobroute.
Trigger
UC4Client construction
Enforcement
service
Origin
Uc4Client.cs:24-25, key names composed in src/WCF/SAIF.Services.WCF.UC4.Host/EnvironmentConstants.cs
Reached from
All eight operations
Outcome
A missing setting throws, surfaced as a WCF default fault. ScheduleJobEndpoint is resolved and never used — tech-debt finding.
Source
src/WCF/SAIF.Services.WCF.UC4.Host/Uc4Client.cs
BR-UC4-011 forwarded job stamped with host identity¶
Field
Value
Statement
Every forwarded job is stamped with the host's machine name and process user, and with the fixed application id wcf_uc4.
Trigger
UC4Client construction
Enforcement
service
Origin
Uc4Client.cs:26-31; APP_NAME at UC4Service.cs:26
Reached from
All eight operations
Outcome
Downstream audit attributes the job to the service account, not to the caller. This is also security finding F-SEC-006 — see Tech debt.
Source
src/WCF/SAIF.Services.WCF.UC4.Host/Uc4Client.cs
BR-UC4-012 downstream result mapped field by field¶
Field
Value
Statement
The downstream result is mapped field-by-field onto the published contract type — Success, Error, Details, Parameters, AccessDenied, ClientId, Message, Code, JobName, RunId.
Note: Statements marked with * were inferred from code structure, naming
conventions, or contextual evidence where direct confirmation was not available
in source artifacts.