Skip to content

feat: Reclassify nomcom feedback#6002

Merged
rjsparks merged 22 commits into
ietf-tools:mainfrom
pselkirk:fix-4669
Aug 8, 2023
Merged

feat: Reclassify nomcom feedback#6002
rjsparks merged 22 commits into
ietf-tools:mainfrom
pselkirk:fix-4669

Conversation

@pselkirk

@pselkirk pselkirk commented Jul 21, 2023

Copy link
Copy Markdown
Contributor

Fixes #4669

pselkirk added 3 commits July 20, 2023 22:16
- Remove "Unclassified" column header, which caused misalignment in the table body.

- Show the message author - previously displayed as `(None)`.
- There's a new `Chair/Advisor Tasks` menu item `Reclassify feedback`.

- I overloaded `view_feedback*` URLs with a `?reclassify` parameter.

- This adds a checkbox to each feedback message, and a `Reclassify` button
at the bottom of each feedback page.

- "Reclassifying" basically de-classifies the feedback, and punts it back
to the "Pending emails" view for reclassification.

- If a feedback has been applied to multiple nominees, declassifying it
from one nominee removes it from all.
@codecov

codecov Bot commented Jul 21, 2023

Copy link
Copy Markdown

Codecov Report

Merging #6002 (764a8f7) into main (416ffb0) will decrease coverage by 0.01%.
Report is 4 commits behind head on main.
The diff coverage is 85.10%.

@@            Coverage Diff             @@
##             main    #6002      +/-   ##
==========================================
- Coverage   88.67%   88.66%   -0.01%     
==========================================
  Files         290      290              
  Lines       40195    40226      +31     
==========================================
+ Hits        35642    35667      +25     
- Misses       4553     4559       +6     
Files Changed Coverage Δ
ietf/nomcom/views.py 92.57% <84.44%> (-0.33%) ⬇️
ietf/name/models.py 100.00% <100.00%> (ø)
ietf/nomcom/forms.py 95.39% <100.00%> (ø)

... and 3 files with indirect coverage changes

@richsalz

Copy link
Copy Markdown
Collaborator

So this adds a "reclassify" action, that puts already-classified feedback back in the work queue. That's a reasonable approach. This looks fine to me.

@jennifer-richards jennifer-richards left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the UI needs to indicate that it's changed from "viewing" to "reclassifying". As it is, it's hard to see that the "Reclassify feedback" menu item actually had any effect or that clicking on the individual items will do other than view the feedback.

I wonder if a button on each individual feedback item's view page would be easier to implement in a way that's clearly visible to the user. I.e., open the "View feedback" tab, click the feedback item, then click the "reclassify" button on it to go to a confirmation view.

If you stick with the batch reclassify mode, there are also some glitches on the view_feedback_nominee.html template - the feedback type tabs don't seem to do anything. That should be cleaned up.

Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/templates/nomcom/view_feedback_nominee.html Outdated
Comment thread ietf/templates/nomcom/view_feedback_nominee.html Outdated
- Break out reclassify_feedback* as their own URLs and views,
  and revert changes to view_feedback*.html.

- Replace checkboxes with a Reclassify button on each message.
@pselkirk

pselkirk commented Jul 25, 2023

Copy link
Copy Markdown
Contributor Author

Robert asked for an "overcome by events" feedback type, which was one of the motivators for this feature, but I feel like it's orthogonal to the actual functionality of reclassification, and might be better handled in a separate ticket.

@rjsparks

Copy link
Copy Markdown
Member

It's what things will often be reclassified to.
I'd like to see it as part of this PR, but a companion that merged near the same time would be sufficient

@jennifer-richards jennifer-richards left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a number of small things, plus a couple non-trivial requests. One (the HTTP_REFERER business) I think needs to be sorted out now, the other (using a ModelForm) could wait if you're not enthusiastic to jump on it.

