Spreadsheet import: statuses are matched as substrings, so \"Rejected after interview\" imports as Interviewing and \"No offer\" as Offer #467
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#467
Loading…
Reference in a new issue
No description provided.
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?
Found on 2026-09-29 in a read-only review of postulo at
95348908d, readingcore/csv_import.pyand callingmap_statusandmap_channelon ordinary phrases.Checked again on 2026-10-01 against
mainat0a5cad587: still present. The code is now atcore/csv_import.py:760-770(map_status),:264-365(the table, withnoat:340) and:773-782(map_channel).map_statustries an exact match and then returns the first alias, in the table's order, that appears anywhere inside the cell. The table's order and its short aliases then decide the result:interviewcomes beforerejected,offerbeforedeclined, andno(:336) is found insideunknown,nothingandannounced. The match is reported as recognised, so the original words are not kept in a note, which is what the module promises for a status it does not know.core/csv_import.py:765-775(map_status:for alias, status in STATUS_ALIASES.items(): if alias in key: return status, True); the table at:260-361;map_channelat:778-787does the same withCHANNEL_ALIASES.test);map_channel: "Referral via LinkedIn" gives a job board, "eventually" an event.The status is applied through
change_statusand written on the timeline as if the sheet had said it. The preview shows the mapped status, but nothing marks it as a guess.\b-bounded pattern per alias), never substrings. When several aliases match, prefer the outcome words (rejected, declined, refused, withdrawn) over the stage words, or treat the cell as unrecognised: applied with the original kept in a note, as the docstring above the table says. Accept the barenoonly as the whole cell. Apply the same tomap_channel.Done when
tests/test_csv_import.pyasserts that "Rejected after interview" and "Offer declined" map to Rejected, that "Unknown" and "Nothing yet" are unrecognised and kept in a note, and that "Referral via LinkedIn" maps to a referral.