Chorus
view release on metacpan or search on metacpan
agent/skills/chorus-templates.md view on Meta::CPAN
# Path of each element through agents
print "\n Validation path per element\n";
print " " . "â" x 58 . "\n";
for my $e (@elements) {
my $id = $e->{id} // '?';
my $stat = $e->{statut_conformite} // '';
my $flag = $stat eq 'CONFORME' ? 'â
'
: $stat eq 'NON_CONFORME' ? 'â'
: 'â ï¸ ';
my @chemin;
for my $def (@pipeline_def) {
my ($label, $slot_cible, $slot_res) = @$def;
next unless defined $e->{$slot_cible};
my $res = $e->{$slot_res} // '?';
my $res_short = $res =~ /^(OUI|CONFORME|1)$/i ? 'â'
: $res =~ /^(NON|NON_CONFORME|KO)$/i ? 'â'
: $res eq 'NA' ? 'â'
: '?';
push @chemin, "$label($res_short)";
}
printf " %s %-18s %s\n", $flag, $id, join(' â ', @chemin);
}
print " " . "â" x 58 . "\n";
}
# ââ Block 3: Distribution by element type âââââââââââââââââââââââââââââââââ
{
my (%ok_par_type, %ko_par_type, %tous_types);
for my $e (@elements) {
my $type = $e->{type_element} // $e->{type} // '?';
$tous_types{$type}++;
my $stat = $e->{statut_conformite} // '';
if ($stat eq 'CONFORME') { $ok_par_type{$type}++ }
elsif ($stat eq 'NON_CONFORME') { $ko_par_type{$type}++ }
}
print "\n Distribution by element type\n";
print " " . "â" x 46 . "\n";
printf " %-30s %5s %5s\n", 'Type', 'â
', 'â';
print " " . "â" x 46 . "\n";
for my $t (sort keys %tous_types) {
printf " %-30s %5d %5d\n",
$t,
$ok_par_type{$t} // 0,
$ko_par_type{$t} // 0;
}
print " " . "â" x 46 . "\n";
}
# ââ Block 4: Non-conformity summary âââââââââââââââââââââââââââââââââââââââ
{
my @nc;
for my $e (@elements) {
push @nc, $e if ($e->{statut_conformite} // '') eq 'NON_CONFORME';
}
if (@nc) {
print "\n Non-conformity summary\n";
print " " . "â" x 58 . "\n";
for my $e (@nc) {
my $id = $e->{id} // '?';
my $type = $e->{type_element} // $e->{type} // '?';
# Adapter la cascade de motifs aux slots du sandbox
my $raison = $e->{raison_non_conformite}
// $e->{motif_refus}
// '(reason not specified)';
printf " â %-18s [%s]\n %s\n\n", $id, $type, $raison;
}
print " " . "â" x 58 . "\n";
}
}
```
**Substitutions:**
- `<Namespace>` â from `index.org`
- `@slots_resultat_display` â result slots from the pipeline KB (statut_conformite, raison_non_conformite, motif_refus, besoin_*, etc.)
- `@pipeline_def` â one entry per agent: `[ label, slot_ciblage, slot_resultat_ok ]` from `index.org` pipeline table
**Rule:** `run.pl` contains **no hardcoded data** â all project input comes from the JSON argument.
( run in 2.232 seconds using v1.01-cache-2.11-cpan-7fcb06a456a )