I like the "Reclassify" button format, but I'm wondering whether we really need the reclassify mode at all. Is there any reason not to, say, shrink the button a little and perhaps relocate it, then just always have it present? I think that would do away with the need to deal with the link in the base template and eliminate the need that led to the HTTP_REFERER business.

Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/nomcom/views.py
return render(request, 'nomcom/view_feedback_nominee.html',
template = 'nomcom/reclassify_feedback_nominee.html' if reclassify else 'nomcom/view_feedback_nominee.html'
return render(request, template,
{'year': year,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're in the area, would you mind cleaning up the indentation / line breaks here?

Comment thread ietf/nomcom/views.py
@nomcom_private_key_required
def reclassify_feedback_unrelated(request, year):
if request.method == 'POST':
feedback_id = request.POST.get('feedback_id', None)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although it's done a few times in this app (and too much elsewhere in the datatracker), I think we should get away from directly accessing request parameters. I think that a ModelForm on Feedback set only to modify the type field would be preferable. With a ClassifyFeedbackForm (and possibly a couple subclasses with different querysets for the type options), the various places where the code currently decides what types to allow could be consolidated.

If you're not enthusiastic to drag this PR out further, I don't object to making that a code cleanup project for later.

Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/nomcom/views.py Outdated
Comment thread ietf/templates/nomcom/reclassify_feedback_item.html
Comment thread ietf/nomcom/views.py
@pselkirk

pselkirk commented Aug 4, 2023

Copy link
Copy Markdown
Contributor Author

I like the "Reclassify" button format, but I'm wondering whether we really need the reclassify mode at all. Is there any reason not to, say, shrink the button a little and perhaps relocate it, then just always have it present?

My feeling was that reclassification would be uncommon enough that a) there should be an explicit action to initiate it, and b) having the button there for the 99.99% of the time that you're not reclassifying would be visual clutter.

OTOH, I'm not the target user. @richsalz @martinthomson

@martinthomson

Copy link
Copy Markdown
Contributor

I'd have to see this in action to be able to reach any sort of conclusion.

@richsalz

richsalz commented Aug 4, 2023

Copy link
Copy Markdown
Collaborator

It's easy to ignore a button if it's always there. If it comes and goes, that's a problem.

@jennifer-richards

Copy link
Copy Markdown
Member

My feeling was that reclassification would be uncommon enough that a) there should be an explicit action to initiate it, and b) having the button there for the 99.99% of the time that you're not reclassifying would be visual clutter.

I agree it'll likely be uncommon, but I think that's a reason to keep it closer at hand in the usual view. With the button always present, when the chair comes across a piece of feedback that's incorrectly classified they won't have to remember to look through the "chair tasks" menu and then find the feedback again.

I think shrinking the button will reduce the clutter to a tolerable level. I can imagine we eventually associate a pulldown menu with each feedback item that has the reclassify view as one of a few options (but, emphatically, am not proposing that right now!).

As a bonus it'll simplify the views that are doing double-duty here.

@jennifer-richards jennifer-richards left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

Your worry about the "Reclassify" being a little obtrusive (even with the small button) is a reasonable one, but I think this is a good starting point. If it annoys the chair, we can restyle the view after we have some experience with how this is used.

@richsalz richsalz left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need "button flavor of the month" :) This is good. Thanks! And future nomcom chairs will thank you, too.

