audit(legibility): re-run readiness scorecard; ratify "ready for evaluation" #416
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Part of Epic #411 — Cleanup. This is CLEANUP-5: the final gate. Re-run the legibility audit AFTER all of Epics 2–4 and CLEANUP-1..4 are done, and produce the final readiness scorecard. If 🟢🟢, the codebase is ready to send to Anja and Tobias.
Per the Legibility Rubric, this re-validates ALL of C1–C10.
Inputs
docs/audits/audit-*-report.md(Epic 1 outputs)docs/LEGIBILITY-READINESS.md(AUDIT-6 / #393 output)Method
docs/audits/audit-{frontend,backend,ocr,db,rest}-report.mdIN PLACE with new scorecards (don't create new files; preserve the diff in git history)docs/LEGIBILITY-READINESS.mdwith new §1 executive summary, §2 per-subsystem table, §3 aggregate scorecard, §4 remaining top-10, §5 refactor verdict (now historical), §6 evaluation verdict (the one that matters), §7 open questions.§6 evaluation verdict criteria
Acceptance criteria
docs/audits/has been re-scoreddocs/LEGIBILITY-READINESS.mdreflects current state, not Epic 1 stateDependency
Hard blocked by: every other issue in the Codebase Legibility milestone (#7).
Specifically: Epic 1 (#387), Epic 2 (#394), Epic 3 (#402), Epic 4 (#406), and CLEANUP-1..4 (the four sibling issues in Epic 5).
Definition of Done
PR merged; this issue closes; the Codebase Legibility milestone closes; Anja and Tobias are sent the announcement.
Dispatch
Best done by you (Marcel), not an agent — the verdict is partially a judgment call, and the announcement is yours to send.
🏗️ Markus Keller — Senior Application Architect
Observations
docs/audits/does not yet exist in the repository. The input artifacts (the five subsystem audit reports and the originaldocs/LEGIBILITY-READINESS.md) that this issue depends on must be produced by the preceding issues. This issue cannot proceed until those are present — which is correct per the hard-block dependency, but it means you should verify the inputs before opening this work.Recommendations
docs/audits/audit-{frontend,backend,ocr,db,rest}-report.mdfiles exist and that CLEANUP-1..4 are closed. The issue correctly states this, but it bears making it the first step — agents (or you under time pressure) may attempt to run this scorecard against incomplete inputs.Open Decisions
docs/audits/accepted-findings.md?👨💻 Felix Brandt — Senior Fullstack Developer
Observations
docs/audits/is absent). This is expected — Epic 1 (#387) is still open — but it means this issue is strictly blocked and should not be worked until that directory contains all five files.docs/audits/audit-*-report.mdIN PLACE") is the right call for diff readability in git history. What you changed between Epic 1 state and CLEANUP-5 state should be visible ingit diff— don't create new files.Recommendations
./mvnw clean packageandnpm run checkandnpm run lintagainstmainat the point of writing the scorecard. Stale imports, renamed packages, and broken type generation are the failure modes most likely to surface after Epic 4.Open Decisions
None — this is a well-scoped verification task with clear inputs and outputs.
🔒 Nora "NullX" Steiner — Application Security Engineer
Observations
controller/,service/,repository/flat packages into per-domain packages. Security configuration lives insecurity/— that package moves too. Any Spring Security bean ordering,@RequirePermissionAOP wiring, orSecurityConfigimport that breaks silently during the move won't necessarily surface as a compilation error. It surfaces as an open endpoint.docs/LEGIBILITY-READINESS.md(the original AUDIT-6 output from #393) doesn't exist yet in the repo. This scorecard will be the first time the document is created — not refreshed. The update-in-place instruction makes sense for the five subsystem reports, but there is no §6 baseline to compare against from AUDIT-6 yet.Recommendations
@RequirePermissionenforcement still works end-to-end. The simplest way: run the existing@WebMvcTestsecurity tests and confirm they pass. If any endpoint that previously returned 403 for a viewer now returns 200, that is a Critical finding that must block the 🟢 verdict.SecurityConfigimports survived the restructure.@Import({SecurityConfig.class, PermissionAspect.class})in@WebMvcTestslices references class paths. If the class moved packages, tests that compiled against the old path may still pass if Spring picks up the bean from the new path — but this depends on scan configuration. Verify explicitly.docs/security-guide.mdexists. If CLEANUP-5 updates the readiness scorecard, confirm that the actuator blocking configuration (springdoc.api-docs.enabled: falsefor production,/actuator/*blocked in Caddy) survived Epic 4 untouched. This is a config file, not application code, so it won't be moved by the refactor — but it's worth one explicit check.Open Decisions
None. This is a verification issue. Security concerns are about what to check during the walk, not about decisions to make.
🧪 Sara Holt — QA Engineer & Test Strategist
Observations
Recommendations
docs/audits/exists and contains all five report files, (b) CLEANUP-1..4 are closed, (c) Epic 3's mutation testing results are documented. If any of these are missing, the scorecard produced will be incomplete.Open Decisions
🎨 Leonie Voss — UX Designer & Accessibility Strategist
Observations
docs/LEGIBILITY-READINESS.mdand form a first impression of the codebase. The document's own legibility and clarity is part of what makes the handoff successful.Recommendations
docs/LEGIBILITY-READINESS.mdthat states the §6 verdict directly. Readers who want depth will read on; readers who want the bottom line get it immediately.Open Decisions
None from a UX perspective. The output quality depends on execution, not on architectural choices.
🚀 Tobias Wendt — DevOps & Platform Engineer
Observations
docs/audits/IN PLACE" instruction preserves git history correctly. That is the right approach for auditability — the git diff between the Epic 1 commit and the CLEANUP-5 commit is the change log for the entire Codebase Legibility effort.docs/audits/does not exist onmainyet. The branch for this work must be cut from a state where all five predecessor issues' artifacts have been merged. Cutting the CLEANUP-5 branch from an incomplete state produces a scorecard with incomplete inputs.Recommendations
ls docs/audits/should list all five report files. If it doesn't, wait. The five report files are the only inputs this issue consumes — don't start without them.Open Decisions
None. This is a gate issue with clear inputs, clear outputs, and clear completion criteria.
📋 Elicit — Requirements Engineer
Observations
Recommendations
FINDING-ID: [finding text] — ACCEPTED because [one sentence rationale]. Impact if never fixed: [one sentence].This is 2–3 sentences per finding, takes 5 minutes per finding, and makes the scorecard defensible to Anja and Tobias.Open Decisions
docs/audits/audit-*.mdfiles) preserves co-location of finding + justification. A separate register (e.g., anaccepted-findings.mdor a comment on this issue) is easier to scan but splits the information. Both are valid — pick one and be consistent. (Shared with Markus and Sara's observations.)🗳️ Decision Queue — Action Required
2 decisions need your input before implementation starts.
Process / Documentation
Where do accepted-but-not-fixed findings live? The method says "WAS failing, still failing — decide: do we accept it, or open a follow-up?" but doesn't specify where the acceptance justification is recorded. Options: (a) inline in each updated
docs/audits/audit-*.md— keeps finding and rationale co-located, visible in git diff; (b) a separatedocs/audits/accepted-findings.md— easier to scan in one place but splits information. Pick one and be consistent — the verdict's credibility to Anja and Tobias depends on it. (Raised by: Markus, Sara, Elicit)What does "80% of Major findings resolved" mean in practice? Three possible standards: (a) a PR was merged that addresses the finding, (b) the rubric check now PASS-scores on a live re-walk, or (c) the finding is listed as PASS in the updated report. These produce different verdicts for borderline cases. Recommendation: use (b) — the rubric check passes on a live re-walk — as the only verifiable standard, since (a) and (c) can drift. If you accept a different standard, write it into the updated
docs/LEGIBILITY-READINESS.mdso the reasoning is on record. (Raised by: Elicit, Sara)