feat(use-case-controls): relevant als Stufe statt Hard-Filter + Provenance
CI / test-python-backend (push) Successful in 30s
CI / test-python-document-crawler (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Successful in 12s
CI / validate-canonical-controls (push) Successful in 12s
CI / loc-budget (push) Successful in 25s
CI / go-lint (push) Has been skipped
CI / detect-changes (push) Successful in 15s
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / branch-name (push) Has been skipped
CI / nodejs-build (push) Successful in 3m9s
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Successful in 30s
CI / test-python-document-crawler (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Successful in 12s
CI / validate-canonical-controls (push) Successful in 12s
CI / loc-budget (push) Successful in 25s
CI / go-lint (push) Has been skipped
CI / detect-changes (push) Successful in 15s
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / branch-name (push) Has been skipped
CI / nodejs-build (push) Successful in 3m9s
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
Der harte relevant=true-Filter versteckte ~25% des Korpus (40.926 Atome), ~70% davon echte Pflichten (500er-Validierung). relevant wird zur Stufe: - Service: tier-Param (core=Default schuetzt Agent/CRA; all=alles inkl. review), ORDER BY relevant DESC; pro Control relevant/tier/source_type (own_library bei license_rule=3, sonst derived) + source_regulation/article; core_count/review_count. Pure Helper tier_label + source_type (+ Tests). - Route: optionaler tier-Query (default core) — contract-safe (additiv). - Frontend: Coverage-Drill-down /sdk/coverage/[useCase] — Kern-Pflichten vs. "zur fachlichen Pruefung", je mit Herkunfts-Badge; Uebersicht zeigt Delta. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import Link from 'next/link'
|
||||
import {
|
||||
type UseCaseRow,
|
||||
type CorpusOverview,
|
||||
@@ -47,6 +48,7 @@ export default async function CoveragePage() {
|
||||
const groups = groupUseCases(useCases)
|
||||
const totalRelevant = useCases.reduce((s, u) => s + u.atom_relevant, 0)
|
||||
const totalAtoms = useCases.reduce((s, u) => s + u.atom_total, 0)
|
||||
const totalReview = totalAtoms - totalRelevant
|
||||
|
||||
return (
|
||||
<div className="mx-auto max-w-7xl space-y-10 p-6">
|
||||
@@ -62,8 +64,8 @@ export default async function CoveragePage() {
|
||||
|
||||
<section className="grid grid-cols-2 gap-3 sm:grid-cols-4">
|
||||
<Stat label="Use Cases" value={useCases.length} />
|
||||
<Stat label="Pflichten (relevant)" value={totalRelevant.toLocaleString('de-DE')} />
|
||||
<Stat label="klassifizierte Atome" value={totalAtoms.toLocaleString('de-DE')} />
|
||||
<Stat label="Kern-Pflichten" value={totalRelevant.toLocaleString('de-DE')} />
|
||||
<Stat label="zur Prüfung" value={totalReview.toLocaleString('de-DE')} />
|
||||
<Stat label="Quell-Dokumente" value={corpus?.totals.documents ?? 0} />
|
||||
</section>
|
||||
|
||||
@@ -104,19 +106,30 @@ export default async function CoveragePage() {
|
||||
<tr>
|
||||
<th className="px-4 py-2">Use Case</th>
|
||||
<th className="px-4 py-2">Key</th>
|
||||
<th className="px-4 py-2 text-right">relevant</th>
|
||||
<th className="px-4 py-2 text-right">klassifiziert</th>
|
||||
<th className="px-4 py-2 text-right">Kern</th>
|
||||
<th className="px-4 py-2 text-right">zur Prüfung</th>
|
||||
<th className="px-4 py-2 text-right">gesamt</th>
|
||||
<th className="px-4 py-2">Quellen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="divide-y divide-gray-100 bg-white">
|
||||
{g.rows.map((u) => (
|
||||
<tr key={u.key} className={u.atom_relevant === 0 ? 'text-gray-400' : ''}>
|
||||
<td className="px-4 py-2 font-medium text-gray-900">{u.label}</td>
|
||||
<tr key={u.key} className={u.atom_total === 0 ? 'text-gray-400' : ''}>
|
||||
<td className="px-4 py-2 font-medium">
|
||||
<Link
|
||||
href={`/sdk/coverage/${u.key}`}
|
||||
className="text-purple-700 hover:underline"
|
||||
>
|
||||
{u.label}
|
||||
</Link>
|
||||
</td>
|
||||
<td className="px-4 py-2 font-mono text-xs text-gray-500">{u.key}</td>
|
||||
<td className="px-4 py-2 text-right font-semibold">
|
||||
{u.atom_relevant.toLocaleString('de-DE')}
|
||||
</td>
|
||||
<td className="px-4 py-2 text-right text-amber-700">
|
||||
{(u.atom_total - u.atom_relevant).toLocaleString('de-DE')}
|
||||
</td>
|
||||
<td className="px-4 py-2 text-right text-gray-500">
|
||||
{u.atom_total.toLocaleString('de-DE')}
|
||||
</td>
|
||||
|
||||
Reference in New Issue
Block a user