@rjsparks rjsparks merged commit 06c9f06 into ietf-tools:main Aug 8, 2023
rjsparks added a commit that referenced this pull request Aug 10, 2023
* chore: Remove unused "rendertest" stuff (#6015)

* fix: restore ability to create status change documents (#5963)

* fix: restore ability to create status change documents

Fixes #5962

* chore: address review comment

* fix: Provide human-friendly status in submission status API response (#6011)

Co-authored-by: nectostr <bastinda96@gmail.com>

* fix: Make name/email lookups case-insensitive (#5972) (#6007)

* fix: Make name/email lookups case-insensitive (#5972)

Use icontains so that looking up name or email is case insensitive
Added a test

Fixes: 5972

* fix: Use __iexact not __icontains

* fix: Clarify no-action-needed (#5918) (#6020)

When a draft is submitted for manual processing, clarify that
no action is needed; the Secretariat has the next steps.

Fixes: #5918

* fix: Fix menu hover issue (#6019)

* fix: Fix menu hover issue

Fixes #5702

* Fix leftmenu hover issue

* fix: Server error from api_get_session_materials() (#6025)

Fixes #5877

* fix: Clarify Questionnaire label (#4688) (#6017)

When filtering nominees, `Questionnaire` implies `Accepted == yes`
so fix the dropdown test tosay that.

Fixes: #4688

* chore: Merge from @martinthomson's rfc-txt-html (#6023)

* fix:no history entry when changing RFC Editor note for doc (#6021)

* fix:no history entry when changing RFC Editor note for doc

* fix:no history entry when changing RFC Editor note for doc

---------

Co-authored-by: Priyanka Narkar <priyankanarkar@dhcp-91f8.meeting.ietf.org>

* fix: avoid deprecation warning on view_list() for objs without CommunityList

Fixes #5942

* fix: return 404 for non-existing revisions (#6014)

* fix: return 404 for non-existing revisions
Links to non-existing revisions to docs should return 404

* fix: change rfc/rev and search behaviour

* refactor: fix tab level

* fix: return 404 for rfc revision for bibtex

* fix: provide date for revisions in bibtex output (#6029)

* fix: provide date for revisions in bibtex output

* refactor: change walrus to if's

* fix: specify particular revision for events

* fix: review refactoring issue

fixes #5447

* fix:  Remove automatically suggested document for document that is already has review request (fixes #3211) (#5425)

* Added check that if there is already review request for the document
in question, ignore the automatic suggestion for that document.
Fixes #3211.

* fix: dont block on open requests for a previous version. Add tests

---------

Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>

* feat: IAB statements (#5940)

* feat: support iab and iesg statements. Import iab statements. (#5895)

* feat: infrastructure for statements doctype

* chore: basic test framework

* feat: basic statement document view

* feat: show replaced statements

* chore: black

* fix: state help for statements

* fix: cleanout non-relevant email expansions

* feat: import iab statements, provide group statements tab

* fix: guard against running import twice

* feat: build redirect csv for iab statements

* fix: set document state on import

* feat: show published date on main doc view

* feat: handle pdf statements

* feat: create new and update statements

* chore: copyright block updates

* chore: remove flakes

* chore: black

* feat: add edit/new buttons for the secretariat

* fix: address PR #5895 review comments

* fix: pin pydantic until inflect catches up (#5901) (#5902)

* chore: re-un-pin pydantic

* feat: include submitter in email about submitted slides (#6033)

* feat: include submitter in email about submitted slides

fixes #6031

* chore: remove unintended whitespace change

* chore(dev): update .vscode/settings.json with new taskExplorer settings

* fix: Add editorial stream to proceedings (#6027)

* fix: Add editorial stream to proceedings

Fixes #5717

* fix: Move editorial stream after the irtf in proceedings

* fix: Add editorial stream to meeting materials (#6047)

Fixes #6042

* fix: Shows requested reviews for doc fixes (#6022)

* Fix: Shows requested reviews for doc

* Changed template includes to only give required variables to them.

* feat: allow openId to choose an unactive email if there are none active (#6041)

* feat: allow openId to choose an unactive email if there are no active ones

* chore: correct typo

* chore: rename unactive to inactive

* fix: Make review table more responsive (#6053)

* fix: Improve layout of review table

* Progress

* Progress

* Final changes

* Fix tests

* Remove fluff

* Undo commits

* ci: add --validate-html-harder to tests

* ci: add  --validate-html-harder to build.yml workflow

* fix: Set colspan to actual number of columns (#6069)

* fix: Clean up view_feedback_pending (#6070)

- Remove "Unclassified" column header, which caused misalignment in the table body.

- Show the message author - previously displayed as `(None)`.

* docs: Update LICENSE year

* fix: Remove IESG state edit button when state is 'dead' (#6051) (#6065)

* fix: Correctly order "last call requested" column in the IESG dashboard (#6079)

* ci: update dev sandbox init script to start memcached

* feat: Reclassify nomcom feedback (#6002)

* fix: Clean up view_feedback_pending

- Remove "Unclassified" column header, which caused misalignment in the table body.

- Show the message author - previously displayed as `(None)`.

* feat: Reclassify nomcom feedback (#4669)

- There's a new `Chair/Advisor Tasks` menu item `Reclassify feedback`.

- I overloaded `view_feedback*` URLs with a `?reclassify` parameter.

- This adds a checkbox to each feedback message, and a `Reclassify` button
at the bottom of each feedback page.

- "Reclassifying" basically de-classifies the feedback, and punts it back
to the "Pending emails" view for reclassification.

- If a feedback has been applied to multiple nominees, declassifying it
from one nominee removes it from all.

* fix: Remove unused local variables

* fix: Fix some missing and mis-nested html

* test: Add tests for reclassifying feedback

* refactor: Substantial redesign of feedback reclassification

- Break out reclassify_feedback* as their own URLs and views,
  and revert changes to view_feedback*.html.

- Replace checkboxes with a Reclassify button on each message.

* fix: Remember to clear the feedback associations when reclassifying

* feat: Add an 'Overcome by events' feedback type

* refactor: When invoking reclassification from a view-feedback page, load the corresponding reclassify-feedback page

* fix: De-conflict migration with 0004_statements

Also change the coding style to match, and add a reverse migration.

* fix: Fix a test case to account for new feedback type

* fix: 842e730 broke the Back button

* refactor: Reclassify feedback directly instead of putting it back in the work queue

* fix: Adjust tests to new workflow

* refactor: Further refine reclassification to avoid redirects

* refactor: Impose a FeedbackTypeName ordering

Also add FeedbackTypeName.legend field, rather than synthesizing it every
time we classify or reclassify feedback.

In the reclassification forms, only show the relevant feedback types.

* refactor: Merge reclassify_feedback_* back into view_feedback_*

This means the "Reclassify" button is always present, but eliminates some
complexity.

* refactor: Add filter(used=True) on FeedbackTypeName querysets

* refactor: Add the new FeedbackTypeName to the reclassification success message

* fix: Secure reclassification against rogue nomcom members

* fix: Print decoded key and fully clean up test nomcom (#6094)

* fix: Delete Person records when deleting a test nomcom

* fix: Decode test nomcom private key before printing

* test: Use correct time zone for test_statement_doc_view (#6064)

* chore(deps): update all npm dependencies for playwright (#6061)

Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>

* chore(deps): update all npm dependencies for dev/diff (#6062)

Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>

* chore(deps): update all npm dependencies for dev/coverage-action (#6063)

Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>

* fix: Hash cache key for default memcached cache (#6089)

* feat: Show docs that an AD hasn't balloted on that need ballots to progress (#6075)

* fix(doc): Unify help texts for document states (#6060)

* Fix IESG State help text link (only)

* Intermediate checkpoint

* Correct URL filtering of state descriptions

* Unify help texts for document states

* Remove redundant load static from template

---------

Co-authored-by: Robert Sparks <rjsparks@nostrum.com>

* ci: fix sandbox start.sh memcached user

* fix: refactor how settings handles cache definitions (#6099)

* fix: refactor how settings handles cache definitions

* chore: more english-speaker readable expression

* fix: Cast cache key to str before calling encode (#6100)

---------

Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
Co-authored-by: Liubov Kurafeeva <liubov.kurafeeva@gmail.com>
Co-authored-by: nectostr <bastinda96@gmail.com>
Co-authored-by: Rich Salz <rsalz@akamai.com>
Co-authored-by: PriyankaN <priyanka@amsl.com>
Co-authored-by: Priyanka Narkar <priyankanarkar@dhcp-91f8.meeting.ietf.org>
Co-authored-by: Ali <alireza83@gmail.com>
Co-authored-by: Roman Beltiukov <maybe.hello.world@gmail.com>
Co-authored-by: Tero Kivinen <kivinen@iki.fi>
Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Kesara Rathnayake <kesara@fq.nz>
Co-authored-by: Jennifer Richards <jennifer@staff.ietf.org>
Co-authored-by: Paul Selkirk <paul@painless-security.com>
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
Co-authored-by: Jim Fenton <fenton@bluepopcorn.net>
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Aug 12, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

nomcom chair should be able to reclassify feedback

5 participants