{% set evaluation = report.get('evaluation_summary') %} {% set comparison = report if comparison_only else report.get('comparison_summary') %}

NeuroCVguard · Local research report

Scope, findings and assessment coverage

{% if synthetic_notice in report.get('limitations', []) %}
Fully synthetic demonstration — no patient data

Fictitious tabular mechanisms, not biologically realistic brain models or clinical results. This label does not authenticate imported provenance or enable sensitive details.

{% endif %}

Research support only. Technical completion does not establish scientific validity.

{% if (evaluation and evaluation.diagnostic_only) or (comparison and (comparison.designs | selectattr('diagnostic_only') | list)) %}
Diagnostic only · valid_for_objective=false

Do not report as evidence for unseen-participant generalization. Participant-level aggregation does not remove the training leakage already present.

{% endif %} {% if sensitive %}
Sensitive research output: do not publish without review.

Explicit detailed export. Identifiers, labels and local evidence may be included.

{% else %}

Public projection · Private identifiers and free text omitted · No formal anonymization guarantee

{% endif %}
{% macro finding(check) %}

{{ check.rule_id }}

{{ check.status | replace('_',' ') }}{{ check.severity }}Evidence: {{ check.evidence_kind }}
{% if check.scope %}

{% for key, value in check.scope.items() %}{{ key | replace('_',' ') }}: {{ value }}{% if not loop.last %} · {% endif %}{% endfor %}

{% endif %}

{{ check.message }}

Next action: {{ check.recommendation }}

{% set table = check.evidence.get('display_table') %} {% if table %}
{% for level in table.target_levels %}{% endfor %}{% for row in table.counts %}{% set i = loop.index0 %}{% for count in row %}{% endfor %}{% endfor %}
Descriptive participant counts · local category aliases
Acquisition category{{ level }}
{{ table.row_levels[i] }}{{ count }}

{{ table.estimator }} · Value: {{ table.statistic.value if table.statistic.value is not none else 'undefined' }}{% if table.statistic.reason %} ({{ table.statistic.reason }}){% endif %}. Descriptive association is not proof of causality or model shortcut use.

{% elif check.evidence.get('details_omitted') %}

Table details omitted. Linked cells, totals and statistics are not included in this projection. This may reflect privacy suppression or unavailable detail.

{% endif %} {% if sensitive and check.evidence %}
{{ check.evidence | pretty_json }}
{% elif check.evidence.get('statistic') %}

Statistic: {{ check.evidence.statistic.value }} · Reason: {{ check.evidence.statistic.reason }}

{% endif %}
{% endmacro %}

1. Scope and objective

{% if comparison_only %}

Comparison of precomputed design summaries. Objectives are stated separately for each design. Cohort inventory and check coverage were not supplied.

{% else %}

Objective: {{ report.objective | replace('_',' ') }} · Result: {{ report.result_type }} · Execution: {{ report.execution_status }}

{% endif %}

Version {{ version }} · Schema {{ report.get('schema_version', '1.0 (comparison-summary)') }}. No audit, model fit or statistic is recomputed during rendering.

2. Execution and coverage

{% if incomplete %}
Incomplete assessment coverage

Unassessable checks or missing assessment context remain. No overall validity verdict is provided.

{% endif %} {% for status in ['pass','fail','not_assessable','not_applicable'] %}{% endfor %}
Coverage of supplied checks
PassFailNot assessableNot applicable
{{ counts[status] }}
{% if not checks %}

No check inventory supplied.

{% endif %} {% for check in checks if check.status == 'not_assessable' %}{{ finding(check) }}{% endfor %}

3. Actionable findings

{% for check in checks if check.status == 'fail' %}{{ finding(check) }}{% else %}

No triggered findings in the supplied record. Review incomplete coverage before drawing conclusions.

{% endfor %}

4. Cohort and missingness

{% if report.get('input_summary') %}

{{ report.input_summary.n_observations }} observations · {{ report.input_summary.n_participants }} participants

Supplied roles: {{ report.input_summary.supplied_roles | join(', ') or 'None recorded' }}

Missing/incomplete roles: {{ report.input_summary.missing_roles | join(', ') or 'None recorded' }}

{% else %}

No cohort inventory supplied.

{% endif %} {% for check in checks if check.rule_id.startswith('NCG-COHORT-') %}{{ finding(check) }}{% endfor %}

