Compliance, finance, operations
Three services share one request and response shape:
| Service | RPC |
|---|---|
ComplianceService | AnalyzeCompliance |
FinanceService | AnalyzeFinance |
OperationsService | AnalyzeOperations |
Each takes an AnalyzeComplianceRequest (system_context) and returns an
AnalyzeComplianceResponse with these fields:
compliance_status:Pass,Warning,Fail, orUnable to Assess.violations(ComplianceViolation): the category, severity, description, related rule and remediation for each finding.audit_trail.spoken_response.orders: remediation orders (see below).live_data_note.
How a verdict is produced
The compliance agent reads its system prompt from the compliance.jinja template. It
then assembles the system state for the model, and the model answers in TOON. See
Structured output.
Configuration values are labelled as declarations. Environment values such as
ENFORCE_AUDIT_LOGGING, REQUIRE_HITL, DATABASE_ENGINE and PRIMARY_SERVER_URL go
to the model marked OPERATOR DECLARATION, followed by a NOTE TO THE ASSESSOR: a
declaration is what an operator asserted, not evidence that a control is implemented.
Facts the code can establish for itself are marked OBSERVED. One example is that
audit logging runs on every call and no code path disables it.
No usable answer means no verdict. With no model plane, or when generation times
out or fails, the status is Unable to Assess with the reason, and the failure is
audit-logged. It is never a pass, and never an invented finding.
live_data_note says which live data was read. A current server always sets it.
FACE has no mapping from a domain (compliance, finance or operations) to a specific
connection and table. So the note tells the reader that the verdict rests on the
session context sent with the request and on the instance’s own configuration.
Remediation orders and the workflow
A RemediationOrder is the dispatchable form of a finding. It’s shaped like an
evidence document: a subject, facts read from records (specifications), coded
determinations, citations, deadlines, ordered steps, and a seal written at
approval.
An order may not contain any of the following:
- A step whose parameters weren’t read from a record. A step that needs an unmeasured figure is not emitted.
- A department FACE inferred. FACE receives no org chart. An external
service_provider, such as a carrier named on the cited record, may be derived. - A deadline with no authority. A date appears only when a cited contract clause, SLA or statute supplies it.
Order ids are stable (the rule id plus the subject), so an operator’s routing and decision survive the next analysis. The operator’s half of an order is stored apart from the derived half and merged when the order is read:
flowchart LR
A[Derived order<br/>NOT_ROUTED] --> B{Operator addressed<br/>this order?}
B -- AssignRemediation --> C[OPERATOR_ASSIGNED]
B -- no --> D{Routing rule for<br/>this category?}
D -- SetRemediationRoute --> E[OPERATOR_ROUTING_RULE]
D -- no --> F[stays NOT_ROUTED]
C & E & F --> G[DecideRemediation<br/>DRAFT / APPROVED / REJECTED / SENT]
AssignRemediationaddresses one order to a department and contact. The server recordsassigned_byfrom the verified session, and ignores any author fields the client sends.SetRemediationRoute,ListRemediationRoutesandDeleteRemediationRoutemanage a standing table. The table maps a findingcategory, matched exactly, to a department. An order routed by the table says so (OPERATOR_ROUTING_RULE), which is distinct from a person addressing that particular order. A person’s assignment always takes precedence over a rule.DecideRemediationrecords the human decision (RemediationDispatch). An empty state means nobody has decided yet, which is not the same asDRAFT.decided_byis the verified subject. FACE sends nothing by itself.SENTrecords something a human did outside the platform, andchannelrecords how.
RemediationAssignment.basis takes one of these values:
basis | Meaning |
|---|---|
DERIVED_FROM_RECORD | The provider was named on a cited record. |
OPERATOR_ASSIGNED | A person addressed this order. |
OPERATOR_ROUTING_RULE | A standing category rule addressed it. |
NOT_ROUTED | The default. An unaddressed order is addressed to nobody, not to everybody. |
An empty orders list is a valid response. The overlay and routing apply to whatever
orders the analysis produced.
Rules
RulesService serves the rules that the rules-reconciliation agent recognises in the
data:
ListRules,AnalyzeCodeandCheckCoderead.UpdateRulePolicysets only the operator-owned enforcement posture (RulePolicy). It can’t edit the agent’s findings (name, logic, proposed code orreconciliation_status). An operator who could overwrite a finding could make the cockpit agree with them.
What this does not establish
- A
Passis the model’s reading of the context it was given. It isn’t an audit of the live systems. Readlive_data_note. - Operator declarations are claims about the environment, not controls the system has verified.
- An order with an assignment has not necessarily been sent. Only a recorded
SENTdispatch says a person sent it.