{
  "metadata": {
    "generated_at": "2026-05-25T03:36:40.518670+00:00",
    "source_reports": [
      "/root/.openclaw/workspace/talent-review-system/docs/roadmap/ASSESSMENT_TEMPLATE_SHADOW_VALIDATION_REGISTRY_APPLY_PREP.md",
      "/root/.openclaw/workspace/talent-review-system/docs/roadmap/assessment_template_shadow_validation_registry_apply_prep.json",
      "/root/.openclaw/workspace/talent-review-system/docs/roadmap/ASSESSMENT_TEMPLATE_SHADOW_VALIDATION_PREVIEW.md",
      "/root/.openclaw/workspace/talent-review-system/docs/roadmap/assessment_template_shadow_validation_preview.json",
      "/root/.openclaw/workspace/talent-review-system/docs/roadmap/ASSESSMENT_TEMPLATE_SHADOW_VALIDATION_SAMPLE_PACK_PREVIEW.md",
      "/root/.openclaw/workspace/talent-review-system/docs/roadmap/assessment_template_shadow_validation_sample_pack_preview.json",
      "/var/www/talent-review/outputs/assessment_template_shadow_validation_sample_pack_v1.json",
      "/var/www/talent-review/outputs/assessment_template_schema_registry_v1.json",
      "/var/www/talent-review/outputs/assessment_template_permission_policy_registry_v1.json",
      "/var/www/talent-review/outputs/assessment_template_hardcoded_rules_registry_v1.json",
      "/var/www/talent-review/outputs/assessment_template_permission_impact_registry_v1.json"
    ],
    "stage": "P0_SHADOW_VALIDATION_REGISTRY",
    "purpose": "Readonly registry describing future shadow validation between legacy hardcoded assessment logic and registry-based logic.",
    "warning": "Readonly design asset only. It does not execute shadow validation, does not replace logic, and does not affect business results.",
    "validation_not_executed": true,
    "writes_database": false,
    "modifies_code": false,
    "modifies_results": false,
    "modifies_answer_submissions": false,
    "sends_real_assignment": false,
    "modifies_active_template": false,
    "replaces_hardcoded_logic": false,
    "triggers_profile_recalc": false,
    "triggers_cadre_recalc": false,
    "triggers_org_capability_recalc": false,
    "expands_permission": false,
    "feishu_writeback_required": false,
    "schema_migration_required": false,
    "permission_apply_required": false
  },
  "registry_summary": {
    "validation_object_type_count": 7,
    "diff_type_count": 13,
    "diff_severity_count": 5,
    "sample_type_count": 8,
    "sample_pack_path": "/outputs/assessment_template_shadow_validation_sample_pack_v1.json",
    "schema_registry_path": "/outputs/assessment_template_schema_registry_v1.json",
    "permission_policy_registry_path": "/outputs/assessment_template_permission_policy_registry_v1.json",
    "hardcoded_rules_registry_path": "/outputs/assessment_template_hardcoded_rules_registry_v1.json",
    "impact_registry_path": "/outputs/assessment_template_permission_impact_registry_v1.json"
  },
  "validation_objects": [
    {
      "object_type": "risk_rule",
      "purpose": "Compare legacy hardcoded risk decisions with registry-based assessment_risk_rule outputs.",
      "legacy_logic_sources": [
        "hardcoded thresholds",
        "one vote veto branches",
        "risk tag rules"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_hardcoded_rules_registry_v1.json",
        "/outputs/assessment_template_schema_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_risk_rule",
        "assessment_audit_version"
      ],
      "related_sample_types": [
        "one_vote_veto_edge_sample",
        "risk_threshold_boundary_sample"
      ],
      "expected_outputs": [
        "risk_type",
        "triggered",
        "severity",
        "recommended_action",
        "veto_flag"
      ],
      "critical_diff_conditions": [
        "veto_diff",
        "threshold_boundary_diff",
        "risk_tag_diff"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": true,
      "rollback_required": true
    },
    {
      "object_type": "result_mapping",
      "purpose": "Compare legacy result routing with registry mapping to algorithm, profile, cadre, org capability and people action outputs.",
      "legacy_logic_sources": [
        "result mapping conditionals",
        "algorithm input adapters",
        "profile/cadre preview rules"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_hardcoded_rules_registry_v1.json",
        "/outputs/assessment_template_permission_impact_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_result_mapping",
        "assessment_permission_policy"
      ],
      "related_sample_types": [
        "baseline_normalized_assessment_sample",
        "result_mapping_sample"
      ],
      "expected_outputs": [
        "algorithm_input",
        "profile_field",
        "cadre_validation_field",
        "org_capability_score",
        "people_action_constraint"
      ],
      "critical_diff_conditions": [
        "mapping_target_diff",
        "people_action_constraint_diff",
        "permission_visibility_diff"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": true,
      "rollback_required": true
    },
    {
      "object_type": "weight_rule",
      "purpose": "Compare legacy dimension and evaluator weighting with registry weight rule output.",
      "legacy_logic_sources": [
        "dimension weight constants",
        "evaluator weighting branches",
        "final score formulas"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_schema_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_weight_rule",
        "assessment_dimension"
      ],
      "related_sample_types": [
        "weight_rule_sample",
        "baseline_normalized_assessment_sample"
      ],
      "expected_outputs": [
        "dimension_weight",
        "evaluator_weight",
        "final_score_weight",
        "algorithm_mapping_weight"
      ],
      "critical_diff_conditions": [
        "numeric_delta",
        "threshold_boundary_diff"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": false,
      "rollback_required": true
    },
    {
      "object_type": "evaluator_relationship",
      "purpose": "Compare legacy reviewer relationship resolution with registry evaluator relationship rules.",
      "legacy_logic_sources": [
        "reviewer scope rules",
        "manager/peer/subordinate selection logic",
        "HRBP/Boss relationship rules"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_schema_registry_v1.json",
        "/outputs/assessment_template_permission_policy_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_evaluator_relationship",
        "assessment_applicable_scope"
      ],
      "related_sample_types": [
        "evaluator_relationship_sample",
        "permission_signal_sample"
      ],
      "expected_outputs": [
        "evaluator_type",
        "reviewer_scope",
        "required_reviewer_count",
        "anonymous_allowed"
      ],
      "critical_diff_conditions": [
        "permission_visibility_diff",
        "missing_registry_rule"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": true,
      "rollback_required": true
    },
    {
      "object_type": "organization_capability_mapping",
      "purpose": "Compare legacy organization health/capability score mapping with registry mapping output.",
      "legacy_logic_sources": [
        "org capability scoring rules",
        "organization health dimensions",
        "org risk tag mapping"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_schema_registry_v1.json",
        "/outputs/assessment_template_hardcoded_rules_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_result_mapping",
        "assessment_risk_rule"
      ],
      "related_sample_types": [
        "org_capability_mapping_sample",
        "risk_threshold_boundary_sample"
      ],
      "expected_outputs": [
        "org_capability_score",
        "org_health_score",
        "org_risk_tags",
        "management_effectiveness",
        "culture_health"
      ],
      "critical_diff_conditions": [
        "org_capability_score_diff",
        "risk_tag_diff"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": true,
      "rollback_required": true
    },
    {
      "object_type": "people_action_constraint",
      "purpose": "Compare legacy people action constraints with registry outputs without triggering any business action.",
      "legacy_logic_sources": [
        "promotion constraints",
        "transfer/probation/elimination gates",
        "cadre review action restrictions"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_hardcoded_rules_registry_v1.json",
        "/outputs/assessment_template_permission_impact_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_result_mapping",
        "assessment_risk_rule",
        "assessment_permission_policy"
      ],
      "related_sample_types": [
        "result_mapping_sample",
        "one_vote_veto_edge_sample"
      ],
      "expected_outputs": [
        "promotion_block",
        "transfer_block",
        "probation_block",
        "elimination_risk",
        "org_canvas_constraint"
      ],
      "critical_diff_conditions": [
        "people_action_constraint_diff",
        "veto_diff",
        "business_effective_conclusion_diff"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": true,
      "rollback_required": true
    },
    {
      "object_type": "permission_signal",
      "purpose": "Compare legacy field visibility and reviewer scope signals with registry permission policy output.",
      "legacy_logic_sources": [
        "field visibility branches",
        "role visibility rules",
        "cadre conclusion field rules",
        "reviewer scope signals"
      ],
      "registry_logic_sources": [
        "/outputs/assessment_template_permission_policy_registry_v1.json",
        "/outputs/assessment_template_permission_impact_registry_v1.json"
      ],
      "target_schema_objects": [
        "assessment_permission_policy",
        "assessment_audit_version"
      ],
      "related_sample_types": [
        "permission_signal_sample",
        "evaluator_relationship_sample"
      ],
      "expected_outputs": [
        "visible_fields",
        "action_permissions",
        "reviewer_scope",
        "cadre_field_visibility",
        "critical_field_exposure"
      ],
      "critical_diff_conditions": [
        "permission_visibility_diff",
        "critical_field_exposure",
        "missing_legacy_reference"
      ],
      "shadow_validation_allowed_in_p0": true,
      "business_effective_allowed": false,
      "requires_manual_review": true,
      "requires_permission_review": true,
      "rollback_required": true
    }
  ],
  "input_model": {
    "source_asset_id": "string",
    "source_logic_type": "risk_rule | result_mapping | weight_rule | evaluator_relationship | organization_capability_mapping | people_action_constraint | permission_signal",
    "legacy_logic_reference": "readonly reference to legacy source; no code execution implied",
    "registry_logic_reference": "readonly reference to registry rule or mapping",
    "sample_template_id": "string|null",
    "sample_assignment_id": "string|null",
    "sample_result_id": "string|null",
    "sample_submission_id": "string|null",
    "sample_employee_id": "string|null",
    "sample_subject_id": "string|null",
    "sample_org_unit_id": "string|null",
    "sample_payload_reference": "masked reference only; no sensitive payload output",
    "expected_legacy_output": "object|null",
    "expected_registry_output": "object|null",
    "comparison_scope": [
      "score",
      "label",
      "risk",
      "mapping",
      "permission",
      "people_action",
      "org_capability"
    ],
    "validation_mode": "dry_run_only | shadow_parallel | controlled_sample",
    "business_effective": false,
    "not_for_people_action": true,
    "not_for_feishu_writeback": true
  },
  "output_model": {
    "validation_id": "string",
    "source_asset_id": "string",
    "validation_type": "string",
    "legacy_output": "object|null",
    "registry_output": "object|null",
    "diff_detected": "boolean",
    "diff_type": "enum(diff_types)",
    "diff_severity": "none | low | medium | high | critical",
    "affected_fields": [],
    "affected_algorithm_inputs": [],
    "affected_profile_fields": [],
    "affected_cadre_validation": [],
    "affected_org_capability_score": [],
    "affected_people_action_constraint": [],
    "affected_permission_signal": [],
    "risk_level": "low | medium | high | critical",
    "recommendation": "string",
    "blocking_reason": "string|null",
    "requires_manual_review": "boolean",
    "requires_permission_approval": "boolean",
    "rollback_required": "boolean",
    "validation_status": "not_executed | planned | passed | blocked | requires_review"
  },
  "diff_types": [
    {
      "diff_type": "exact_match",
      "description": "Legacy and registry outputs are identical.",
      "typical_cause": "same source semantics",
      "default_severity": "none",
      "allowed_in_p0": true,
      "manual_review_required": false,
      "blocking_if_present": false
    },
    {
      "diff_type": "numeric_delta",
      "description": "Numeric score or weight differs within a measurable range.",
      "typical_cause": "rounding, formula version, weight precision",
      "default_severity": "medium",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": false
    },
    {
      "diff_type": "threshold_boundary_diff",
      "description": "A threshold crossing differs between legacy and registry logic.",
      "typical_cause": "risk line or score boundary mismatch",
      "default_severity": "high",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "label_diff",
      "description": "Result label differs while numeric output may be similar.",
      "typical_cause": "label taxonomy mismatch",
      "default_severity": "medium",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": false
    },
    {
      "diff_type": "risk_tag_diff",
      "description": "Risk tag assignment differs.",
      "typical_cause": "risk taxonomy or trigger condition mismatch",
      "default_severity": "high",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "veto_diff",
      "description": "One vote veto outcome differs.",
      "typical_cause": "veto rule expression mismatch",
      "default_severity": "critical",
      "allowed_in_p0": false,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "mapping_target_diff",
      "description": "Result is routed to a different downstream target.",
      "typical_cause": "mapping object mismatch",
      "default_severity": "high",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "permission_visibility_diff",
      "description": "Field, action or reviewer visibility differs.",
      "typical_cause": "permission policy mismatch",
      "default_severity": "critical",
      "allowed_in_p0": false,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "people_action_constraint_diff",
      "description": "Promotion, transfer, probation, elimination or org canvas constraint differs.",
      "typical_cause": "people action mapping mismatch",
      "default_severity": "critical",
      "allowed_in_p0": false,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "org_capability_score_diff",
      "description": "Organization capability or health score changes beyond accepted tolerance.",
      "typical_cause": "org capability formula mismatch",
      "default_severity": "critical",
      "allowed_in_p0": false,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "missing_registry_rule",
      "description": "Legacy logic exists but no registry rule covers it.",
      "typical_cause": "registry coverage gap",
      "default_severity": "high",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": true
    },
    {
      "diff_type": "missing_legacy_reference",
      "description": "Registry rule exists but legacy reference is missing or unclear.",
      "typical_cause": "legacy source unclear",
      "default_severity": "medium",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": false
    },
    {
      "diff_type": "unsupported_case",
      "description": "The sample case is not supported by current registry design.",
      "typical_cause": "schema or sample gap",
      "default_severity": "high",
      "allowed_in_p0": true,
      "manual_review_required": true,
      "blocking_if_present": true
    }
  ],
  "diff_severity_model": {
    "none": {
      "definition": "No difference or exact match.",
      "allowed_to_continue": true,
      "review_required": false,
      "blocking": false
    },
    "low": {
      "definition": "Explainable non-business-effective difference with no downstream impact.",
      "allowed_to_continue": true,
      "review_required": true,
      "blocking": false
    },
    "medium": {
      "definition": "Difference requiring business review before any future refactor candidate.",
      "allowed_to_continue": "only_with_manual_review",
      "review_required": true,
      "blocking": "conditional"
    },
    "high": {
      "definition": "Difference affects risk, result mapping, thresholds, or registry coverage and must not enter controlled refactor without remediation.",
      "allowed_to_continue": false,
      "review_required": true,
      "blocking": true
    },
    "critical": {
      "definition": "Difference affects veto, cadre validation, people action, permission visibility, org capability critical score, external mapping, business-effective conclusion, or active result interpretation.",
      "covered_conditions": [
        "one_vote_veto_diff",
        "cadre_validation_diff",
        "people_action_constraint_diff",
        "permission_visibility_diff",
        "org_capability_critical_score_diff",
        "external_mapping_diff",
        "business_effective_conclusion_diff",
        "active_result_interpretation_diff"
      ],
      "allowed_to_continue": false,
      "review_required": true,
      "blocking": true
    }
  },
  "pass_criteria": [
    "exact_match_or_explainable_low_risk_diff",
    "no_one_vote_veto_diff",
    "no_cadre_validation_diff",
    "no_people_action_constraint_diff",
    "no_permission_visibility_diff",
    "no_org_canvas_constraint_diff",
    "no_org_capability_critical_diff",
    "diff_auditable",
    "rollback_available",
    "manual_review_items_marked"
  ],
  "blocking_criteria": [
    "critical_diff",
    "one_vote_veto_diff",
    "permission_visibility_diff",
    "people_action_constraint_diff",
    "org_canvas_constraint_diff",
    "cadre_validation_diff",
    "business_effective_risk",
    "external_mapping_diff",
    "no_rollback",
    "no_audit",
    "manual_review_missing"
  ],
  "sample_pack_policy": {
    "sample_pack_path": "/outputs/assessment_template_shadow_validation_sample_pack_v1.json",
    "minimum_sample_count": 16,
    "recommended_sample_count": 32,
    "maximum_sample_count": 48,
    "sample_type_count": 8,
    "real_sample_binding_allowed": "false unless safety flags verified",
    "planned_placeholder_allowed": true,
    "blocked_samples_excluded": true
  },
  "shadow_validation_phases": [
    {
      "phase_id": "Phase_0",
      "phase_name": "Shadow validation design",
      "goal": "Define readonly validation model, diff taxonomy, criteria and registry relationships.",
      "writes_database": false,
      "modifies_code": false,
      "replaces_logic": false,
      "affects_active_template": false,
      "requires_manual_gate": false,
      "rollback_requirement": "Remove or restore registry JSON only.",
      "exit_criteria": "Registry JSON accepted and no execution performed."
    },
    {
      "phase_id": "Phase_1",
      "phase_name": "Dry-run sample pack",
      "goal": "Bind safe planned samples or verified non-sensitive sample IDs for future dry-run comparison.",
      "writes_database": false,
      "modifies_code": false,
      "replaces_logic": false,
      "affects_active_template": false,
      "requires_manual_gate": true,
      "rollback_requirement": "Discard sample binding outputs.",
      "exit_criteria": "Samples are business_effective=false and blocked samples excluded."
    },
    {
      "phase_id": "Phase_2",
      "phase_name": "Shadow parallel run",
      "goal": "Compute legacy and registry outputs in parallel and generate a diff report without changing production read path.",
      "writes_database": false,
      "modifies_code": "separate gate required",
      "replaces_logic": false,
      "affects_active_template": false,
      "requires_manual_gate": true,
      "rollback_requirement": "Disable shadow run and preserve legacy output.",
      "exit_criteria": "No critical diff, all differences audited and reviewed."
    },
    {
      "phase_id": "Phase_3",
      "phase_name": "Controlled refactor candidate",
      "goal": "Allow only low-risk validated candidates to enter a separate controlled refactor gate.",
      "writes_database": "separate gate required",
      "modifies_code": "separate gate required",
      "replaces_logic": "separate gate required",
      "affects_active_template": false,
      "requires_manual_gate": true,
      "rollback_requirement": "Rollback plan and approval mandatory before any refactor.",
      "exit_criteria": "Approved candidate with regression evidence and rollback path."
    }
  ],
  "validation_rules": {
    "registry_is_readonly": true,
    "validation_not_executed": true,
    "no_database_write": true,
    "no_code_change": true,
    "no_logic_replacement": true,
    "no_result_mutation": true,
    "no_assignment_creation": true,
    "no_profile_recalculation": true,
    "no_cadre_recalculation": true,
    "no_org_capability_recalculation": true,
    "no_permission_expansion": true,
    "no_feishu_writeback": true,
    "no_business_effective_sample": true,
    "no_formal_cadre_conclusion": true,
    "no_real_people_action": true,
    "no_sensitive_payload_output": true
  }
}
