You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Phase 4: Web: the approval page shows the same words from one shared module #1731
The website approval page shows the verdict, the identifier screen's closed-vocabulary details and the reasons in exactly the words the CLI uses, so the two cannot disagree. The words and the rules are declared once in a shared module in this repository and transcribed into nemarOrg/website with a drift test on each side, the way the account copy and the profile-gap rules already work. This phase needs its own pull request in the website repository and follows that repository's release cycle.
Done when
The web page and the CLI render the same sentences for every outcome, pinned by a drift test.
The website change reaches staging, and its production promotion is recorded for the release.
Carried from Phase 2 (#1729): the approval gate's refusal sentences (REVIEW_GATE_REFUSAL_TEXT in shared/publication-review.ts: needs_override, override_not_covering, review_changed, no_review_row) and the reasons table's cures name CLI commands and --force, which a web approver cannot run. The website must not print them verbatim. Split a command field out of the cure sentences and give the web its own wording for the refusals before the words are transcribed (the same step this phase already plans for the reasons table).
Carry-forward from Phase 3 (#1772, merged into the epic branch as cb925fa). The website's approve-dispatch and deny calls should send request_id (the id of the request the page showed), so a stale page gets 409 request_mismatch instead of acting on a newer request. The page should say something plain for the new refusals: request_mismatch, invalid_dataset_id and already_in_flight from approve-dispatch, and request_mismatch, approval_in_flight and deny_after_publishing from deny. The sentences for the two deny refusals are in the shared contract and the website's drift test will flag them when both checkouts are present. The Origin refusal on the admin routes has the body { error: "origin_not_allowed", code, message }, with the word in error and the sentence in message, so a page that shows error to a person must show message for this one. ADR 0103 (decisions 7, 10 and 11) has the details.
Reopened: the nemar-cli half is on dev (epic PR #1782, merge a28e770); the website half (nemarOrg/website#460) is still a draft and closes this issue when it is on staging and the maintainer's browser check passes.
Activity
neuromechanist commentedon Oct 13, 2026
Carried from Phase 2 (#1729): the approval gate's refusal sentences (
REVIEW_GATE_REFUSAL_TEXTinshared/publication-review.ts:needs_override,override_not_covering,review_changed,no_review_row) and the reasons table's cures name CLI commands and--force, which a web approver cannot run. The website must not print them verbatim. Split acommandfield out of the cure sentences and give the web its own wording for the refusals before the words are transcribed (the same step this phase already plans for the reasons table).neuromechanist commentedon Oct 14, 2026
Carry-forward from Phase 3 (#1772, merged into the epic branch as cb925fa). The website's approve-dispatch and deny calls should send
request_id(the id of the request the page showed), so a stale page gets 409request_mismatchinstead of acting on a newer request. The page should say something plain for the new refusals:request_mismatch,invalid_dataset_idandalready_in_flightfrom approve-dispatch, andrequest_mismatch,approval_in_flightanddeny_after_publishingfrom deny. The sentences for the two deny refusals are in the shared contract and the website's drift test will flag them when both checkouts are present. The Origin refusal on the admin routes has the body{ error: "origin_not_allowed", code, message }, with the word inerrorand the sentence inmessage, so a page that showserrorto a person must showmessagefor this one. ADR 0103 (decisions 7, 10 and 11) has the details.Phase 4: the API half of the web approval page (#1779)
neuromechanist commentedon Oct 15, 2026
Done on the epic branch: the API half merged in #1779 (f184d78). The page half is nemarOrg/website#460 (draft until the epic is on dev), tracked in nemarOrg/website#459.
neuromechanist commentedon Oct 15, 2026
Reopened: the nemar-cli half is on dev (epic PR #1782, merge a28e770); the website half (nemarOrg/website#460) is still a draft and closes this issue when it is on staging and the maintainer's browser check passes.
Admin publication page shows the review and the identifier screen (#460)