{% extends "html/base.template.html" %} {% from "html/macros/layout.html" import narrative as render_narrative, action_list, summary_card, row_key %} {% from "html/macros/visualizations.html" import figure %} {% block human_content %}

{{ t('tasks.project-analysis.project-overview') }}

{{ render_narrative(narrative.projectOverview, "projectAnalysis.userNarrative.projectOverview") }}
{% for reason in humanSummary.whyItMatters %}{{ summary_card("", reason, "important") }}{% endfor %}

{{ t('tasks.project-analysis.architecture-and-dependencies') }}

{{ render_narrative(narrative.architectureExplanation, "projectAnalysis.userNarrative.architectureExplanation") }} {{ figure(architectureFigure, anchor_nodes=true) }}

{{ t('tasks.project-analysis.infrastructure') }}

{{ figure(infrastructureFigure) }}
{% if project.get("techStack") %}

{{ t('tasks.project-analysis.tech-stack') }}

{{ t('tasks.project-analysis.language') }}

{% for row in project.techStack.languages %}{% endfor %}
{{ t('tasks.project-analysis.language') }}{{ t('tasks.project-analysis.version') }}{{ t('tasks.project-analysis.version-source') }}{{ t('tasks.project-analysis.files') }}{{ t('tasks.project-analysis.lines') }}
{{ row.name | inline_code }}{{ row.version }}{{ row.versionSource | enum_label("versionSource") }}{{ row.get("fileCount") | default("--") }}{{ row.get("lineCount") | default("--") }}
{% if project.techStack.get("frameworks") %}

{{ t('tasks.project-analysis.framework') }}

{% for row in project.techStack.frameworks %}{{ row_key(pairs=[(t('macros.layout.name'), row.name), (t('macros.layout.version'), row.version), (t('macros.layout.version-source'), row.versionSource | enum_label("versionSource"))]) }}{% endfor %}
{{ t('tasks.project-analysis.framework') }}{{ t('tasks.project-analysis.role') }}{{ t('tasks.project-analysis.evidence') }}
{{ row.role | inline_code }}{{ row.get("currentCodeEvidence") | default([]) | code_evidence }}
{% endif %} {% if project.techStack.get("toolchain") %}

{{ t('tasks.project-analysis.tool') }}

{% for row in project.techStack.toolchain %}{{ row_key(pairs=[(t('macros.layout.name'), row.name), (t('macros.layout.kind'), row.kind | enum_label("toolKind")), (t('macros.layout.version'), row.get("version"))]) }}{% endfor %}
{{ t('tasks.project-analysis.tool') }}{{ t('tasks.project-analysis.command') }}
{% if row.get("command") %}{{ row.command }}{% else %}--{% endif %}
{% endif %}
{% endif %} {% if project.get("internalInterfaces") %}

{{ t('tasks.project-analysis.internal-interfaces') }}

{% for row in project.internalInterfaces %}{{ row_key(pairs=[(t('macros.layout.id'), row.id), (t('macros.layout.name'), row.name), (t('macros.layout.kind'), row.kind | enum_label("interfaceKind")), (t('macros.layout.owner'), row.ownerComponentId)]) }}{% endfor %}
{{ t('tasks.project-analysis.interface') }}{{ t('tasks.project-analysis.signature') }}{{ t('tasks.project-analysis.consumers') }}{{ t('tasks.project-analysis.evidence') }}
{{ row.signature }}{{ (row.get("consumers") | default([])) | join(", ") | inline_code }}{{ row.get("currentCodeEvidence") | default([]) | code_evidence }}
{% endif %} {% if project.get("workflows") %}

{{ t('tasks.project-analysis.workflows') }}

{{ figure(workflowFigure) }} {% for flow in project.workflows %}

{{ flow.id | inline_code }}

{{ flow.name | inline_code }}

{{ t('tasks.project-analysis.starts-with') }} — {{ flow.trigger | inline_code }}{% if flow.get("outcome") %} · {{ t('tasks.project-analysis.result') }} — {{ flow.outcome | inline_code }}{% endif %}

