Skip to content

R.I.S.C.E.A.R. Completeness

The R.I.S.C.E.A.R. specification is the contract an FCC persona signs with the rest of the system. A persona whose spec is complete is a persona that can be audited, tested, governed, composed, and shipped. A persona whose spec is incomplete is, from an auditor's perspective, a black box — and the FCC framework explicitly refuses to certify it.

This page documents the 10 elements, the v1.3.8 enforcement rules, and how to interpret findings when fcc audit personas --strict flags a persona.


The 10 Elements

# Element What it answers
1 Role Who the persona is, in one sentence
2 Input What the persona consumes
3 Style How the persona communicates and works
4 Constraints What the persona will not do
5 Expected Output What the persona produces
6 Archetype Which archetypal pattern the persona inherits from
7 Responsibilities Concrete duties
8 Role Skills Technical and soft skills
9 Role Collaborators Named collaboration partners
10 Role Adoption Checklist Steps for a human to adopt the persona

All 10 are required. There is no "optional" element. An empty list is treated as missing.

The schema lives at src/fcc/data/schemas/persona.schema.json.


The v1.3.8 Strict Enforcement

From v1.3.8 onward, fcc audit personas --strict is wired into CI and the release gate. The command runs four checks per persona:

  1. Structural: all 10 R.I.S.C.E.A.R. elements present
  2. Semantic: each element's contents pass its per-element validator (e.g. constraints must be a non-empty list of strings)
  3. Cross-reference: declared collaborators exist in the registry
  4. Action consistency: declared deliverables appear in at least one action the persona owns

If any check fails, fcc audit personas --strict exits non-zero and the release gate blocks.

fcc audit personas --strict --report /tmp/audit.json

Sample output when a persona is incomplete:

{
  "persona_id": "XYZ",
  "status": "fail",
  "findings": [
    {
      "rule": "riscear.missing_element",
      "element": "constraints",
      "severity": "tier_1",
      "remediation": "Add a non-empty list of constraints to src/fcc/data/personas/vertical/xyz.yaml"
    }
  ]
}

Interpreting Findings

riscear.missing_element

One of the 10 R.I.S.C.E.A.R. elements is absent or empty. This is always tier_1. The persona is unshippable until fixed.

Remediation: open the persona YAML, add the missing element, re-run fcc audit personas --strict.

riscear.semantic_violation

The element is present but fails a per-element validator. Examples:

  • constraints contains a single string instead of a list
  • collaborators references a persona ID that does not exist
  • responsibilities is a string paragraph instead of a list of responsibility bullets

Remediation: consult the schema at src/fcc/data/schemas/persona.schema.json for the exact shape.

riscear.orphan_collaborator

A persona references a collaborator whose ID is not in the registry. This is usually a typo or a stale reference to a removed persona.

Remediation: either correct the ID or remove the collaboration link.

riscear.deliverable_not_produced

The persona declares a deliverable that no action produces. This indicates drift between the spec and the action engine.

Remediation: either add an action that produces the deliverable or remove the declaration.


The Why

Why enforce completeness strictly? Three reasons, each an auditability principle:

  1. Legibility before performance. An AI system that cannot be described precisely cannot be certified. R.I.S.C.E.A.R. is the minimum legible description FCC will accept.
  2. Contract over convention. Conventions drift; contracts are machine-checkable. R.I.S.C.E.A.R. converts tribal knowledge about "what a persona does" into a diffable, testable, auditable artefact.
  3. Reusability. A persona with a complete R.I.S.C.E.A.R. spec can be cloned, customised, and reused by downstream projects. An incomplete one is stuck in its original context.

Worked Example — Reviewing the RC Persona

Let's walk through auditing the RC (Research Crafter) persona.

# Pull just this persona's data
fcc persona show RC --format yaml > /tmp/rc.yaml
fcc audit personas --ids RC --strict --report /tmp/rc_audit.json

The report should show status: pass. If it does not, walk the findings:

{
  "persona_id": "RC",
  "riscear": {
    "role": "PRESENT",
    "inputs": "PRESENT (4 items)",
    "style": "PRESENT",
    "constraints": "PRESENT (3 items)",
    "expected_output": "PRESENT (5 items)",
    "archetype": "PRESENT",
    "responsibilities": "PRESENT (7 items)",
    "role_skills": "PRESENT (6 items)",
    "role_collaborators": "PRESENT (4 items)",
    "role_adoption_checklist": "PRESENT (5 items)"
  },
  "status": "pass"
}

Every PRESENT line is an audit checkpoint. Open the YAML and spot-check two or three of them by eye: does the declared role match what the persona does in practice? Are the constraints credible and testable? Is the adoption checklist concrete enough that a human engineer could work through it?

If any of those qualitative checks fail, file a finding. The strict command catches structural drift; your eye catches semantic drift.


Persona-Level Audit Matrix

Run this matrix once per engagement, ideally as a spreadsheet exported from the audit JSON.

Dimension What you check Automated?
Structural completeness All 10 elements present Yes — fcc audit personas --strict
Semantic validity Each element well-formed Yes — schema validation
Cross-reference integrity Collaborators exist Yes — registry lookup
Deliverable consistency Outputs match actions Yes — action-engine trace
Constitution alignment Persona respects its constitution Partially — see Governance
Model-card currency Matching model card < 30 days old Manual
Risk-category accuracy Matches AIActClassifier output Yes
Quality-gate coverage At least one gate references the persona Yes

Items flagged "Yes" run in CI on every commit. Items flagged "Manual" need reviewer judgement; budget 10-15 minutes per persona for manual spot-check.


Batch Audit — The Whole Registry

fcc audit personas --strict --report /audit/personas.json --format json

# Summary
jq '.summary' /audit/personas.json

# Failing personas only
jq '[.personas[] | select(.status=="fail")]' /audit/personas.json

With v1.3.8+, a clean deployment returns zero failures across all 147 personas. Any non-zero result is an audit finding and blocks the release.