Reviewing forty captures means forty page loads #179

Closed
opened 2026-09-12 08:50:24 +00:00 by tiagoagueda · 0 comments
Owner

Observation

CaptureReviewView reviews one capture: GET renders a form, POST makes a listing and
redirects away. To triage what a board's search page produces, you do that forty times, from
a list, with a full page load between each.

What exists

jobs/capture_views.py:

  • CaptureListView — paginate_by = 50, jobs/capture_list.html draws its own <ul>.
    Per row: Review, Discard. No sort, no filter, no search, no select-many, no
    bulk discard. It is the same gap #160 describes for the listings page, on a different
    page, and #160 explicitly does not cover this one.
  • CaptureReviewView — the full listing form, every field, for every capture. Correct for a
    capture worth keeping and far too much for the thirty-seven that are not.

The screen's own docstring has the reason it must stay correctable:

The correction step is what makes captures safe: a parser reading somebody else's markup
gets things wrong.

That argues for reviewing carefully. It does not argue for reviewing slowly, and it does
not argue that discarding should cost a page load.

What triage wants

Deciding is three answers — keep, discard, keep-and-apply — and most captures get the second
one in under a second. That wants:

  • Accept and next, discard and next, without going back to the list.
  • A keyboard path through the queue. This is the one screen in Postulo somebody does forty
    times in a row.
  • Bulk discard from the list, which is most of the gesture and needs no form at all.
  • The full form still there for the ones worth keeping, unchanged.

One thing to decide while in here

CaptureReviewView._initial puts defaults in where nothing was read:

"salary_currency": data.salary_currency or "EUR",
"salary_period": data.salary_period or "year",

On the form those are indistinguishable from values the page stated. #176 made the sources
stop reporting a currency with no amount behind it, precisely because "USD, per year, amount
unknown" is a thing boards write into every advert and Postulo should not repeat. This line
puts a currency back. It may be right — a form needs a default in a select — but it should be
visibly a default rather than look like a reading.

Not in this issue

Making the captures list a registered table, with the sorting, filtering, column choice and
bulk actions core/tables.py gives for free. That is the same rewrite #160 is doing for
listings and should be done the same way, after it, so the second page copies a pattern that
has already been through review. Bulk discard is wanted before then and does not need the
whole table.

## Observation `CaptureReviewView` reviews one capture: GET renders a form, POST makes a listing and redirects away. To triage what a board's search page produces, you do that forty times, from a list, with a full page load between each. ## What exists `jobs/capture_views.py`: - `CaptureListView` — `paginate_by = 50`, `jobs/capture_list.html` draws its own `<ul>`. Per row: **Review**, **Discard**. No sort, no filter, no search, no select-many, no bulk discard. It is the same gap #160 describes for the listings page, on a different page, and #160 explicitly does not cover this one. - `CaptureReviewView` — the full listing form, every field, for every capture. Correct for a capture worth keeping and far too much for the thirty-seven that are not. The screen's own docstring has the reason it must stay correctable: > The correction step is what makes captures safe: a parser reading somebody else's markup > gets things wrong. That argues for reviewing carefully. It does not argue for reviewing *slowly*, and it does not argue that discarding should cost a page load. ## What triage wants Deciding is three answers — keep, discard, keep-and-apply — and most captures get the second one in under a second. That wants: - **Accept and next**, **discard and next**, without going back to the list. - A keyboard path through the queue. This is the one screen in Postulo somebody does forty times in a row. - **Bulk discard from the list**, which is most of the gesture and needs no form at all. - The full form still there for the ones worth keeping, unchanged. ## One thing to decide while in here `CaptureReviewView._initial` puts defaults in where nothing was read: "salary_currency": data.salary_currency or "EUR", "salary_period": data.salary_period or "year", On the form those are indistinguishable from values the page stated. #176 made the sources stop reporting a currency with no amount behind it, precisely because "USD, per year, amount unknown" is a thing boards write into every advert and Postulo should not repeat. This line puts a currency back. It may be right — a form needs a default in a select — but it should be visibly a default rather than look like a reading. ## Not in this issue Making the captures list a registered table, with the sorting, filtering, column choice and bulk actions `core/tables.py` gives for free. That is the same rewrite #160 is doing for listings and should be done the same way, after it, so the second page copies a pattern that has already been through review. Bulk discard is wanted before then and does not need the whole table.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Postulo/postulo#179
No description provided.