{% for step in flow.steps %}{% endfor %}
{{ t('tasks.project-analysis.order') }}{{ t('tasks.project-analysis.action') }}{{ t('tasks.project-analysis.component') }}{{ t('tasks.project-analysis.external-system') }}
{{ step.order }}{{ step.action | inline_code }}{{ step.componentId | inline_code }}{% if step.get("externalSystem") %}{{ step.externalSystem | inline_code }}{% else %}--{% endif %}
{% endfor %}
{% endif %}

{{ t('tasks.project-analysis.system-boundaries') }}

{{ project.scanCoverage.scannedPathCount }} {{ t('tasks.project-analysis.paths-read') }} {{ project.scanCoverage.unscannedPathCount }} left unread — {{ project.scanCoverage.reason | inline_code }}

{{ t('tasks.project-analysis.entry-point') }}

{% for row in project.entryPoints %}{{ row_key(pairs=[(t('macros.layout.symbol'), row.symbol), (t('macros.layout.kind'), row.kind)]) }}{% endfor %}
{{ t('tasks.project-analysis.entry-point') }}{{ t('tasks.project-analysis.path') }}{{ t('tasks.project-analysis.role') }}
{{ row.path }}{{ row.role | inline_code }}

{{ t('tasks.project-analysis.data-stores') }}

{% for row in project.dataStores %}{{ row_key(pairs=[(t('macros.layout.name'), row.name), (t('macros.layout.owner'), row.ownerComponentId)]) }}{% endfor %}
{{ t('tasks.project-analysis.store') }}{{ t('tasks.project-analysis.reads') }}{{ t('tasks.project-analysis.writes') }}{{ t('tasks.project-analysis.evidence') }}
{{ row.readBoundary | inline_code }}{{ row.writeBoundary | inline_code }}{{ row.currentCodeEvidence | code_evidence }}

{{ t('tasks.project-analysis.external-system') }}

{% for row in project.externalSystems %}{{ row_key(pairs=[(t('macros.layout.name'), row.name), (t('macros.layout.adapter'), row.adapter), (t('macros.layout.direction'), row.direction)]) }}{% endfor %}
{{ t('tasks.project-analysis.external-system') }}{{ t('tasks.project-analysis.evidence') }}
{{ row.currentCodeEvidence | code_evidence }}

{{ t('tasks.project-analysis.hotspots-to-look-at-first') }}

{{ render_narrative(narrative.hotspotExplanation, "projectAnalysis.userNarrative.hotspotExplanation") }}
{% for row in project.rankedHotspots %}

{{ row.id | inline_code }} · {{ t('macros.layout.impact') }} {{ row.impact }} · {{ t('macros.layout.risk') }} {{ row.risk }}

{{ row.title | inline_code }}

{{ row.reason | inline_code }}

{{ t('macros.layout.evidence') }} {{ row.evidenceRefs | evidence_refs }}

{% endfor %}

{{ t('tasks.project-analysis.quality-and-test-coverage') }}

{{ render_narrative(narrative.qualityExplanation, "projectAnalysis.userNarrative.qualityExplanation") }} {% for row in project.qualityCoverage %}{{ row_key(pairs=[(t('macros.layout.id'), row.id), (t('macros.layout.area'), row.area)], status_name=t('macros.layout.status'), status_raw=row.status, status_text=row.status | enum_label("coverage")) }}{% endfor %}
{{ t('tasks.project-analysis.area') }}{{ t('tasks.project-analysis.detail') }}{{ t('tasks.project-analysis.evidence') }}
{{ row.summary | inline_code }}{{ row.evidenceRefs | evidence_refs }}
{% for label, hint in "coverage" | enum_legend %}
{{ label }}
{{ hint }}
{% endfor %}

{{ t('tasks.project-analysis.feature-map') }}

{% for row in project.featureIndex %}{{ summary_card(row.id ~ " · " ~ row.name, row.description, anchor=row.id) }}{% endfor %}

{{ t('tasks.project-analysis.what-to-do-next') }}

{{ action_list(humanSummary.actions) }} {% if humanSummary.blockers %}

{{ t('tasks.project-analysis.blockers') }}

{% endif %}
{% endblock %}