terra
TERRA-204
The alumno filter is BUILT and live in /informes since 2026-08-31; what is missing is a picker on /practicas, which accepts ?alumno= but only via the /alumnos drill-down
Done normal
ctcoder-terra-cc
Client WhatsApp 2026-08-31 16:51, Sebastian Puia: 'Queda poder poner en los filtros los alumnos'. Restated 2026-08-30 11:31-11:32: as docente he sees 6 practicas and cannot tell whether they are his own or every alumno's, because the practica list filters have no alumno selector. He asks for an alumno filter visible ONLY to docentes, to isolate each student's practicas. Separate from, and a superset of, his other 2026-08-30 report that both of his own mails behave identically so he cannot confirm he entered as docente at all. The surgical-team/ayudante request from the same thread he marked resolved himself on 2026-08-31 16:49.
Activity
-
MEASURED AGAINST THE CODE 2026-09-03, and it corrects the title I filed two hours ago. THE ALUMNO FILTER EXISTS IN /informes AND IS LIVE. src/app/informes/page.tsx computes maySeeAlumnoPicker from ROSTER_ROLES (docente, jtp, bedel, admin - alumno excluded), renders a Select labelled Alumno when true, and gateAlumnoFilter in src/lib/informe-filter-core.ts drops alumnoId server-side for anyone without that capability, with tests on both branches. It landed on main 2026-08-31T11:14 in the commit 'feat(terra): strengthen practica attribution and reporting' - AFTER the client's 2026-08-30 11:31 complaint and BEFORE his 2026-08-31 16:51 line 'Queda poder poner en los filtros los alumnos'. So his closing line is either stale by five hours or it is about a different screen, and I cannot tell which from here. WHAT IS ACTUALLY MISSING is on /practicas, not /informes: src/app/practicas/page.tsx accepts ?alumno=<uuid> and renders the filtered heading, but there is NO alumno picker on that page - the only way in is the drill-down from /alumnos built for TERRA-94. A docente who opens /practicas directly sees the whole cohort with no control to narrow it, which is exactly the confusion he described: veo 6 practicas, no se si son del alumno Puia o de todos. REMAINING WORK IS SMALL AND SPECIFIC: add an alumno selector to /practicas gated on the same ROSTER_ROLES capability, reusing getAlumnos and the existing ?alumno= param. Do not rebuild the informes one. BEFORE BUILDING, ASK THE CLIENT WHICH SCREEN HE MEANT - if he meant /informes the answer is that it already shipped and he should reload, and that is a message, not a commit.
-
The alumno filter is BUILT and live in /informes since 2026-08-31; what is missing is a picker on /practicas, which accepts ?alumno= but only via the /alumnos drill-down
-
Built and pushed 4666534 2026-09-03. An alumno picker on /practicas: a plain GET form, no client component, since ?alumno= was already the URL state this page read - submitting it produces the same bookmarkable URL the /alumnos drill-down produces. No new gate: the page is already ROSTER_ROLES, the same capability /alumnos needs to list those people. Empty state now names every filter in force instead of saying a flat 'no hay practicas registradas', which under a filter reads as a claim about the student rather than about the query. THE PREDICATE IS DELIBERATELY createdBy AND THE LABEL SAYS SO - 'Alumno que cargo la practica'. I did not align it to /informes, which filters the identically-named param by PARTICIPANTES and therefore also returns practicas the student assisted but did not load. Aligning would have broken a different pair: /alumnos counts with createdBy, so the number beside a student there and this list would stop agreeing. Two screens, one word, two populations - each now says which it means, and that is a mitigation, not a fix. Hidden fields carry q/sort/dir/size through the submit because a GET form posts only its own fields; page is deliberately dropped so a new filter starts at page 1. tsc --noEmit clean. NOT VERIFIED: I have not exercised the picker against the live deploy, and 6 practicas by one author is a population that cannot distinguish a working filter from a no-op.
-
Code is live. Open only until the client confirms which screen he meant and the picker is exercised against the deploy.
-
coder-terra-cc
-
Shipped 2026-09-03 as 4666534 by coder02-terra-cc, on Elazar's explicit override of the lane split. The row stayed todo because it was assigned to coder-terra-ca, which no longer exists. Verified before closing, not taken on report: 4666534 touches src/app/practicas/page.tsx (+75/-8), and the deployed file now reads alumno out of searchParams (line 92), validates it as a uuid (line 104) and passes alumnoId into the query (line 112). That is the picker this row said was missing. Acceptance was "a picker on /practicas" - /informes already had the filter since 2026-08-31 and /practicas accepted ?alumno= only via the /alumnos drill-down. Both halves now exist. NOT verified by me: that the control renders and returns the right rows for a real docente session. No deployed exercise was run from this lane.
feature
6w ago by wi-cli-venus
5w ago
2026-09-05 07:36