5. Partition checks

{% for check in checks if check.rule_id.startswith('NCG-SPLIT-') or check.rule_id.startswith('NCG-PLAN-') %}{{ finding(check) }}{% else %}

No partition checks supplied.

{% endfor %}

6. Acquisition and target associations

{% for check in checks if check.rule_id.startswith('NCG-ASSOC-') %}{{ finding(check) }}{% else %}

No association diagnostics supplied.

{% endfor %}

7. Evaluation and comparison

{% if report.get('evaluation_summary') %}

Participant-level precomputed evaluation. Null metrics and reasons are retained; failed folds are not removed.

{{ report.evaluation_summary | pretty_json }}
{% elif comparison %}

{{ comparison.interpretation }}

{% for metric in ['accuracy','balanced_accuracy','macro_f1','roc_auc'] %}{% endfor %}{% for design in comparison.designs %} {% for metric in ['accuracy','balanced_accuracy','macro_f1','roc_auc'] %}{% endfor %}{% endfor %}
Precomputed participant metrics · 0–1 scale
DesignObjectiveDiagnostic only{{ metric | replace('_',' ') }}
{{ design.name }}{{ design.objective }}{{ design.diagnostic_only }}{% if design.metrics %}{{ design.metrics[metric].value if design.metrics[metric].value is not none else 'Undefined' }}{% if design.metrics[metric].reason %} ({{ design.metrics[metric].reason }}){% endif %}{% else %}Unavailable or privacy-suppressed{% endif %}
{% for design in comparison.designs %}

{{ design.name }} · recorded context

{% set context = design.get('context') %} {% if context %}

Execution: {{ context.execution_status }} · {{ context.n_completed_folds }}/{{ context.n_folds }} folds completed · {{ context.n_participants }} participants · {{ context.n_observations }} observations

Training participants per fold: {{ context.training_participants_min }}–{{ context.training_participants_max }} · {{ context.n_features }} selected features · metric unit: {{ context.metric_unit }}

Cohort identity: {{ context.cohort_reference }} · Feature identity: {{ context.feature_reference }}. These are local aliases for equal recorded digests, not authenticated identities.

Classes: {{ context.class_order | join(', ') }} · Positive class: {{ context.positive_class if context.positive_class is not none else 'Unspecified' }}

Prescribed baseline: median imputation, standard scaling, logistic regression. Recorded C values: {{ context.recorded_C_values | join(', ') or 'None recorded' }} · Tuning recorded: {{ context.tuning_recorded }}. Consult the original configuration for complete model settings.

{% else %}

Legacy summary: design context was not recorded; no missing settings were inferred.

{% endif %} {% if design.metrics %}{% for item in design.metrics.per_class %}{% endfor %}
Pooled participant class support
ClassSupportRecall
{{ item.class_label }}{{ item.support }}{{ item.recall if item.recall is not none else 'Undefined' }}
{% else %}

Complete pooled class support is unavailable or privacy-suppressed.

{% endif %}

Upstream preprocessing remains unverified. Review the original evaluation's scoped findings and limitations.

{% endfor %}
{% for item in comparison.differences %}{% endfor %}
Signed score_difference · A minus B in metric units
ABMetricDifferenceUnavailable reason
{{ item.design_a }}{{ item.design_b }}{{ item.metric }}{{ item.difference if item.difference is not none else 'Null' }}{{ item.reasons | join(', ') }}
{% else %}

No model evaluation or comparison supplied.

{% endif %}

8. Provenance

Upstream preprocessing was not verified. A Pipeline cannot repair earlier global fitting.

{% if report.get('provenance') %}
{{ report.provenance | pretty_json }}
{% endif %} {% for check in checks if check.rule_id.startswith('NCG-PROV-') %}{{ finding(check) }}{% endfor %}

9. Limitations

10. Recommended next actions

11. Rule and source references

Normative source: NeuroCVguard Foundation 1.0.0, scientific contract, report privacy and cross-contract clarifications. Association method: SciPy contingency.association (R08); adjacent inferential work: mlconfound (R09). No inferential equivalence is claimed.

{% for rule in references %}{% endfor %}
Rules represented in this report
RuleMeaning
{{ rule.id }} · {{ rule.name }}{{ rule.meaning }}